目录
一、账号安全控制
1. 账号安全基本措施
1.1 系统账号清理
● 将非登录用户的Shell设为 /sbin/nologin
usermod -s /sbin/nologin 【用户名】
● 锁定长期不使用的账号
usermod -L 【用户名】 或 passwd -I 【用户名】 #锁定用户
passwd -u【用户名】 或 usermod -L 【用户名】 #解锁用户
passwd -S 【用户名】 #查看用户状态
● 删除无用的账号
userdel [ -r ] 【用户名】 #删除用户及其家目录
● 锁定账号文件passwd、shadow
chattr +i /etc/passwd /etc/shadow #锁定文件并查看状态
lsattr /etc/passwd /etc/shadow #查看文件是否锁定
chattr -i /etc/passwd /etc/shadow #解锁文件
修改用户信息会涉及到 /etc/passwd 和 /etc/shadow 两个文件。将这两个文件锁定,将无法管理用户,如删除/新建用户,修改密码等操作
1.2 密码安全控制
● 设置密码有效期
● 要求用户下次登录时修改密码
[root@localhost ~]# vi /etc/login.defs #修改密码配置文件适用于新建用户
......
PASS_MAX_DAYS 30
[root@localhost ~]# chage -M 30 lisi #设置lisi用户的密码有效期为30天
[root@localhost ~]# cat /etc/shadow | grep lisi
常用选项 | 解释 |
-m | 设置修改密码的最小间隔天数,m=0时任何时间都可以更改密码 |
-M | 设置密码有效天数 |
-w | 设置用户密码到期前,收到警告信息的天数 |
-E | 设置帐号到期的日期 |
-i | 设置密码可以过期的天数,超过此限制此帐号将不可用 |
-l | 列出当前设置 |
-d | 上一次更改密码的日期 |
chage -d 0 zhangsan #强制zhangsan用户在下次登录时修改密码
1.3 命令历史限制
● 减少记录的命令条数
● 登录时自动清空命令历史
[root@localhost ~]# vi /etc/profile
export HISTSIZE=200
[root@localhost ~]# source /etc/profile
[root@localhost ~]# vi ~/.bashrc
echo " " > ~/.bash_history
1.4 终端自动注销
● 闲置600秒后自动注销
[root@localhost ~]# vi /etc/profile
......
exprot TMOUT=600
[root@localhost ~]# source /etc/profile
二、用户切换和提权
2. 使用su命令切换用户
2.1 用途及用法
● 用途:Substitute User,切换用户
● 格式:
su - 【目标用户】
whoami #显示当前登录用户
2.2 密码验证
● root→任意用户,不验证密码
● 普通用户→其他用户,验证目标用户的密码
[amrian@localhost ~]# su - root #带 - 选项表示将使用目标用户的登录Shell环境
口令:
[root@localhost ~]# whoami
root
2.3 限制使用su命令的用户
● 将允许使用su命令的用户加入wheel组
● 启用pam_wheel认证模块
[root@localhost ~]# vi /etc/pam.d/su
#%PAM-1.0
auth sufficient pam_rootok.so
auth required pam_wheel.so use_uid
......
2.4 查看su操作记录
安全日志文件位于:/var/log/secure
2.5 配置sudo授权
vi sudo 或 vi /etc/sudoers #此文件默认权限为440,保存退出时必须使用"wq!"命令强制执行
#语法格式: 用户 主机名=命令程序列表
# %组名 主机名=(用户)命令程序列表
#用户\%组名:直接授权的用户、组
#(用户);以何种身份执行命令,缺省时默认以root用户身份运行命令
#主机名:使用此规则的主机名,ALL代表所有主机
#命令程序列表:允许执行的命令,需填写命令的绝对路径,多个命令之间以","分隔,ALL代表所有命令
#例:
Tom ALL=/sbin/ifconfig #授权TOM使用ifconfig命令
%wheel ALL=NOPASSWD:ALL #wheel组内成员无需验证密码即可使用所有命令
User_Alias USERS=Tom,lisi,zhangsan #为指定用户设置别名
Host_Alias HOSTS=localhost,bogon #为指定主机名设置别名
Cmnd_Alias CMNDS=/sbin/ifconfig,/usr/useradd,/usr/bin/userdel #为指定命令设置别名
2.6 查看sudo操作日志
● 需要先启用sudo操作日志
visudo
......
Defaults logfile = "/var/log/sudo
● 查看sudo操作日志
tail /ver/log/sudo
2.7 限制root只在安全终端登录
安全终端配置:/etc/securetty
vi /etc/securetty
......
vc/9
vc/10
vc/11
tty1
#tty2 #禁止终端tty2登录,在其前方输入#
#tty3 #禁止终端tty3登录,在其前方输入
tty4
tty5
tty6
tty7
2.8 禁止普通用户登录
需建立/etc/nologin文件
touch /etc/nologin #禁止普通用户登录
删除nologin文件或重启后恢复正常
rm -rf /etc/nologin #取消限制
2.9 开关机安全控制
● 调整BIOS引导设置
-
将第一引导设备设为当前系统所在硬盘
-
禁止从其他设备(光盘、U盘、网络)引导系统
-
将安全级别设为setup,并设置管理员密码
● GRUB限制
- 使用grub2-mkpasswd-pbkdf2生成密钥
- 修改/etc/grub.d/00_header文件中,添加密码记录
- 生成新的grub.cfg配置文件
三、PAM安全认证
1. PAM
PAM(Pluggable Authentication Modules),可插拔式认证模块。
- 是一种高效且灵活的便利的用户级别认证方式
- 也是当前Linux服务器使用的认证方式
2. su 命令的安全隐患
● 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root) 的登录密码,带来安全风险
● 为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换。
3. PAM认证原理
● PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_*.so
● 首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证。
● 用户访问服务器的时候,服务器的某一个服务程序把用户的不同请求发送到PAM模块进行认证。
● 不同的应用程序所对应的PAM模块也是不同的。
4. PAM认证的构成
● 查看某个程序是否支持PAM认证,可以用ls命令
示例:查看su是否支持PAM模块认证
ls /etc/pam.d | grep su
● 查看su的PAM配置文件:
cat /etc/pam.d/su
● 每一行都是一个独立的认证过程
● 每一行可以区分为三个字段
●认证类型
●控制类型
●PAM模块及其参数
5. PAM安全认证流程
● 控制类型也可以称作Control Flags,用于PAM验证类型的返回结果
- required验证失败时仍然继续,但返回Fail
- requisite验证失败则立即结束整个验证过程,返回Fail
- sufficient验证成功则立即返回,不在继续,否则忽略结果并继续
- optional不用于验证,只显示信息(通常用于session(会话)类型)
四、网络端口扫描 - nmap
● 需先安装nmap工具
yum install nmap -y #安装nmap工具
● 用法
namp "扫描类型" "选项" "扫描目标"
常用选项与扫描类型 | 解释 |
-p | 指定扫描的端口 |
-n | 禁用反向DNS解析(加快扫描速度) |
-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通而放弃 |
示例:
namp -sT 127.0.0.1 #查看本机的TCP端口
namp -p 80 192.168.4.0/24 #检测192.168.4.0/24网段有哪些主机提供HTTP服务
namp -n -sP 192.168.4.0/24 #检测192.168.4.0/24网段有哪些存活主机