文章目录
一、账号的基本安全管理
1. 系统账号相关管理
对系统账号的管理一般分为:
- 非登录用户
- 长期搁置账号
- 无用账号
- 账号文件
1.1 非登录用户
将这些用户的Shell设为/sbin/nologin或/bin/false(禁止登陆系统)
- 方法一:usermod -s /sbin/nologin 用户名
- 方法二:使用vim /etc/passwd在passwd文件内更改
1.2 长期搁置账号
可以对账号进行锁定
-
命令一:usermod -L 用户名
-
命令二:passwd -l 用户名
-
查看账号状态:passwd -S 用户名
-
解锁usermod -U 和passwd -u
1.3 无用账号
可以对账号进行删除
- userdel [-r] 用户名
1.4 账号文件
锁定账号文件passwd、shadow(锁定后不允许创建用户)
- 锁定状态:chattr +i /etc/passwd /etc/shadow
- 解锁状态:chattr -i /etc/passwd /etc/shadow
- 查看状态:lsattr /etc/passwd /etc/shadow
锁定演示:
解锁:
锁定 passwd文件或shadow文件一样效果
2. 账号密码安全管理
2.1 设置账号下次登陆强制修改密码
命令:
change -d 0 wang
//设置为wang用户 下次登陆会被强制修改密码
通过查看wang用户的账号信息 ,可以发现 上次修改密码到现在的时间数变成了0 (为0时则需要修改密码)
下次登陆时 输入两次旧密码就会提示重新设置新密码
2.2 设置账号密码有效期
1. 对于现有用户
chage -M 有效期 用户名
2. 对于即将创建的用户
修改配置文件
vim /etc/login.defs #编辑login.defs文件
PASS_MAX_DAYS 30 #设置有效期30天
1. 对于现有用户
ps :设置张三的密码有效期为6天
2. 对于即将创建用户
vim /etc/login.defs
将图中标记那一行的值修改为需要设置的期限 保存退出
然后正常创建用户即可,期限会自动变为配置文件里设置的期限
3. 减少历史命令显示条数
为避免实际环境中的历史命令泄露,造成安全问题,可将历史命令显示条目进行调整
3.1 减少显示条目
方法一:全局环境生效
vim /etc/profile
#编辑profile文件
HISTSIZE=20
#历史记录保留20条
soure /etc/profile
#执行配置文件,使配置文件生效
方法二:当前环境生效,重启失效
export HISTSIZE=数值
#保留历史记录为(数值)条
方法一 修改全局生效配置文件
vim /etc/profile
可以看到 通过修改并重新执行配置文件 历史命令条目变为十条
方法二 临时修改
重启后配置失效
3.2 登陆时自动清空历史命令
vim ~/.bashrc
// 编辑配置文件,这个配置文件会在打开新bash时自动执行
echo "" >~/.bash_history
// 添加这条配置
4. 终端超时自动登出
方法一:永久配置
vim /etc/profile #编辑profie文件
添加export TMOUT=600 #600秒闲置,终端注销
source /etc/profile #执行一次配置文件,让配置文件生效
方法二:当前配置,重启失效
export TMOUT=数值 #(数值)秒闲置,终端注销
类似与减少历史命令的配置方式
方法一 配置全局生效
- 编辑profie文件 vim /etc/profile
- 添加一条 export TMOUT=600
- 保存退出
- 重新执行文件 source /etc/profile
二、su操作
1. su命令概念
- 作用:切换用户
- 格式:su [目标用户]
- 可登录的用户一般分两种种,超级用户root、普通用户。
- 当root切换到任意的用户时,不需要密码。
- 但当普通用户切换其他用户的时候,需要输入目标用户的密码进行验证。
2. 限制用户使用su命令
- 首先把允许使用su命令的用户添加进wheel组中
- 修改/etc/pam.d/su认证配置启用pam_wheel认证
第一步:将允许使用su的用户添加wheel组
gpasswd -a 用户 wheel #添加用户到wheel组中
第二步:修改/etc/pam.d/su认证配置启用pam_wheel认证
vim /etc/pam.d/su #编辑/etc/pam.d/su文件
auth sufficient pam_rootok.so
#pam_rootok.so模块的主要作用是使uid为0的用户root能够直接通过认证而不用输入密码
auth required pam_wheel.so use_uid
#pam_wheel.so作用是让wheel组内的用户使用su命令,其他人(包括root)无法使用su命令
此时只有root和加入wheel组的账号才是使用su命令
可以看到 在wheel组中的wang用户 和root用户都能使用su命令,未在wheel组内的tako用户没有使用su的权限
ps:
1. auth sufficient pam_rootok.so
2. auth required pam_wheel.so use_uid
- 两行都注释:所有用户都能使用su命令,切换时root和普通用户都需要密码验证
- 开启第一行,注释第二行:(默认状态)允许所有用户间使用su命令进行切换的,切换时,root不需要密码,其他用户需要密码。
- 注释第一行,开启第二行:只有wheel组内的用户才能使用su命令,root用户也无法切换。
- 两行都开启:只有root用户和wheel组内的用户才可以使用su命令。
3. 查看su操作日志
/var/log/secure //是su的日志目录
三、 PAM认证
1. PAM及其应用
- PAM是linux可插拔认证模块,是一套可定制、可动态加载的共享库,系统管理员通过PAM配置文件随意选择程序的认证方式。
- PAM的配置文件位于/etc/pam.d目录下,CentOS7的本地认证模块放置在/lib64/security下。
2. PAM认证原理
- PAM认证顺序:Service(服务)—>PAM(配置文件)—>pam_*.so
- PAM首先确定服务,然后加载相应的PAM配置文件,最后调用PAM认证模块进行安全认证。
- 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM 模块也是不同的。
3. PAM认证构成
-
每一行都是一个独立的认证和过程,它们按从上往下的顺序依次由PAM模块调用
-
每行都有三个分区:认证类型、控制类型、PAM模块、PAM模块参数
认证类型: -
auth 对用户身份进行识别,如提示输入密码,判断是否为root。
-
account 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
-
password 使用用户信息来更新数据,如修改用户密码。
-
session 定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。
控制类型: PAM使用控制类型来处理和判断各个模块的返回值
- required 需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。该行以及所涉及模块的成功是用户通过鉴别的必要条件
- requisite 与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
- sufficient 如果此模块返回成功,则不管后面的验证,直接向程序返回成功,表示验证通过,如果返回失败,则可以看成optional。(慎用)
- optional 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于 session 类型)。不管成功、失败,继续下一模块的验证,且此模块的服务也能享用。
- include 表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
PAM模块
- CentOS7默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
- 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
PAM模块参数:
- 这个需要根据所使用的模块来添加。传递给模块的参数。参数可以有多个,之间用空格分隔开
四、sudo命令
作用:提升执行权限,可以使其他用户使用部分root用户权限
1. 配置sudo权限
- 通过vim /etc/sudoers(默认权限为440 需使用wq!保存退出)
- 通过visudo
2. 配置授权格式
用户 主机名=命令程序列表
用户 主机名=(用户) 命令程序列表
- 用户:直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
- 主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机
- (用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令
- 命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,如果不知道路径可以用“which”查,多个命令之间以逗号“,”进行分隔。ALL则代表系统中的所有命令;通配符“*”表示所有、取反符号“!”表示排除
- 注:初次使用sudo时需验证当前用户的密码,默认超时时长为5分钟,在此期间不再重复验证密码。
3. 设置授权别名
当有些用户、主机名或命令字符比较长或复杂,可以设置别名
- 使用关键字 User_Alias、Host_Alias、Cmnd_Alias 来进行设置别名(别名必须为大写)
多个信息需要用“,”隔开。 - User_Alias USERS=用户名1,用户名2,用户名3 #用户别名,USERS代表后面三个用户
- Host_Alias HOSTS=localhost,bogon #主机别名
- Cmnd_Alias CMNDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel #命令别名
- USERS HOSTS=CMNDS #使用别名编写授权
五、开机安全
1. 调整开机引导设置
- 将第一引导设备设为当前系统所在硬盘。
- 禁止从其他设备(光盘、U盘、网络)引导系统,将对应的项设置为“disabled”。
- 将安全级别设为setup,并设置管理员密码。
2. GRUB限制
grub2-mkpasswd-pbkdf2
#使用grub2-mkpasswd-pbkdf2生成密钥
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
vim /etc/grub.d/00_header
#修改/etc/grub.d/00_header文件,添加密码记录
cat << EOF
set superusers="root"
#设置用户名为root
password_pbkdf2 root grub.pbkdf2……
#设置密码,省略部分内容为经过加密生成的密码字符串
EOF
grub2-mkconfig -o /boot/grub2/grub.cfg #生成新的 grub.cfg 文件
第一步:使用grub2-mkpasswd-pbkdf2生成密钥
第二步:修改/etc/grub.d/00_header文件,添加密码记录
(建议修改前先备份)
第三步:生成新的grub.cfg配置文件
此时在开机加载页面时 按e需要输入设置的用户和密码才能进行修改