Linux系统安全----账号安全

Posted 还行少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

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

[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 ~]# 

如果服务器中的用户账号已固定,不再进行更改,还可以采取锁定账号配置的方法

[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 ~]# 

在帐号文件锁定的情况下,无法更改用户的状态(添加、删除、修改密码)

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

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天

对于老用户

[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.3 命令历史,自动注销

shell环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的风险,只要获得用户的命令历史文件,该用户的操作将一览无余。
Bash终端环境中,历史命令的记录条数由变量HISTSIZE控制,默认为1000条,通过修改/etc/profile文件中的HISTSIZE值,可以影响系统中的所有用户

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

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

[root@localhost ~]# vi .bash_logout 

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

还可以设置一个闲置超时时间

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

export TMOUT=600    //设置为600s无操作自动注销
[root@localhost ~]# export TMOUT=600   //适用于当前用户
[root@localhost ~]# unset TMOUT    //取消

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 ~]# 

为了加强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
~                                                                                  
~                                                    

非指定组将不允许使用su命令

[root@localhost ~]# su - zhangsan
上一次登录:日 5月 16 17:15:20 CST 2021pts/0 上
[zhangsan@localhost ~]$ su - root
密码:
su: 拒绝权限
[zhangsan@localhost ~]$ 

指定组内用户可以使用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 ~]# 

使用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<UP,BROADCAST,RUNNING,MULTICAST>  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<link>
        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


用户查看自己获得哪些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 ~]$ 

对于已经启用sudo日志,可以从/var/log/sudo文件中查看用户的sudo操作

3.PAM安全认证

3.1 PAM及其作用

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

3.2 PAM认证原理

  1. PAM认证顺序:Service(服务)> PAM(配置文件)> pam_*.so
  2. 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)每一行可以区分为三个字段
①认证类型
②控制类型
③PAM模块及其参数

3.4 PAM认证类型

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

3.5 PAM控制类型

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

以上是关于Linux系统安全----账号安全的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统保证安全的必要措施

保证 Linux 服务器安全基本措施

Linux系统账号安全和登录控制(安全很重要)

Linux系统账号安全和登录控制(安全很重要)

Linux——系统安全及应用(账号安全su命令PAM认证sudo命令)

linux-系统安全账号安全基本措施chattrchagehistory