关于Linux登录的安全这一块,之前一直没有引起重视,比如更换SSH端口以及使用密钥登录等。
更换SSH端口
最近看了Vicer的一篇博文 《查看Auth.log,检查SSH是否被扫》,觉得还是要做好安全工作。
查看用密码登陆成功的IP地址及次数:
grep "Accepted password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
查看用密码登陆失败的IP地址及次数:
grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
我尝试在我的树莓派上查看了一下,用密码登录失败前十的结果
12553 116.31.116.9
11640 61.177.172.55
6413 116.31.116.6
6292 58.57.65.112
3061 58.57.65.115
1399 103.254.110.149
431 182.18.23.79
196 113.108.223.135
54 91.211.1.100
27 31.207.47.50
不得了,要知道这个日志文件里面只记录最近两天的记录,居然有那么多的IP在扫描我可怜的树莓派。
作者建议是修改SSH端口:
sed -i "s/Port .*/Port 你的端口/g" /etc/ssh/sshd_config
因为我的树莓派是放在家里的,也可以通过不修改SSH,只修改端口映射达到目的了。
使用密钥登录
Linux使用密钥登录在让你不用每次输入一串复制的密码偷懒的同时对安全性也有所提高。 建议使用密钥登录的同时,禁止使用密码登录。
- 生成密钥
命令行执行ssh-keygen
命令,使用帮助请ssh-keygen /h
查看。
过程如下:
pi@raspberrypi:~ $ ssh-keygen -t ed25519 -C "user@host" #生成一个ED25519的密钥对
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/pi/.ssh/id_ed25519): #密钥的名字,可直接回车使用默认
Enter passphrase (empty for no passphrase): #密钥密码
Enter same passphrase again: #再次输入密钥密码
Your identification has been saved in /home/kay/.ssh/id_ed25519.
Your public key has been saved in /home/kay/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:A0Az9x/3hclwZiIPUlztR+wwWqp2bnVs+fOZAe/Q7Jk user@ldap
The key's randomart image is:
+--[ED25519 256]--+
| .= . .o+.+.+. |
| = . ..+ B=oo|
| . . . o=+=.|
| . . oo...o|
| S .. ..o.|
| .o . *.+|
| . o o B.|
| o +.B|
| . E+|
+----[SHA256]-----+
在/home/pi/.ssh/
目录下可以找到id_ed25519
(私钥)和id_ed25519.pub
(公钥)
因为腾讯云等第三方的云可以选择加载密钥功能,直接把上面的信息粘贴进去即可。 然后选择需要应用的机器,加载秘钥即可(一般需要停机才可以做此项操作,建议使用下一节的方式加载)
- 应用密钥
目标服务器
假设上面的操作是在目标服务器上操作的,可以在用户的主目录下找到文件夹.ssh
权限为drwx------
也就是700。
如果没有,请创建它并修改文件夹的权限。
|
|
之后将公钥信息(也就是上面的那一串)写入文件authorized_keys
内
cat $HOME/.ssh/id_ed25519 » $HOME/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
权限设置为是600,禁止其他用户对该文件写入。
远程服务器 假设你在本机生成的秘钥,需要在当前机器上执行
|
|
在认证成功后就应用成功了.
此项操作会将生成好的id_ed25519.pub
公钥内容追加到目标服务器的 $HOME/.ssh/authorized_keys
- 配置密钥信息
我们对目标服务器SSH的配置文件进行编辑
vim /etc/ssh/sshd_config
找到并设置如下选项:
PasswordAuthentication no //禁止使用基于口令认证的方式登陆
PubkeyAuthentication yes //允许使用基于密钥认证的方式登陆
然后重载配置文件。
sudo systemctl reload sshd
这样就完成了密钥的配置。
是不是感觉自己的服务器又安全了一点呢XD