系统安全及应用
目录
一、账号的基本 安全
1.1、系统账号清理
1. 2、密码安全控制
1.3、命令历史限制
1.4、终端自动注销
二、使用su命令切换用户
2.1、用途及用户
2.2、密码验证
2.3、限制使用su命令的用户
三、Linux中的PAM安全认证
3.1、su命令的安全隐患
3.2、PAM可插拔式认证模块
3.3、PAM认证原理
3.4、PM认证的构成
3.5、PAM安全认证流程
四、使用sudo机制提升权限
4.1、sudo命令的用途及用法
4.2、配置sudo授权
4.3、语法格式
4.4、设置别名
4.5、密码验证
4.6、查看sudo操作记录
4.7、查询授权的sudo操作记录
五、系统引导和登录控制
5.1、开关机安全控制
5.2、终端登录安全控制
六、弱口令检测
6.1、暴力破解工具-JR
6.2、安装JR工具
6.3、检测弱口令账号
6.4、密码文件的暴力破解
6.5、模拟暴破步骤
七、端口扫描
7.1、网络扫描工具-NMAP
7.2、安装NMAP包
7.3、nmap命令常用的选项和扫描类型
7.4、常规检测方式:netstat
7.5、netstat命令常用选项
一、账号安全基本措施
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命令常用的选项和扫描类型
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命令常用选项