目录
2、在/etc/pam.d/su文件里设置禁止用户使用su命令
一、账号安全基本措施
1.系统账号清理
在 Linux 系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而生成的其他大量账号
除了超级用户 root 之外,其他大量账号只是用来维护系统运作、启动或保持服务器进程,一般是不允许登录的,因此也称为非登录用户
为了确保系统安全,这些系统的登录 shell 通常是 /sbin/nologin,表示禁止终端登录,应确保不被人为改动
grep "/sbin/nologin$" /etc/passwd
#查看
usermod -s /sbin/nologin 用户名
#将非登录用户的 shell 设为 /sbin/nologin
- 各种非登录用户中,还有相当一部分是很少用到的,这些账号可以视为冗余账号,直接删除即可
- 除此之外,还有一些随应用程序安装的用户账号,若程序卸载以后未能自动删除,则需要管理员手动进行清理
userdel -r 用户名
#删除用户及其宿主目录
- 对于 Linux 服务器中长期不用的用户账号,若无法确认是否应该删除,可以暂时将其锁定(passwd、usermod 命令皆可用来锁定、解锁账号)
usermod -L 用户名 #锁定用户账号
passwd -l 用户名 #锁定用户密码,锁定的用户将无法再登录系统
passwd -S 用户名 #查看账号状态(是否被锁定)
usermod -U 用户名 #解锁用户账号
- 如果服务器中的用户账号已经固定,不再更改,还可以采取锁定账号配置文件的方法
chattr +i /etc/passwd /etc/shadow #锁定文件
lsattr /etc/passwd /etc/shadow #查看为锁定的状态
chattr -i /etc/passwd /etc/shadpow #解锁文件
lsattr /etc/passwd /etc/shadow #查看为解锁的状态
注:在账号文件被锁定的情况下,其内容不允许变更,因此无法添加、删除账号,也不能更改用户的密码、登录 Shell、宿主目录等属性信息
2、密码安全控制
在不安全的网络环境中,为了降低密码被才出或被暴力破解的风险,用户应养成定期更改密码的习惯,避免长期使用同一个密码,管理员可以在服务器端限制用户密码的最大有效天数,对于密码已过期的用户,登录时被要求重新设置密码,否则将拒绝登录
执行以下操作可将密码的有效期设为 30 天(chage 命令用于设置密码时限)
vim /etc/login.defs
...
PASS_MAX_DAYS 30 #该设置方法适用于新建的用户
chage -M 日期 用户 #设置用户密码有效期
chage -E xxxx-xx-xx #设置过期日期
例:
chage -M 30 xjj #该设置方法适用于已存在的用户
对于已有用户可以使用chage命令
chage
chage [选项] 用户名
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
3、命令历史限制
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的风险
只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果层间在命令行输入铭文的密码,则无意之中服务器的安全壁垒又多了一个缺口
在 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条
通过修改 /etc/profile 文件中的 HISTSIZR 变量值,可以影响系统中的所有用户
#编辑全局变量配置文件,适用于新登录用户
vim /etc/profile
...
export HISTSIZE=200 #设置最多只记录 200 条历史命令. /etc/profile #使 /etc/profile 内的命令重载一遍
history #只能查看 200 条历史记录了
4、终端自动注销
- 在 Bash 终端环境中,还可以设置一个闲置超时时间,当超过指定的时间没有任何输入时即自动注销终端,这样可以避免当管理员不在时其他人对服务器的误操风险
- 闲置超时由变量 TMOUT 来控制,默认单位为秒
vim /etc/profile #编辑全局变量配置文件
...
export TMOUT=600 #输出闲置超时变量 #600s为10min
. /etc/profile #执行该文件内命令后生效
二、用户切换与提权
大多数 Linux 服务器并不建议用户直接以 root 用户进行登录,一方面可以大大减少因为误操作而导致的破坏,另一方面也降低了特权密码在不安全的网络总被泄露的风险,鉴于这些原因,需要为普通用户提供一种身份切换或权限提升机制,以便在必要时执行管理任务
1、切换用户------su
默认情况下,任何用户都允许使用 su 命令,从而有机会反复尝试其他用户(如 root) 的登录密码,这样带来了安全风险。为了加强 su 命令的使用控制,可以借助于 pam_wheel 认证模块,只允许极个别用户使用 su 命令进行切换。实现过程如下:将授权使用 su 命令 的用户添加到 wheel 组,修改/etc/pam.d/su 认证配置以启用 pam_wheel 认证。
su -root #若当前登录的为其他用户,需要切换为 root 用户
#需输入 root 用户的密码,验证成功后即可成功获得 root 权限
gpasswd -a xcf wheel #将授权使用 su 命令的用户添加到 wheel 组
grep wheel /etc/group #确认 wheel 组成员
#修改认证配置
vim /etc/pam.d/su
...
auth required pam_wheel.so use_uid
#取消注释
2、在/etc/pam.d/su文件里设置禁止用户使用su命令
安全日志文件:/var/log/secure
vim /etc/pam.d/su
①以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的
2 auth sufficient pam_ rootok.so
6 #auth required pam_ wheel.so use_ _uid
- 上述命令操作中,选项“-”等同于“–login”或“-l”,表示切换用户后进入目标用户的登录 Shell 环境,若缺少此选项则仅切换身份、不切换用户环境
- 对于切换为 root 用户的情况,“root”可以省略
3、用户提权-------sudo
①添加授权
sudo 机制的配置文件为 /etc/sudoers,文件的默认权限为 440
使用visudo 或 vi /etc/sudoers (此文件的默认权限为440, 保存退出时必须执行":wq!"命令来强制操作)
语法格式:
用户 主机名=命令程序列表
3.1别名
sudo别名有四种类型:
-
User_Alias(用户)
-
Runas_Alias(代表用户)
-
Host_Alias(登录主机)
-
Cmnd_Alias(命令)
别名格式:必须大写字母,数字可以使用但是不能放在开头
3.2子目录
[root@localhost sudoers.d]#vim /etc/sudoers.d/test
lisi ALL= sudoedit
#lisi 变相管理员 ,可以使用 sudoedit 命令
lisi vim sudoers
[root@localhost sudoers.d]#chmod 440 test
#设置权限,加固安全
[root@localhost ~]#su lisi
[lisi@localhost root]$ sudoedit /etc/sudoers
#李四使用sudoedit 可以修改sudo配置文件通配符
? 任意单一字符
* 匹配任意长度字符
[wxc] 匹配其中一个字符
[!wxc] 除了这三个字符的其它字符
\x 转义
[[alpha]] 字母
[root@localhost sudoers.d]#vim /etc/sudoers.d/test
liliu ALL= /bin/cat /var/log/vmware*
三、PAM安全认证
PAM(Pluggable Authenticcation Modules),是 Linux 系统可插拔认证模块(可以认为是一个配置文件或一个小模块)
是一套可定制、 可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式
1、PAM及作用
①PAM 是一种高效而且灵活便利的用户级别认证方式,它也是当前 Linux 服务器普遍使用的认证方式
②PAM使用/etc/pam.d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置文件,从而调用本地的认证模块,模块放置在/1ib64/security下,以加载动态库的形式进行认证。比如使用su命令时,系统会提示输入root用户的密码,这就是su命令通过调用PAM模块实现的
2、PAM认证原理
认证过程:用户去访问服务——访问su——PAM认证下面的su的配置文件(/etc/pam.d/)——去调用wheel.so模块
①PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_ *.so;
②PAM认证首先要确定哪一项应用 服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib64/security/下)进行安全认证。
③用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
④如果想查看某个程序是否支持PAM 认证,可以用ls命令进行查看/etc/pam.d/
ls /etc/pam.d | grep su #查看su是否支持PAM模块认证
3、PAM认证的构成
- 每一行都是一个独立的认证和过程,它们按从上往下的顺序依次由 PAM 模块调用
cat /etc/pam.d/su
ls /lib64/security #查看pam模块
第三列—代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数
第四列—代表PAM模块的参数,这个需要根据所使用的模块来添加
4、PAM控制类型
- 控制类型也可以称作 Control Flags,用于 PAM 验证类型的返回加过
required 验证失败时仍然继续,但返回 Fail
requisite 验证失败则立即结束整个验证过程,返回 Fail
sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
optional 不用于验证,只是显示信息(通常用于 session 类型)
总结
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登陆密码,带来安全风险,为了加强su命令的使用控制,可借助PAM认证模块,只允许极个别用户使用su命令进行切换。