一:账号安全控制
1.1 系统账号清理
1.1.1 将非登陆用户的Shell 设置为 /sbin/nologin (设置为这个解释器,禁止用户登陆)
[root@localhost ~]# usermod -s /sbin/nologin zhangsan #将用户zhangsan 的登录解释器 设置为 /sbin/nologin
[root@localhost ~]# echo "123456" | passwd --stdin zhangsan
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
在登录界面,登录zhangsan 的账号, 发现,输入完 用户账号 和 密码 后, 又会返回到登录界面
1.1.2 锁定上期不使用的账号
usermod -L 用户名 或者 passwd -l 用户名 ##锁定用户
usermod -U 用户名 或者 passwd -u 用户名 ## 解锁用户
passwd -S 用户名 #查看用户状态
[root@localhost ~]# passwd -S zhangsan
zhangsan PS 2021-06-25 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@localhost ~]# passwd -l zhangsan #锁定用户zhangsan
锁定用户 zhangsan 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -S zhangsan #查看用户 zhangsan 的账号状态
zhangsan LK 2021-06-25 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U zhangsan #解锁用户 zhangsan
[root@localhost ~]# passwd -S zhangsan
zhangsan PS 2021-06-25 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
1.1.3 删除无用 的账号
userdel [-r] 用户名
[root@localhost ~]# userdel -r zhangsan #删除用户zhangsan , 选项 -r 表示连同它的家目录一起删除
[root@localhost ~]# id zhangsan
id: zhangsan: no such user
1.1.4 锁定账号文件 /etc/passed /etc/shadow
chattr +i 文件 #锁定文件
chattr -i 文件 #解锁文件
lsattr 文件 #查看文件是否锁定
修改用户信息会 涉及 到 /etc/passwd 和 /etc/shadow 两个文件。将这两个文件锁定,将无法 管理用户 ,如 删除/新建用户 , 修改密码等操作
[root@localhost ~]# lsattr /etc/passwd /etc/shadow #查看/etc/passwd 和 /etc/shadow 文件是否已经锁定
---------------- /etc/passwd
---------------- /etc/shadow
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow #将/etc/passwd /etc/shadow 文件锁定
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]# id zhangsan
id: zhangsan: no such user
[root@localhost ~]# useradd zhangsan #创建用户失败
useradd:无法打开 /etc/passwd
[root@localhost ~]# id test
uid=1000(test) gid=1000(test) 组=1000(test),10(wheel)
[root@localhost ~]# echo '123456' |passwd --stdin test #修改用户密码失败
更改用户 test 的密码 。
passwd: 鉴定令牌操作错误
[root@localhost ~]# userdel test #删除用户失败
userdel:无法打开 /etc/passwd
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow #解除 /etc/passwd 和 /etc/shadow 文件锁定
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
---------------- /etc/passwd
---------------- /etc/shadow
[root@localhost ~]# useradd zhangsan #解除锁定后,添加用户成功
[root@localhost ~]# id zhangsan
uid=1002(zhangsan) gid=1002(zhangsan) 组=1002(zhangsan)
1.2 密码安全控制
1.2.1 设置密码有效期
(1) 对于未创建的用户。修改 新建用户配置文件 /etc/login.defs , 修改字段 PASS_MAX_DAYS 的值
[root@localhost ~]# vim /etc/login.defs #修改新用户配置文件
PASS_MAX_DAYS 30 #设置密码有效期为 30 天
[root@localhost ~]# useradd wangwu #创建信用户
[root@localhost ~]# cat /etc/shadow | grep wangwu
wangwu:!!:18803:0:30:7::: # 新用户密码有效期为30
#/etc/shadow 的第 5 个字段保存 用户密码最长有效天
(2) 对于已有用户,使用 chage -M 时间 账户 #只有root 用户才可以使用 chage 命令
[root@localhost ~]# cat /etc/shadow | grep test
test:密码加密数据:18803:0:99999:7::: #此时,test 用户的密码 有效期 为99999 表示永不过期
[root@localhost ~]# chage -M 30 test #设置test 用户密码有效期为30 天
[root@localhost ~]# cat /etc/shadow | grep test
test:密码加密数据:18803:0:30:7::: #成功设置test 用户密码有效期为30 天
1.2.2 要求用户下一次 登录时修改密码
chage -d 0 用户名
[root@localhost ~]# cat /etc/shadow | grep wangwu
wangwu:!!:18803:0:30:7::: #表示上一次修改密码时间(从1970.01.01 开始计算),
[root@localhost ~]# chage -d 0 wangwu #设置用户wangwu 下一次登录时修改密码
[root@localhost ~]# cat /etc/shadow | grep wangwu
wangwu:!!:0:0:30:7::: #0表示下次登录强制修改密码
1.3 历史命令限制
历史命令,可以查看到用户之前输入的命令。
history 可以查看到用户的历史命令。历史命令默认保存1000 条。保存在 用户家目录 的 .bash_history隐藏文件中
history -c 可以清空历史命令。但是,用户家目录下的 .bash_history文件中依旧保存着历史命令
!命令字 可以执行最近使用的该命令字开头的命令
! 加编号 可以执行该编号的历史命令
[root@localhost ~]# !ls #调用最近一次以 ls 开头的命令
lsattr /etc/passwd /etc/shadow #这个是最近一次 以 ls 开头的命令,执行这个命令
---------------- /etc/passwd
---------------- /etc/shadow
root@localhost opt\]# ls
rh
\[root@localhost opt\]# history #查看历史命令
1 ls
2 cd .
3 rm -rf shadow.txt
4 ls
5 history
\[root@localhost opt\]# !1 #执行编号为 1 的历史命令
ls
rh
**1.3.1 设置历史命令的数目**
历史命令的配置 在 全局文件 **/etc/profile** 中 。有个 字段 **HISTSIZE=1000,设置了历史命令的数目**

