CentOS7 系统安全及应用
一、账户安全基本措施
1.系统账户清理
2.密码安全控制
3.命令历史限制
二、用户切换及提权
1.使用 Su 命令切换用户
2.使用 Sudo 机制提升权限
三、系统引导和登录控制
1.开关机安全控制
2.终端登录安全控制
一、账户安全基本措施
1.系统账户清理
1)将非登录用户的 Shell 设为 /sbin/nologin(/sbin/nologin:禁止终端登录)
[root@localhost ~]# grep "/sbin/nologin$" /etc/passwd | wc -l [root@localhost ~]# grep "/sbin/nologin$" /etc/passwd | awk -F: '{print $1}' > nologin.txt [root@localhost ~]# cat nologin.txt
2)锁定长期不使用的账号(例如一些用户长期不使用,但不确认是否删除)
[root@localhost ~]# useradd zhangsan [root@localhost ~]# echo "123123" | passwd --stdin zhangsan [root@localhost ~]# usermod -L zhangsan [root@localhost ~]# passwd -S zhangsan [root@localhost ~]# usermod -U zhangsan [root@localhost ~]# passwd -S zhangsan
3)锁定账号文件 /etc/passwd /etc/shadow
- 例如:服务器账户已固定,不再进行更改。可锁定
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow #锁定 [root@localhost ~]# lsattr /etc/passwd /etc/shadow #查看文件状态 [root@localhost ~]# useradd wangwu #创建用户测试 [root@localhost ~]# chattr -i /etc/passwd /etc/shadow #解锁 [root@localhost ~]# useradd wanguw #再次创建用户测试 [root@localhost ~]# echo "123123" | passwd --stdin wangwu
2.密码安全控制
1)设置密码有效期(默认天数为 99999)
- 适用于新建用户,密码有效期 30 天:
[root@localhost ~]# vim /etc/login.defs 找到: PASS_MAX_DAYS 99999 改为: PASS_MAX_DAYS 30
适用于已有用户:
[root@localhost ~]# chage -M 30 zhangsan
2)强制在下次登录时更改密码
[root@localhost ~]# chage -d 0 zhangsan
重新打开一个终端使用 zhangsan 用户登录
3.命令历史限制
1)减少记录的命令条数(默认条数是 1000 条)
[root@localhost ~]# vim /etc/profile 找到: HISTSIZE=1000 改为: HISTSIZE=5 [root@localhost ~]# source /etc/profile #执行脚本 [root@localhost ~]# history #查看历史记录
2)终端自动注销
- 在 Bash 终端环境中可以设置一个限制超时时间,当超过指定时间没有任何操作自动注销终端。
[root@localhost ~]# echo "export TMOUT=30" >> ~/.bash_profile #终端30秒不做任何操作将自动注销 [root@localhost ~]# source ~/.bash_profile #使其生效
[root@localhost ~]# 等待输入超时:自动登出
- 验证完后,将终端自动注销时间改为 600 秒。
二、用户切换及提权
1.使用 Su 命令切换用户
1)用途及用法
- 用途:Substitute User,切换用户。
格式:su - 目标用户 # 带 - 选项表示将使用目标用户的登录 Shell 环境
2)密码验证
- root --> 任意用户, 不验证密码。
- 普通用户 --> 其他用户,验证目标用户的密码。
[root@localhost ~]# whoami # 查看当前登录用户名
3)限制使用 Su 命令的用户
- 默认都可以使用 Su 命令,防止密码穷举危险,只允许少量用户使用。
启用 pam_wheel 认证模块:
[root@localhost ~]# vim /etc/pam.d/su #%PAM-1.0 auth sufficient pam_rootok.so # 默认就有 auth required pam_wheel.so use_uid # 将前面 # 去掉 [root@localhost ~]# grep wheel /etc/group [root@localhost ~]# su - zhangsan [zhangsan@localhost ~]$ su - [zhangsan@localhost ~]$ exit
不能切换到 root 用户,需要将用户 tom 加入到 wheel 组中:
[root@localhost ~]# gpasswd -a ajbn wheel [root@localhost ~]# su - ajbn [zhangsan@localhost ~]$ su -
4)查看 Su 操作记录
- 安全日志文件:/var/log/secure
[root@localhost ~]# tail /var/log/secure
5)Su 命令的缺点
- 知道 root 密码的用户越少越安全。
2.使用 Sudo 机制提升权限
- sudo:普通用户拥有一部分管理权限,又不需要知道 root 密码。
1)Sudo 命令的用途及用法
- 用途:以其他用户身份(如 root)执行授权的命令。
格式:sudo 执行的授权命令
2)配置 Sudo 授权 /etc/sudoers
- 因为该文件的默认权限为 440,所以在编辑(visudo 或 vi /etc/sudoers )完后需在输入模式中使用 w! 保存。
记录格式:用户 主机名=命令程序列表
- 用户:用户名或 %组名(组内所有用户)
- 主机名:一般为 localhost 或实际主机名。
- 命令列表:命令的绝对路径,多命令用 , 号分割。
分别使用 zhangsan 用户和 wangwu 用户进行测试:
[root@localhost ~]# su - wangwu [wangwu@localhost ~]$ sudo /bin/df -hT | grep '/$' [wangwu@localhost ~]$ exit [root@localhost ~]# su - zhangsan [zhangsan@localhost ~]$ sudo /bin/df -hT | grep '/$'
[zhangsan@localhost ~]$ sudo -l # 查看用户对应权限
使 wheel 组成员不需验证密码即可执行任何命令:
[root@localhost ~]# vim /etc/sudoers 将: # %wheel ALL=(ALL) NOPASSWD: ALL 改为: %wheel ALL=(ALL) NOPASSWD: ALL
使 wangwu 可使用 df 命令:
wamgwu localhost=/bin/df # 加上这个表示可以执行 /bin/df 命令
可以使用通配符 * 和 取反符号 !
[root@localhost ~]# vim /etc/sudoers wangwu localhost=/usr/sbin/*,!/usr/sbin/useradd,/usr/bin/cat /etc/shadow
- 可以使用 /usr/sbin 下所有命令,但不能创建用户。
- 可以查看 /etcshadow 文件内容。
3)查看 Sudo 操作记录
- 需启用 Defaults logfile 配置(默认日志文件:/var/log/sudo)
启用日志配置以后,Sudo 操作过程才会被记录
在第二行添加:
在第二行添加: Defaults logfile = "/var/log/sudo"
[root@localhost ~]# su - wangwu [wangwu@localhost ~]$ sudo /usr/sbin/ss -anpt | grep 22 [wangwu@localhost ~]$ sudo /usr/sbin/useradd Coco [wangwu@localhost ~]$ sudo /usr/bin/cat /etc/shadow
[root@localhost ~]# tail /var/log/sudo # 查看日志
三、系统引导和登录控制
- 服务器一般用远程登录的方式进行管理,而本地引导和终端登录过程被忽视,会留下安全隐患;
- 因此需要加强对其他用户的非授权介入的安全管理。
1.开关机安全控制
1)设置 BIOS 密码
- 防止 U 盘破解 root 密码,从网络启动等;重启虚拟机一直按 F2,进入如下:
2)禁用重启热键 Ctrl+Alt+Del
- 避免因用户误操作导致重启。
在不影响此文件的前提下禁用此热键(注销此服务)
[root@localhost ~]# systemctl mask ctrl-alt-del.target Created symlink from /etc/systemd/system/ctrl-alt-del.target to /dev/null.
重新加载 systemd 配置:
[root@localhost ~]# systemctl daemon-reload
3)设置 GRUB 引导密码
- 使用 grub2-mkpasswd-pbkdf2 生成密钥;pbkdf 算法加密更安全。在 /etc/grub.d/00_header 配置文件中,添加用户密码。
- 注意:实验中每个人生成的密码不一样。
[root@localhost ~]# grub2-mkpasswd-pbkdf2 # 生成密钥 输入口令: # 设置密码 Reenter password: # 再次输入密码
修改 /etc/grub.d/00_header 文件中,添加密码记录
[root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak [root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak [root@localhost ~]# vim /etc/grub.d/00_header 在末尾添加: cat << EOF set superusers="root" password_pbkdf2 root PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.922DA3FC35888D451ED9B45347F3E2C3F413BD1B41116622655D4B701DE26F5000D7FC7B9C26E4837BC58F16745FAF1E4A349AC39FE68D7AE52FC007732CCEDD.2E6B1CE241AD55D48639FD4EC0B2CA5ACB5620A530C0983B653F8CE8FF54DBBE071E152A2A98E0B567A6AF00B1C340B87C150752A25C80B685C2CED89911D20E EOF
生成新的 grub.cfg 配置文件
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
验证:重启进入 grub 菜单,按 E 键将无法修改引导参数
2.终端登录安全控制
1)限制 root 只在安全终端登录
[root@localhost ~]# sed -i '/tty5/c#tty5' /etc/securetty [root@localhost ~]# sed -i '/tty6/c#tty6' /etc/securetty [root@localhost ~]# sed -n '/#/p' /etc/securetty
2)禁止普通用户登录(建议在服务器维护期间临时使用)
- 创建 /etc/nologin 文件,login 程序会检查此文件是否存在。如果存在则拒绝普通用户登录系统(root 不受限制)`
[root@localhost ~]# touch /etc/nologin
使用普通用户在终端登录验证:
删除 /etc/nologin 文件或重启后即恢复正常:
[root@localhost ~]# rm -rf /etc/nologin
删除后再使用普通用户进行验证: