SSH协议服务器、SUDO用法以及PAM机制

                     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是IP21.png

远程转发

    -R PORT:IP1:IP1PORT -fN IP2

        PORT:本地的某个未使用的端口

        IP1:须要让外部主机到达防火墙内部的ip

        IP1PORT:IP1的端口

        IP2:防火墙外部主机的ip

远程转发,命令在B设备输入,此时C是IP1,A是IP22.png

若是须要实现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:定义监控的文件以及文件信息3.png

向下翻4.png5.png

定义完规则,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注释掉6.png

配置文件支持通配符写法,好比说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列出当前资源限制列表1.png

列表中每一项分别对应-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个进程

相关文章
相关标签/搜索