SSH协议服务器、SUDO用法以及PAM机制
python
-----------------------------------------------------------------------------------------------------------------------------------------------
linux
ssh:secure shell,protocol,22/tcp,安全的远程登陆
算法
具体的软件实现shell
openssh:ssh协议的开源实现数据库
dropbead:另外一个开源实现apache
SSH协议版本:V一、V2vim
ssh 用户名@目标主机,不写用户名将以root身份登陆windows
-p port:远程服务器监听的端口安全
-b:指定本机的某ip链接目标ipbash
-v:调试模式,用来检测链接状况的错误
-x:支持x11转发
-t:强制伪tty分配,例如ip1想要链接ipn,但内部设置不可直接链接,须要从其余主机链接,此时能够用ssh -t ip1 ssh -t ip2 ssh -t ip3 ... ssh ipn
windows界面运行linux桌面:XManager工具中有一个Xstart,打开后以ssh方式登陆linux便可实现远程登陆linux桌面
ssh服务基于密钥key认证登陆
一、在客户端生成一对密钥
ssh-keygen -t rsa -P PASSWD -f ~/.ssh/FILE
二、将客户端的公钥拷贝到服务器端
ssh-copy-id -i FILE.pub USER@ip,在服务器端/root/.ssh/authorized_keys内能够看到
三、客户端向服务器端发一个链接请求,信息包括ip、用户名
四、服务端获得客户端的请求后,会到受权密钥authorized_keys中查找,若是有响应的ip和用户名,服务器端会随机生成一个字符串
五、服务端将使用客户端拷贝过来的公钥进行加密,而后发送给客户端
六、获得服务端发来的信息后,客户端会使用私钥进行解密,而后将解密的字符串发送给服务端
七、服务端接收到客户端发来的字符串后,跟以前字符串相比,若是一致,就容许免密码登陆
scp命令
scp IPA:/位置/FILE IPB:/位置/FILE
此命令能够将本身文件传递到其它设备,也可让两台设备间互传,也能够从其它设备传递到本身主机
选项
-r:能够复制目录
-p:传递时保留权限
-q:静默模式
-P PORT:指定端口
scp命令的复制为无脑复制粘贴,不检查文件存在性,所以配合rsync命令更为得手
rsync命令
基于ssh和rsh服务实现高效率的远程系统之间复制文件,使用安全的shell链接做为传输方式
rsync -av /etc IP:/位置,复制目录和目录下文件
rsync -av /etc/ IP:/位置,只复制目录下文件
此命令只复制不一样文件
sftp命令:交互式文件传输工具,用法和传统的ftp工具类似,利用ssh服务实现安全的文件上传和下载
pssh工具
pssh是一个python编写能够在多台服务器上执行命令的工具,也能够实现文件复制
pssh -H 用户@IP -i 命令
演示举例
一、经过pssh批量关闭seLinux
pssh -H root@192.168.1.10 -i "sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config" 批量发送指令
二、pssh -H root@192.168.1.10 -i setenforce 0
三、pssh -H xuewb@192.168.1.10 -i hostname
四、当不支持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"
pscp.pssh功能是将本地文件批量复制到远程主机
选项
-v显示复制过程
-r递归复制目录
将本地test.sh复制到/app目录
pscp.pssh -H 目标IP /本机位置/test.sh /app
pscp.pssh -h IP列表.txt /本机位置/test.sh /app
将本地多个文件批量复制到/app目录
pscp.pssh -H 目标IP /本机位置/test1 /本机位置/test2 /app
将本地目录批量复制到/app/目录
pscp.pssh -H 目标IP -r /本机位置/目录/ /app/
pslurp功能试讲远程主机的文件批量复制到本地
选项
-L指定从远程主机下载到本机的存储目录,local是下载到本地后的名称
-r递归复制目录
批量下载目标服务器的test文件至/app下,并更名为file
pslurp -H 目标IP -L /app /目标位置/testt file
SSH端口转发
(1)SSH会自动加密和解密全部SSH客户端和服务端之间的网络数据,可是SSH还可以将其余TCP端口的网络数据经过SSH连接来转发,而且自动提供了响应的加密及解密服务,这一过程也被叫作“隧道”,这是由于SSH为其余TCP链接提供了一个安全的通道来进行传输而得名,例如Telnet,SMTP,LDAP这些TCP应用均可以从中得益,避免了用户名、密码以及隐私信息的铭文传输。而与此同时,若是工做环境中的防火墙限制了一些网络端口的使用,可是容许SSH的链接,也可以经过将TCP端口转发来使用SSH进行通信。
(2)SSH端口转发可以提供量大功能
(3)加密SSH Client端至SSH Server端之间的通信数据
(4)突破防火墙的限制完成一些没法创建的TCP链接
总而言之就是经过SSH链接服务端,会产生一个隧道,这个隧道能够容许TCP服务经过隧道,忽略防火墙,直接链接服务端。像TCP服务没有隧道是没法经过防火墙通信链接服务端内部的。
本地转发
-L PORT:IP1:IP1PORT -fN IP2:IP2PORT
PORT:本地的某个未使用的端口
IP1:若是本地存在多个ip,须要指定哪一个ip去链接服务端
IP1PORT:IP1的端口
IP2:目标服务端的ip
IP2PORT:目标服务端的ip端口
选项
-f 后台启用
-N 不打开远程shell,处于等待状态
-g 启用网关功能
本地转发:命令在A设备上输入,此时B是IP1,C是IP2
远程转发
-R PORT:IP1:IP1PORT -fN IP2
PORT:本地的某个未使用的端口
IP1:须要让外部主机到达防火墙内部的ip
IP1PORT:IP1的端口
IP2:防火墙外部主机的ip
远程转发,命令在B设备输入,此时C是IP1,A是IP2
若是须要实现SSH端口本地转发或者远程转发,先安装telnet-server,安装完成后systemctl start telnet.socket,开启23端口,再telnet下ip,看是否能通,不能通输入指令放开端口iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
动态端口转发
访问Internet时,能够将本机的1080端口做为代理服务器,访问请求被转发到sshserver上,由sshserver代替访问Internet,好比说咱们主机不能直接访问谷歌,若是买了一台国外的虚拟机,因为该虚拟机能够直接访问谷歌,所以咱们能够经过该虚拟机访问谷歌,该虚拟能够看做是sshserver,也就是代理
curl --sock5 IP:PORT WEBSITE,用代理的ip访问目标网站
X 协议转发
全部图形化应用程序都是X客户程序
可以经过tcp/ip链接远程X服务器
数据没有加密机,可是它经过ssh链接隧道安全进行
ssh服务器
客户端:ssh,配置文件:/etc/ssh/ssh_config
服务器端:sshd,配置文件:/etc/ssh/sshd_config
经常使用参数,参数更改后输入指令systemctl restart sshd
Port:服务器端口,链接到互联网上时,为了安全将Port 22改成非标准端口
AddressFamily any:支持ipv4和ipv6地址
listenaddress IP:将Port的端口号监听在ip特定的地址上
Hostkey:公钥私钥算法
LoginGraceTime:登陆后多长时间不输入密码将退出
PermitRootLogin:是否容许root帐户直接登陆
StrictModes:严格模式,是否检查必要文件的权限
MaxAuthTroes:最大尝试次数,次数是此项值的一半
MaxSessions:每个会话在网络链接里打开最大的次数,好比说CRT窗口右键单击克隆窗口,数值是多少就最多克隆几个会话
AuthorizedkeyFile:基于key验证公钥存放的路径
PasswordAuthentication:关闭后远程没法经过密码登陆链接,只能基于key验证登陆
PubkeyAuthentication:基于key验证
其它项Kerberos option、GSSAPI options中也是验证,用的很少,能够关闭,加快网络链接
MaxStarups:默认数值10:30:100,由于ssh服务器做为远程管理的,因此该项容许最大链接数为10,10之内时不作任何操做,超过10次将以30%的失败率干扰链接,当链接数到达100次时,再次链接将所有拒绝
ClientAliveInterval:客户端存活间隔,0表示不检测
ClientAliveCountmax:客户端存活检测次数,配合存活间隔项,当秒数达到次数x存活间隔时间的数值时,将自动断开链接
PermitEmptyPasswdords:容许无密码登陆,设置为no
Banner:选项后是文本文件,用户登陆后显示文本内容
Allowusers USER1 USER2:添加白名单
Denyusers USER1 USER2:添加黑名单
AllowGroups
DenyGroups
注:黑白名单都存在的用户也没法登陆
ssh服务优化
建议使用非默认端口
禁止使用protocol version 1
限制可登录用户
设定空闲会话超时时长
利用防火墙设置ssh访问测量
仅监听特定的ip地址
基于口令认证时,使用强密码策略tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 |xargs
使用基于key的验证
禁止使用空密码登陆
禁止root用户直接登陆
限制ssh的访问频度和并发在线数
常常分析日志,/var/log/secure,屡次见到Failed password for root from IP port PORT ssh2时,须要引发注意,多是有人在恶意猜root口令,放入防火墙
AIDE
高级***检测环境,用于检测所关心文件的特定属性信息
/etc/aide.conf:定义监控的文件以及文件信息
向下翻
定义完规则,aide --init写入aide数据库,若是作比较,cp aide.db.net.gz aide.db.gz,有读入库,能够输入aide --check作比较
更改身份
su - USER,随着用户切换,shell环境也变
su USER,用户切换,但shell环境不变
配置文件/etc/sudoers
时间戳文件/var/db/sudo,sudo后会在该文件夹下生成一个用户的目录,这个目录生成时间的5分钟之内输入指令不用从新输入口令
日志文件/var/log/secure,记录了用户sudo的操做记录详细信息
USER ALL = (ALL) CMD
用户 哪台设备 表明谁去执行 /路径/命令+参数
/etc/sudoers.d/FILE,文件名任意输入,将受权命令写入该文件也能够其做用
visudo -c 检查/etc/sudoers的错误语法
%GROUP ALL = (ALL) CMD
组 哪台设备 表明谁去执行 /路径/命令+参数
%wheel ALL=(ALL) NOPASSWD:ALL,wheel组的用户执行命令时候能够不用输口令,此用法用于编写脚本受权
注:系统默认若是将普通用户加入wheel组,该普通用户将会有和root同样的权限,所以生产中将配置文件中%wheel ALL=(ALL) ALL注释掉
配置文件支持通配符写法,好比说chen ALL=(ALL) /bin/* ,表明容许用户chen执行全部/bin下面的程序
配置文件规则
用户和被表明的用户能够是用户名、#uid、%群组名、%#群组id、用户别名/被表明的用户别名
哪台设备能够用ip、hostname、network、host_alias
命令用命令名、路径、sudoedit、命令别名
sudo别名
别名有四种类型
User_Alias,Runas_Alias,Host_Alias,Cmnd_Alias
别名格式
[A-Z]([A-Z][0-9]_)* ,必须是A-Z开头,后面能够跟[A-Z]和[0-9]_ 数字
好比说
User_Alias NETADMIN= chen1,chen2
Cmnd_Alias NETCMD = /usr/sbin/ip,/usr/sbin/usermod
NETADMIN ALL=(root) NETCMD
将内容写入/etc/sudoers.d/FILE,以后用chen1就可sudo chen1 ip...,chen2能够sudo usermod...
sudo选项
-V:显示版本信息等配置信息
-u:user
-l,ll:列出用户在主机上容许和禁止的指令
-v:延长密码有效期限,延长5分钟
-k:清除时间戳,下次登陆须要从新输入口令
-K:与-k相似,不过还要删除时间戳文件
-b:在后台执行指令
-p:改变询问密码的提示符号
TCP_Wrappers
工做在第四层(传输层)的TCP协议
用于对有状态链接的特定服务进行安全检测并实现访问控制
以库文件形式实现
某建材是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的
判断服务程序是否可以由tcp_wrapper进行访问控制的方法
ldd /位置/程序 | grep libwrap.so
strings 位置/程序 | grep libwrap.so
配置文件:/etc/host.allow、/etc/host.deny
基本语法
守护进程路径@主机名:客户端ip地址列表,好比说拒绝192.168.1.10访问本机的ssh服务,首先which sshd查看命令路径,/usr/sbin/sshd,以后再/etc/host.deny里写sshd:192.168.1.10,该文件写入后当即生效
except
在/etc/host.allow中写入in.telnetd:172.20. EXCEPT 172.20.112. EXCEPT 172.20.112.224,代表172.20网段可用telnet本主机,除了172.20.112网段的设备,但在这个网段中又除了172.20.112.224的设备,它能够telnet本主机,最后except看做双重否认,即确定
配置文件选项
/etc/host.allow中写入in.telnetd:172.20. :deny,意思匹配到172.20网段将被拒绝
/etc/host.deny中写入in.telnetd:172.20. :allow,意思匹配到172.20网段将被容许
spawn:当访问某个服务时候,激活另外一个命令的执行,好比说in.telnet: ALL :spawn echo "hello"
twist:拒绝访问,使用指定的操做替换当前服务,标准输入输出和错误信息发送到客户端/dev/null,好比说in.telnet: ALL :twist echo "hello",结果是拒绝访问,并显示hello
PAM部分重要模块说明
pam_shell.so:检查用户是否是有效的shell登陆
auth required pam_shell.so 拒毫不是有效shell登陆的用户
pam_securetty.so:只容许root用户直接登陆的终端
pam_nologin.so:组织非用户登陆系统,其做用就是若是建文件/etc/nologin普通用户将没法登陆
pam_limits.so:限制用户使用的资源,是特殊的PAM模块,配置文件在/etc/security/limits.conf,命令是
ulimit:内部命令,不支持csh,只支持/bin/bash,ulimit -a列出当前资源限制列表
列表中每一项分别对应-c,-d,-e,-f等等,好比说ulimit -c能够更改core file size这一项,不过这些命令是临时更改,永久更改在/etc/security/limits.conf或者/etc/security/FILE(任意字符),格式:<domain> <type> <item> <value>
格式说明:
<domain> 应用于哪些对象
Username 单个用户
@group 组内全部用户
* 全部用户
<type> 限制的类型
Soft 软限制,普通用户本身能够修改
Hard 硬限制,由root用户设定,且经过kernel强制生效
- 两者同时限定
<item> 限制的资源
nofile 所可以同时打开的最大文件数量,默认为1024
nproc 所可以同时运行的进程的最大数量,默认为1024
<value> 指定具体值
举例:限制用户最多打开的文件数和运行进程数
(1)在/etc/pam.d/system-auth中写入
session required pam_limits.so
(2)vim /etc/security/limits.conf
apache – nofile 10240 用户apache可打开10240个文件
student hard nproc 20 用户student不能运行超过20个进程