账户安全基本措施
一、系统账户清理
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 ajbn
[root@localhost ~]# echo "123" | passwd --stdin ajbn
[root@localhost ~]# usermod -L ajbn
[root@localhost ~]# passwd -S ajbn
[root@localhost ~]# usermod -U ajbn
[root@localhost ~]# passwd -S ajbn
3.锁定账号文件passwd、shadow
例如:服务器账户已固定,不再进行更改。可锁定
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow (锁定)
[root@localhost ~]# lsattr /etc/passwd /etc/shadow (查看文件状态)
[root@localhost ~]# useradd ajbm (创建用户测试)
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow (解锁)
[root@localhost ~]# useradd ajbm (再次创建用户测试)
二、密码安全控制
1.设置密码有效期
默认天数为99999
适用于新建用户---密码有效期30天
[root@localhost ~]# vi /etc/login.defs
找到:
PASS_MAX_DAYS 99999
改为:
PASS_MAX_DAYS 30
适用于已有用户
[root@localhost ~]# chage -M 30 ajbn
2.强制在下次登录时更改密码
[root@localhost ~]# chage -d 0 ajbn
重新打开一个终端使用ajbn用户登录
三、命令历史限制
1.减少记录的命令条数
默认条数是1000条
[root@localhost ~]# vi /etc/profile
找到:
HISTSIZE=1000
改为:
HISTSIZE=5
[root@localhost ~]# source /etc/profile (执行脚本)
[root@localhost ~]# history (查看历史记录)
2.终端自动注销
在Bash终端环境中可以设置一个限制超时时间,,当超过指定时间没有任何操作自动注销终端
[root@localhost ~]# vi ~/.bash_profile
在最后面添加:
export TMOUT=10 #终端10秒不做任何操作将自动注销
[root@localhost ~]# source ~/.bash_profile (执行脚本)
[root@localhost ~]# 等待输入超时:自动登出
测试完后,将终端自动注销时间改为600秒
用户切换及提权
一、使用su命令切换用户
1.用途及用法
用途:Substitute User,切换用户 格式:su - 目标用户
2.密码验证
root --> 任意用户, 不验证密码 普通用户 --> 其他用户,验证目标用户的密码
【带 - 选项表示将使用目标用户的登录Shell环境】
[root@localhost ~]# whoami (查看当前登录用户名)
3.限制使用su命令的用户
默认都可以使用su命令,防止密码穷举危险,只允许少量用户使用
启用pam_wheel认证模块
[root@localhost ~]# vi /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 - ajbn
[ajbn@localhost ~]$ su -
[ajbn@localhost ~]$ exit
不能切换到root用户,需要将用户“tom”加入到“wheel”组中
[root@localhost ~]# gpasswd -a ajbn wheel
[root@localhost ~]# su - ajbn
[ajbn@localhost ~]$ su -
4.查看su操作记录
安全日志文件:/var/log/secure
[root@localhost ~]# tail /var/log/secure
5.su命令的缺点
知道root密码的用户越少越安全
sudo---普通用户拥有一部分管理权限,又不需要知道root密码
二、使用sudo机制提升权限
1.sudo命令的用途及用法
用途:以其他用户身份(如root)执行授权的命令 用法:sudo 授权命令
2.配置sudo授权 /etc/sudoers
2.1文件默认权限440,vi编辑时‘:w!’保存
visudo 或者 vi /etc/sudoers 都可以编辑
2.2 记录格式:
用户 主机名=命令程序列表
用户:用户名或“%组名”(组内所有用户)
主机名:一般为localhost或实际主机名
命令列表:命令的绝对路径,多命令用‘,’号分割
分别使用ajbm用户和ajbn用户进行测试
[root@localhost ~]# hostname (查看当前主机名)
localhost.localdomain (.后面不用管)
[root@localhost ~]# visudo (编辑sudo配置文件)
【wheel组成员不需验证密码即可执行任何命令】
wheel组成员不需验证密码即可执行任何命令:
%wheel ALL=NOPASSWD: ALL (默认就有)
【ajbm可使用df命令】
ajbm localhost=/bin/df (加上这个表示可以执行/bin/df命令)
【可以使用通配符、取反符号!】*
[root@localhost ~]# visudo
ajbm 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 - ajbm
[ajbm@localhost ~]$ sudo /usr/sbin/ss -anpt | grep 22
[ajbm@localhost ~]$ sudo /usr/sbin/useradd abc
[ajbm@localhost ~]$ cat /etc/shadow
[ajbm@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 ~]# vi /etc/grub.d/00_header
在末尾添加:
cat << EOF
set superusers="root"
password_pbkdf2 root
PBKDF2 hash of your password is
grub.pbkdf2.sha512.10000.9936C6AF3081AFB4C32DCAF6F3853CC82EF24C532C9A67B0C9F6E2086C0B119B24B7347087CAF72FB16F9EF8E5F2A24CE0044A826F2F3C4B7981275F677C0526.C893E8BEED32E35AB0CE86E0C0843226E67BBA768CB97B3C7D2D037F8A2C95D1DF4C82A1913AC26C017CE0B6EE3E262869BA76DC581797AC3B9745174C1B5A27
EOF
生成新的grub.cfg配置文件
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
验证:重启进入grub菜单,按E键将无法修改引导参数
2.终端登录安全控制
1).限制root只在安全终端登录
安全终端配置:/etc/securetty
[root@localhost ~]# vi /etc/securetty
2). 禁止普通用户登录
建立/etc/nologin文件,login程序会检查此文件是否存在。如果存在则拒绝普通用户登录系统(root不受限制)
建议在服务器维护期间临时使用
[root@localhost ~]# touch /etc/nologin
使用普通用户在终端登录测试:
删除nologin文件或重启后即恢复正常
[root@localhost ~]# rm -rf /etc/nologin
删除后再使用普通用户进行测试: