1 账号安全基本措施
1.1 系统账号清理
1.1.1 将非登录用户的Shell设为/sbin/nologin
在我们使用Linux系统时,除了用户创建的账号之外,还会产生系统或程序安装过程中产生的许多其他账号,除了超级用户root外,其他账号都是用来维护系统运作的,一般不允许登录,常见的非登录用户有bin、adm、mail、lp、nobody、ftp等。
查看/etc/passwd 文件,可以看到多个程序用户。
使用usermod命令修改登录shell:
usermod -s /sbin/nologin 用户名 复制代码
示例:
将user02的登录shell修改为/sbin/nologin,修改后user02无法登录系统。
[root@localhost ~]# grep "user02" /etc/passwd //查看用户user02的登录shell,为bash user02:x:2001:2001::/tmp/test:/bin/bash [root@localhost ~]# usermod -s /sbin/nologin user02 //将user02的登录shell修改为/sbin/nologin [root@localhost ~]# grep "user02" /etc/passwd user02:x:2001:2001::/tmp/test:/sbin/nologin 复制代码
1.1.2 锁定长期不使用的账号
命令:
方法一: passwd -l 用户名 //锁定用户 passwd -u 用户名 //解锁用户 方法二: usermod -L 用户名 //锁定用户 usermod -U 用户名 //解锁用户 复制代码
示例:
1)passwd -l 用户名,锁定用户。锁定后用户无法登录。
[root@localhost ~]# passwd -l user03 //锁定用户user03的密码 锁定用户 user03 的密码 。 passwd: 操作成功 [root@localhost ~]# passwd -S user03 //查看user03状态 user03 LK 2022-03-05 0 99999 7 -1 (密码已被锁定。) [root@localhost ~]# passwd -u user03 //解锁用户user03的密码 解锁用户 user03 的密码。 passwd: 操作成功 复制代码
2)usermod -L 用户名,锁定用户。锁定后用户无法登录。
[root@localhost ~]# usermod -L user04 //锁定用户user04 [root@localhost ~]# passwd -S user04 //查看用户user04的状态 user04 LK 2022-03-05 0 99999 7 -1 (密码已被锁定。) [root@localhost ~]# usermod -U user04 //解锁用户user04 [root@localhost ~]# passwd -S user04 //查看用户user04的状态 user04 PS 2022-03-05 0 99999 7 -1 (密码已设置,使用 SHA512 算法。) 复制代码
1.1.3 删除无用的账号
命令:
userdel 用户名 //删除用户,但不删除用户的家目录 userdel -r 用户名 //删除用户的同时,删除他的家目录 #加上-r才能删除用户的家目录。如果不删除家目录,那么用户被删除后,他的家目录会变成无主文件,文件的属主和属组位显示的是原主人的UID和GID。 复制代码
命令:
1)userdel 用户名。删除用户,但不删除用户的家目录。
用户被删除后,他的家目录会变成无主文件,文件的属主和属组位显示的是原主人的UID和GID。
[root@localhost ~]# userdel user05 [root@localhost ~]# ls /home alice apache jack user01 user04 user07 zhangsan Amy helen nancy user03 user05 yuji [root@localhost ~]# ls -dl /home/user05 drwx------. 3 2004 2004 78 2月 21 20:29 /home/user05 复制代码
2)userdel -r 用户名。删除用户的同时删除他的家目录。
[root@localhost ~]# ls /home alice apache jack user01 user04 user07 yuji Amy helen nancy user03 user05 user08 zhangsan [root@localhost ~]# userdel -r user07 //删除用户的同时删除家目录 [root@localhost ~]# ls /home alice apache jack user01 user04 user08 zhangsan Amy helen nancy user03 user05 yuji 复制代码
1.1.4 锁定账号文件passwd、shadow
chattr命令改变文件属性,lsattr命令查看文件底层属性。
命令格式:
chattr [-RV] [+/-/=<属性>] 文件或目录 //改变文件属性 lsattr 文件或目录 //查看文件底层属性 复制代码
选项说明:
-R:递归处理,将指定目录下的所有文件及子目录一并处理。
-V:显示指令执行过程。
属性:
属性 | 作用 |
a(append) | 只允许对文件进行追加操作(适用于日志文件) |
A | 不允许更新文件的访问时间 |
c (compressed) | 启用这个属性时,文件在磁盘上会自动压缩 |
d (dump) | 不能使用dump命令备份文件 |
D | 设置了目录的D属性时,更改会同步保存在磁盘上 |
e (extent for mat) | 它表明,该文件使用磁盘上的块的映射扩散 |
i (immutable) | 在文件上启用这个属性时,我们不能更改、重命名或删除这个文件 |
j (journaling) | 设置了这个属性时,文件的数据首先保存在日志中,然后再写入文件 |
S (synchronous) | 设置了这个属性时,变更或更改同步保存到磁盘上 |
常用属性:
chattr +a 文件或目录 //只允许对文件进行追加操作(适用于日志文件) chattr +i 文件或目录 //不能更改、重命名或删除这个文件 复制代码
示例:
使用”chattr +i“为文件增加i属性,之后不能更改、重命名或删除这个文件。
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow //为两个文件增加i属性 [root@localhost ~]# lsattr /etc/passwd /etc/shadow //查看文件底层属性 ----i----------- /etc/passwd ----i----------- /etc/shadow [root@localhost ~]# useradd mike //尝试创建用户,创建失败 useradd:无法打开 /etc/passwd [root@localhost ~]# chattr -i /etc/passwd /etc/shadow //去掉两个文件的i属性 [root@localhost ~]# lsattr /etc/passwd /etc/shadow ---------------- /etc/passwd ---------------- /etc/shadow 复制代码
示例:
1.2 密码安全控制——设置密码规则
一般通过设置密码规则来控制密码安全,主要设置以下两点:
- 设置密码有效期
- 要求用户下次登录时修改密码
1.2.1 对于新建用户——修改/etc/login.defs文件
对于新建用户,可以修改/etc/login.defs文件里的内容来设置密码规则。
查看/etc/login.defs文件:
参数说明:
PASS_MAX_DAYS #密码最大有效期 PASS_MIN_DAYS #两次修改密码的最小间隔时间 PASS_MIN_LEN #密码最小长度,对于root无效 PASS_WARN_AGE #密码过期前多少天开始提醒
示例:
修改/etc/login.defs文件,将密码最大有效期修改为30天。
[root@localhost ~]# vim /etc/login.defs //修改配置文件 ---------------------------- PASS_MAX_DAYS 30 //将密码最大有效期修改为30天 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7 [root@localhost ~]# useradd lucy //创建新用户lucy [root@localhost ~]# grep "lucy" /etc/shadow lucy:!!:19056:0:30:7::: //密码有效期默认30天 复制代码
1.2.1 对于现有用户——chage命令
命令格式:
chage [选项] 用户名 复制代码
选项:
-m:密码可更改的最小天数。为0时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-W:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:设置”最后一次修改密码的日期“。设置为 0 有特殊意思,表示用户应该在下次登录系统时更改密码。
-i:停滞时期。允许密码过期后多少天内仍能使用,如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。
示例:
1)chage -M ,设置用户密码的有效期。
[root@localhost ~]# chage -M 50 zhangsan //将zhangsan用户的密码有效期设置为50天 [root@localhost ~]# grep zhangsan /etc/shadow zhangsan:!!:19030:0:50:7::: [root@localhost ~]# chage -l zhangsan //查看当前设置 最近一次密码修改时间 :2月 07, 2022 密码过期时间 :3月 29, 2022 密码失效时间 :从不 帐户过期时间 :从不 两次改变密码之间相距的最小天数 :0 两次改变密码之间相距的最大天数 :50 在密码过期之前警告的天数 :7 复制代码
2)chage -d 0,强制要求用户下次登录时必须修改密码。
[root@localhost ~]# grep mike /etc/shadow mike:!!:19056:0:30:7::: [root@localhost ~]# chage -d 0 mike //强制要求用户下次登录时修改密码 [root@localhost ~]# grep mike /etc/shadow mike:!!:0:0:30:7::: [root@localhost ~]# chage -l mike 最近一次密码修改时间 :密码必须更改 密码过期时间 :密码必须更改 密码失效时间 :密码必须更改 帐户过期时间 :从不 两次改变密码之间相距的最小天数 :0 两次改变密码之间相距的最大天数 :30 在密码过期之前警告的天数 :7 复制代码
1.3 命令历史限制
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。例如,可以设 置最多只记录 200 条历史命令。
一般使用两种方式控制命令历史:
- 减少记录的命令条数。
- 注销时自动清空命令历史,或登录时自动清空命令历史。
家目录下有 .bash_history 文件,用于记录历史命令。清空该文件即清空了命令历史。
命令:
1. 临时修改历史命令条数。只针对当前用户,退出登录后失效。 [root@localhost ~]# export HISTSIZE=200 2. 永久修改历史命令条数。编辑配置文件,设置历史命令条数。 [root@localhost ~]# vim /etc/profile //设置历史命令条数记录为200条 HISTSIZE=200 [root@localhost ~]# source /etc/profile //刷新配置文件,使文件立即生效 3. 注销时自动清空历史命令 [root@localhost ~]# vim ~/.bash_logout echo "" > ~/.bash_history 4. 登录时自动清空历史命令 [root@localhost ~]# vim ~/.bashrc echo "" > ~/.bash_history 复制代码
示例:
1)临时修改历史命令条数。注销后失效。
2)永久修改历史命令条数。编辑/etc/profile 文件,设置命令记录为200条。
3)编辑 ~/.bash_logout 文件,在注销时清空命令历史。
4)编辑 ~/.bashrc 文件,在登录时清空命令历史。
注:
在注销时清空命令历史,或在登录时清空命令历史,设置其中一种即可。
1.4 终端自动注销
编辑/etc/profile 文件,设置闲置600秒后自动注销。
[root@localhost ~]# vi /etc/profile ................................. export TMOUT=600 复制代码