目录
一、账号安全的基本措施
1.1、用户登录限制
1.1.1、禁止用户登录
/sbin/nologin是一个常用的shell,当某个用户的shell设置为/sbin/nologin时,用户将不能登录系统。即使用户拥有正确的用户名和密码,也无法通过终端或其他方式进行登录。
- chsh命令与usermod命令可用于更改登录shell。
[root@localhost ~]# tail -1 /etc/passwd //查看用户属性
123123:x:1000:1000:123123:/home/123123:/bin/bash
[root@localhost ~]# chsh -s /sbin/nologin 123123 //-s参数指定用户登录shell
Changing shell for 123123.
chsh: 警告:“/sbin/nologin”未在 /etc/shells 中列出。
Shell changed.
[root@localhost ~]# tail -1 /etc/passwd
123123:x:1000:1000:123123:/home/123123:/sbin/nologin //已限制用户登录
[root@localhost ~]# su 123123 //无法登录
This account is currently not available.
[root@localhost ~]# usermod -s /bin/bash 123123 //也可通过usermod命令修改shell
[root@localhost ~]# tail -1 /etc/passwd
123123:x:1000:1000:123123:/home/123123:/bin/bash
1.1.2 、锁定用户
passwd -l命令与usermod -L命令可以锁定用户,使密码失效。
passwd -u命令与usermod -U命令解除密码锁定。
[root@localhost ~]# passwd -l 123123
锁定用户 123123 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -u 123123
解锁用户 123123 的密码。
passwd: 操作成功
[root@localhost ~]# usermod -L zz
[root@localhost ~]# su 123123
[123123@localhost root]$ su zz
密码:
su: 鉴定故障
1.1.3、删除用户
userdel -r命令删除用户的同时,删除与用户相关的所有文件
[root@localhost ~]# userdel -r 123123
1.1.4锁定配置文件
chattr命令的功能是更改文件隐藏属性
[root@localhost ~]# chattr +i /etc/passwd //权限限制
[root@localhost ~]# lsattr /etc/passwd
----i----------- /etc/passwd
[root@localhost ~]# rm /etc/passwd
rm:是否删除普通文件 "/etc/passwd"?y
rm: 无法删除"/etc/passwd": 不允许的操作
[root@localhost ~]# chattr -i /etc/passwd //解除限制
1.2、限时密码设置
通过修改/etc/login.defs配置文件,可以对新建用户设置密码规则
[root@localhost ~]# vim /etc/login.defs
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 99999 //密码可以使用的最大天数
PASS_MIN_DAYS 0 //密码可以使用的最小天数
PASS_MIN_LEN 5 //密码最小长度
PASS_WARN_AGE 7 //密码过期前警告天数
对已存在用户可通过chage命令,设置账号密码的有效期
-m | 设置密码可更改的最小天数 | -E | 设置账号到期的日期 |
-M | 设置密码保持有效的最大天数 | -d | 显示上一次更改的日期 |
-i | 设置密码到期后还可以使用天数 | -l | 显示当前设置 |
[root@localhost ~]# chage -M 100 123123
[root@localhost ~]# chage -l 123123
最近一次密码修改时间 :从不
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :100
在密码过期之前警告的天数 :7
1.3、历史命令
历史命令记录了用户在命令行中输入的所有命令,为用户提供了极大的便利,但也给系统安全带来了潜在的风险。当用户在命令行输入了明文密码,就会存在安全风险。可通过修改/etc/profile配置文件,设置HISTSIZE
和 HISTFILESIZE
环境变量来控制命令历史记录的条数。
1.3.1、history
功能是显示与管理历史命令记录。
-a | 保存命令记录 | -n | 读取命令记录 |
-c | 清空命令记录 | -r | 读取命令记录到缓冲区 |
-d | 删除指定序号的命令记录 | -w | 将缓冲区信息写入历史文件 |
参考示例:
[root@localhost ~]# history
1 vim /etc/sysconfig/network-scripts/ifcfg-ens33
2 reboot
3 systemctl restart network
4 vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# history -c
[root@localhost ~]# history
1 history
1.3.2、历史命令配置文件修改
通过修改/etc/profile配置文件,限制历史命令最大显示数量。
[root@localhost ~]# vim /etc/profile
HISTSIZE=10 //修改最大显示命令数
[root@localhost ~]# history //仅显示十条历史命令
8 df
9 history
10 reboot
11 echo ' ' > /root/.bash_history
12 vim ~/.bash_history
13 history
14 vim .bash_logout
15 vim ~/.bash_history
16 vim /etc/profile
17 history
1.4、切换用户
1.4.1、su
switch user的缩写,功能是切换当前用户身份到其他用户身份。
语法格式:su 参数 用户名
- | 完全切换身份 |
[root@localhost ~]# su 123123
[123123@localhost root]$ exit
exit
[root@localhost ~]# su - 123123
上一次登录:四 2月 20 20:28:14 CST 2025pts/0 上
1.4.2、sudo
super user do 的缩写,功能是授权普通用户执行管理员命令。在/etc/sudoers中设置了可执行sudo指令的用户。
- 配置文件:/etc/sudo.conf
- 执行授权命令:/usr/bin/sudo
- 时间戳文件:/var/db/sudo
- 日志文件:/var/log/secure
语法格式:sudo 参数 命令
-u | 以指定的用户作为新的身份 | -E | 继承当前环境变量 |
-H | 将用户的家目录环境变量设置为/root |
-k | 下次强制验证当前用户的密码 |
-l | 列出目前用户可执行与无法执行的指令 | -p | 改变询问密码的提示符 |
-s | 执行指定的shell | -V | 显示版本信息 |
参考示例:
[root@localhost 123123]# sudo su - //使用超级用户重新登录一次shell
上一次登录:四 2月 20 20:54:27 CST 2025pts/0 上
[root@localhost ~]#
[123123@localhost ~]$ sudo -s //以当前用户的shell开启一个root用户的shell
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
授权规则配置:
模块 | 含义 |
user | 授权使用sudo的用户或用户组 |
host | 可以执行命令的主机名(ALL代表所有主机) |
(run_as_user) | 可以使用sudo以哪个用户的身份执行命令(ALL代表所有主机) |
command | 可以运行的命令(可以是特定的命令,或ALL(所有命令) |
[root@localhost ~]# vim /etc/sudoers
114 # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
115 # user host=(run_as_user) commad
116 user1 ALL=(ALL) /usr/bin/ls //表示用户可以执行/usr/bin/ls命令,但不能执行其他命令
1.5、PAM安全认证
Pluggable Authentication Modules的缩写,PAM是Linux系统中用于管理用户认证和安全策略的框架。通过模块化的方式,使系统管理员灵活配置认证、授权、密码策略等功能。
1.5.1、PAM基本概念
- 模块化设计:PAM将认证过程分解为多个模块,每个模块负责特定的功能
- 配置文件:配置文件在/etc/pam.d/目录中,每个服务都有独立的配置文件
- 模块文件目录:/lib64/security/*.so
1.5.2、PAM配置文件语法
PAM配置文件的内容通常由以下若干行组成:
type control module arguments
//模块类型 控制标识 模块 传递给模块的参数
- type:模块类别,指认证类型。
- auth:用户身份验证
- account:账户管理
- password:密码管理
- session:会话管理
- control_flag:控制标识,定义模块的行为。
- required:表示该模块必须成功,否则认证失败。
- requisite:表示该模块不许成功,如果失败,则认证立即终止。
- sufficient:表示该模块成功时认证通过,但失败时不会终止认证。
- optional:表示该模块是可选的,不影响最终认证结果。
- module:PAM模块的名称。
- arguments:传递给模块的参数,可以用于配置模块的行为。
1.5.3、常见PAM模块
- pam_unix.so:基于系统的密码认证,通常与/etc/shadow和/etc/passwd配合使用,验证用户名和密码。
- pam_nologin.so:限制用户登录,当该用户登录时,会显示/etc/nologin文件内容,并拒绝登录。
- pam_limits.so:限制用户可使用的资源。限制可打开的文件数量、可运行的进程数量。
- pam_access.so:基于访问控制列表(ACL)控制用户是否能够登陆系统。
1.5.4、PAM配置示例
[root@localhost pam.d]# grep pam_nologin *
gdm-autologin:account required pam_nologin.so
gdm-fingerprint:account required pam_nologin.so
gdm-password:account required pam_nologin.so
gdm-pin:account required pam_nologin.so