可以**修改 HISTSIZE 的值** ,或者 新添加 字段 **export HISTSIZE** ,并设置数值
```
[root@localhost opt]# vim /etc/profile #修改全局配置文件
export HISTSIZE=30 #设置历史命令数为30
[root@localhost opt]# source /etc/profile #重新加载文件
```
**1.3.2 设置登录时自动清空历史命令**
用户每次登录时,都会加载**家目录下的 .bashrc** 文件。用户的历史命令保存在 用户家目录的 **.bash_history** 文件中
所以,我们可以在 用户家目录下的 **.bashrc** 文件 中设置命令 来清空 家目录 下的 **.bash_history** 文件
```
root@localhost ~]# echo "echo '' >~/.bash_history " >> ~/.bashrc
#将 echo '' > ~/.bash_history 追加重定向写入 到 ~/.bashrc 文件中
#echo '' > ~/.bash_history 表示 将空字符 覆盖重定向写入 到 ~/.bash_history 文件中
[root@localhost ~]# history
1 ifconfig
2 ping www.baidu.com
3 cd /etc/sysconfig/
4 ls
5 cd network-scripts/
6 ls
[root@localhost ~]# init 6 #重启系统
[root@localhost ~]# history #历史命令被清空
1 history
```
### 1.4 终端自动注销
修改全局配置文件 **/etc/profile** ,添加 字段 **export TMOUT** ,并设置数值(单位为秒)
```
[root@localhost ~]# echo "export TMOUT=600" >> /etc/profile #设置终端闲置600s 自动注销
[root@localhost ~]# source /etc/profile #重新加载文件
```
### 1.5 限制使用su 命令切换
将允许使用su 命令的用户加入到 wheel 组中
启用pam_wheel 认证模块 。 编辑 文件 **/etc/pam.d/su**
```
[root@localhost ~]# grep "wheel" /etc/group #查看wheel 组有哪些用户
wheel:x:10:test
[root@localhost ~]# gpasswd -a zhangsan wheel #将zhangsna 用户加入 wheel 组中
正在将用户“zhangsan”加入到“wheel”组中
[root@localhost ~]# grep "wheel" /etc/group
wheel:x:10:test,zhangsan
[root@localhost ~]# vim /etc/pam.d/su #编辑 /etc/pam.d/su 文件
6// auth required pam_wheel.so use_uid #将文件 第6 行注释打开, 启用 pam_wheel 认证模块
[lisi@localhost ~]$ whoami
lisi
[lisi@localhost ~]$ su - root #lisi 不在 wheel 组中,所以切换失败
密码:
su: 拒绝权限
[lisi@localhost ~]$
[zhangsan@localhost ~]$ whoami
zhangsan
[zhangsan@localhost ~]$ su - root #zhangsan 在wheel 组中 ,所以 可以切换
密码:
上一次登录:五 6月 25 10:19:00 CST 2021从 192.168.23.1pts/0 上
最后一次失败的登录:五 6月 25 10:46:41 CST 2021pts/0 上
最有一次成功登录后有 1 次失败的登录尝试。
[root@localhost ~]#
```
**su 的操作记录会记录在 安全日志文件 /var/log/secure 中**
### 1.6 配置sudo 授权
sudo 命令可以让普通用户 提权, 执行高权限用户 才可以执行的命令
```
[zhangsan@localhost opt]$ ls -ld #查看/opt/目录权限,发现只有 root 用户有写(w)的权限
drwxr-xr-x. 3 root root 34 6月 25 10:41 .
[zhangsan@localhost opt]$ whoami
zhangsan
[zhangsan@localhost opt]$ touch abc.txt #因为zhangsan 用户没有写(w)的权限,所以写入失败
touch: 无法创建"abc.txt": 权限不够
[zhangsan@localhost opt]$ sudo touch abc.txt #提权,在执行写入
[sudo] zhangsan 的密码: #输入zhangsan 用户密码
[zhangsan@localhost opt]$ ls
abc.txt rh #写入成功
```
**1.6.1配置sudo 授权**
**vim /etc/sudoers** 或者**visudo** 编辑sudo 的配置文件 (注,vim /etc/sudoers 保存需要强制保存 :wq!)
格式:
**用户 主机名=命令程序列表**
**用户 主机名=(使用哪个用户的权限) 命令程序列表**
```
[lisi@localhost ~]$ sudo ifconfig ens33:1 192.168.100.100/24 #lisi 用户提权使用ifconfig 命令失败
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] lisi 的密码:
对不起,用户 lisi 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/ifconfig ens33:1 192.168.100.100/24。
[lisi@localhost ~]$ exit
登出
[root@localhost ~]# vim /etc/sudoers #修改配置文件 /etc/sudoers 或者 visudo
lisi ALL=/usr/sbin/* #允许lisi 用户在所有主机 使用 /usr/sbin/下的所有命令
[root@localhost ~]# su - lisi
[lisi@localhost ~]$ sudo ifconfig ens33:1 192.168.100.100/24 #提权使用ifconfig 命令成功
[sudo] lisi 的密码:
[lisi@localhost ~]$ ifconfig ens33:1
ens33:1: flags=4163