目录
一、账号安全基本设施
1、系统账号清理
- 将非登录用户的shell设为/sbin/nologin
- 锁定长期不使用的账号
- 删除无用的账号
- 锁定账号文件passwd、shadow
1.1 将用户设置为无法登陆
[root@localhost ~]# tail /etc/passwd
#查看zhangsan的属性
[root@localhost ~]# chsh -s /sbin/nologin zhangsan
#修改zhangsan的shell属性
[root@localhost ~]# tail -1 /etc/passwd
#查看zhangsan的属性

1.2 锁定长期不使用的账号(锁定用户 )
锁定用户:
[root@localhost ~]# usermod -L li
#锁定用户li
[root@localhost ~]# passwd -S li
#查看用户li的状态
[root@localhost ~]# usermod -U li
#解锁用户li
[root@localhost ~]# passwd -S li
#查看用户li的状态

解锁用户:
[root@localhost ~]# passwd -l li
#锁定用户 li 的密码
[root@localhost ~]# passwd -u li
#解锁用户 li 的密码

1.3 删除无用的账号
[root@localhost ~]# ls /home
#查看home目录下所有账号
[root@localhost ~]# userdel lisi
#删除用户lisi 但家目录下的用户lisi 目录没有被删除,变成无主目录
[root@localhost ~]# ls /home
#查看home目录下所有账号,发现lisi目录没有被删除,变为无主目录
[root@localhost ~]# userdel -r lier
#删除用户lisi 并且用户目录也被删除

1.4 chattr 锁定配置文件
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow
#锁定配置文件,此时不能更改密码
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
#查看配置文件状态属性
[root@localhost ~]# passwd zhangyi
更改zhangyi的密码,发现无法更改密码
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow
#解锁配置文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
#查看配置文件状态属性
[root@localhost ~]# passwd zhangyi
更改zhangyi的密码,发现可以更改密码

2、密码安全控制
2.1 设置密码规则
对于新建用户,可以进入/etc/login.defs进行修改属性,设置密码规则,使得在下次创建用户时密码信息生效

举例:
新建用户并更改密码属性
[root@localhost ~]# cat /etc/shadow|tail -1
#查看配置文件shadow中最后一个用户的密码信息,可以发现最长有限期限为99999天(相当于永久)
[root@localhost ~]# vim /etc/login.defs
#进入login.defs修改密码信息


2.2 chage 对已创建用户密码管理
对于已有用户可以使用chage命令
格式:chage [选项] 用户名
| 选项 | 功能 |
|---|---|
| -m | 密码可更改的最小天数。为零时代表任何时候都可以更改密码。 |
| -M | 密码保持有效的最大天数。 |
| -w | 用户密码到期前,提前收到警告信息的天数。 |
| -E | 帐号到期的日期。过了这天,此帐号将不可用。 |
| -d | 上一次更改的日期。 |
| -i | 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 |
| -l | 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。 |
举例:
将用户li的密码保持有效最大天数为30
[root@localhost ~]# cat /etc/shadow|tail -1
#查看最后一行的用户的信息
[root@localhost ~]# chage -M 30 li
#将用户li的密码保持有效最大天数为30
[root@localhost ~]# cat /etc/shadow|tail -1
#查看最后一行的用户的信息

下次登录一定要输入密码

输入当前密码
输入当前密码

输入新的密码

3、命令历史限制
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。例如,可以设 置最多只记录 200 条历史命令。
3.1 临时修改当前用户的历史命令条数
[root@localhost ~]# export HISTSIZE=200 //临时修改历史命令条数为200条

3.2 进入配置文件永久修改历史命令条数
[root@localhost ~]# vim /etc/profile //进入配置文件
export HISTSIZE=200 //将全局历史命令条数由1000改为200
[root@localhost ~]# source /etc/profile //刷新配置文件,使文件立即生效



3.3 退出当前终端将命令清除

[root@localhost ~]# vim .bash_logout
echo " " > ~/.bash_history


3.4 开机后清除
[root@localhost ~]# vim .bashrc
echo " " > ~/.bash_history


3.5 设置超时时间
[root@localhost ~]# vim /etc/profile #进入配置文件
export TMOUT=600 #声明600s没有操作就登出
[root@localhost ~]# source /etc/profile #更新配置文件
![]()

![]()
二、用户切换与提权
1、su 切换用户
su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
格式:su [options...] [-] [user [args...]]
1.1 切换用户的方式
- su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
- su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换
1.2 密码验证
- 超级管理员切换普通用户,不需要密码
- 普通用户切换普通用户,需要密码
- 普通用户切换超级管理员,需要密码
注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。

1.3 限制使用su命令的用户
(1)su命令的安全隐患
- 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险
- 为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换
(2)限制使用su命令的用户
- 将允许使用su命令的用户加入wheel组。
- 启用pam_wheel认证模块。则只有wheel组内的用户可以使用su命令切换用户(编辑/etc/pam.d/su文件)。
(3)查看su操作记录
- 安全日志:/var/log/secure
查看/etc/pam.d/su 文件
- 以上两行是默认状态(即开启第二行,注释第六行),这种状态下是允许所有用户间使用su命令进行切换的。
- 两行都注释这种状态下运行所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第二行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
- 如果开启第二行与第六行,表示只有root用户和wheel组内的用户才可以使用su命令
- 如果注释第二行,开启第六行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。
限制使用su命令步骤:
(1)将用户加入wheel组中

(2)修改/etc/pam.d/su文件内容,两行都开启为例

(3)使用su命令,可以看出只有root用户和wheel组内的用户才可以使用su命令

