Linux系统安全—-账号安全

前言
作为一种开放源代码的操作系统,Linux服务器以其安全、高效和稳定的显著优势而得以广泛应用。本文主要从账号安全控制来加强系统安全。

提示:以下是本篇文章正文内容,下面案例可供参考

账号安全控制
用户账号,是计算机使用者的身份凭证或标识,每一个要访问系统资源的人,必须凭借其用户账号才能进入计算机

1.基本安全措施
1.1 系统账号清理
在linux系统中,除了手动创建的用户,还包括系统或程序安装过程生成的其他大量用户,除了root之外,其他用户一般是不允许登录系统的,这些用户的的登录shell通常是/sbin/nologin

[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

1
2
3
4
5
对于长期不用的用户账户,若不能确定是否删除可以暂时将其锁定

[root@localhost ~]# usermod -L zhangsan //锁定账号
[root@localhost ~]# passwd -S zhangsan //查看帐号状态
zhangsan LK 2021-05-14 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U zhangsan //解锁账号
[root@localhost ~]# passwd -S zhangsan
zhangsan PS 2021-05-14 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@localhost ~]#
1
2
3
4
5
6
7
如果服务器中的用户账号已固定,不再进行更改,还可以采取锁定账号配置的方法

[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
[root@localhost ~]#
1
2
3
4
5
6
7
8
9
在帐号文件锁定的情况下,无法更改用户的状态(添加、删除、修改密码)

[root@localhost ~]# chattr +i /etc/passwd /etc/shadow
[root@localhost ~]# useradd lisi
useradd:无法打开 /etc/passwd
[root@localhost ~]#

1
2
3
4
5
1.2 密码安全控制
为了降低密码被破解的风险,用户应该定期修改密码,管理员可以在服务器端限制用户密码的最大有效天数
对于新建用户,可以修改/etc/login.defs配置文件

[root@localhost ~]# cat /etc/login.defs | grep PASS_MAX

PASS_MAX_DAYS Maximum number of days a password may be used.

PASS_MAX_DAYS 30 //修改密码最大有效期为30天

1
2
3
4
对于老用户

[root@localhost ~]# chage -M 30 zhangsan
[root@localhost ~]# chage –help
用法:chage [选项] 登录

选项:
-d, –lastday 最近日期 将最近一次密码设置时间设为“最近日期”
-E, –expiredate 过期日期 将帐户过期时间设为“过期日期”
-h, –help 显示此帮助信息并推出
-I, –inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
-l, –list 显示帐户年龄信息
-m, –mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
-M, –maxdays MAX_DAYS set maximum number of days before password
change to MAX_DAYS
-R, –root CHROOT_DIR chroot 到的目录
-W, –warndays 警告天数 将过期警告天数设为“警告天数”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1.3 命令历史,自动注销
shell环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的风险,只要获得用户的命令历史文件,该用户的操作将一览无余。
Bash终端环境中,历史命令的记录条数由变量HISTSIZE控制,默认为1000条,通过修改/etc/profile文件中的HISTSIZE值,可以影响系统中的所有用户

[root@localhost ~]# cat /etc/profile | grep HISTSIZE
HISTSIZE=100 //设置为最大记录100条
[root@localhost ~]# export HISTSIZE=200 //适用于当前用户

1
2
3
4
除此之外,还可以修改用户宿主目录下的.bash_logout文件

[root@localhost ~]# vi .bash_logout

~/.bash_logout

history -c //清空历史命令
rm -rf ~/.bash_history //缓存历史命令缓存文件
clear //清屏

1
2
3
4
5
6
7
还可以设置一个闲置超时时间

[root@localhost ~]# cat /etc/profile | grep export

export TMOUT=600 //设置为600s无操作自动注销
[root@localhost ~]# export TMOUT=600 //适用于当前用户
[root@localhost ~]# unset TMOUT //取消
1
2
3
4
5
2.用户切换与提权
2.1 切换用户
默认情况下,所有用户都可以使用su命令,从而有机会反复尝试其他用户的登录密码

[root@localhost ~]# su – zhangsan //root用户切换无需密码
上一次登录:五 5月 14 11:32:45 CST 2021从 192.168.177.1pts/2 上
[zhangsan@localhost ~]$ su – root //非root用户切换需密码
密码:
上一次登录:日 5月 16 16:59:11 CST 2021从 192.168.177.1pts/1 上
[root@localhost ~]#
1
2
3
4
5
6
为了加强su命令的控制,可以借用pam_wheel认证模块,只允许极个别用户使用su命令切换用户

[root@localhost ~]# useradd lisi
[root@localhost ~]# gpasswd -a lisi wheel 将lisi添加到wheel组
正在将用户“lisi”加入到“wheel”组中
[root@localhost ~]# vi /etc/pam.d/su

%PAM-1.0

auth sufficient pam_rootok.so

Uncomment the following line to implicitly trust users in the “wheel” group.

auth sufficient pam_wheel.so trust use_uid

Uncomment the following line to require a user to be in the “wheel” group.

auth required pam_wheel.so use_uid //去掉开头的#号
auth substack system-auth
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session include postlogin
session optional pam_xauth.so
~
~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
非指定组将不允许使用su命令

[root@localhost ~]# su – zhangsan
上一次登录:日 5月 16 17:15:20 CST 2021pts/0 上
[zhangsan@localhost ~]$ su – root
密码:
su: 拒绝权限
[zhangsan@localhost ~]$
1
2
3
4
5
6
指定组内用户可以使用su命令

[root@localhost ~]# su – lisi
[lisi@localhost ~]$ su – root
密码:
上一次登录:日 5月 16 17:15:26 CST 2021pts/0 上
最后一次失败的登录:日 5月 16 17:21:18 CST 2021pts/0 上
最有一次成功登录后有 1 次失败的登录尝试。
[root@localhost ~]#

1
2
3
4
5
6
7
8
使用su命令切换用户的操作将会记录到/var/log/secure文件中

2.2 用户提权
对于普通用户来说,有时需要部分管理权限,但是切换用户需要知道root密码,这样安全风险就增加了,使用sudo命令,可以避免这一点
1)在配置文件/etc/sudoers中添加授权
该文件为只读文件,需要强制保存,授权配置主要为用户、主机、命令三个方面,即授权哪些人在哪些主机上执行哪些命令

