目录
1.1.1 将非登录用户的Shell 设为/sbin/nologin
3.2 PAM(Pluggable Authentication Modules)可拔插式认证模块
前言
学习这章内容能够更好地保护自己地账号信息,以及一些安全方面的常事。
一、账号的安全控制措施
1.1 系统账号清理
1.1.1 将非登录用户的Shell 设为/sbin/nologin
usermod -S /sbin/nologin用户名
1.1.2 锁定长期不使用的账号
用passwd -l 锁定账户 ,登陆不上;passwd -u 解锁账户
用usermod -L 锁定账户 ;usermod -U 解锁账户
1.2.3 删除无用的账号
userdel -r 删除无用账户
1.2.4 锁定账号文件passwd、shadow
chattr +i /etc/passwd /etc/shadow 锁定文件
lsattr /etc/passwd /etc/shadow 查看文件状态
1.2 密码安全控制
1.2.1 设置密码有效期
新建用户更改密码有效期:
进入 vi /etc/login.defs 修改PASS MAX DAYS 设为30 :密码的有效期改为30天
已有用户更改密码有效期
chage -M 30 lisi
1.2.2 要求用户下次登录时修改密码
1.3 命令历史限制
1.3.1 减少记录的命令条数
进入 vi /etc/profile 修改export HISTSIZE=200 再wq退出并保存
source /etc/profile 刷新系统
或重启系统,在查看
1.3.2 注销时自动清空命令历史
临时清除:进入vi ~/.bash_logout 编辑
history -c
clear
永久清除: 进入 vi ~/.bashrc 编辑 echo '' > ~/.bash_ history 保存退出后在重启 init 6
1.4 终端自动注销
闲置600秒后自动注销
进入 vi /etc/profile
编辑export TMOUT=300 保存并退出
刷新系统 source /etc/profile 或 . /etc/profile
二、系统引导和登录控制
2.1 使用su 命令切换 用户
2.1.1 用途和用法
用途: Substitute User, 切换用户
格式: su - 目标用户
2.1.2 密码验证
root→任意用户,不验证密码
普通用户>其他用户,验证目标用户的密码
2.2 限制使用su 命令的用户
2.2.1 限制使用su命令的用户
将允许使用su命令的用户加入wheel组,在wheel组内的用户才可以使用su切换用户命令
启用pam_wheel认证模块 把括号两项的前面的#去掉就可以开启
vim /etc/pam.d/ su
# auth sufficient pam rootok.so
# auth required pam_ wheel.so use__uid
(1)以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
(2)两行都注释也是运行所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok.so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码)。
(3)如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令。
(4)如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。
2.2.2 查看su 的日志文件
安全日志文件:/var/log/secure
三、Liunx中的PAM安全认证
Linux-PAM 是Linux可拔插式认证模块,是一套可定制,可动态加载的共享库,是本地系统管理员
可以随意选择程序的认证方式。
3.1 su命令的安全隐患
默认情况下,任何用户都允许使用su命令,从而恶意用户有机会反复尝试其他用户(如root)的登
录密码,带来安全风险
为了加强su命令的使用控制,可以借助于PAM认证模块,只允许极个别用户使用su命令进行切换
3.2 PAM(Pluggable Authentication Modules)可拔插式认证模块
是一种高效而且灵活便利的用户级别的认证方式
也是当前Linux服务器普遍使用的认证方式
3.3 PAM 认证原理
PAM认证一般遵循的顺序:Service(服务)>PAM(配置文件)>pam_*.so
PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调
用认证文件(位于/lib64/security下)进行安全认证
用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证
不同的应用程序所对应的PAM模块也是不同的
注:.so 为结尾的就是模块文件
3.4 PAM 认证的构成
3.4.1 用ls 命令,查看某个程序是否支持PAM认证
案例: 查看su是否支持PAM模块认证
ls /etc/pam.d | grep su
3.4.2 查看su 的PAM的配置文件
cat /etc/pam.d/su
每一行都是独立的认证过程
每一行可以区分为三个字段:
1.认证类型
2.控制类型
3.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模块的参数,这个需要根据所使用的模块来添加。传递给模块的参数。参数可以有多个,之间用空格分隔开。
3.5 PAM 安全认证流程
控制类型也可以乘坐Control Flags,用于PAM验证类型的返回结果
1.required验证失败时仍然继续,但返回Fail
2.requisite验证失败则立即结束整个验证过程,返回fail(最重要的一步)
3.sufficient验证成功则立即返回,不再继续,否则忽略结果并继续
4.optional不用于验证,只显示信息(通常用session类型)
四、使用sudo 机制提升权限
4.1 su命令的缺点
默认情况下,任何用户都允许使用su命令,从而恶意用户有机会反复尝试其他用户(如root)的登
录密码,带来安全风险
4.2 sudo命令的用途及用法
用途:以其他用户身份(如root)执行授权的命令
用法:sudo 授权命令
4.3 配置sudo授权
visudo命令 或者 vim /etc/sudoers
4.3.1 记录格式:
用户 主机名列表 = 命令程序列表
用户 主机名列表 = (用户)命令程序列表
①用户:直接授权指定的用户名,或采用"%组名"的形式(授权一个组的所有用户)。
②主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机。
③(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令。
④命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号","进行分隔。ALL则代表系统中所有命令。
4.3.2 参数:
-l:列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的;
-v:验证用户的时间戳;如果用户运行sudo后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo操作;用-v可以跟踪最新的时间戳;
-u:指定以以某个用户执行特定操作;
-k:删除时间戳,下一个sudo命令要求用求提供密码;
案例一:lisi 用户可以使用useradd usermod
需求:lisi root用户下的权限useradd usermod
1.先创建lisi的用户,再进入lisi用户看看可以使用权限不
2. 在visudo 里面配置权限
3.验证 进入lisi用户 查看是否可以使用权限
案例二:用户可以临时创建网卡
1、先在lisi用户,先输入(ifconfig ens33:0 192.168.169.100)创建网卡;
发现是不允许操作的,因为没有权限
2、需要在root用户visudo 或者/etc/sudoers都可以进配置文件添加提权用户;
3、配置文件末行加入你想要提权的用户;(wd是主机名)
4、再去lisi用户上再去(sudo ifconfig ens33:1 192.168.169.100)创建网卡那条命令,发现是可以做操作的权限已经有了
4.4 用户别名
当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。用户、主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd _Alias来进行设置。
4.4.1 用户别名的语法格式
(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
案列:用户别名
使用关键字User_Alias、Host_Alias、Cmnd_Alias 来进行设置别名(别名必须位大写)
1)Host_Alias MYHOSTS = kgc , localhost
User_Alias MYUSERS = zhangsan , wangwu,lisi
Cmnd_Alias MYCNNDS= /sbin/* ,!/ sbin/reboot,! /sbin/poweroff,,! /sbin/init,! /usr/bin/rm
MYUSERS MYHOSTS=NOPASSWD:MYCMNDS(这一行必须输入,不然上面的会不成功)
2)User_Alias USERS=Tom, Jerry,Mike
Host_Alias HOSTS=localhost, bogon
Cmnd_Alias CMNDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel
USERS HOSTS=CMNDS
3)创建用户zhangsan wangwu 加入组名为yizu
进入visudo进行设置
进行验证
4.5 启动sudo操作记录
4.5.1 查看sudo操作记录
需启用Defaults logfile 配置
默认日志文件: /var/log/sudo
4.5.2 查询授权的sudo操作
sudo -l
(1)sudo日志记录以备管理员查看,应在/etc/sudoers文件中增加"Defaults logfile"设置如果已经启用sudo日志,则可以从/var/log/sudo文件中看到用户的 sudo操作记录。注:启用日志:Defaults logfile=/var/ log/ sudo。
(2)另外一个方法是/var/log/secure 日志可查看到sudo操作用户步骤。
sudo -l ###查看当前获得哪些sudo授权
五、开关机安全控制
5.1 调整BIOS引导设置原
将第一引导设备设为当前系统所在硬盘;
禁止从其他设备(光盘、 U盘、网络)引导系统;
将安全级别设为setup,并设置管理员密码。
禁用重启热键:Ctrl+Alt+Delete 避免因用户误操作重启
5.2 GRUB限制
使用grub2-mkpasswd-pbkdf2生成密钥
修改/etc/grub.d/00_header文件中,添加密码记录
生成新的grub.cfg配置文件
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
1.grub2-mkpasswd-pbkdf2 ###根据提示设置GRUB菜单的密码
2. 备份配置文件
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
3. vim /etc/grub.d/00_header
4. grub2-mkconfig -o /boot/grub2/grub.cfg ###生成新的grub.cfg文件
5. 重启系统进入GRUB菜单时,按e键将需要输入账号密码才能修改引导参数。
输入root 按回车键再输入密码就可以进入下图的界面
6. 扩展:一步到位
grub2-setpassword
5.3 终端登录安全控制
5.3.1 限制root只在安全终端登录
安全终端配置: /etc/securetty
案例:
1.先在虚拟机终端里面 init 3切换字符界面,然后登陆进去
2. 打开 vi /etc/securetty,在tty2前加上#号,然后wq保存退出
3. 记住当前我们是在tty1终端里面,然后按ctrl+alt+F2切换成tty2终端。进tty2终端后,正常输入root用户和密码,应该是进不去的。因为刚才我们已经把终端tty2给关闭了。意思就是禁止 root 用户从终端tty2进入
注意:如果我们此时在tty1终端,然后在进入vi /etc/securetty把tty1终端给关掉,是没有用的,因为我们当时已经在tty1终端里面了,所以是没有效果的。
ctrl+alt+F1—F9 是切换终端用的(在字符界面使用)
5.3.2 禁止普通用户登录
建立/etc/nologin文件
删除nologin文件或重启后即恢复正常
案例:
touch /etc/nologin 普通用户登录不了
删除nologin文件或重启后即恢复正常
六、系统弱口令检测
6.1 弱口令检测
John the Ripper,简称为JR
一款密码分析工具,支持字典式的暴力破解;
通过对shadow文件的口令分析,可以检测密码强度;
官方网站:http://www.openwall.com/john/
6.2 安装JR工具
安装方法 : make clean系统类型
主程序文件为 john
6.3 检测弱口令账号
获得Linux/Unix服务器的shadow文件
执行john程序,将shadow文件作为参数
6.4 密码文件的暴力破解
准备好密码字典文件,默认为password.lst
执行john程序,结合–wordlist=字典文件
案例:John the Ripper是一款开源的密码破解工具,可使用密码字典(包含各种密码组合的列表文件)来进行暴力破解。
方法一:1、把软件包放入 /opt目录里
2. 进入 /opt目录,用tar软件包解压这个压缩包 tar zxvf john-1.8.0.tar.gz
3.进入 john-1.8.0/src ls 查看一下解压过后软件包的内容
4. 安装编译软件包 yum install -y gcc gcc-c++ make
5.进行编译安装 make clean linux-x86-64
6.准备待破解的密码文件cp /etc/shadow /opt/shadow .txt
在cd . . /run/ 目录下用 ls 查看
7.执行暴力破解 ./john /opt/shadow.txt
8.查看己破解出的账户列表 ./john --show/opt/ shadow.txt
方法二: 使用密码字典文件
1.进入vim john. pot 里面清空己破解出的账户列表,方便重新分析
2. 使用指定的字典文件进行破解: ./john --wordlist=./password.lst /opt/shadow.txt
七、网络端口扫描
7.1 NMAP
一款强大的网络扫描、安全 检测工具。
官方网站:http://nmap.org/。
CentOS 7.7光盘中安装包 nmap-6.40-7.el7.x86_64.rpm
7.2 NMAP的扫描
格式: nmap [扫描类型] [选项] <扫描目标…>
7.3 常用的扫描类型
-sS、-sT、 -sF、 -sU、-sP、-PO
-p:指定扫描的端口。
-n:禁用反向DNS解析(以加快扫描速度)
-sS: TCP的sYN扫描(半开扫描),只向目标发出sYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
-sT:TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
-sF:TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYTN数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。
-sU: UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。
-sP: ICMP扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
-P0:跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。
控制位:
SYN | 建立连接 |
ACK | 确认 |
FIN | 结束断开 |
PSH | 传送0数据缓存上层应用协议 |
RST | 重置 |
URG | 紧急 |
案例:
1.首先查看nmap软件包是否安装,若没有就使用 yum install nmap -y 安装软件包
2.分别查看本机开放的TCP端口、UDP端口
3.检测192.168.169.0/24网段有哪些主机提供HTTP服务
4.检测192.168.169.0/24网段有哪些存活主机
八、总结
1.账号基本安全措施:系统账号清理、密码安全控制、命令历史清理、自动注销
2.用户切换与提权:su 命令 和 sudo 命令
3.开关机安全控制:BIOS引导设置、禁止Ctrl+Alt+Del 快捷键、GRUB菜单设置密码
4.终端控制:限制root只在终端登录、禁止普通用户登录
5.系统的弱口令控制JR工具:安装JR工具、检测弱口令账号、密码文件暴力破解
6.网络端口扫描:nmap 命令