ssh常用的安全优化参数
设置selinux的状态为警告
setenforce 0
查看sshd的默认端口
netstat -antlupe | grep sshd
更改端口
用vim编辑
这个主配置文件
默认这行配置在21行,可以直接通过:21快速导航到21行
vim /etc/ssh/sshd_config
Port 22 ------> Port 2222
重启服务
systemctl restart sshd
更改完配置文件后,记得重启sshd服务以刷新配置文件
测试访问登录
我们先查看一下sshd的端口是否已经更改成2222
我们可以发现我们默认访问132主机时,使用的时22端口,所以我们在134主机上访问132时被拒绝
火墙放通我们更改了的端口
在主机132放通
firewall-cmd --permenant --add-port=2222/tcp
firewall-cmd --reload
在主机132上放通并重启后,我们来到主机134进行测试访问登录
再次测试访问登录
ssh -l root 192.168.200.132 -p 2222
可以看到我们这次测试访问没有被拒绝,输入密码后能够实现登录132主机
生成密钥
ssh-keygen
非交互式生成密钥
ssh-keygen -f /root/.ssh/id_rsa -P ""
注:只能有一个密钥,否则会冲突,交互式和非交互式生成密钥选一个就可以了。
上锁(给予密钥)
ssh-copy-id -i /root/.ssh/id_rsa vb@192.168.200.132
命令解析
1. ssh-copy-id
ssh-copy-id
是一个脚本工具,用于将本地用户的公钥复制到远程主机的 ~/.ssh/authorized_keys
文件中。这样,以后通过 SSH 登录远程主机时,就可以使用密钥认证,而无需输入密码。
2. -i /root/.ssh/id_rsa
-
-i
参数用于指定要复制的公钥文件。 -
/root/.ssh/id_rsa
是本地用户的私钥文件路径。通常,公钥文件路径是/root/.ssh/id_rsa.pub
,但这里只指定了私钥文件路径。ssh-copy-id
会自动查找对应的公钥文件(即/root/.ssh/id_rsa.pub
)。
3. vb@192.168.200.132
-
vb
是远程主机上的用户名。 -
192.168.200.132
是远程主机的 IP 地址。
在主机132上查看是否拿到密钥
ls /home/vb/.ssh/
可以看到vb下的.ssh下有了key
更改是否开启原始密码认证方式
改为no即需要密钥才能登录用户
这样可以防止暴力破解
在主机132上的/etc/ssh/sshd.conf编辑
vim /etc/ssh/sshd_config
尝试登录主机132上的vb用户
ssh 192.168.200.132 -l vb
可以看到我们这时候有了密钥就可以免密登录132主机上的vb用户
将132的密钥给134一份
scp /root/.ssh/id_rsa root@192.168.200.134:/root/.ssh/id_rsa
然后再次在134主机上尝试登录132的vb用户
可以看到也是可以免密登录了
查看以及临时更改selinux设定
getenforce #查看是否有开启selinux
setenforce 0 #不启用selinux 警告模式
setenforce 1 #启用selinux 强制模式
我们在重启后selinux的开关又还原会关闭了
永久更改selinux设定
grubby --update-kernel ALL--args selinux=1
然后再次重启
reboot
等待系统加载完所有内核配置文件
因为有更改到关于所有内核的配置,所以这次重启会比较慢
等其加载完重启好登录之后
我们再次查看selinux的设定是不是永久更改为了开启
getenforce
管理文件的安全上下文
安装nginx(仅为测试用)
dnf install nginx -y
启用nginx以及火墙放通
systemctl enable --now nginx.service
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
查看nginx的默认发布文件index.html
ls /usr/share/nginx/html/
echo /mnt/index.html > /mnt/index.html
mv /mnt/index.html /usr/share/nginx/html/index.html
然后我们删去他的默认发布文件
在mnt底下创建一个名为index.html的文件,里面写有/mnt/index.html
将它移动到nginx的默认发布目录底下
然后我们用ls -Z 可以查看这个目录下的安全上下文
我们自己生成并移入nginx的默认发布目录下的文件的安全上下文的标识是不一样的
测试访问
所以我们可以测试一下打开默认发布文件
curl 192.168.200.134
访问它会返回403 Forbidden 被禁止访问
所以我们要修改一下我们自己放入的index.html的安全上下文
临时修改安全上下文
chcon -t httpd_sys_content_t /usr/share/nginx/html/index.html
临时修改后测试访问
curl 192.168.200.134
]# curl 192.168.200.134
/mnt/index.html
就可以成功看到自己写的内容
永久修改安全上下文
查看/vb下的文件的安全上下文
ls -Zd /vb
然后修改vb下的所有文件的安全上下文
semanage fcontext -a -t httpd_sys_content '/vb(/.*)?'
查看更改完的安全上下文
semanage fcontext -l | grep /vb
布尔值
查看服务的布尔值
getsebool -a | grep http
假设我想更改上面黄色框选项
临时修改
setsebool httpd_anon_write 1
setsebool httpd_anon_write on
选择其中一个都可以实现这个功能的开启
重启
reboot
永久修改
setsebool -P httpd_anon_write on
查看布尔值
getsebool-a丨grep 服务名称
getsebool -a | grep http
当更改完一个服务的布尔值,即该功能开启或关闭