2、PAM安全认证(二进制语言,两个不同的应用证明队对接)
PAM:Pluggable Authentication Modules,插件式的验证模块,Sun公司于1995 年开发的一种与认证相关的通用框架机制。PAM 只关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的API 接口,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序一种认证框架,自身不做认证。
2.1 PAM 相关文件
- 包名: pam
- 模块文件目录:/lib64/security/*.so
- 特定模块相关的设置文件:/etc/security/
- 应用程序调用PAM模块的配置文件
1. 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
2. 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
3. 注意:如/etc/pam.d存在,/etc/pam.conf将失效
- ls /usr/lib64/sccurity/ 认证模块的位置
- /etc/pam.d/* 配置文件位置

type 类型
- auth 用户身份认证
- account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
- password 用户修改密码时密码复杂度检查机制等功能
- session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等
- -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用
Control: ( 控制位)
- required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件
- requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
- sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的
- equired和requisiteoptional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略include: 调用其他的配置文件中定义的配置
- optional 可选项
control 总结:
1)required 验证失败时仍然继续,但返回 Fail
2)requisite 验证失败则立即结束整个验证过程,返回 Fail
3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
4)optional 不用于验证,只是显示信息(通常用于 session 类型)
第三列代表PAM模块,(一共有61个任务模块)
默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
2.2 PAM 工作原理
- PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
- PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
2.3 shell模块
- 功能:检查有效shell
- 帮助:man pam_shells
- 案例:不允许使用/bin/csh的用户本地登录



2.4 怎么使用pam模块
- 看pam详细信息:rpm -qi pam
- 看pam所有文件:rpm -ql pam
第一步:先确定你要使用什么服务程序
- su 切换用户程序
第二步
- 写配置文件 /etc/pam.d/* (配置文件的位置)
3、sudo 使用sudo机制提升权限
- 用途:以其他用户身份(如root)执行授权的命令
- 用法:sudo 授权命令
可以使用visudo也可以使用vim /etc/sudoers进行配置,但通常使用visudo,因为visudo可以自动检
查语法是否输入错误
解析:(在可以执行什么命令中写入/usr/bin/*,!/usr/bin/reboot表示不通过,虽然后面的包含在前面里,但后面的优先级高)
案例:



总结:
- 可以有子配置文件
- 注意权限 440 防止他人乱改
- 子配置文件在:/etc/sudoers/随便名
- sudo子目录,将用户添加至/etc/sudoers.d子目录中可以提权
三、开关机安全控制
1、调整BIOS引导设置
- 将第一引导设备设为当前系统所在硬盘
- 禁止从其他设备(光盘、U盘、网络)引导系统
- 将安全级别设为setup,并设置管理员密码(进boot中有一个Set Supervisor Password)
2、GRUB限制
- 使用grub2-mkpasswd-pbkdf2生成密钥
- 修改/etc/grub.d/00_header文件中,添加密码记录
- 生成新的grub.cfg配置文件
3、grub加密方法
不安全,可以进光盘的系统,有点掩耳盗铃
3.1 按e我们可以直接进入grub文件


3.2 设置密码并重启

3.3 此时我们按e进入后需要输入用户名和密码

4、终端登录安全控制
4.1 限制root只在安全终端登录
安全终端配置:/etc/securetty

4.2 禁止普通用户登录
- 建立/etc/nologin文件
- 删除nologin文件或者重启后即恢复正常
[root@localhost ~]# touch /etc/nologin
#禁止普通用户登录
[root@localhost ~]# rm -rf /etc/nologin
#取消上述登录限制


5、网络扫描—NMAP
- 一款强大的网络扫描、安全 检测工具
- 官方网站:Nmap: the Network Mapper - Free Security Scanner
- CentOS 7.3光盘中安装包 nmap-6.40-7.el7.x86_64.rpm
格式:nmap [扫描类型] [选项] <扫描目标>
| 选项 | 功能 |
|---|---|
| -p | 指定扫描的端口。 |
| -n | 禁用反向DNS解析(以加快扫描速度) ip转换成 域名 12222 2www.baidu.com |
| -sS | TCP的SYN扫描 (半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。 |
| -sT | TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。 |
| -sF | TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对sYN数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。 |
| -sU | UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。 |
| -sP | ICMP 扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。 |
| -P0 | 跳过ping检测, 这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。 |
网络端口扫描
| 控制位 | 作用 |
|---|---|
| SYN | 建立链接 |
| ACK | 确认 |
| FIN | 结束断开 |
| PSH | 传送 0 数据缓存 上层应用协议 |
| RST | 重置 |
| URG | 紧急 |
使用nmap前需要安装

案例:
nmap -p 端口 网段 ——指定扫描的端口

nmap -n -sP查看网段有哪些存活主机

分别查看本机开放的TCP端口、UDP端口

四、安全加固总结
- 锁定重要文件 shadow passwd /etc/fstab grub.cfg +i 锁定重要文件
- 尽量使用非登录用户来 shell /sbin/nologin
- 设置密码有效期
- 设置grub密码
- sudo提权时尽量给够用的命令
- 尽量不要使用root用户
- 尽量缩短记录历史命令的条数
- 把大家都知道的服务端口改掉
- bios引导 关闭除了硬盘启动外的(光驱、udisk 、网络)
- 设置bios密码
- 做好日志权限管理
本文详述了Linux系统的安全加固措施,包括账号安全、密码控制、命令历史限制、用户切换与提权、开关机安全及网络扫描等方面。重点讨论了如何设置账号安全规则、密码策略、限制命令历史记录、使用PAM和sudo机制以及BIOS和GRUB的保护措施。

5264

被折叠的 条评论
为什么被折叠?