2)通过sudo执行特权命令

第一次执行sudo命令,必须以用户自己的密码进行验证

[root@localhost ~]# su – zhangsan
上一次登录:日 5月 16 17:28:35 CST 2021pts/0 上
[zhangsan@localhost ~]$ sudo ifconfig
[sudo] zhangsan 的密码:
对不起,用户 zhangsan 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/ifconfig。
[zhangsan@localhost ~]$ exit
登出
[root@localhost ~]# su – lisi
上一次登录:日 5月 16 17:25:36 CST 2021pts/0 上
[lisi@localhost ~]$ sudo ifconfig
[sudo] lisi 的密码:
ens33: flags=4163 mtu 1500
inet 192.168.177.3 netmask 255.255.255.0 broadcast 192.168.177.255
inet6 fe80::20c:29ff:fed2:bab2 prefixlen 64 scopeid 0x20
ether 00:0c:29:d2:ba:b2 txqueuelen 1000 (Ethernet)
RX packets 4691 bytes 423052 (413.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3066 bytes 469479 (458.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
用户查看自己获得哪些sudo授权,执行执行sudo -l 命令

[lisi@localhost ~]$ sudo -l
匹配 %2$s 上 %1$s 的默认条目:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
env_reset, env_keep=”COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS”,
env_keep+=”MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE”,
env_keep+=”LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES”,
env_keep+=”LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE”,
env_keep+=”LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY”,
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 lisi 可以在 localhost 上运行以下命令:
(ALL) ALL
[lisi@localhost ~]$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
对于已经启用sudo日志,可以从/var/log/sudo文件中查看用户的sudo操作

3.PAM安全认证
3.1 PAM及其作用
1)PAM是一种高效而且灵活便利的用户级别认证方式,他也是当前Linux服务器普遍使用的认证方式
2)PAM提供了对所有服务进行认证的中央机制,适用于login,远程登录,su等应用程序
3)系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略

3.2 PAM认证原理
PAM认证顺序:Service(服务)> PAM(配置文件)> pam_*.so
PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d),最后调用认证文件(位于/lib/security下)进行安全认证
3)用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM认证模块。不同的应用程序所对应的PAM模块也是不同的
3.3 PAM认证的构成
查看su的PAM配置文件

[root@localhost ~]# cat /etc/pam.d/su

%PAM-1.0

auth sufficient pam_rootok.so

Uncomment the following line to implicitly trust users in the “wheel” group.

auth sufficient pam_wheel.so trust use_uid

Uncomment the following line to require a user to be in the “wheel” group.

auth required pam_wheel.so use_uid
auth substack system-auth
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session include postlogin
session optional pam_xauth.so
[root@localhost ~]#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1)每一行都是一个独立的认证过程
2)每一行可以区分为三个字段
①认证类型
②控制类型
③PAM模块及其参数

3.4 PAM认证类型
1)认证管理
接受用户名和密码,进而对该用户的密码进行认证
2)账户管理
检查账户是否被允许登录系统,账号是否已经过期,账号的登录是否有时间段的限制
3)密码管理
主要用来修改用户的密码
4)会话管理
主要是提供对会话的管理和记账

3.5 PAM控制类型
1)required验证失败时仍然继续,但返回Fail
2)requisite验证失败则立即结束整个验证过程,返回Fail
3)sufficien验证成功则立即返回,不再显示,否则忽略结果并继续
4)optional不用于验证,只是显示信息(通常用于session类型)
————————————————

原文链接:https://blog.csdn.net/weixin_51720711/article/details/116798258

原创文章,作者:Zhu, Yuanyuan,如若转载,请注明出处:https://www.yidc.net/archives/16992