系统安全及应用
系统安全及应用
一、账号安全基本措施
1、系统账号清理
1)将非登录用户的Shell设为/sbin/nologin
2) 锁定长期不使用的账号
usermod -L 用户名 锁定用户账户
passwd -l 用户名 锁定账户密码
passwd -S 用户名 查看用户状态
3)删除无用的账户
userdel [-r] 用户名 删除用户及其宿主目录
4)清空一个账号密码
passwd -d 用户名 清空账户密码
5)锁定账户文件passwd、shadow
chatte +i /etc/passwd /etc/shadow 锁定文件
lsatter /etc/passwd /etc/shadow 查看文件状态
chatter -i /etc/passwd /etc/shadow 解锁文件
2、密码安全控制
1)设置密码有效期
vi /etc/login.defs
PASS_MAX_DAYS N(天数)
chage -M 30 用户
cat /etc/shadow | grep 用户
2)要求用户下次登录修改密码
chage -d 0 用户
cat /etc/shadow | grep 用户
chage -M 日期 用户 设置用户密码和有效期
chage -E xxxx-xx-xx 设置账号过期日期
3、命令历史限制
1)减少命令记录条数
①、概述: /etc/profile 是系统全局变量配置文件,可以通过系统或者执行 source /etc/profile命令使文件被刷新重载
②、格式:vi /etc/profile 编剧全局变量配置文件
export HISTSIZE=x 输入需要的命令条数
source /etc/profile 刷新重载
2)登录时自动清空历史命令
①、概述:~/.bashrc文件中的命令会在每次打开新的bash shell时(也包括登录系统)被执行
②、格式:vi ~/.bashrc
echo“ ” > ~/.bashrc_history
4、终端自动注销
1)限制600秒后自动注销
格式:vi /etc/profile
export TMOUT=600
source /etc/profile
二、使用su命令切换用户
1、用途及用户
1)用途:Substitute User,切换用户
2)格式:su - 目标用户
2、密码验证
1)root ->任意用户,不验证密码
2)普通用户->其他用户,验证目标用户密码
3)格式: su - 用户名 带-选项表示将使用目标用户的登录 shell环境
3、限制使用su命令的用户
1)将允许使用su命令的用户加入wheel组
2)在/etc/pam.d/su文件中设置禁止用户使用su命令
格式:vim /etc/pam.d/su
注:①、以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许虽有用户使用su命令进行切换的
②、两行都注释也是允许所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切
换普通用户就不需要输入密码
(pam_rootok.so模块的主要作用是使uid为0的用户,即 root用户能够直接通过认证而不用输入密码)
③、如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令。
④、如果注释第一行,开启第二行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。
实验验证:
步骤一,新建AYHT/BYHT普通用户,使用su命令实现root->普通用户的切换,且将普通用户AYHT加入wheel组中
步骤二、进入/etc/pam.d/su文件中设置禁止用户使用su命令,选择文件第六行,将行前注释#删除,启用该字段
步骤三、重新进行用户切换,发现加入wheel组中用户AYHT正常切换,而未加入wheel组中的用户BYHT切换失败,显示su:拒绝权限
注:启用 pam_wheel认证后,未加入到wheel组中的其他用户无法使用su命令
三、Linux中的PAM安全认证
1、su命令的安全隐患
1)、默认情况下,任何用户都允许使用 su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险
2)、为了加强su 命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换
2、PAM (Pluggable Authentication Modules)可插拔式认证模块
1)、是一种高效而且灵活的用户级别的认证方式
2)、也是当前Linux服务器普遍使用的认证方式
3、PAM认证原理
1)PAM认证一般遵循的顺序:Service(服务)-->PAM(配置文件)-->pam_*.so
2)PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
3)用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证,不同的应用程序所对应的PAM模块是不同的
4、PM认证的构成
1)查看某个程序是否支持PAM认证,可以用ls命令
2)格式:ls /etc/pam.d | grep su
3)查看su的PAM配置文件:cat /etc/pam.d/su
每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用
每一行可以区分为三个字段:认证类型、控制类型、pam模块及其参数
①、第一列代表PAM认证模块类型
auth∶ 对用户身份进行识别,如提示输入密码,判断是否为root。
account∶ 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
passwor∶使用用户信息来更新数据,如修改用 户密码。
session∶ 定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。
②、第二列代表PAM控制标记
required∶ 表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
requisite∶ 与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
sufficient∶ 如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
optional∶不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于 session 类型)。
include∶ 表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认认证工作)来实现认证而不需要重新逐一去写配置项
③、第三列代表PAM模块,默认实在/lib64/security/目录下,若不在此默认路径下,要填写绝对路径。
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数
④、第四列代表PAM模块的参数,这个需要根据所使用的模块来添加
传递给模块的参数,参数可以有多个,之间用空格分隔开
5、PAM安全认证流程
控制类型也称作Control Flags,用于PAM验证类型的返回结果
1)required验证失败时仍然继续,但返回Fail
2)requisite验证失败则立即结束整个验证过程,返回Fail
3)sufficient验证成功则立即返回,不再继续,否则忽略结果并继续
4)optional不用于验证,只显示信息(通常用于session类型)
四、使用sudo机制提升权限
1、sudo命令的用途及用法
用途:以其他用户身份(如root)执行授权的命令
用法:sudo 授权命令
2、配置sudo授权
visudo或vi /etc/sudoers #此文件的默认权限为440,保存退出时必须执行“wq!”,强制保存退出
3、语法格式:
用户 主机名=命令程序列表
用户 主机名=(用户) 命令程序列表
用户:直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
主机名:使用此规则的主机名。没配置过主机名时可用localhost(默认主机名),有配过主机名则用实际的主机名,ALL则代表所有主机
(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令
命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分割。ALL则代表系统中的所有命令
注:可使用通配符“ * ”表示所有,取反符号“!”表示排除
例如:Jerry localhost=/sbin/*,!/sbin/poweroff
表示jerry用户操作localhost主机可使用sbin目录下的除poweroff以外的所有命令
注:Jerry仍可使用init、shutdown等命令执行关机操作,因此限制命令需做到全面无漏,否则限制影响十分有限。
4、设置别名
使用关键字User_Alias、Host_Alias、Cmds_Alias来进行设置别名(别名必须为大写)
User_Alias USERS=Tom,Jerry,Mike
Host_Alias HOSTS=localhost,bogon
Cmnd_Alias CMDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel
USERS HOST=CMDS
5、密码验证
1)正常情况下,第一次使用sudo命令需输入密码验证,有效期为五分钟,过期后使用sudo需再次输入密码验证。
2)可以设置特定用户无需密码验证
Mike ALL=(ROOT)NOPASSWD:/bin/kill,/usr/bin/killall
3)也可设置组用户无需密码验证
%wheel ALL=NOPASSWD:ALL
4)以及所有用户无需密码验证
USERS HOSTS=NOPASSWD:CMDS
6、查看sudo操作记录
- 需启用Defaults logfile配置
- 默认日志文件:/var/log/sudo
- visudo #进入sudo配置文件
- Defaults logfile="/var/log/sudo" #启动Defaults logfile
- tail /var/log/sudo #查看sudo末尾10行记录
7、查询授权的sudo操作
1)格式:sudo -l
2)例:
五、系统引导和登录控制
1、开关机安全控制
1)调整BIOS引导设置
- 将第一引导设备设为当前系统所在硬盘
- 禁止从其他设备(光盘、U盘、网络)引导系统
- 将安全级别设为setup,并设置管理员密码
2)GRUB限制
①、通常情况下,在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,也可进入急救模式修改用户密码,这对服务器是一个极大的安全威胁。为此,可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
使用grub2-mkpasswd-pbkdf2生成密钥
修改/etc/grub.d/00_header文件,添加密码记录
生成新的grub.cfg配置文件
grub2-mkpasswd-pbkdf2 #根据提示设置GRUB菜单的密码
PBKDF2 hash of your password is grub.pbkdf2…… # 省略部分内容为加密生成的密码字符串
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak # 制作备份
cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
vim /etc/grub.d/00_header
cat << EOF
set superusers="root" # 设置超级用户为 root
password_pbkdf2 root grub.pbkdf2…… # 设置密码,省略部分内容为经过加密生成的密码字符串
EOF
grub2-mkconfig -o /boot/grub2/grub.cfg # 生成新的grub.cfg
完成配置修改工作,重启后进入GRUB菜单时,按e键将需要输入账号密码才能修改引导参数。
2、终端登录安全控制
1)限制root只在安全终端登录
①、安全终端配置:/etc/securetty
vi /etc/securetty
②、将tty5,tty6前加“#”将其注释,表示禁止root用户从终端tty5、tty6登录
2)禁止普通用户登录
①、建立/etc/nologin
touch /etc/nologin
②、删除nologin文件或重启后即恢复正常
rm -rf /etc/nologin
六、弱口令检测
1、暴力破解工具-JR
John the Ripper是一款开源的密码破解工具,可使用密码字典(包含各种密码组合的列表文件)来进行暴力破解。通过对shadow文件的口令分析,可以检测密码强度。
官方网站:http://www.openwall.com/john/
2、安装JR工具
1)安装方法:make clean 系统类型
2)主程序文件为john
3、检测弱口令账号
1)获得Linux/Unix服务器的shadow文件
2)执行john程序,将shadow文件作为参数
4、密码文件的暴力破解
1) 准备好密码子弹文件,默认为password.lst
2) 执行john程序,结合--wordlist=字典文件
5、模拟暴破步骤
1)解压工具包
cd /opt
tar zxf john-1.8.0.tar.gz
2)安装软件编译工具
yum install -y gcc gcc-c++ make
3)切换到src子目录
cd /opt/john-1.8.0/src
4)进行编译安装
make clean linux-x86-64
5)准备待暴破的密码文件
cp /etc/shadow /opt/shadow.txt
6)执行暴力破解
cd /opt/john-1.8.0/run
./john /opt/shadow.txt
7)查看已破解出的账户列表
./john --show /opt/shadow.txt
8)使用密码字典文件
使用> john.pot #清空已破解出的账户列表以便重新分析
./john --wordlist=./password.list /opt/shadow.txt #使用指定的字典文件进行破解
9)添加字典内容
若密码无法被暴力破解说明字典中没有该密码记录,可以进入字典文件(/opt/john-1.8.0/run/password.list)中手工输入添加,字典内容的丰富程度与破解能力成正比
七、端口扫描
1、网络扫描工具-NMAP
NMAP是一个强大的端口扫描类安全评测工具,支持ping扫描、多端口检测等多种技术。
2、安装NMAP软件包
rpm -qa | grep nmap #检查是否已安装
yum install -y namp #若未安装,进行yum安装
3、nmap命令常用的选项和扫描类型
![](https://img2020.cnblogs.com/blog/2391841/202106/2391841-20210628224042025-484950242.png)
4、常规检测方式:netstat
netstat -natp # 查看正在运行的使用TCP协议的网络状态信息
netstat -naup # 查看正在运行的使用UDP协议的网络状态信息
1) 分别查看本机/其他主机开放的TCP、UDP端口
nmap -sT 127.0.0.1
nmap -sU 127.0.0.1
2)检测192.168.80.0/24网段有哪些主机提供HTTP服务
nmap -p 80 192.168.80.0/24
3)检测192.168.80.0/24网段有哪些存活主机
nmap -n -sP 192.168.80.0/24
5、netstat命令常用选项
![](https://img2020.cnblogs.com/blog/2391841/202106/2391841-20210628224236155-1003278021.png)