用户账号是计算机使用者的身份凭证或标识,每一个要访问系统资源的人,必须凭借他的用户账号才能进入计算机。在Linux系统中,提供了多种机制来确保用户账号的正当、安全使用。合理地规划用户账号,并合理地分配权限,是保证Linux系统安全的第一步。
1. 清理系统账号
在Linux系统中,一些程序在安装时会创建特有的用户和组,这些用户仅仅用于启动服务或运行进程,通常是不允许登录的,例如mysql、apache、named、news……。当攻击者假冒这些用户或组身份时,往往不易被管理员发现。
对于这些系统账号,首先要确保他们不能用于登录,也就是要将他们的登录shell设为/sbin/nologin,同时可以考虑将账号删除或是锁定。
根据当前服务器的具体应用情况,可以将不使用的用户和组删除。例如,很少使用的用户、组包括:news、uucp、games、gopher等。再如,假设服务器不需要启用named服务,那么就可以删除named用户、named组;如果不提供FTP服务,就可以删除ftp用户、ftp组;……。
如果不确定用户能否删除,也可以将用户锁定。例:锁定用户sync。
[[email protected] ~]# passwd -l sync
推荐采用锁定的方式。
2. 锁定账号文件
如果确定系统中的账号已经达到了稳定状态,不需要再做改动,那么可以利用chattr命令将账号文件/etc/passwd和/etc/shadow锁定。
[[email protected] ~]# chattr +i /etc/passwd /etc/shadow
[[email protected] ~]# lsattr /etc/passwd /etc/shadow
----i-------- /etc/passwd
----i-------- /etc/shadow
此时再创建用户就会出现错误提示。
[[email protected] ~]# useradd temp
useradd:无法打开密码文件
将文件解锁:
[[email protected] ~]# chattr -i /etc/passwd /etc/shadow
[[email protected] ~]# lsattr /etc/passwd /etc/shadow
------------- /etc/passwd
------------- /etc/shadow
3. 设置用户密码策略
在Linux系统中,设置用户密码策略的操作要分为两种情况:针对新创建的账号,针对系统中原先已经存在的账号。
对于新创建的账号,可以通过修改配置文件/etc/login.defs来设置密码策略,该文件用来定义创建用户账号时的默认设置,比如指定用户的UID和GID的范围,账号的过期时间、是否需要创建用户家目录等等。
下面是/etc/login.defs文件的重要参数介绍:
修改该文件中的设置,只针对新创建的用户有效。例如限制用户的密码有效期(最大天数)为30天,可以将“PASS_MAX_DAYS”的值设为30,那么所有新建用户的密码有效期都将是30天。
对于系统中已经存在的账号,可以通过chage命令设置密码策略。
chage命令的常用选项:
-M,设置用户密码最长使用时间。
-W,设置用户密码过期警告时间。
-d,设置密码修改时间。
例:将zhangsan的密码有效期更改为30天。
[[email protected] ~]# chage -M 30 zhangsan
例:将zhangsan的密码过期警告时间更改为7天。
[[email protected] ~]# chage -W 7 zhangsan
例:强制用户zhangsan在下次登录时需要更改密码。
[[email protected] ~]# chage -d 0 zhangsan
4. 设置历史命令条数
通过执行history命令可以列出以前曾执行过的历史命令,这也带来了一定的安全隐患。
假如我们需要将所有用户的历史命令记录条数设置为100条,这需要修改/etc/profile文件。
/etc/profile文件用于设置用户在登录系统时自动执行某些操作,对所有用户都有效。
例如,我们希望root用户在每次注销退出时能自动清空历史命令,可以在用户家目录的.bash_logout文件中添加一条“history –c”命令。
5. 设置终端自动注销
在用户通过终端登录时,可以设置一个TMOUT变量,当超过指定的时间(默认单位为秒)没有输入即自动将账号注销。设置恰当的超时时间,可以有效地避免当管理员不在时其他人员对服务器的误操作风险。
设置自动注销仍是需要修改/etc/profile文件。
例:设置账号超时10分钟自动注销。