目录
前言
linux系统是以安全、高效稳定得以广泛的应用,linux系统中提供了多种机制来确保账号的安全使用
一、账号安全控制
1.账号安全措施
1.1 系统账号清理
- 将非登录用户的 Shell 设为 /sbin/nologin
- 锁定长期不使用的账号
- 删除无用的账号
- 锁定账号文件passwd、shadow
[root@localhost ~]# usermod -L cuipw passwd -l cuipw //锁定账号
[root@localhost ~]# passwd -S cuipw //查看状态
[root@localhost ~]# usermod -U cuipw passwd -u cuipw //解锁账号
[root@localhost ~]#chattr +i /etc/passwd /etc/shadow //锁定文件
[root@localhost ~]#lsattr /etc/passwd /etc/shadow //查看锁定的状态
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]#chattr -i /etc/passwd /etc/shadow //解锁文件
[root@localhost ~]#lsattr /etc/passwd /etc/shadow
---------------- /etc/passwd
---------------- /etc/shadow
1.2 密码安全控制
- chage 命令设置密码时限。
[root@localhost ~]# chage -M 30 cuipw //适用于已有的用户
[root@localhost ~]# vim /etc/login.defs //适用于新建的用户
PASS_MAX_DAYS 30
- chage 命令还可以强制让用户在下次登录的时候重设密码
[root@localhost ~]# chage -d 0 cuipw
1.3 命令历史限制
- 减少记录的命令条数
[root@localhost ~]# vim /etc/profile //适用于新登录用户
HISTSIZE=10 //设置最多纪录10条命令
[root@localhost ~]# export HISTSIZE=10 //适用于当前用户
- 注销时自动清空命令历史
[root@localhost ~]# vim ~/.bash_logout //宿主目录中~/.bash_logout添加
history -c //添加清空历史命令的语句
clear
或者
[root@localhost ~]# vim .bash
echo ' ' > ~/.bash_history
1.4 终端自动注销
- 超过指定的时间没有任何输入时自动注销终端,避免他人误操作。
[root@localhost ~]# vim /etc/profile //适用于新登录用户
export TMOUT=600 //闲置600秒自动注销
[root@localhost ~]# export TMOUT=600 //适用于当前用户
2.用户切换与提权
2.1 su命令——切换用户
[cuipw@localhost ~]$su - root
密码:
上一次登录:一 8月 23 18:57:29 CST 2021从 192.168.191.1pts/0 上
选项“-”表示切换用户后进入目标用户的宿主目录,不加则表示切换到当前目录。
- 默认情况下,任何用户都允许使用 su 命令,我们可以使用 pam_whell 认证模块只允许部分用户使用 su 命令进行切换。
[root@localhost ~]#gpasswd -a cc wheel //添加授权用户cc
正在将用户“cc”加入到“wheel”组中
[root@localhost ~]#grep wheel /etc/group //确认 wheel 组成员
wheel:x:10:cc
[root@localhost ~]#vim /etc/pam.d/su
auth required pam_wheel.so use_uid //去掉此行开头的“#号”
- /etc/pam.d/su 文件里设置禁止用户使用su命令
[root@localhost ~]#vim /etc/pam.d/su
#auth sufficient pam rootok.so
#auth required pam wheel.so useuid
2.2 sudo命令——提升执行权限
我们可以使用 sudo 命令进行提升权限,这样就可以降低密码泄露的风险。
- 在配置文件 /etc/sudoers 中添加授权,文件的默认权限为440, 保存退出时必须执行 “:w!” 命令来强制操作,否则系统将提示为只读文件而拒绝保存。
用户 主机名列表=命令程序列表
用户:授权的用户名,或者用“%组名”的形式,授权一个组的所有用户
主机:使用此配置文件的主机名称,没配置过的主机名时可用local host ,配置过则用实际主机名,ALL 代表所有主机
命令:运行授权的用户通过sudo方式执行的特权命令,需要填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔 - 例如,授权用户cc 能够执行 ifconfig 命令来修改 IP地址,wheel 组的用户不需要验证密码就可以执行任何命令
[root@localhost ~]# visudo 或者 vim /etc/sudoers
......
cc localhost=/sbin/ifconfig
%wheel ALL=NOPASSWD:ALL
- 当使用相同授权的用户较多,或者授权命令较多时,可以使用集中定义的别名。用户、主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd_Alias 来进行设置。
[root@localhost ~]# visudo
...
User_Alias USERS=cc, ll
Host_Alias HOSTS=localhost, bogon
Cmnd_Alias CMNDS=/sbin/ifconfig, /usr/sbin/useradd, /usr/sbin/userdel
USERS HOSTS=CMNDS
- sudo 配置记录的命令部分允许使用通配符“*”、取反符号“!”,当需要授权某个目录下的所有命令或取消其中个别命令时特别有用。
[root@localhost ~]# visudo
cc localhost=/sbin*,!/sbin/ifconfig,!/sbin/route
//授权用户cc可以执行/sbin/目录下除ifcongfig、route以外的其他所有命令程序
- 若要查看用户自己获得哪些 sudo 授权,可以执行 sudu -l 命令,未授权的用户将会得到“may not run sudo”的提示,已授权的用户可以看到自己的 sudo 配置。
[root@localhost ~]# sudo -l
- 如果已经启用 sudo 日志,则可以从 /var/log/sudo 文件中看到用户的 sudo 操作记录。
[root@localhost ~]# tail /var/log/sudo
3.PAM 安全认证
3.1 PAM 及其作用
- PAM,是linux 系统可插拔认证模块,是一套可定制、 可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式。
- PAM使用/etc/pam.d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置文件,从而调用本地的认证模块,模块放置在/1ib64/security下,以加载动态库的形式进行认证。比如使用su命令时,系统会提示输入root用户的密码,这就是su命令通过调用PAM模块实现的。
3.2 PAM 认证原理
- PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_ *.so
- PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib64/security/下)进行安全认证。
- 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
3.3 PAM认证的构成
查看 su 的PAM 配置文件:
[root@localhost ~]#cat /etc/pam.d/su
#%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
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模块的参数,这个需要根据所使用的模块来添加。
传递给模块的参数。参数可以有多个,之间用空格分隔开
3.4 PAM安全认证流程
- required 验证失败时仍然继续,但返回 Fail
- requisite 验证失败则立即结束整个验证过程,返回 Fail
- sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
- optional 不用于验证,只是显示信息(通常用于 session 类型)
二、系统引导和登录控制
1.开关机安全控制
- 调整 BIOS 引导设置
1.将第一引导设备设为当前系统所在硬盘。
2.禁止从其他设备(如光盘、U盘、网络等)引导系统。
3.将安全级别设为"setup",并设置管理员密码,以防止未授权的修改。 - GRUB 限制
1.通过修改 GRUB 引导参数进入单用户模式,可以不需要密码就能进入系统,从而拥有 root 权限,从安全的角度来看,如果任何人都能够这样修改参数,对服务器显然是很大的威胁。
2.为了加强对引导过程的安全控制,可以为 GRUB 菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
3.使用 “grub2-mkpasswd-pbkdf2” 生产密钥
4.修改 /etc/grub.d/00_header 文件中,添加密码记录
5.生成新的 grub.cfg 配置文件
2.终端登录安全控制
- 限制 root 只在安全终端登录
[root@localhost ~]# vim/etc/securetty
...
#tty5
#tty6 //禁止root用户从终端tty5、tty6登录
- 禁止普通用户登录
[root@localhost ~]# touch /etc/nologin //禁止普通用户登录
3.网络扫描(NMAP)
- 一个强大的端口扫描类安全评测工具
- 官网
nmap [扫描类型] [选项] < 扫描目标... >
常用选项如下:
选项 | 说明 |
---|---|
-P | 指定扫描的端口 |
-n | 禁用 反向DNS 解析 |
-sS | TCP 的 SYN 扫描(半开扫描) |
-sT | TCP连接扫描 |
-sF | TCP FIN扫描 |
-sU | UDP 扫描 |
-sP | ICMP 扫描 |
-P0 | 跳过 ping 检测 |
总结
- 使用su命令,可以切换为其他用户身份,并拥有该用户的所有权限。切换时以目标用户的密码进行验证。
- 使用sudo命令,可以以其他用户的权限执行已授权的命令,初次执行时以使用者自己的密码进行验证。
- 通过为GRUB菜单设置密码,可以防止未经授权的修改。