12、登录及安全管理

2020-12-06  本文已影响0人  一个反派人物

1 ssh

1.1 ssh基础

ssh [-p port] [user@]hostname

配置文件在/etc/ssh/文件夹下,ssh_config是客户端的配置文件,sshd_config是服务端的配置文件。
密钥文件在账户的家目录下的隐藏文件夹.ssh中,如root在/root/.ssh/下。其中有两个文件,authorized_keysknown_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
上一篇下一篇

猜你喜欢

热点阅读