文章目录
计算机系统
5G云计算
第十章 LINUX系统安全及应用
一、账号安全控制
1.系统账号清理
1)将非登陆用户的Shell设为/sbin/nologin
usermod -s /sbin/nologin 用户名
2)锁定长期不使用的账号
usermod -L 用户名
passwd -l 用户名
passwd -S 用户名
3)删除无用的账号
userdel [-r] 用户名
4)锁定账号文件passwd、shadow
chattr +i /etc/passwd /etc/shadow ###锁定文件
lsattr /etc/passwd /etc/shadow ###查看文件锁定状态
chattr -i /etc/passwd /etc/shadow ###解锁文件
5)利用校验码检测文件是否被修改过
md5sum 文件绝对路径/相对路径
###设置个周期性任务每隔一段时间记录一次文件校验码,方便查看文件是否被修改过
crontab -e 用户名
{0 0 * * * /bin/md5sum /etc/passwd >> /var/log/passwd}
2.密码安全控制
1)设置密码有效期
vim /etc/login.defs
###修改密码配置文件,仅适用于新建用户
chage -M 数字1~99999 用户名
###修改用户密码有效期,仅适用于已有用户,99999为永不过期
2)要求用户下次登陆时修改密码
chage -d 0 用户名
###修改用户密码信息里第三个字段为0,第三个字段为最后一次修改密码的时间距离1970年1月1日有多少天,0为特殊含义:用户下次登录时修改密码
3.命令历史限制
1)减少记录的命令条数
vim /etc/profile
{exprot HISTSIZE=历史命令行数,或直接更改配置文件里的HISTSIZE数值}
source /etc/profile
history -c 清空此次登录后产生的所有历史命令记录(临时)
2)登陆时自定清空命令历史
vim ~/.bashrc
{> ~/.bash_history} ###在尾行添加
4.终端自动注销
vim /etc/profile
{export TMOUT=<多少秒之后自动注销>} ###在尾行添加
source /etc/profile
二、系统引导和登陆控制
1.su用途及用法
用途:Substitute User,切换用户
su 目标用户 ###仅切换用户
su - 目标用户 ###切换用户的同时切换shell环境
2.密码验证
①root→任意用户,不验证密码
②普通用户→其他用户,验证目标用户的密码
3.限制使用su命令的用户
su命令的安全隐患:
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登陆密码,带来安全风险
为了加强su命令的使用控制,可借助PAM认证模块,只允许极个别用户使用su命令进行切换
PAM(Pluggable Authentication Modules)可插拔式认证模块:
是一种高效而且灵活便利的用户级别的认证方式
也是当前Linux服务器普遍使用的认证方式
PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上而下的顺序一次由PAM模块调用
1)将允许使用su命令的用户加入wheel组,并启用pam_wheel认证模块
vim /etc/pam.d/su
{#%PAM-1.0
auth sufficient pam_rootok.so
auth required pam_wheel.so use_uid
确保这两行不被注释,正常生效}
第一列PAM认证模块类型 | 说明 |
---|---|
auth | 对用户身份进行识别,如提示输入密码,判断是否为root |
account | 对账号各项属性进行检查,如是否允许登求系统,帐号是否已经过期,是否达到最大用户数等 |
password | 使用用户信息来更新数据,如修改用户密码 |
session | 定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统 |
第二列PAM控制标记 | 说明 |
---|---|
reqired | 表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败 |
requisite | 与requred类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败 |
sufficient | 如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值 |
optional | 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于 session 类型) |
include | 表示在验证过程中调用其他的PAM置文件。比如很多应用过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项 |
substack | 运行其他配置文件中的流程,并将整个运行结果作为该行的结果进行输出。该模式和 include 的不同点在于认证结果的作用域:如果某个流程栈 include 了一个带 requisite 的栈,这个 requisite 失败将直接导致认证失败,同时退出栈;而某个流程栈 substack 了同样的栈时,requisite 的失败只会导致这个子栈返回失败信号,母栈并不会在此退出 |
说明 | |
---|---|
第三列PAM模块 | 默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数 |
第四列PAM模块的参数 | 这个需要根据所使用的模块来添加 传递给模块的参数。参数可以有多个,之间用空格分隔开 |
PAM控制标记 | 补充说明 |
---|---|
reqired | 表示该行以及所涉及模块的成功是用户通过鉴别的【必要条件】。换句话说,只有当对应于应用程序的所有带required标记的模块全部成功后,该程序才能通过鉴别。同时,如果任何带required标记的模块出现了错误,PAM并不立刻将错误消息返回给应用程序,而是在所有此类型模块都调用完华后才将错误消息返回调用他的程序 反正说白了,就是必须将所有的此类型模块都执行一次,其中任何一个模块验证出错,验证都会继续进行,并在执行完成之后才返回错误信息。这样做的目的就是不让用户知道自己被哪个模块拒绝,通过一种隐蔽的方式来保护系统服务。就像设置防火墙规则的时候将拒绝类的规则都设置为drop一样,以致于用户在访问网络不成功的时候无法准确判断到底是被拒绝还是目标网络不可达 |
requisite | 与required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别。不同之处在于其一旦失败就不再执行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返回错误信息。与上面的required相比,似乎要显得更光明正大一些 |
sufficient | 表示该行以及所涉及模块验证成功是用户通过鉴别的【充分条件】。也就是说只要标记为sufficient的模块一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。即便后面的层叠模块使用了requisite或者required控制标志也是一样。当标记为sufficient的模块失败时,sufficient模块会当做optiona对待。因此拥有sufficient标志位的配置项在执行验证出错的时候并不会导致整个验证失败,但执行验证成功之时则大门敞开。所以该控制位的使用务必慎重 |
optional | 他表示即便该行所涉及的模块验证失败用户仍能通过认证,在PAM体系中,带有该标记的模块失败后将继续处理下一模块。也就是说即使本行指定的模块验证失败,也允许用户享受应用程序提供的服务。使用该标志,PAM框架会忽略这个模块产生的验证错误,继续顺序执行下一个层叠模块 |
用户1 | 用户2 | 用户3 | 用户4 | |||
---|---|---|---|---|---|---|
auth | reqired | 模块1 | pass | fail | pass | pass |
auth | sufficient | 模块2 | pass | pass | fail | pass |
auth | reqired | 模块3 | pass | pass | pass | fail |
结果 | pass | fail | pass | pass |
2)查看pam认证模块
ls /etc/pam.d
3)查看某个程序是否支持PAM认证
ls /etc/pam.d | grep 命令名/程序名
4.使用sudo机制提升权限
1)sudo命令的用途及用法
用途:以其他用户身份(如root)执行授权的命令
sudo <授权命令>
2)配置sudo授权
visudo
vim /etc/sudoers
{###配置用户别名
User_Alias 大写别名=用户1,用户2...
###配置主机别名
Host_Alias 大写别名=主机名1,主机名2...
###配置程序别名
Cmnd_Alias 大写别名=程序1,程序2...
###设置用户授权
用户名/用户别名 主机名/主机别名/all=程序列表/程序别名/all
###设置组授权
%组名 主机名/主机别名/all=[(用户)NOPASSWD:]程序列表/程序别名/all
###启动sudo操作日志
Defaults logfile = "/var/log/sudo"(写在尾行)}
###在设置程序列表中,可以使用通配符“*”取所有,“!”取反
3)查询授权的sudo
sudo -l
5.开关机安全控制
1)调整BIOS引导设置
①将第一引导设备设为当前系统所在硬盘
②禁止从其他设备(光盘、U盘、网络)引导系统
③将安全级别设为setup,并设置管理员密码
2)GRUB限制
①使用grub2-mkpasswd-pbkdf2生成密钥
②修改/etc/grub.d/00_header文件,添加密码记录
③生成新的grub.cfg配置文件
6.终端登录安全控制
1)限制root只在安全终端登录
安全终端配置文件:/etc/securetty
vim /etc/securetty
2)禁止普通用户登录
①建立/etc/nologin文件
touch /etc/nologin
②删除/etc/nologin文件或重启后自动删除即恢复正常
rm -f /etc/nologin
三、弱口令检测
1.John the Ripper,简称JR
1)John the Ripper是一款开源的密码破解工具,可使用密码字典(包含各种密码组合的列表文件)来进行暴力破解
2)通过对shadow文件的口令分析,可以检测密码强度
3)官方网站:http://www.openwall.com/john/
2.安装JR工具并尝试破解
###下载好安装包之后解压
cd /opt
tar -zxvf john-1.8.0.tar.gz
###安装软件编译工具
yum -y install gcc gcc-c++ make
###切换到src子目录
cd /opt/john-1.8.0/src
###进行编译安装
make clean linux-x86-64
###准备待破解的密码文件
cp /etc/shadow /opt/john-1.8.0/run/shadow.txt
###执行暴力破解
./john /opt/john-1.8.0/run/shadow.txt
###查看已破解出对的账户列表
./john --show /opt/john-1.8.0/run/shadow.txt
###使用密码字典文件
> john.pot ###清空已破解出的账户列表,以便重新分析
./john --wordlist=./password.lst /opt/john-1.8.0/run/shadow.txt
四、端口扫描
1.NMAP
1)NMAP是一个强大的端口扫描安全评测工具,支持ping扫描、多端口检测等多种技术
2)官方网站:http://nmap.org/
3)CentOS7.3光盘中安装包nmap-6.40-7.el7.x86_64.rpm
4)安装NMAP
rpm -qa | grep nmap ###检查nmap是否安装
yum -y install nmap ###yum安装nmap
2.NMAP的扫描
nmap [扫描类型] [选项] <扫描目标...>
选项 | 说明 |
---|---|
-p | 指定扫描的端口 |
-n | 禁用反向 DNS 解析 (以加快扫描速度) |
-sS | TCP的SYN扫猫(半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接,否则认为目标端口并未开放 |
-sT | TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放 |
-sF | TCP的FTN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN教据包进行简单过滤,而忽略了其他形式的 TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性 |
-sU | UDP 扫描,探测目标主机提供哪些 UDP 服务,UDP 扫描的速度会比较慢 |
-sP | ICMP 扫描,类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描 |
-P0 | 跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法 ping 通而放弃扫描 |
3.netstat
###查看正在运行的使用TCP协议的网络状态信息
netstat -natp
###查看正在运行的使用UDP协议的网络状态信息
netstat -naup
选项 | 说明 |
---|---|
-a | 显示主机中所有活动的网络连接信息 (包括监听、非监听状态的服务端口) |
-n | 以数字的形式显示相关的主机地址、端口等信息 |
-t | 查看 TCP相关的信息 |
-u | 显示 UDP协议相关的信息 |
-p | 显示与网络连接相关联的进程号、进程名称信息 (该选项需要 root 权限) |
-r | 显示路由表信息 |
-l | 显示处于监听状态的网络连接及端口信息 |
4.ss
ss命令功能和netstat相似,但效率比netstat高,所以逐渐取代netstat
原因:netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多
ss -natp
选项 | 说明 |
---|---|
-a | 显示主机中所有活动的网络连接信息 (包括监听、非监听状态的服务端口) |
-n | 以数字的形式显示相关的主机地址、端口等信息 |
-t | 查看 TCP相关的信息 |
-u | 显示 UDP协议相关的信息 |
-p | 显示与网络连接相关联的进程号、进程名称信息 (该选项需要 root 权限) |
-l | 显示处于监听状态的网络连接及端口信息 |
-s | 列出当前socket详细信息 |