目录
一.账号安全的基本措施
1.将非登录用户的Shell设为nologin
2.锁定长期不使用的账号(含解锁方式)
3.删除无用的账号
4.chattr锁定重要账号文件(如passwd、shadow、fstab等)
二.密码安全控制
示例1:修改密码配置文件,要求新创建的用户密码有效期都为30天
示例2:将现有用户zhuziaaaa的密码有效期也修改为30天
示例3:将现有用户zhuziaaaa设置为强制下次登录时需要修改密码
三.命令历史记录限制
1.临时修改当前用户的历史命令条数
2.进入配置文件永久修改历史命令条数
3.退出当前终端将命令清除
4.开机后当前终端将命令清除
5.设置登录超时时间
四.切换和限制用户
1.su:切换用户
1.1 切换用户的方式
1.2 密码验证
1.3 限制使用su命令的用户
2.PAM安全认证
2.1 su命令的安全隐患
2.2 PAM可插拔式认证模块
2.3 PAM认证原理
2.4 PAM相关文件
2.5 shell模块
2.6 使用PAM模块
3.使用sudo机制提升权限
3.1 sudo命令的用途及用法
3.2 配置sudo授权
3.3 格式
3.2 查看当前sudo配置文件,启用sudo操作日志
示例1:配置文件使zhu1可以通过sudo命令使用ifconfig
示例2:设置wheel组进行sudo操作时无需密码验证
示例3:使用关键字来进行设置别名,批量控制用户
五.开关机安全控制
1.调整BIOS引导设置
2.GRUB限制
3.grub加密方法(为GRUB菜单设置密码)
4.终端登录安全控制
4.1 限制root只在安全终端登录
4.2 禁止普通用户登录
5.网络扫描—NMAP
5.1 安装nmap
5.2 nmap -p 端口 网段 :指定扫描的端口
5.3 nmap -n -sP:查看网段有哪些存活主机
5.4 查看本机开放的TCP端口、UDP端口
六.暴力破解密码——系统弱口令检测(比较鸡肋)
七.总结安全加固的措施
八.总结系统环境初始化(结合第七条
一.账号安全的基本措施
1.将非登录用户的Shell设为nologin
usermod -s nologin 用户名 #禁止登录
2.锁定长期不使用的账号(含解锁方式)
usermod -L lisi #锁定账户
usermod -U lisi #解锁账户
passwd -l lisi #锁定账户方
passwd -u lisi #解锁账户
3.删除无用的账号
userdel 用户名 #删除用户
4.chattr锁定重要账号文件(如passwd、shadow、fstab等)
lsattr /etc/passwd /etc/shadow #查看文件的状态
chattr +i /etc/passwd /etc/shadow #锁定文件
chattr -i /etc/passwd /etc/shadow #解锁文件
二.密码安全控制
对于新建用户,可以进入/etc/login.defs进行修改属性,设置密码规则,使得在下次创建用户时密码信息生效
- 设置密码有效期
- 要求用户下次登录时修改密码
1.适用于新建用户
vim /etc/login.defs #修改配置文件
-----此处省略部分注释及配置-------
PASS_MAX_DAYS 30 #修改密码有效期为30天
2.适用于已有用户
chage -M 30 zhangsan #修改密码有效期
3.强制在下次登录成功时修改密码(/etc/shadow第三个字段被修改为0)
chage -d 0 zhangsan #设置下次登录强制修改密码
示例1:修改密码配置文件,要求新创建的用户密码有效期都为30天
示例2:将现有用户zhuziaaaa的密码有效期也修改为30天
示例3:将现有用户zhuziaaaa设置为强制下次登录时需要修改密码
三.命令历史记录限制
- 减少记录的命令条数;
- 登录时自动清空命令历史 ;
- 系统默认保存1000条历史命令记录;
- history -c 命令只可以临时清除记录,重启后记录还在。
1.临时修改当前用户的历史命令条数
export HISTSIZE=200
#临时修改历史命令条数为200条
2.进入配置文件永久修改历史命令条数
vim /etc/profile
#进入配置文件
export HISTSIZE=200
#将全局历史命令条数由1000改为200
source /etc/profile
#刷新配置文件,使文件立即生效
3.退出当前终端将命令清除
vim .bash_logout
echo " " > ~/.bash_history
4.开机后当前终端将命令清除
vim .bashrc
echo " " > ~/.bash_history
(过程与上条同理)
5.设置登录超时时间
vim /etc/profile
#进入配置文件
export TMOUT=600
#设置全局自动注销时间,声明600s没有操作就登出
source /etc/profile
#更新配置文件
四.切换和限制用户
1.su:切换用户
可以切换用户身份,并且以指定用户的身份执行命令
1.1 切换用户的方式
- su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
- su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换
1.2 密码验证
- 超级管理员切换普通用户,不需要密码
- 普通用户切换普通用户,需要密码
- 普通用户切换超级管理员,需要密码
注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
1.3 限制使用su命令的用户
(1)su命令的安全隐患
- 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险
- 为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换
(2)限制使用su命令的用户
- 将允许使用su命令的用户加入wheel组。
- 启用pam_wheel认证模块。则只有wheel组内的用户可以使用su命令切换用户(编辑/etc/pam.d/su文件)。
(3)查看su操作记录
- 安全日志:/var/log/secure
示例:有zhu1和zhu2两个用户,要求设置zhu1可以使用su命令切换用户,zhu2用户不允许使用
vim /etc/pam.d/su #编辑/etc/pam.d/su配置文件
gpasswd -a zhu1 wheel #将希望可以使用su命令的用户加入到wheel组中
auth required pam_wheel.so use_uid #将此行的注释取消即可
2.PAM安全认证
二进制语言,两个不同的应用证明队对接
PAM:Pluggable Authentication Modules,插件式的验证模块,Sun公司于1995 年开发的一种与认证相关的通用框架机制。PAM 只关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的API 接口,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序一种认证框架,自身不做认证。
2.1 su命令的安全隐患
- 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root) 的登录密码,带来安全风险;
- 为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换。
2.2 PAM可插拔式认证模块
- 是一种高效而且灵活便利的用户级别的认证方式;
- 也是当前Linux服务器普遍使用的认证方式。
2.3 PAM认证原理
- PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_*.so;,
- PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib64/security/下)进行安全认证。
- 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
- 如果想查看某个程序是否支持PAM认证,可以用ls命令进行查看/etc/pam.d/。
- PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用.
2.4 PAM相关文件
包名: pam
模块文件目录:/lib64/security/*.so
特定模块相关的设置文件:/etc/security/
应用程序调用PAM模块的配置文件
1. 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
2. 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
3. 注意:如/etc/pam.d存在,/etc/pam.conf将失效
- ls /usr/lib64/sccurity/ 认证模块的位置
- /etc/pam.d/* 配置文件位置
type 类型
- auth 用户身份认证
- account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
- password 用户修改密码时密码复杂度检查机制等功能
- session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等
- -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用
Control: ( 控制位)
- required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件
- requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
- sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的
- equired和requisiteoptional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略include: 调用其他的配置文件中定义的配置
- optional 可选项
control 总结:
1)required 验证失败时仍然继续,但返回 Fail
2)requisite 验证失败则立即结束整个验证过程,返回 Fail
3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
4)optional 不用于验证,只是显示信息(通常用于 session 类型)
PAM模块(一共有61个任务模块)
默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
2.5 shell模块
- 功能:检查有效shell
- 帮助:man pam_shells
- 案例:不允许使用/bin/csh的用户本地登录
2.6 使用PAM模块
rpm -qi pam #查看pam详细信息
rpm -ql pam #查看pam所有文件
第一步:先确定你要使用什么服务程序
- su 切换用户程序
第二步
- 写配置文件 /etc/pam.d/* (配置文件的位置)
3.使用sudo机制提升权限
3.1 sudo命令的用途及用法
- 用途:以其他用户身份(如root)执行授权的命令
- 用法:sudo 授权命令
3.2 配置sudo授权
- 可以使用visudo(通常使用visudo,因为visudo可以自动检查语法是否输入错误)
- 也可以使用vim /etc/sudoers进行配置(此文件默认权限为440,保存时必须 wq!强制执行操作)
- 可以使用通配符“ * ”号任意值和“ !”号进行取反操作
- 权限生效后,输入密码后5分钟可以不用重新输入密码
3.3 格式
用户 主机名=命令程序列表
用户 主机名=(用户)命令程序列表
zhu1 ALL=(root) /sbin/ifconfig #举例
- 用户: 直接授权指定的用户名,或采用“&组名"的形式(授权一个组的所有用户)。
- 主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机。
- (用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令。
- 命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“。"进行分隔。ALL则代表系统中的所有命令。
3.2 查看当前sudo配置文件,启用sudo操作日志
启用sudo操作日志
- 需启用Defaults logfile配置
- 默认日志文件:/var/log/sudo
- 操作:在
/etc/sudoers
末尾添加Defaults logfile="/var/log/sudo"
查询授权的sudo操作
- sudo -l
示例1:配置文件使zhu1可以通过sudo命令使用ifconfig
第一步:切换至用户zhu1进行测试
/etc/sudoers
末尾插入相关配置,然后强制保存退出
第三步:再次切换至用户zhu1进行验证测试
示例2:设置wheel组进行sudo操作时无需密码验证,并将zhu2用户添加到wheel组中测试
示例3:使用关键字来进行设置别名,批量控制用户
要求:控制用户进行sudo操作时无法使用重启(reboot)、关机(poweroff)、切换init和无法删除
第一步:vim /etc/sudoers 或者visudo 修改配置文件
(这里使用了visudo,也可以选择使用vim /etc/sudoers,效果一样)
第二步:添加配置
五.开关机安全控制
1.调整BIOS引导设置
- 将第一引导设备设为当前系统所在硬盘
- 禁止从其他设备(光盘、U盘、网络)引导系统
- 将安全级别设为setup,并设置管理员密码(进boot中有一个Set Supervisor Password)
2.GRUB限制
- 使用grub2-mkpasswd-pbkdf2生成密钥
- 修改/etc/grub.d/00_header文件中,添加密码记录
- 生成新的grub.cfg配置文件
3.grub加密方法(为GRUB菜单设置密码)
不安全,可以进光盘的系统,通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
第一步:按e键查看未设置之前的状态
第二步:设置GRUB密码并重启
第三步:验证按e键进入后需要输入用户名和密码
4.终端登录安全控制
4.1 限制root只在安全终端登录
- 安全终端配置:/etc/securetty
- tty1~ 6是文本型控制台,tty7 是X Window图形显示管理器。可以通过CtrI+Alt+F1 (F1-F7键) 切换到对应的登录控制台。
示例:禁止root在tty2和tty3终端登录
第一步:更改安全终端配置文件
4.2 禁止普通用户登录
- 建立/etc/nologin文件
- 删除nologin文件或者重启后即恢复正常
touch /etc/nologin
#禁止普通用户登录
rm -rf /etc/nologin
#取消上述登录限制,删除后即可恢复
5.网络扫描—NMAP
- 一款强大的网络扫描、安全 检测工具
- 官方网站:Nmap: the Network Mapper - Free Security Scanner
- CentOS 7.3光盘中安装包 nmap-6.40-7.el7.x86_64.rpm
nmap [扫描类型] [选项] <扫描目标>
netstat natp #查看正在运行的使用TCP协议的网络状态信息
netstat -natp | grep httpd #实际操作(httpd换成80也可以)
netstat -naup #查看正在运行的使用UDP协议的网络状态信息
namp常见选项
选项 | 功能 |
-p | 指定扫描的端口。 |
-n | 禁用反向DNS解析(以加快扫描速度) ip转换成 域名 12222 2www.baidu.com |
-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通而放弃扫描。 |
netstat常见选项
常用选项 | 作用 |
-a | 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。 |
-n | 以数字的形式显示相关的主机地址、端1等信息。 |
-t | 查看TCP相关的信息。 |
-u | 显示UDP协议相关的信息。 |
-p | 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限) |
-r | 显示路由表信息。 |
-l | 显示处于监听状态的网络连接及端口信息。 |
5.1 安装nmap
5.2 nmap -p 端口 网段 :指定扫描的端口
5.3 nmap -n -sP:查看网段有哪些存活主机
5.4 查看本机开放的TCP端口、UDP端口
六.暴力破解密码——系统弱口令检测(比较鸡肋)
弱口令检测一 John the Ripper.
John the Ripper是一款开源的密码破解工具,可使用密码字典(包含各种密码组合的列表文件)来进行暴力破解。
官方网站:http://www.openwall.com/john
1.安装JR工具
- 安装方法
make clean 系统类型
- 主程序文件为john
2.检测弱口令账户
- 获得Linux/Unix服务器的shadow文件;
- 执行john程序,将shadow文件作为参数
3.密码文件的暴力破解
- 准备好密码字典文件,默认为psaaword.lst
- 执行john程序,结合
--wordlist=字典文件
(有更强大的字典可以使用).
4.简要介绍使用过程
第一步:将john-1.8.0.tar.gz安装包拖入Linux系统内
第二步:移动至/opt 然后解压
第三步:编译安装指定程序
第四步:添加三个用户并设置简单密码,用于下面测试破解
第五步:将/etc/shadow 文件复制到/opt下进行暴力破解
第六步:可以使用--show进行查看破解处的密码
七.总结安全加固的措施
1.将非登录用户shell设置为nologin
2.锁定长期不使用的账号(锁定用户)
3.删除无用账号
4.chattr锁定配置文件(重要文件passwd、shadow、fstab等加 i 权限,不让删除)
5.设置密码复杂性规则(长度、特殊字符、失效时间等)密码策略
6.修改history,记录历史命令,尽量缩短记录历史命令的条数
7.禁止su root,切换超级管理员
8.设置sudo权限,禁用不安全命令
9.给GRUB设置密码
10.只允许BIOS从硬盘启动,关闭除了硬盘启动外的(光驱、udisk 、网络)
11.给BIOS设置密码
12.限制root只在安全终端登录
13.禁止普通用户登录
14.改掉大家都知道的服务端口
15.做好日志权限管理
16.内核参数调整
八.总结系统环境初始化(结合第七条
1.关闭 firewalld 防火墙工具(不能关
2.关闭selinux安全防护模块
3.建立国内yum源,加快安装速度
4.关闭不必要的启动项,加快系统启动速度
5.备份MBR分区
6.统一主机名、网卡名等参数
7.修改内核参数ulimit -a 中open files