Linux系统安全及应用--第十章

目录

一、账号安全基本措施

1.系统账号清理

 2、密码安全控制

3、命令历史限制

 4、终端自动注销

二、用户切换与提权

1、切换用户------su

2、在/etc/pam.d/su文件里设置禁止用户使用su命令

3、用户提权-------sudo

 3.1别名

 3.2子目录

三、PAM安全认证


一、账号安全基本措施

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命令进行切换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值