美文网首页
12、登录及安全管理

12、登录及安全管理

作者: 一个反派人物 | 来源:发表于2020-12-06 19:26 被阅读0次

    1 ssh

    1.1 ssh基础

    ssh [-p port] [user@]hostname
    

    配置文件在/etc/ssh/文件夹下,ssh_config是客户端的配置文件,sshd_config是服务端的配置文件。
    密钥文件在账户的家目录下的隐藏文件夹.ssh中,如root在/root/.ssh/下。其中有两个文件,authorized_keysknown_hosts都是用来存储公钥。

    • authorized_keys中存储的公钥用于密钥认证,用作其他人登录本机
    • known_hosts中存储的公钥用于密码认证,用作本机登录其他机器

    1.1.1 sshd服务端配置文件

    修改服务端默认端口号,配置文件第17行
    监听地址,配置文件第19行,默认所有接口地址都开放连接

     17 #Port 22
     18 #AddressFamily any
     19 #ListenAddress 0.0.0.0
     20 #ListenAddress ::
    

    如果开启了selinux,需要同步配置selinux配置

    semanage port -a -t ssh_port_t -p tcp PORTNUMBER
    

    修改是否允许root账户通过ssh登录,配置文件第38行,默认允许

     37 #LoginGraceTime 2m
     38 #PermitRootLogin yes
     39 #StrictModes yes
     40 #MaxAuthTries 6
     41 #MaxSessions 10
    

    修改是否允许通过密码来认证,配置文件第65行,默认允许

     62 # To disable tunneled clear text passwords, change to no here!
     63 #PasswordAuthentication yes
     64 #PermitEmptyPasswords no
     65 PasswordAuthentication yes
    

    是否开启GSSAPI认证,配置文件第79行,一般用不到建议关闭

     78 # GSSAPI options
     79 GSSAPIAuthentication yes
     80 GSSAPICleanupCredentials no
     81 #GSSAPIStrictAcceptorCheck yes
     82 #GSSAPIKeyExchange no
     83 #GSSAPIEnablek5users no
    

    是否开启反向DNS解析,第115行,建议关闭

    114 #ShowPatchLevel no
    115 #UseDNS yes
    116 #PidFile /var/run/sshd.pid
    

    1.2 ssh登录认证

    身份认证采用非对称加密,公钥加密私钥解密,会话使用对称加密。有两种安全认证方式。

    1.2.1 口令验证

    1. 客户端发送登录请求,ssh user@hostname
    2. 服务器接受请求,将服务器的公钥 ser_rsa.pub 发送给客户端
    3. 客户端输入密码,密码使用 ser_rsa.pub 加密后发送给服务器(敏感信息安全传输)
    4. 服务器接受加密后的密码,使用服务器私钥 ser_rsa 解密,匹配认证密码是否合法(如果合法!登录成功)

    缺点是可能有中间人攻击,如果有人冒充服务器截获客户端的登录请求,给客户端发自己的公钥,客户端无法识别。

    1.2.2 密钥认证

    客户端生成一对公钥和私钥,并将自己的公钥储存在服务器上。客户端请求登录的时候,服务器会随机生成一个字符串并用客户端的公钥进行加密,客户端收到之后用自己的私钥解密后,再发回来。服务器收到后进行比对,如果比对成功,就证明用户是可信的,直接允许登录,不再要求密码。从而避免了“中间人”攻击。


    ssh免密码登录原理图

    相关命令
    ssh-keygen 生成公钥和私钥

    ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1] [-N new_passphrase] [-C comment] [-f output_keyfile]
    生成公钥和私钥,默认在用户目录的.ssh/目录下
    [root@node1 ~]$ ssh-keygen -t rsa -P ''
    

    ssh-copy-id 将公钥拷贝到目标主机

    ssh-copy-id [-i [identity_file]] [-p port] [user@]hostname
    将公钥拷贝到目标主机,目标主机的.ssh/authorized_keys文件中就会有这个公钥的信息
    [root@node1 ~]$ ssh-copy-id -i .ssh/id_rsa.pub root@192.168.234.130
    

    ssh-agent bash将密钥加载到内存中(可选)

    ssh-agent bash
    客户端有时会出现系统没有将密钥加载到内存中的问题,使用此命令重新加载一遍ssh-agent
    

    1.3 免交互拷贝公钥

    1.3.1 使用sshpass免输入密码

    1.3.1.1 安装

    yum -y install sshpass
    

    1.3.1.2 sshpass -p命令

    sshpass -p密码 ssh相关命令,使用sshpass -p密码可以免输入密码执行ssh相关的命令

    #免输入密码拷贝公钥
    #初次拷贝会失败,因为第一次建立ssh连接用用户名密码方式,需要输入确认是否接收对端的公钥
    sshpass -p123456 ssh-copy-id -i .ssh/id_rsa.pub root@192.168.234.130
    

    1.3.2 使用StrictHostKeyChecking参数,避免第一次公钥接收的确认

    第一次使用ssh-copy-id拷贝公钥给对端时,首先要建立基于用户名密码方式的连接。建立连接时,对端会将公钥发过来,此时需要输入yes/no确认接收。

    使用参数-o StrictHostKeyChecking=no避免此次确认。

    [root@m01 ~]$ ssh-copy-id -i .ssh/id_rsa.pub -o StrictHostKeyChecking=no root@172.16.1.41
    
    #此时输出中直接来到输入密码环节,跳过了公钥的接收确认
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    root@172.16.1.41's password: 
    

    1.3.3 完整的免交互拷贝公钥命令

    同时使用sshpass-o StrictHostKeyChecking=no参数

    sshpass -p123456 ssh-copy-id -i .ssh/id_rsa.pub -o StrictHostKeyChecking=no root@172.16.1.41
    

    1.4 ssh远程执行命令

    使用密钥认证时,可以直接在客户端在服务端上执行命令
    ssh ip地址 命令

    #显示 172.16.1.41 主机的ip信息
    ssh 172.16.1.41 ip a
    

    1.5 批量分发公钥shell脚本

    #!/bin/bash
    
    for ip in `cat /tmp/ipaddr.txt`
    do
      echo "====host $ip start===="
      sshpass -p123456 ssh-copy-id -i .ssh/id_rsa.pub -o StrictHostKeyChecking=no root@$ip &> /dev/null
      echo "====host $ip done===="
      echo ""
    done
    

    1.6 批量检查公钥分发是否成功shell脚本

    [root@m01 ~]$ vim /server/scripts/check_fenfa_pub_key.sh
    #!/bin/bash
    
    CMD=$1
    
    for ip in `cat /tmp/ipaddr.txt`
    do
      echo "====host $ip check===="
      ssh $ip $CMD
      echo ""
    done
    
    [root@m01 ~]$ /bin/sh /server/scripts/check_fenfa_pub_key.sh hostname
    

    2 w命令

    w命令查看用户登录信息,显示信息共分8个部分


    1.登录的用户名
    2.登录的方式:pts/x远程登录,tty本地登录
    3.登录的源IP
    4.登录时间
    5.空闲时间
    6.用户消耗CPU的时间
    7.用户在操作什么

    3 last显示最近的登录信息

    reboot   system boot  3.10.0-1127.19.1 Sun Oct  4 18:45 - 15:04  (-3:-41)   
    root     pts/1        192.168.234.1    Thu Oct  1 21:00 - crash (2+21:45)   
    root     pts/0        192.168.234.1    Thu Oct  1 19:51 - crash (2+22:54)   
    reboot   system boot  3.10.0-1127.19.1 Fri Oct  2 03:50 - 15:04 (2+11:13)   
    root     pts/0        192.168.234.1    Thu Oct  1 18:54 - crash  (08:56)    
    root     pts/0        192.168.234.1    Thu Oct  1 18:43 - 18:54  (00:11)    
    root     tty1                          Thu Oct  1 18:38 - 19:49  (01:10)    
    reboot   system boot  3.10.0-1127.19.1 Fri Oct  2 02:37 - 15:04 (2+12:26)   
    root     pts/0        192.168.234.1    Sun Aug 30 14:03 - crash (32+12:34)  
    reboot   system boot  3.10.0-1127.19.1 Sun Aug 30 22:03 - 15:04 (34+17:01)  
    root     pts/0        192.168.234.1    Sun Aug 30 13:45 - down   (00:16)    
    reboot   system boot  3.10.0-1127.19.1 Sun Aug 30 13:44 - 14:01  (00:16)    
    root     pts/1        192.168.234.1    Sun Aug 30 13:02 - crash  (00:42)    
    root     pts/0        192.168.234.1    Sun Aug 30 12:51 - crash  (00:53)    
    root     tty1                          Sun Aug 30 20:49 - 13:44  (-7:-4)    
    reboot   system boot  3.10.0-1062.el7. Sun Aug 30 20:49 - 14:01  (-6:-47)   
    

    4 lastlog显示所有用户的登录情况

    root             pts/0    172.16.1.1       Wed Dec  9 10:51:20 +0800 2020
    bin                                        **Never logged in**
    daemon                                     **Never logged in**
    ......
    mysql                                      **Never logged in**
    bigsky           pts/0                     Wed Dec  9 10:54:36 +0800 2020
    

    5 scp

    scp -rp 源文件 [用户@]IP地址:/目标文件,默认是以当前用户的身份登录目标服务器完成拷贝,如果需要指定用户,需配置[用户@]部分

    #将/etc/yum.repos.d/ 整个拷贝到目标的/tmp/目录下
    scp -rp /etc/yum.repos.d/  root@10.0.0.1:/tmp/
    
    参数解释:
    -r  递归拷贝
    -p  保留文件属性
    

    6 sftp

    基于ssh 22端口的ftp工具

    命令:
    sftp IP地址连接到对端服务器,进入sftp交互模式

    [root@m01 ~]$ sftp 172.16.1.41
    Connected to 172.16.1.41.
    sftp> 
    

    进入sftp模式下的常用命令:

    Available commands:
    bye                                Quit sftp
    cd path                            切换远程ftp服务器目录
    get [-afPpRr] remote [local]       下载文件
    help                               查看全部命令帮助
    lcd path                           切换本地目录
    lls [ls-options [path]]            查看本地目录文件信息
    ls [-1afhlnrSt] [path]             查看远程ftp服务器目录文件信息
    put [-afPpRr] local [remote]       上传文件
    

    7 htpasswd

    生成加密的密码

    Usage:
        htpasswd [-cimB25dpsDv] [-C cost] [-r rounds] passwordfile username
        htpasswd -b[cmB25dpsDv] [-C cost] [-r rounds] passwordfile username password
    
        htpasswd -n[imB25dps] [-C cost] [-r rounds] username
        htpasswd -nb[mB25dps] [-C cost] [-r rounds] username password
    
    常用参数:
     -c  Create a new file.
         创建一个密码文件
     -b  Use the password from the command line rather than prompting for it.
         免交互方式输入密码信息
    

    具体用法:
    1)交互式生成

    [root@web01 password]$ htpasswd -c htpasswd bigsky
    New password: 
    Re-type new password: 
    Adding password for user bigsky
    

    2)免交互式生成

    [root@web01 password]$ htpasswd -bc htpasswd bigsky 123456
    Adding password for user bigsky
    

    相关文章

      网友评论

          本文标题:12、登录及安全管理

          本文链接:https://www.haomeiwen.com/subject/xxniwktx.html