引言
linux系统是以安全、高效稳定得以广泛的应用,linux系统中提供了多种机制来确保账号的安全使用。
一、账号安全基本措施
1、系统账号清理
-
将非登录用户的Shell设为/sbin/nologin
-
锁定长期不使用的账号
-
删除无用的账号
-
锁定账号文件passwd、shadow
chattr +i /etc/passwd ###锁定文件
lsattr /etc/passwd ###查看状态
chattr -i /etc/passwd ###解锁文件
举例:
-
锁定文件并查看状态
锁定passwd文件后你,就无法创建新用户
2、锁定/etc/passwd之后还能修改密码,因为密码由/etc/shadow管理
3、把/etc/shadow锁上之后,就不能修改密码了
2、密码安全控制
-
设置密码有效期
-
要求用户下次登录时修改密码
举例:
1、新建用户aaa,进入vi /etc/login.defs,修改密码有效期,查看两个用户修改密码的最大间隔。
进入vi /etc/login.defs,修改密码有效期
2、修改用户密码的最大间隔
3、强制在下次登录时更改密码
3、命令历史限制
-
减少记录的命令条数
-
注销时自动清空历史命令
source /etc/profile ###刷新
./etc/profile ###另一种刷新方式
vim ~/.bash_history ###历史命令记录存储在.bash_history里
echo " " > .bash_history ###清空历史命令记录 .bash_history
history -c ###临时删除
环境变量的读取:
用户登录-》加载~/.bash_profile –》bash_profile中的配置首先是使 ~/.bashrc生效
用户登出–》.bash_logout 运行logout配置文件
举例:
1、进入vi /etc/profile,修改histsize,后面的数字表示保留的条数
2、退出当前终端将命令清除
vim .bash_logout
3、开机后当前将终端命令清除
vim .bashrc
4、设置登录超时时间
闲置600秒后自动注销
vi /etc/profile
###进入写入 TMOUT=600
wq保存退出
source 刷新
二、使用su命令切换用户
1、用途及用法
用途:Substitute User,切换用户
格式:su – 目标用户
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
su – UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换
2、密码验证
root –>任意用户,不验证密码
普通用户–>其他用户,验证目标用户的密码
(TIPS) su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,
否则会生成很多的bash子进程,环境可能会混乱。
3、限制使用su命令的用户
将允许使用su命令的用户加入wheel组
启用pam_wheel认证模块
vim /etc/pam.d/su
:set number 取消第六行注释
gpasswd -a aaa wheel #将aaa用户添加到wheel组中,不在组里的用户不能使用su命令
查看su操作记录
安全日志文件/var/log/secure
默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户(如root)的登录密码,这样带来了安全风险。为了加强su命令的使用控制,可以借助于pam_wheel认证模块,只允许极个别用户使用su命令进行切换。实现过程如下:将授权使用su命令的用户添加到 wheel组,修改/etc/pam.d/su认证配置以启用 pam_wheel 认证。
举例:
-
把aaa添加到wheel组中,然后确认wheel组成员
2、启用pam认证,加入组的可以使用,未加入组的无法使用
3、启用pam_wheel认证以后,未加入到wheel组内的其他用户将无法使用su命令,尝试进行切换时将提示“拒绝权限”,从而将切换用户的权限控制在最小范围内。
4、普通用户切换登录测试验证,使用su命令切换到用户的操作将会记录到安全日志/var/log/secure文件中,可以根据需要查看。
4、PAM安全认证
控制类型也称做Control Flags,用于PAM验证类型的返回结果
required验证失败时仍然继续,但返回Fail
requisite验证失败则立即结束整个验证过程,返回Fail
suffcient验证成功则立即返回,不再继续,否则忽略结果并继续
optional不用于验证,只显示信息(通常用于session)
PAM认证原理
-
PAM认证一般遵循的顺序:service (服务) –>PAM(配置文件)–> pam*.so;
-
PAM认证首先要确定哪一项应用服务,然后加载相座的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/ lib64 / security/ 下)进行安全认证。
-
用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAw模块进行认证。不同的应用程序所对应的PAM模块也是不同的。如果想查看某个程序是否支持PAM认证,可以用ls命令进行查看/etc/pam.d/
-
PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用
数据流向
用户登录su—》su服务—–》调用PAM模块中su—–》读取模块中的配置文件
PAM配置文件
PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上到下的顺序一次由PAM模块调用
第一列代表PAM认证模块类型
-
auth:对用户身份进行识别,如提示输入密码,判断是否为root。
-
account:对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
-
password:使用用户信息来更新数据,如修改用户密码。
-
session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。
第二列代表PAM控制标记
-
required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
-
requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
-
sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
-
optional:不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于 session 类型)。
-
include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。传递给模块的参数,参数可以有多个,之间用空格分隔开。
三、使用sudo机制提升权限
1、sudo命令的用途及用法
-
用途:以其他用户身份(如root)执行授权的命令
-
用法:sudo 授权命令
2、sudo参数命令
sudo [参数选项] 命令
-l:列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的;
-v:验证用户的时间戳;如果用户运行sudo后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo操作
-v:可以跟踪最新的时间戳;
-u:指定以以某个用户执行特定操作
-k删除时间戳,下一个sudo命令要求用求提供密码;
3、配置sudo授权
visudo
或
vi /etc/sudoers (此文件的默认权限为440,保存退出时必须执行:"wq!" 命令来强制操作)
记录格式
用户 主机名=命令程序表
用户 主机名=(用户)命令程序表
用户:直接授权指定的用户名,或采用”组名”的形式(授权一个组的所有用户)。
主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机
(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命
命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径多个命令之间以逗号""进行分隔。ALL则代表系统中的所有命令
示例:
zhangsan ALL=/sbin/ifconfig
lisi localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff #通配符"*"表示所有、取反符号"!"表示排除
wheel ALL=NOPASSWD:ALL
#表示wheel组成员无需验证密码即可使用sudo执行任何命令
Mike ALL=(root)NOPASSWD:/bin/kill,/usr/bin/killall
gpasswd-M lisi wheel##李四加入wheel组
4、启用sudo操作日志
启用sudo操作日志
visudo
Defaults logfile="/var/log/sudg"
sudo日志记录以备管理员查看,应在/etc/sudoers文件中增加"Defaults logfile"设置如果已经启用sudo日志,则可以从/var/log/sudo文件中看到用户的sudo操作记录。
注:启用日志:Defaults loqfile=/var/log/sudo
另外一个方法是/var/log/secure日志可查看到sudo操作用户步骤
sudo-l#查看当前用户获得哪些sudo授权
5、实验
例1:需求:在zhangsan用户的终端里创建lisi用户
创建张三用户—-》进入张三用户—–》在张三用户里创建李四用户——》权限不够
进入visudo,给张三用户提升权限(可以在所有主机中添加用户,修改用户账号的属性)
例2:创建用户不用密码,修改要密码
zhansan ALL=(root)NOPASSWD:/user/sbin/useradd.PASSWD:/user/sbin/usermod
例3:用户可以临时创建网卡
设置Z组里的人不需要密码查看ifconfig
王五不在Z组里,所以无法查看ifconfig
四、用户别名
-
当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。
-
用户、主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd_A.ias来进行设置。
-
别名必须大写
用户别名的语法格式:
1、User_Alias
用户别名:包含用户、用户组(%组名(使用%引导))、还可以包含其他其他已经用户的别名User_Alias OPERATORS=zhangsan,tom, lisi
2、Host_Alias
主机别名:主机名、IP、网络地址、其他主机别名!取反Host_Alias MAILSVRS=smtp, pop
3、Cmnd_Alias
命令路劲、目录(此目录内的所有命令)、其他事先定义过的命令别名cmnd_Alias PKGTOOLS=/ bin/ rpm,/ usr/bin/yum
用户 改成 别名用户 目的为了可以操作多个用户和组
主机名 改成 别名主机 目的为了可以操作设置主机的多个名称或者主机取反
命令操作列表 改成 别名命令列表 目的是所有命令可以做操作也就是所有命令集合
示例
例1:
进入visudo编辑,设置张三,李四用户可以使用安装命令
王五不在sudo里,没有权限使用安装命令
例2:
进入visudo编辑,设置只有李四和Z组里的人能添加用户,不能更改用户命令
五、开关机安全控制
调整BIOS引导设置
-
将第一引导设备设为当前系统所在硬盘
-
禁止从其他设备(光盘、U盘网络)引导系统
-
将安全级别设为setup,并设置管理员密码
GRUB限制
-
使用grub2-mkpasswd-pbkdf2生成密钥
-
修改/etc/grubd/00header文件中,添加密码记录
-
生成新的grubcfg配置文件
1、限制更改GRUB引导参数
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
plan1:
grub2-mkpasswd-pbkdf2 #根据提示设置GRUB菜单的密码
PBKDF2 hash of your password is grub . pbkd.. . ..#省略部分内容为经过加密生成的密码字符串
#备份配置文件
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
cp letc/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. pbkd2. . . .
#设置密码,省略部分内容为经过加密生成的密码字符串
EOF
#生成行grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg #生成新的grub.cfg文件
重启系统进入GRtB菜单时,按e键将需要输入账号密码才能修改引导参数。
plan2:一步到位
grub2-setpassword
举例:
限制更改GRUB引导参数
重启之后按e键
2、终端登录安全控制
限制root只在安全终端登录
-
安全终端配置:/etc/securetty
禁止普通用户登录
-
建立/etc/nologin文件
-
删除nologin文件或重启后即恢复正常
六、系统弱口令检测
John the Ripper,简称为JR
-
一款密码分析工具,支持字典式的暴力破解
-
通过对shadow文件的口令分析,可以检测密码强度
-
官方网站:http://wwwopenwall.com/john/
安装JR工具
-
安装方法:make clean 系统类型
-
主程序文件为john
检测弱口令账号
-
获得Linux/Unix服务器的shadow文件
-
执行john程序,将shadow文件作为参数
密码文件的暴力破解
-
准备好密码字典文件,默认为password.lst
-
执行john程序,结合–wordlist=字典文件
弱口令检测 -John the Ripper.
JohntheRipper是一-款开源的密码破解工具,可使用密码字典(包含各种密码组合的列表文件)来进行暴力破解)
解压工具包
cd /opt
tar zxf john-1.8.0.tar.gz
安装软件编译工具
yum install_-y gcc gcc-c++ make
换到src子自录
cd /opt/john-1.8.0/ src
#进行编译安装
make clean linux-x86-64
#准备待破解的密码文件
cp /etc/shadow /opt/ shadow .txt
#执行暴力破解
cd /opt/john-1.8.0/ run
./ john / opt/ shadow .txt
#查看已破解出的账户列表
./john --show / opt/ shadow .txt
#使用密码字典文件
> john. pot
#清空己破解出的账户列表,以便重新分析
./john --wordlist=./ password.1st / opt/ shadow.txt
#使用指定的字典文件进行破解
七、网络端口扫描-NMNP
1、控制位
SYN 建立连接位
ACK 确认位
FIN 结束断开位
PSH 急迫位 传送0 数据缓存 上层应用协议
RST 重置位
URG 紧急位
2、安装nmap
rpm -qa |grep nmap 查看nmap
yum install -y nmap 安装nmap
举例:
-
安装nmap
2、nmap命令常用选项
-p:指定扫描的端口。
n:禁用反向DNS解析(以加快扫描速度)
S:TCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
-sT:TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型)用来建立一个TCP连接,如果成功则认为目标端口正在监听服务。否则认为目标端口并未开放。
-sF:TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对sYN数据包进行简单过。而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。
-sU:UDP扫描,探测目标主机提供哪此UDP服务,UDP扫描的速度会比较慢。
-sP:ICMP扫描,类似于pina检测,快速判断目标主机是否存活,不做其他扫描。
-P0:跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法 ping通而放弃扫描。
八、总结
今天我学会了账号的四种基本安全措施,分别是系统账号清理、密码安全控制、命令历史清理、自动注销。知道如何使用su命令切换用户,以及如何使用sudo机制提升权限。当使用相同授权的用户较多时,可以采用集中定义用户别名。大致了解了开关机的安全控制,可以限制更改GRUB引导参数,为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。使用系统弱口令检测暴力破解密码文件,使用端口扫描NMAP来检测端口。
转自:
https://blog.csdn.net/yunxi115/article/details/129294879