目录
一、账号安全基本设施
1、系统账号清理
1.1 将用户设置为无法登陆
1.2 锁定长期不使用的账号(锁定用户 )
1.3 删除无用的账号
1.4 chattr 锁定配置文件
2、密码安全控制
2.1 设置密码规则
2.2 chage 对已创建用户密码管理
3、命令历史限制
3.1 临时修改当前用户的历史命令条数
3.2 进入配置文件永久修改历史命令条数
3.3 退出当前终端将命令清除
3.4 开机后清除
3.5 设置超时时间
二、用户切换与提权
1、su 切换用户
1.1 切换用户的方式
1.2 密码验证
1.3 限制使用su命令的用户
2、PAM安全认证(二进制语言,两个不同的应用证明队对接)
2.1 PAM 相关文件
2.2 PAM 工作原理
2.3 shell模块
2.4 怎么使用pam模块
3、sudo 使用sudo机制提升权限
三、开关机安全控制
1、调整BIOS引导设置
2、GRUB限制
3、grub加密方法
3.1 按e我们可以直接进入grub文件
3.2 设置密码并重启
3.3 此时我们按e进入后需要输入用户名和密码
4、终端登录安全控制
4.1 限制root只在安全终端登录
4.2 禁止普通用户登录
5、网络扫描—NMAP
四、安全加固总结
[root@localhost ~]# tail /etc/passwd
#查看zhangsan的属性
[root@localhost ~]# chsh -s /sbin/nologin zhangsan
#修改zhangsan的shell属性
[root@localhost ~]# tail -1 /etc/passwd
#查看zhangsan的属性
锁定用户:
[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 的密码
[root@localhost ~]# ls /home
#查看home目录下所有账号
[root@localhost ~]# userdel lisi
#删除用户lisi 但家目录下的用户lisi 目录没有被删除,变成无主目录
[root@localhost ~]# ls /home
#查看home目录下所有账号,发现lisi目录没有被删除,变为无主目录
[root@localhost ~]# userdel -r lier
#删除用户lisi 并且用户目录也被删除
[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的密码,发现可以更改密码
对于新建用户,可以进入/etc/login.defs进行修改属性,设置密码规则,使得在下次创建用户时密码信息生效
举例:
新建用户并更改密码属性
[root@localhost ~]# cat /etc/shadow|tail -1
#查看配置文件shadow中最后一个用户的密码信息,可以发现最长有限期限为99999天(相当于永久)
[root@localhost ~]# vim /etc/login.defs
#进入login.defs修改密码信息
对于已有用户可以使用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
#查看最后一行的用户的信息
下次登录一定要输入密码
输入当前密码
输入新的密码
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。例如,可以设 置最多只记录 200 条历史命令。
[root@localhost ~]# export HISTSIZE=200 //临时修改历史命令条数为200条
[root@localhost ~]# vim /etc/profile //进入配置文件
export HISTSIZE=200 //将全局历史命令条数由1000改为200
[root@localhost ~]# source /etc/profile //刷新配置文件,使文件立即生效
[root@localhost ~]# vim .bash_logout
echo " " > ~/.bash_history
[root@localhost ~]# vim .bashrc
echo " " > ~/.bash_history
[root@localhost ~]# vim /etc/profile #进入配置文件
export TMOUT=600 #声明600s没有操作就登出
[root@localhost ~]# source /etc/profile #更新配置文件
su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
格式:su [options...] [-] [user [args...]]
注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
(1)su命令的安全隐患
(2)限制使用su命令的用户
(3)查看su操作记录
限制使用su命令步骤:
(1)将用户加入wheel组中
(2)修改/etc/pam.d/su文件内容,两行都开启为例
(3)使用su命令,可以看出只有root用户和wheel组内的用户才可以使用su命令
PAM:Pluggable Authentication Modules,插件式的验证模块,Sun公司于1995 年开发的一种与认证相关的通用框架机制。PAM 只关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的API 接口,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序一种认证框架,自身不做认证。
- 包名: pam
- 模块文件目录:/lib64/security/*.so
- 特定模块相关的设置文件:/etc/security/
- 应用程序调用PAM模块的配置文件
1. 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
2. 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
3. 注意:如/etc/pam.d存在,/etc/pam.conf将失效
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/目录下,如果不在此默认路径下,要填写绝对路径。
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
第一步:先确定你要使用什么服务程序
第二步
可以使用visudo也可以使用vim /etc/sudoers进行配置,但通常使用visudo,因为visudo可以自动检
查语法是否输入错误
解析:(在可以执行什么命令中写入/usr/bin/*,!/usr/bin/reboot表示不通过,虽然后面的包含在前面里,但后面的优先级高)
案例:
总结:
不安全,可以进光盘的系统,有点掩耳盗铃
安全终端配置:/etc/securetty
[root@localhost ~]# touch /etc/nologin
#禁止普通用户登录
[root@localhost ~]# rm -rf /etc/nologin
#取消上述登录限制
格式: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端口