81. Linux系统安全限制
我们知道Linux系统安全性设置有很多方式. 常见的有通过firewall防火墙、或者iptables规则实现放行、拦截屏蔽某些特征的网络请求. 示例:iptables限制ssh链接服务器
还有一种办法是机房运维常用的权限管控手段:管控服务器登录权限、管控账号执行操作权限. 这种手段主要管控的目标对象是运维人员, 即操作者.
下面通过实验验证如何通过 /etc/ssh/sshd_config、/etc/hosts.allow、/etc/hosts.deny、/sbin/nologin、/etc/passwd 实现禁止用户ssh登录.
/sbin/nologin、/etc/passwd 设置用户 拒绝通过ssh登录
Linux系统是基于文件系统的, 每个用户都必须明确有一个用于解释执行shell命令解释器位置, 即”环境变量”, 一般是 “/bin/bash”
我们可以通过设置用户的解释器为 “/sbin/nologin” 来禁止该用户执行登录.
- 创建非登录用户, 可以在创建新用户时指定禁止ssh登录:
useradd -s /sbin/nologin <new username> - 已存在的用户设置为禁止ssh登录:
usermod -s /sbin/nologin <username> - 直接修改
/etc/passwd系统文件, 将该用户解释器修改为/sbin/nologin
通过以上方法1、2设置后底层其实还是到 /etc/passwd 里面的. 示例:
1 | root:x:0:0:root:/root:/bin/bash |
实验:
sshd_config 设置用户或属组, 允许或拒绝通过ssh登录
/etc/ssh/sshd_config文件是sshd服务的配置文件, 里面的配置项专门管控ssh登录. 常见的有:指定ssh端口、地址来源、用户默认的证书加密方式、AuthorizedKeysFile、登录日志筛选、登录日志级别、最大登录数、自定义Authentication、密码格式、密码过期期限、密码等级等等所有与ssh相关的设置项.
这里我们单说允许或限制用户名、属组的登录权限设置.
- AllowUsers设置允许登录的用户白名单:
echo "AllowUsers myname" >> /etc/ssh/sshd_config - AllowGroups设置允许登录的属组白名单:
echo "AllowGroups myGroup" >> /etc/ssh/sshd_config - DenyUsers设置禁止登录的用户黑名单:
echo "DenyUsers myname" >> /etc/ssh/sshd_config - DenyGroups设置禁止登录的属组黑名单:
echo "DenyGroups myGroup" >> /etc/ssh/sshd_config
注意:
- 设置AllowUsers、AllowGroups时, 该用户或属组允许登录, 其他均禁止ssh登录!!!
- 同时设置AllowUsers、DenyUsers时, AllowUsers优先级高, 其他均禁止ssh登录!!!
即:有AllowUsers、AllowGroups时, 系统只看AllowUsers、AllowGroups不管其他设置.
被禁止的用户登录时, 默认提示信息:Permission denied, please try again. 权限被拒绝, 请重试.
实验对照表:
查看属组与用户的关系:
- 查看Linux系统里有哪些组:
cat /etc/group - 查看某组里有哪些用户:
getent group 组名称或者cat /etc/group | grep 属组名称 - 查看用户信息:
cat /etc/passwd |grep 用户ID
阻止创建新用户
[!NOTE]
注意:以上方法目前只能针对已经存在的用户/组 设置白名单/黑名单, 一般还需要禁止普通用户的创建新用户/新组的权限, 防止新建用户私自篡改规则.
- 锁定文件
chattr +i /etc/gshadow /etc/group /etc/shadow /etc/passwd - 解锁文件
chattr -i /etc/gshadow /etc/group /etc/shadow /etc/passwd
可以通过命令查看权限:
lsattr /etc/gshadow /etc/group /etc/shadow /etc/passwdls -lt /etc/gshadow /etc/group /etc/shadow /etc/passwd
hosts.allow、hosts.deny 设置IP或IP段或IP范围 允许或拒绝通过ssh登录
通过 /etc/hosts.allow 设置允许建立连接的地址来源. 这里仅演示ssh服务配置(其他服务sftp、telnet等也可以哦).
- 允许特定IP
echo "sshd:192.168.0.1:allow" >> /etc/hosts.allow - 允许特定IP段
echo "sshd:192.168.0.1/24:allow" >> /etc/hosts.allow - 允许特定IP段
echo "sshd:192.168.*.*:allow" >> /etc/hosts.allow - 允许全部地址
echo "sshd:ALL" >> /etc/hosts.allow
通过 /etc/hosts.deny 设置禁止建立连接的地址来源. 这里仅演示ssh服务配置(其他服务sftp、telnet等也可以哦).
- 拒绝特定IP
echo "sshd:192.168.0.2:deny" >> /etc/hosts.deny - 拒绝特定IP段
echo "sshd:192.168.0.2/24:deny" >> /etc/hosts.deny - 拒绝特定IP段
echo "sshd:192.168.*.*:deny" >> /etc/hosts.deny - 拒绝全部地址
echo "sshd:ALL" >> /etc/hosts.deny
注意:
- 设置allow时, 该地址允许建立连接, 其他均禁止!!!
- 同时设置allow、deny时, allow优先级高!!!
被禁止的用户登录时, 默认提示信息:
1 | **Connecting to 10.99.5.132:22...** |
实验对照表:
重启ssh服务
编辑/修改后, 必须重启ssh服务后生效!
1 | sudo systemctl restart sshd |
实验脚本: sshd_config-myrules.sh:
1 |
|