本章结构
- 账号安全控制
- 系统引导和登录控制
- 弱口令检测
- 端口扫描
一、 账号安全基本措施
1. 系统账号清理
1.1 将非登录用户的Shell设为 /sbin/nologin
shell------/sbin/nologin比较特殊,所谓"无法登陆"指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。举例来说,各个系统账号中,打印作业有lp这个账号管理,www服务器有apache这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已。
usermod -s /sbin/nologin 用户名
修改登录shell类型
1.2 锁定长期不使用的账号
usermod -L 用户名
锁定用户
passwd -l 用户名
1.3 删除无用的账号
userdel [-r] 用户名
加上 -r 才能删除用户的家目录。如果不删除家目录,那么用户被删除后,他的家目录会变成无主文件,文件的属主和属组位显示的是原主人的UID和GID。
1.4 锁定账号文件passwd、shadow
chattr +i /etc/passwd /etc/shadow
锁定文件
2. 密码安全控制
2.1 设置密码有效期
对于新建用户可以修改 /etc/login.defs 文件里的内容来设置密码规则
对于已有用户可以使用chage命令 chage [选项] 用户名
less
[root@localhost ~]# chage lisi #交互式设置
正在为 lisi 修改年龄信息
请输入新值,或直接敲回车键以使用默认值
最小密码年龄 [0]: 7
最大密码年龄 [99999]: 7
最近一次密码修改时间 (YYYY-MM-DD) [2024-04-18]:
密码过期警告 [7]: 6
密码失效 [-1]: 6
帐户过期时间 (YYYY-MM-DD) [-1]:
[root@localhost ~]#chage -M 30 lisi #设置密码有效期为30天
[root@localhost ~]# chage -l lisi #查看用户李四当前设置
2.2 要求用户下次登录时修改密码
chage -d 0 用户名
强制要求用户下次登录时必须修改密码
js
[root@localhost ~]# chage -d 0 lisi #强制李四下一次登录一定修改密码(密码符合复杂性要求)
补充 :随机生成密码 cat /dev/random | tr -dc [[:alnum:]] |head -c 12
(tr -d 删除)
3. 命令历史限制
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。
3.1 减少记录的命令条数
Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通过修改 <math xmlns="http://www.w3.org/1998/Math/MathML"> / e t c / p r o f i l e \color{red}{ /etc/profile } </math>/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。例如,可以设置最多只记录 200 条历史命令。
js
临时修改历史命令条数。只针对当前用户,退出登录后失效。
[root@localhost ~]# export HISTSIZE=200
永久修改历史命令条数。编辑配置文件,设置历史命令条数。
[root@localhost ~]# vim /etc/profile //设置历史命令条数记录为200条
HISTSIZE=200
[root@localhost ~]# source /etc/profile //刷新配置文件,使文件立即生效
注意:写进 /etc/profile 对全局生效 ;写进.bahsrc只对root生效
3.2 注销时自动清空命令历史
家目录下有 .bash_history 文件,用于记录历史命令。清空该文件即清空了命令历史。
bash
临时清除历史命令 history -c
注销时自动清空历史命令
[root@localhost ~]# vim ~/.bash_logout
echo "" > ~/.bash_history
登录时自动清空历史命令
[root@localhost ~]# vim ~/.bashrc
echo "" > ~/.bash_history
4. 终端自动注销
编辑 /etc/profile 文件,设置闲置600秒后自动注销 (不常用)
js
[root@localhost ~]# vim /etc/profile
.................................
export TMOUT=600
5. su 切换用户
su( switch user)命令可以切换用户身份,并且以指定用户的身份执行命令
root 切换至其他用户无须密码;非root用户切换时需要密码
5.1 切换用户的方式
su - 用户
完全切换
su 用户
不完全切换
注意 :su 切换新用户后,使用 exit
退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
5.2 限制使用su命令的用户 (和PAM 安全认证有关)
su 命令的安全隐患 :默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险。为了加强su命令的使用控制,可借助于 PAM认证模块 ,只允许极个别用户使用su命令进行切换。
限制方法:修改/etc/pam.d/su 文件
- 将允许使用su命令的用户加入wheel组。
- 启用pam_wheel认证模块。则只有wheel组内的用户可以使用su命令切换用户
注意第二行和第六行:
- 以上两行现在是默认状态(即开启第二行,注释第六行),这种状态下是允许所有用户间使用su命令进行切换的。
- 两行都注释是允许所有用户都能使用su命令,但root使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码)。
- 如果开启第六行,表示只有root用户和wheel组内的用户才可以使用su命令。
- 如果注释第二行,开启第六行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。
6. PAM 安全认证
PAM ( Pluggable Authentication Modules )可插拔式认证模块,是一种高效而且灵活便利的用户级别的认证方式,也是当前Linux服务器普遍使用的认证方式。
通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务 配置不同的认证方式,而无需更改服务程序,同时也便于向系统中添加新的认证手段。
官网手册 : www.linux-pam.org/
6.1 PAM相关文件
- 包名: pam
- 模块文件目录:/lib64/security/*.so
- 特定模块相关的设置文件:/etc/security/
- 应用程序调用PAM模块的配置文件
- 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
- 为每种应用模块提供一个专用的配置文件:
/etc/pam.d/APP_NAME
- 注意:如/etc/pam.d存在,/etc/pam.conf将失效
- man 8 加模块名 : 可以查看帮助
查看某个程序是否支持PAM认证,可以用 ls 命令:
js
[root@localhost ~]# ls /etc/pam.d | grep su #查看su是否支持PAM模块认证
ksu
su
sudo
sudo-i
su-l
6.2 PAM工作原理
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件 ( 位于 /etc/pam.d 下 ) ,最后调用认证文件 ( 位于 /lib64/security 下 ) 进行安全认证。
6.3 专用配置文件/etc/pam.d/ 格式
js
[root@localhost ~]# cat /etc/pam.d/su #查看su的PAM配置文件
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth required pam_wheel.so use_uid
auth substack system-auth
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session include postlogin
session optional pam_xauth.so
type验证类型 控制位 要调用的功能 参数
-
配置文件 /etc/pam.d/ 每一行都是一个独立的认证过程
-
每一行可以区分为三个字段
- 认证类型
- 控制类型
- PAM模块及其参数
认证类型(module-type)
- 认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证; 验证是否有这个用户
- 账户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过 期,帐号的登录是否有时间段的限制等;
- 密码管理(password management):主要是用来修改用户的密码;
- 会话管理(session management):主要是提供对会话的管理和记账。
控制类型(Control Flags)
- required :验证失败时仍然继续,但返回 Fail
一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件。
- requisite :验证失败则立即结束整个验证过程,返回 Fail
一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
- sufficient :验证成功则立即返回,不再继续,否则忽略结果并继续
一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的
-
optional : 不用于验证,只是显示信息(通常用于 session 类型)可选项
-
equired和requisiteoptional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略
-
include: 调用其他的配置文件中定义的配置
PAM模块及其参数
- 默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
6.4 limit
功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间
js
[root@localhost ~]# ulimit -a #可以看到系统的相关 资源限制 设置
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7812
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024 #最多只能打开1024个文件
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 7812
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
ulimit -n 10000 #修改限制文件数,但是这样只对当前终端生效
vim limits.conf 可以进行永久修改
缺点:写完需要重启才能生效,所以装好系统后第一时间进行修改
limits 生产中的 建议设置:
js
用户名 限制类型 控制类型 数量
<domain> <type> <item> <value>
* soft core unlimited
* hard core unlimited
* soft nproc 1000000
* hard nproc 1000000
* soft nofile 1000000
* hard nofile 1000000
* soft memlock 32000
* hard memlock 32000
* soft msgqueue 8192000
* hard msgqueue 8192000
*代表所有 软硬一起设置可以直接使用 -