、复习创建CA
定义CA详细的配置信息的文件 /etc/pki/tls/openssl.cnf
1 创建CA,申请证书
1)CA
( umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem )生成私钥文件
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650 自签名证书
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial 证书序列号
2)client request 客户端申请证书
( umask 066;openssl genrsa -out /etc/app/app.pem ) 申请私钥
openssl req -new -key /etc/app/app.pem -out /etc/app/app.csr 申请证书请求
scp /etc/app/app.csr 复制到CAhost主机上 CAhost:/etc/pki/CA/
3)
openssl ca -in /etc/pki/CA/app.csr -out /etc/pki/CA/certs/app.crt -days 300 颁发证书
scp /etc/pki/CA/certs/app.crt clienthost:/etc/app/ 证书拷贝的客户端
Ssh客户端配置文件 ssh_config
Ssh服务器端配置文件 sshd_config
客户端配置文件 不需要重启服务,,服务器端配置文件需要重启,因为服务器端不停,需要停下来启动
改端口 port 22—> port 9527
Scp命令
只能复制和我相关的文件
Scp[options] [user@]host:/sourcefile /destpath
Scp[options] /sourcefile [user@]host:/destpath
常用选项:
-C压缩数据流
-r 递归复制
-p保持原文件的属性信息
-q 静默模式
-P PORT 指明remote host的监听的端口
三台主机实现基于key验证,即任何一台主机访问其他主机都不需要提供用户名和密码,
每个主机在自己的主机上生成自己的公钥私钥文件,然后把各自的公钥文件传到同一台主机上,最后把公钥文件分别传到各主机,
生成公钥私钥对 ssh-keygen
复制到一个主机 ssh-copy-id
Ssh-copy-id -i id_rsa.pub 192.168.27.7
将改文件复制到其他主机上:scp authentized_kyes 192.168.27.7[5,6]:/root/.ssh.
Scp 复制特点,无论文件动不动,都会原封不动的给复制过去,即使一样的文件,也会覆盖一遍
rsync命令
基于ssh和rsh服务实现高效率的远程系统之间复制文件
使用安全的shell连接作为传输方式
Rsync -av /etc server1:/tmp 复制目录和目录下文件
Rsync -av /etc/ server1:tmp 只复制目录下文件
比scp更快,只复制不同的文件
选项
-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留时间戳
-g 保留组信息
-o 保留所有者信息
-l 将软链接文件本身进行复制(默认)
-L 将软链接文件指向的文件复制
-a 存档 ,相当于-rlptgoD,但保留ACL(-A)和SElinus属性(-X)
例如scp /etc/fstab 192.168.27.120:/app 将/etc/fstab文件复制到主机192.168.27.120上的/app 中
只复制发生增量的文件
实现A和B服务器自动同步,
Sftp命令
交互式文件传输工具
用法和传统的ftp工具相似
利用ssh服务实现安全的文件上传和下载
使用ls cd mkdir rmdir pwd get put 等指令,可用?或help获取帮着信息
Sftp [user@]host
Sftp > help
Pssh工具 用来执行命令的
Pssh是一个Python编写可以在多台服务器上执行命令工具,也可实现文件复制
–version 查看版本
-h 主机文件列表,内容格式“[user@]host[:port]”
-H 主机字符串,内容格式”[user@]host[:port]”
-l:登录使用的用户名
-p: 并发的线程数
-o 输出的文件目录
-e 错误输入文件
-t TIMEOUT 超时时间设置,0无限制
-O SSH的选项
-v 详细模式
-A 手动输入密码模式
-x 额外的命令行参数使用空白符号,引号,反斜线处理
-X 额外的命令行参数,单个参数模式,同-x
-i 每个服务器内部处理信息输出
-P 打印出服务器返回信息
看一台主机的状态 pssh -H 192.168.27.5 -i getenforce
看多台主机的状态 pssh -H 192.168.27.5 -H 192.168.27.6 -i getenforce
使用文本文件,pssh看主机的状态
vim ip.txt ip地址文本
pssh -h ip.txt -i getenforce
通过pssh批量关闭SELinux
Pssh -H root@192.168.1.10 -i “sed -i s/SELINUX=enforcing/SELINUX=disabled/”
批量发送指令 pssh -H root@192.168.1.10 -ihostname
当不支持ssh的key认证时,通过-A选项,使用密码认证批量执行指令
Pssh -H xuewb@192.168.1.10 -A -i hostname
将标准错误和标准正确重定向都保存至/app目录下
Pssh -H 192.168.1.10 -o /app -e /app -i “hostname”
看每个主机的日志
Pssh -h ip.txt -i cat /var/log/secure
Pssh -h ip.txt -o /app -i cat /var/log/secure 生成日志放在专门的目录中
pscp.pssh命令
功能是将本地文件批量复制到远程主机
pscp.pssh -h ip.txt /etc/selinux/config /etc/selinux 复制并覆盖
Pscp.pssh选项
-v 显示复制过程
-a 复制过程中保留常规属性
-r 递归复制目录
将本地curl.sh 复制到/app目录
Pscp.pssh -H 192.168.1.10 /root/test/curl.sh /app/
Pscp.pssh -h host.txt /root/test/curl.sh /app/
将本地多个文件批量复制到/app/目录
Psch.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app
将本地目录批量复制到/app/目录
Psch.pssh – H 192.168.1.10 -r /root/text/ /app/
Pslurp.pssh 功能是将远程主机的文件批量复制到本地
Pslurp.pssh选项
-L 指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称
-r 递归复制目录
批量下载目标服务器的passwd文件至/app下,并更名为user
Pslurp -H 192.168.1.10 -L /app/ /etc/passwd user
SSH 端口转发
SSH 会自动加密和解密所欲SSH客户端与服务端之间的网咯数据。但是,SSH还能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling)这是因为SSH为其他TCP连接提供了一个安全的通道来进行传输而得名。例如,telnet,smtp,ldap这些tcp应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够通过将tcp端口转发来使用SSH 进行通讯
SSH端口转发能够提供两大功能:
加密SSH Client端至SSH Server 端之间的通讯数据
突破防火墙的限制完成一些之前无法建立的tcp连接
在公司外部,想连接一个不安全的网络服务telnet,企业里面防火墙策略不允许telnet连接,因为telnet不安全不加密,担心泄露数据,通常来讲,互联网的防火墙策略会允许ssh的访问,,A可以走ssh协议进入到B主机,
A 可以通过ssh服务连接到B,但是A不可以通过telnet服务连接到C,可以通过隧道功能实现,把telnet的不安全的流量封装到ssh内,随着ssh协议,A到达了B,B再 转包,转发到C上,该段走的是telnet协议,
基于ssh的端口转发功能
systemctl enable telnet.socket 设置开机启动
systemctl start telnet.socket 启动服务
Ss -nt 查看谁在连主机
Ss -ntl 查看端口 开没开 有没有人用
iptables -A INPUT -s 192.168.27.A -j REJECT C对A设防火墙策略
ssh -L 9527:192.168.27.C:23 192.168.27.B -Nf 在A上,建立与B连接的隧道
telnet 127.0.0.1 9527 连自己,因为监听的是自己的9527端口等价于telnet 192.168.27.C
Ssh -L localport: remotehost:remotehostport sshserver
本地端口(9527) 远程主机telnetsrv(V) (B)
本机端口(在A机器上开端口9527,该端口专门监听A向C发起的请求),一旦执行完该命令之后,会打开9527端口,当A连接本机的9527端口的时候,实际上是自动把请求发送到B,利用ssh封装,到达B,再转到C上
最终实现的效果
Data发送到本机的9527端口,本机打开一个随机端口,(因为要当ssh的客户端),把数据发送到目标的服务器22端口(中间把数据封装到协议中),sshsrv(B),,,这台机器收到之后把SSH拆开,获取数据,再充当telnet的客户端,所以要打开一个随机端口,利用telnet流量发送到目标telnetsrv23(C)端口服务器
选项:
-f 后台启用
-N 不打开远程shell,处于等待状态
-g 启用网关功能
实例
Ssh -L 9527:telnetsrv:23 -N sshsrv
Telnet 127.0.0.1 9527
当访问本机的端口9527时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23
Data—–localhost:9527——–localhost:xxxxxx——sshsrv:22———-sshsrv:yyyy—–telnetsrv:23
?Ps aux 查看进程
邮件服务对应的配置文件 vim /etc/postfix/main.cf 默认不让连接
Inet_interfaces=all
Systemctl restart postfix
?远程转发
-R sshserverport:remotehost:remotehostport sshserver
实例
Ssh -R 9527 :telnetsrv:23 -N sshsrv
让sshsrv 侦听9527端口的访问,如有访问,就加密后通过上述服务转发请求到本机上述客户端,再由本机解密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到
Telnetsrv:23
Data—–sshsrv:9527——sshsrv:22——localhost:xxxxx—–localhost:yyyyy—–telnetsrv:23
动态端口转发
当用firefox访问Internet时,本机的1080端口作为代理服务器,Firefox的访问请求被转发到sshserver上,由sshserver替之访问Internet
Ssh -D1080 root@sshserver
在本机Firefox设置代理socket proxy:127.0.0.1:1080
Curl –socks5 127.0.0.1:1080 http://www.qq.com
Iptables -F 清空防火墙策略
Iptables -vnL 查看防火墙策略
定义一个goole网站 vim /var/www/html/index.html <h1>welcome to MagEdu!</h1>
[root@centos7 ~]# yum install httpd -y 当web服务器将来对外提供服务
[root@centos7 ~]# systemctl start httpd 启动服务
[root@centos7 ~]# systemctl enable httpd 开机启动
iptables -A INPUT -s 192.168.27.6 -j REJECT 禁止6访问
Centos6
-D效果,在本机打开一个代理端口,当我们把请求发送到1080端口的时候,它会自动的把请求发送到跳板机,然后由跳板机转发的目标服务器上
ssh -D 1080 192.168.27.5 -N
在网络中,connect设置socks host127.0.0.1 port:1080
Curl命令访问
Curl –socks5 127.0.0.1:1080 http://192.168.27.7/
Ssh服务器端:sshd,配置文件:/etc/ssh/sshs_config
常用参数:
Port
Listenaddress ip
Logingracetime 2m
Permitrootlogin yes
Strictmodes yes 检查.ssh/文件的所有者、权限等
Maxauthtries 6
Maxsessions 10 同一个连接最大会话
Pubkeyauthentication yes
Permitemptypassword no
Passwordauthentication yes
Gatewayports no
Clientaliveinterval 单位 秒
Clientalivecountmax 默认3
Usedns yes
Gssapiauthentication yes
提高速度可改为no
Maxstartups 未认证连接最大值,默认10
Banner /path /file
限制可登陆用户的办法
Allowusers user1 user2 user3
Denyusers
allowgroups
Denygroups
Ssh服务的最佳实践
建议使用非默认端口
禁止使用protocol version1
限制可登陆用户
设定空闲会话超时时长
利用防火墙设置ssh访问策略
仅监听特定的ip地址
基于口令认证时,使用强密码策略
使用基于密钥的认证
禁止使用过空密码
禁止root用户直接登录
限制ssh的访问频度和并发在线数
经常分析日志
三
AIDE
高级入侵检测环境工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了
AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。AIDE数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号(iNode number)、所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号
这个数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、/proc文件系统、用户其实目录以及临时目录。
当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍),通常入侵者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那么入侵者很可能用自己进过修改的ps程序来替换掉你系统上的ps程序,,以使用ps命令查不到正在运行的木马程序。如果入侵者发现发现管理员正在运行crontab作业,也有可能替换掉crontab程序等等。所以由此可以看出对于系统文件或是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的由两款:tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很强大的工具
安装AIDE
Yum install aide
Rpm -ql aide
修改配置文件
Vim /etc/aide.conf
/app 对app关心custom代表的属性
!/app f3 不关注app下的f3
初始化默认的数据AIDE的库
aide –init 数据库放在/var/lib/aide/
比对文件需改名 mv aide.db.new.gz aide.db.gz
进行比对 aide –check
更改身份
Su 切换身份:su -l username -c ‘command’
Sudo
来自sudo包
Man 5 sudoers
Sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用sudo,会提示联系管理员
Sudo可以提供日志,记录每个用户使用sudo操作
Sudo可以提供日志,记录每个用户使用sudo操作
Sudo为 系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
Sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
通过visudo命令编辑配置文件,具有语法检查功能
Visudo -c 检查语法
授权wang用户挂载光盘,需要编辑配置文件
Vim /etc/sudoers
用户 登录主机=(代表用户)命令
Root ALL = (ALL) ALL
Visudo 等价于 vi /etc/sudoers
Visudo 具有语法检查功能
e 继续编辑
:set nu 添加行号
x不保存,直接退出
修改,使vi带颜色 vim /etc/profile.d/env.sh
export EDITOR =vim
授权wang用户可以挂载
Wang ALL =(root) /usr/bin/mount /dev/sr0 /mnt/cdrom
执行
Sudo mount /dev/sr0 /mnt/cdrom
个人配置文件
Vim /etc/sudoers.d
检查语法的工具 visudo -c
授权组 %wheel ALL=(ALL) ALL
Usermod -aG wheel wang 把wang加入组中 wang即具有root的权限
Wang账号从新登陆,就具有权限
Usermod -G “ “ wheel
Wang ALL =(root) sudoedit 授权wang用户代表root能编辑suders文件
Sudoedit /etc/sudoers.d/wang
配置文件 /etc/sudoers, /etc/sudoers.d/
时间戳文件 /var/db/sudo
日志文件 /var/log/secure
配置文件支持使用通配符golb
?任意单一字符
*:匹配任意长度字符
[wxc] 匹配其中一个字符
[!wxc]除了这三个字符的其他字符
\x 转义
[[alpha]]:字母
配置文件规则有两类 1别名定义:不是必须的
2 授权规则:必须的
授权规则格式
用户 登录主机=(代表用户)命令
示例 root ALL =(ALL) ALL
格式说明
User 运行命令者的身份
Host 通过哪些主机
Runas 以哪个用户的身份
Command 运行哪些命令
别名
Users和runas
#uid
%group_name
%#gid
User_aliad|runas_alias
Host
Ip 或hostname
Network或(/netmask)
Host_alias
Command
Command name
Directory
Sudoedit
Cmnd_Alias
Sudo别名和示例
别名有四种类型:user_Alias,Runas_Alias,Host_Alias,Cmnd_Alias
别名格式:[A-Z]([A-Z][0-9]_)*
别名定义
Alias_Type NAME1=item1,item2,item3:NAME2=item4,item5
示例1:
Student ALL =(ALL) ALL
%wheel ALL =(ALL) ALL
示例2
Student ALL =(root) /sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) ALL NOPASSWD :ALL
示例3
User_Alias NETADMIN=netuser1,netuser2
Cmnd_Alias NETCMD =/usr/sbin/ip
NETADMIN ALL =(root)NETCMD
示例4
User_Alias SYSASER=wang,mage,%admins
User_Alias DISKADER=tom
Host_Alias SERS=www.magedu.com,172.16.0.0/24
Runas_Alias OP=root
Cmnd_Alias_SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
SYSADER SERS =SYDCMD,DSKCMD
DISKADER ALL =(OP) DSKCMD
示例5
Defaults:wang runas runas_default=tom
Wang ALL =(tom,jerry)ALL
示例6
Wang 192.168.175.136,192.168.175.138=(root)
/usr/sbin,!/usr/sbin/userad
示例7
Wang ALL =(ALL) /bin/cat /var/log/messages*
Sduo命令
ls -l /usr/bin/sudo
Sudo -i -u wang 切换身份
Sudo[-u user] COMMAND
-V显示版本信息等配置信息
-u user 默认为root
-l ll 列出用户在主机上可用的和被禁止的命令
-v 在延长密码有效期5分钟,更新时间戳
-k 清除时间戳,下次需要重新输入密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号
例子,wang ALL =(ALL) /bin/cat /var/log/secure*,!/bin/cat /var/log/secure* * 可以看secure文件,不可以看其他文件
TCP_Wrappers介绍
工作在第四层(传输层)的tcp协议
对有状态连接的特定服务进行安全检测并实现访问控制
以库文件形式实现
某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的
判断服务程序是否能够由tcp_wrapper进行访问控制的方法
Which sshd 服务器程序的路径 /usr/sbin/sshd
ldd /PATH/TO/PROGRAM|grep libwrap.so
Strings PATH/TO/PROGRAM|grep libwrap.so
调该模块了,就可以间接通过该模块控制该服务的访问
在centos7上面控制centos的访问 vim /etc/hosts.deny sshd:地址
Hosts.deny hosts.allow 的基本的作用
先看/etc/hosts.allow,如果这个文件定义的规则是不匹配的,满足就不看deny了,不满足的才看、
/hosts.deny. Deny 文件中如果匹配了,就生效了,如果不匹配,就默认允许了
实现192.168.27网段都及拒绝,有一个网址192.168.27.7可以访问
Vim hosts.allow sshd:192.168.27.7
Vim /etc/host.deny sshd:192.168.27
Windows 默认192.168.27.1
Vim hosts.deny sshd:192.168.27.EXCEPT 192.168.27.7
Vim /etc/hosts.deny sshd: 192.168. EXCEPT 192.168.27 EXCEPT 192.168.27.7
在deny中 192.168.网段拒绝,但是27这个网段是允许的,但是大网段中的ip被拒绝了
Deny 主要用在/etc/hosts.allow定义 拒绝
Allow主要用在/etc/hosts.deny中,定义 允许
Spawn 启动一个外部程序完成执行的操作
Sshd :192.168.27.8 :spawn echo `date +%F` client login > /app/tcpwrapper.log
把登录的时间记录在日志中,在这里面涉及%用法需要使用%%
Sshd:192.168.27. :spawn echo `date +”%%F %%T”` client\: %c login on server\:%s > /app/tcpwrapper.log
Twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准IO和ERROR发送到客户端,默认至/dev/null
测试工具
Tcpdmatch [-d] daemon [@host] client
-d 测试当前目录下的hosts.allow和hosts.deny
PAM认证机制
它提供了对所有服务进行认证的中央机制,适用于login,远程登录(telnet,rlogin,fsh,ftp,点对点协议(ppp))su等应用程序中。系统管理员通过pam配置文件来指定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx())来实现对认证方法的调用;而pam服务模块的开发者则利用PAM SPI 来编写模块(主要是引出一些函数pam_sm_xxxx()供PAM接口库调用),将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来
PAM相关文件
模块文件目录:/lib64/security/*.so
环境相关的设置:/etc/security/
主配置文件:/etc/pam.conf,默认不存在
为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
注意:如/etc/pam.d存在,/etc/pam.conf将失效
Pam认证原理
PAM认证一般遵循这样的顺序:service(服务)—PAM(配置文件)—–pam__*.so
PAM 认证首先要确认那一项服务,然后加载相应的PAMd配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
PAM认证过程:
1使用者执行/usr/bin/passwd程序,并输入密码
2passwd开始调用PAM模块,PAM模块会搜索passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d里边的与程序同名的文件,即PAM会搜索/etc/pam.d/passwd此设置文件
3经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4将验证结果回传给passwd这个过程,而passwd这个过程会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)
通用配置文件/etc/pam.conf格式
Application type control module-path arguments
专用配置文件/etc/pam.d/*格式
type control module-path arguments
说明
服务名(application)
Telnet,login,ftp,服务名字“OTHER”代表所有没有在该文件中明确配置的其他服务
模块类型
Control PAM库该如何处理与该服务相关的PAM模块的成功或失败
Module-path 用来指明本模块对应的程序文件的路径名
Arfuments 用来传递给该模块的参数
模块类型
Auth
Account
Password
Session
-type
简单方式实现
Required
Requisite
Sufficient
Optional
Include
复杂详细实现
Ok
Done
Bad
Die
Ignore
Reset
Module-path:模块路径
相对路径
/lib/security 目录下的模块可使用相对路径
绝对路径
实现如果访问ssh的身份验证进过pam_shells.so检查失败了,就登录失败
Vim sshd auth required pam_shells.so
Getent passwd wang
Chsh -s /bin/csh wang
Vim /etc/shells 注释掉 #/bin/csh
只是影响ssh
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/91155