序言
这里我主要介绍Linux系统安全与应用
系统安全与应用
一 .账号安全控制
1.账号安全基本措施
①系统账号清理
将非登录用户的Shell设为/bin/nologin
锁定长期不使用的账号
删除无用的账号
锁定账号文件passwd、shadow
账号相关
注:chattr +i /etc/passwd /etc/shadow #锁定文件并查看状态
chattr -i /etc/passwd /etc/shadow #解锁文件并查看状态
lsattr /etc/passwd /etc/shadow #查看状态
②密码安全控制
设置密码有效期
要求用户下次登录时修改密码
密码相关
注:vim /etc/login.defs #适用于新建用户,改密码有效期
chage -M 30 lisi #适用于已有用户
chage -d 0 zhangsan #强制在下次登录时更改密码
③命令历史限制
减少记录的命令条数
注销时自动清空命令历史
①[~]vim /etc/profile #在history前改10再加export,执行减少记录命令条数,按q退出
source /etc/profile #刷新配置
②[~]vim .bash_history #按q退出
echo ‘’ > ~/.bash_history
③[~]vim .bashrc #按q退出
echo ‘’ > ~/.bashrc #自动清空记录
注:history -c #清除历史记录(临时清除,重启后还有)
④终端自动注销
闲置600秒后自动注销
①[~]vim /etc/profile
export TIMEOUT=600 #按q退出
source /etc/profile #刷新配置
二 .系统引导和登录控制
1.使用su命令切换用户
■用途及用法
用途:切换用户
格式:su - 目标用户 #带‘-’选项表示将使用目标用户的登录Shell环境
■密码验证
root ➔ 任意用户,不验证密码
普通用户 ➔ 其他用户,验证目标用户密码
①限制使用su命令的用户
将允许使用su命令的用户加入wheel组
启用pam_wheel认证模块
[zhangsan]gpasswd -a zhangsan wheel #将zhangsan加入到wheel组中
grep wheel /etc/passwd #查看zhangsan是否添加到wheel组中
vim /etc/pam.d/su #将里面的auth wheel注释去掉
②查看su操作记录
安全日志文件:/var/log/secure
2.Linux中的PAM认证
■su命令的安全隐患
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险
为了加强su命令的使用控制,可借助PAM认证模块,只允许极个别用户使用su命令进行切换
■PAM可插拔式认证模块
是一种高效且灵活便利的用户级别的认证方式
也是当前Linux服务器普遍使用的认证方式
PAM认证原理
:
1.PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_ *.so;
2. PAM认证首先要确定哪一项应用 服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib64/security/下)进行安全认证。
3.用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
如果想查看某个程序是否支持PAM 认证,可以用ls命令进行查看/etc/pam.d/
3.PAM安全认证流程
■控制类型也称作Control Flags,用于PAM验证类型的返回结果
1.required验证失败时仍然继续,但返回Fail
2.requisite验证失败则立即结束整个验证过程,返回Fail
3.sufficient验证成功则立即返回,不再继续,否则忽略结果并继续
4.optional不在验证,只显示信息(通常用于session类型)
PAM实例:
用户1 用户2 用户3 用户4
auth required 模块1 pass fail pass pass
auth sufficient 模块2 pass pass fail pass
auth required 模块3 pass pass pass fail
结果 pass fail pass pass
第一列
代表PAM认证模块类型
auth: 对用户身份进行识别,如提示输入密码,判断是否为root。
account: 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
password: 使用用户信息来更新数据,如修改用户密码。
session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。
第二列
代表PAM控制标记
required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
optional: 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型),
include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
第三列
代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
第四列
代表PAM模块的参数,这个需要根据所使用的模块来添加。
传递给模块的参数。参数可以有多个,之间用空格分隔开
控制标记
的补充说明:
required
:表示该行以及所涉及模块的成功是用户通过鉴别的[必要条件]。换句话说,只有当对应于应用程序的所有带requi red标记的模块全部成功后,该程序才能通过鉴别。同时,如果任何带requi red标记的模块出现了错误,PAM并不立刻将错误消息返回给应用程序,而是在所有此类型模块都调用完毕后才将错误消息返回调用他的程序。
反正说白了,就是必须将所有的此类型模块都执行一次,其中任何一个模块验证出错,验证都会继续进行,并在执行完成之后才返回错误信息。这样做的目的就是不让用户知道自己被哪个模块拒绝,通过一种隐蔽的方式来保护系统服务。就像设置防火墙规则的时候将拒绝类的规则都设置为drop-样,以致于用户在访问网络不成功的时候无法准确判断到底是被拒绝还是目标网络不可达。
requisite
:与 required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别。不同之处在于其一旦失败 就不再执
行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返回错误信息。与上面的required相比,似乎要显得更光
明正大一些。
sufficient
:表示该行以及所涉及模块验证成功是用户通过鉴别的[充分条件]。也就是说只要标记为sufficient的模块
一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。即便后面的层叠模块使用了requisite或者required控制标志也是一 样。当标记为sufficient的模块失败时,sufficient模块会当做optional对待。因此拥有sufficient标志位的配置项在执行验证出错的时候并不会导致整个验证失败,但执行验证成功之时则大门敞开。所以该控制
位的使用务必慎重。
optional
:他表示即便该行所涉及的模块验证失败用户仍能通过认证。在PAM体系中,带有该标记的模块失败后将继续处理下一模块。也就是说即使本行指定的模块验证失败,也允许用户享受应用程序提供的服务。使用该标志,PAM框架会忽略这个模块产生的验证错误,继续顺序执行下一个层叠模块。
①通过PAM防止暴力破解ssh
[root@zzc ~]#vim /etc/pam.d sshd
在第一行下面添加一行:
auth required pam_tally.so deny=3 unlock_time=600 even_deny_root root_unlock_time=1200
说明:尝试登录失败超过三次,普通用户600秒解锁,root用户1200秒解锁
手动解除锁定:
查看某一用户错误登录次数:
pam tally --user work
清空某一用户错误登录次数:
pam_tally --user --reset
例如:清空work用户的错误登录次数:
pam_tally --user work --reset
4.使用sudo机制提升权限
■su命令的缺点
■sudo命令的用途及用法
用途:以其他用户身份(如root)执行的命令
用法:sudo 授权命令
■配置sudo授权
visudo或者vi /etc/sudoers
记录格式:用户 主机名列表=命令程序列表
[root@zzc ~]visudo
......
%wheel ALL=NOPASSWD:ALL
xxxx xxxx=xxxx
■查看sudo操作记录
需启用Defaults logfile 配置
默认日志文件
:/var/log/sudo
■查看授权的sudo操作
sudo -l
5.开关机安全机制
■调整BIOS引导设置
将第一引导设备设为当前系统所在硬盘
禁止从其他设备(光盘、U盘、网络)引导系统
将安全级别设为setuo,并设置管理员密码
■GRUB限制
使用grub2-mkpasswd-pbkdf2生成密钥
修改/etc/grub,d/00_header文件中,添加密码记录
生成新的grub.cfg配置文件
6.终端登录安全控制
■限制root只在安全终端登录
安全终端配置:/etc/securetty
注:pts是远程登录终端ctrl+ALT F1-F6 tty1图形界面 2和6字符界面
■禁止普通用户登录
建立/etc/nologin文件
删除nologin文件或重启后即恢复正常
三.弱口令检查
JR
一款密码分析工具,支持字典式的暴力破解
通过对shadow文件的口令分析,可以检测密码强度
■安装JR工具
安装方法 make clean 系统类型
主程序文件为john
■检测弱口令账号
获得Linux/Unix服务器的shadow文件
执行john程序,将shadow文件作为参数
■密码文件的暴力破解
准备号密码文件字典,默认为passwd.txt
执行john程序,结合--wordlist=字典文件
四.端口扫描
NMAP
一款强大的网络扫描、安全检测工具
官方网站:http://nmap。org/
CentOS 7.7光盘中安装包nmap–el7.x86_64.rpm
■NMAP的扫描
nmap [扫描类型] [选项] <扫描目标>
■常用的扫描类型
-sS、-sT、-sF、-sU、-sP、-P0
■例:分别查看本机开放的TCP端口、UDP端口
■例:检测192.168.4.0/24网段有哪些主机提供FTP服务
■例:检测192.168.4.0/24网段有哪些存活主机