通俗易懂的系统安全与文件系统
系统账号清理
- 将非登录用户的shell设为/sbin/nologin
usermod -s /sbin/nologin 用户名 //对用户名进行操作
- 锁定长期不使用的账号
锁定长期不使用的账号
usermod -L
passwd -l //后面都是跟用户名锁定长期不使用的账号
查看用户状态
passwd -S //后面跟用户名查看用户状态
- 删除无用账号
userdel -r 【用户名】 //连同宿主目录一并删除
- 锁定账号文件passwd、shadow
passwd为用户账号信息文件
shadow为用户账号密码文件
锁定用户账号,使其通过任何命令也不能修改账号信息
chattr +i /etc/passwd /etc/shadow
查看用户状态信息
lsattr /etc/passwd /etc/shadow
解锁账号状态
chattr -i /etc/passwd /etc/shadow
密码安全控制
- 设置密码有效期,要求用户下次登录修改密码针对新用户
vim /etc/login.defs //修改新用户密码有效期等相关属性
change -M 30 用户名 //修改当前用户test1的密码有效期
查看新用户账号属性
passwd -S lisi
cat /etc/shadow | grep lisi 两种方法均可以可看
change -d 0 【用户名】 //强制在下次登录时修改密码
- 下图为上图执行 vim /etc/login.defs 后的结果,修改密码有效期
历史命令限制
- 减少记录的命令条数
- 登录时自动清空历史命令
临时清空历史记录
history -c
限制历史记录条数
vim /etc/profile
export HISTSIZE=10 //限制历史记录条数为10条
输出空值覆盖.bash_history中的历史记录
vim ~/.bashrc
echo "" >~/.bash_history
- vim /etc/profile 修改结果
- 终端自动注销
闲置300秒后自动注销
vim /etc/profile
export TMOUT=300
使用su命令切换用户
格式
su -目标用户 //-表示会切换到用户的家目录当中
su 用户名 //直接切换到当前目录中
- root–>任意用户,不需要密码验证
- 普通用户–>其他用户,需要验证目标用户的密码
su -root //-表示使用目标用户登录shell环境
whoami //我是谁?
- 限制使用su命令的用户
将允许使用su命令的用户加入wheel组
启用pam_wheel认证模块
将用户zhang加入wheel组
gpasswd -a 【用户名】 wheel //正在将用户名加入wheel组中
启用认证pam_wheel认证
vim /etc/pam.d/su
auth required pam_wheel.so use_uid //把前面的井号去掉
- vim /etc/pam.d/su ,认证pam_wheel 运行结果如下
- 启用pam_wheel认证后,未加入到wheel组中的用户将无法使用su命令
- 查看su操作日志
查看su安全日志文件
vim /var/log/secure
linux中的PAM安全认证
- su命令的安全隐患
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(root)的登录密码,带来安全风险
为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令切换 - PAM可插拔式认证模块
是一种高效且灵活便利的用户级别的认证方式
也是当前linux服务器普遍使用的认证方式
PAM安全认证流程
- required验让失败时仍然继续,但required验让失败时仍然继续,但
返同Fail - requisite验证失败则立即结束整个验证过程,返回Fail
- sufficien验证成功立即返回,不再继续,否则忽略结果再继续
- optional不用于验证,只显示信息
PAM认证原理
- *service -->pam(配置文件)–>pam_so
- 首先要确定哪一项服务,然后加载相应的PAM的配置文件位于(/etc/pam.d 下),最后调用认证文件位于(/lib64/security下)进行安全认证
- 用户访问服务器时,服务器的某一个服务程序把用户的请求发送到pam模块进行认证
- 不同的应用程序对应的pam模块是不同的
使用sudo机制提升权限
-
sudo命令的用途及用法
用途:以其他用户身份(root)执行的授权命令
用法:sudo 授权命令 -
配置sudo授权
visudo
vi /etc/sudoers
记录格式:用户 主机名=命令程序列表
zhang ALL=/sbin/ifconfig //允许用户zhang执行ifconfig命令
zhang localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff
//允许用户执行/sbin下面的所有命令,除了重启与关机
- 执行vim /etc/sudoers 命令结果如下
创建别名
visudo
使用关键字User_ Alias、 Host_ Alias、 Cmnd_ Alias来进行设置别名(别名必须为大写)
User Alias USERS=Tom, Jerry, 当前主机名
Host_ Alias HOSTs=localhost, bogon
Cmnd Alias CMNDS=/sbin/ifconfig, !/sbin/reboot //禁止重启
USERS HOSTS=CMNDS //调用
- 查看
which reboot
which poweroff
- 启用sudo 操作日志
visudo //进入编辑
Defaults logfile = /var/log/sudo //将该命令添加至最后一行
开关机安全控制
-
调整BIOS引导设置
将第一引导设备设为当前系统所在硬盘
禁止从其他设备(光盘、U盘、网络)引导系统
将安全级别设为setup,并设置管理员密码 -
GRUB限制
使用grub2-mkpasswd-pbkdf2生成密钥
修改/etc/grub.d/00_header文件,添加密码记录
生成新的grub.cfg配置文件 -
实验:
1.设置GRUB菜单密码,并生成加密字符串
gurb2-mkpasswd-pbkdf2
2.修改头文件
vim 00_header
3.设置超级用户为root,并添加加密字符串
set superusers="root"
password_pbkdf2 root grub.---- //加密字符串
4.生成新的grub.cfg文件
grub2-mkconfig -o /boot/grub2/grub.cfg
5.重新启动按e键需要输入账号密码才能设置grub参数
- vim 00_header 修改头文件如下图所示
终端登录安全控制
- 限制root只在安全终端登录
安全终端配置
/etc/securetty
回车后在tty1-10随意选一个,在前面加井号,wq保存退出,在虚拟
机界面按ctrl + alt +F? 进入设置界面
系统弱口令检测
■Joth the Ripper,简称为JR
- 是一款密码分析工具,支持字典式的暴力破解
- 通过对shadow文件的口令分析,可以检测密码强度
- 官方网站: http://www.openwall.com/john/
安装工具、口令账号及暴力破解
- 安装JR工具
安装方法:
make clean 系统类型
- 检测弱口令账号
获得Linux/Unix服务器的shadow文件
执行john程序,将shadow文件作为参数 - 密码文件的暴力破解
准备好密码字典文件,默认为password.lst
执行john程序,结合–wordlist字典文件
破解密码实验步骤
cd /opt
tar zxf john-1.8.0.tar.gz //解压工具包
yum install -y gcc gcc-c++ make //安装软件编译工具
cd /opt/john-1.8.0/src //切换到src子目录
make clean linux-x86-64 //进行编译安装
cp /etc/shadow /opt/shadow.txt //准备待破解的密码文件
cd /opt/john-1.8.0/run //切换到run子目录
./john /opt/shadow.txt //执行暴力破解
./john --show /opt/shadow.txt //查看已破解出的账户列表
使用密码字典文件
> john.pot //清空已破解出的账户列表,以便重新分析
./john --wordlist=./password.lst /opt/shadow.txt
//使用指定的字典文件进行破解
- 将破解工具拉到/opt目录下,并在本目录下进行解压
- 查看是否已经挂载,没有挂载并进行挂载
- 在/opt目录下安装编译工具,并进行编译安装
- 添加新用户并设置密码保存到abc.txt中
- 执行暴力破解并查看破解密码
- 修改字典库密码列表,可手动添加密码词典
端口扫描
NMAP扫描
NMAP是一个强天的端口扫描类安全评测工具,支持ping扫描、多端口检测等多种技术
nmap 【扫描类型】 【选项】
安装NMAP软件包
rpm -qa | grep nmap //查看是否已经安装nmap软件包
yum install -y nmap
nmap命令常用选项和扫描类型
- -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 通而放弃扫描
- -p:指定扫描的端口
- -n:禁用反向 DNS 解析(以加快扫描速度)
分别查看本机开放的TCP端口、UDP端口
nmap -sT 127.0.0.1
nmap -sU 127.0.0.1
检测192.168.80.0/24网段有哪些主机提供HTTP服务
nmap -p 80 192.168.80.0/24
检测192.168.80.0/24网段有哪些存活主机
nmap -n -sP 192. 168.80.0/24
Netstat命令
Netstat是一个监控TCP/IP网络的工具,是用来显示网络状态信息的,其中包括路由表、实际的网络连接以及每一个网络接口设备,可显示与IP、TCP、UDP和ICMP协议相关的统计数据,用于检验本机各端口的网络连接情况
netstat - [选项]
natstat常用选项
选项 | 说明 |
---|---|
-a | 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口) |
-n | 以数字的形式显示相关的主机地址、端口等信息 |
– | – |
-t | 查看 TCP相关的信息 |
-u | 显示 UDP协议相关的信息 |
-p | 显示与网络连接相关联的进程号、进程名称信息(该选项需要 root 权限) |
-l | 显示处于监听状态的网络连接及端口信息 |
总结
- 清理历史消息可以输出均值覆盖bash里面的内容
- 使用su命令将信任用户加入wheel组,使之不能随意切换
- 创建别名,别名要大写,使用which可以查看路径
- 密码破解要注意挂载,再使用yum安装编译