在 Linux系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而生成的其他大量账号。除了超级用户
root 之外,其他大量账号只是用来维护系统运作、启动或保持服务进程,一般是不允许登录的,因此也称为非登录用户账号。

常见的非登录用户账号包括
bin、daemon、adm、lp、mail 等。为了确保系统安全,​​这些用户账号的登录Shell 通常是/sbin/nologin,表示禁止终端登录​,应确保不被人为改动。

--------------------------------------------------------------------------------------------

root@localhost~]# grep "/sbin/nologin$" /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

......
//省略部分内容

--------------------------------------------------------------------------------------------


锁定用户

对于 Linux服务器中长期不用的用户账号,若无法确定是否应该删除,可以暂时将其锁定。例如,若要锁定、解锁名为
zhangsan 的用户账号,可以执行以下操作(passwd、usermod命令都可用来锁定、解锁账号)。

[root@localhost~]# usermod -L zhangsan //锁定账号

[root@localhost~]# passwd -S zhangsan //查看账号状态

zhangsan LK 2017-08-24 0 99999 7 -1 (密码已被锁定。)

[root@localhost~]# usermod -U zhangsan //解锁账号

[root@localhost~]# passwd -S zhangsan

zhangsan PS 2017-08-24 0 99999 7 -1 (密码已设置,使用 SHA512 算法。

锁定文件

如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方法。使用
chattr 命令,分别结合“+i”“-i”选项来锁定、解锁文件,使用 lsattr 命令可以查看文件锁定情况。

--------------------------------------------------------------------------------------------

[root@localhost~]# chattr +i /etc/passwd /etc/shadow //锁定文件

[root@localhost~]# lsattr /etc/passwd /etc/shadow //查看为锁定的状态

----i-----------/etc/passwd

----i-----------/etc/shadow

[root@localhost~]# chattr -i /etc/passwd /etc/shadow //解锁文件

[root@localhost~]# lsattr /etc/passwd /etc/shadow //查看为解锁的状态

----------------/etc/passwd

----------------/etc/shadow

--------------------------------------------------------------------------------------------

在账号文件被锁定的情况下,其内容将不允许变更,因此无法添加、删除账号,也不能

更改用户的密码、登录 Shell、宿主目录等属性信息。

--------------------------------------------------------------------------------------------

[root@localhost~]# chattr +i /etc/passwd /etc/shadow

[root@localhost~]# useradd billgate

useradd:无法打开/etc/passwd

--------------------------------------------------------------------------------------------

密码安全控制

执行以下操作可将密码的有效期设为 30 天(chage 命令用于设置密码时限)。

--------------------------------------------------------------------------------------------

[root@localhost~]# vi /etc/login.defs //适用于新建的用户

......
//省略部分内容

PASS_MAX_DAYS30

[root@localhost~]# chage -M 30 lisi //适用于已有的 lisi 用户

--------------------------------------------------------------------------------------------

用户下次登录时强制更改密码

在某些特殊情况下,如要求批量创建的用户初次登录时必须自设密码,根据安全规划统一要求所有用户更新密码等,可以由管理员执行强制策略,以便用户在下次登录时必须更改密码。例如,执行以下操作可强制要求用户zhangsan 下次登录时重设密码。

--------------------------------------------------------------------------------------------

[root@localhost~]# chage -d 0 zhangsan

Localhost
login: zhangsan

password:

Youare required to change your password immediately (root enforced)

Changingpassword for zhangsan.

(current)UNIX password:

New password:

Retype new password:

--------------------------------------------------------------------------------------------

命令历史、自动注销

命令历史

Bash终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通过修改/etc/profile
文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。

--------------------------------------------------------------------------------------------

[root@localhost ~]# vi /etc/profile //适用于新登录用户

HISTSIZE=200

[root@localhost~]# export HISTSIZE=200 //适用于当前用户

--------------------------------------------------------------------------------------------

除此之外,还可以修改用户宿主目录中的~/.bash_logout文件,添加清空历史命令的操作语句。这样,当用户退出已登录 Bash环境以后,所记录的历史命令将自动清空。

--------------------------------------------------------------------------------------------

[root@localhost~]# vi ~/.bash_logout

history
-c

clear

--------------------------------------------------------------------------------------------

自动注销

Bash终端环境中,还可以设置一个闲置超时时间,当超过指定的时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的误操作风险。闲置超时由变量TMOUT 来控制,默认单位为秒(s)

--------------------------------------------------------------------------------------------

[root@localhost~]# vi /etc/profile //适用于新登录用户

......
//省略部分内容

export
TMOUT=600

[root@localhost~]# export TMOUT=600 //适用于当前用户

--------------------------------------------------------------------------------------------

需要注意的是,当正在执行程序代码编译、修改系统配置等耗时较长的操作时,应避免设置 TMOUT变量。必要时可以执行“unset TMOUT”命令取消 TMOUT 变量设置。