一.账号安全控制:
一.系统账号清理
1.将非登陆用户的shell设置为 /sbin/nologin
[root@localhost ~]# usermod -s /sbin/nologin lisi
[root@localhost ~]# cat /etc/passwd
lisi:x:1002:1002::/home/lisi:/sbin/nologin
锁定长期不使用的账户:
usermod -L 用户名 passwd -l 用户名 passwd -S 用户名(查看锁定状态)
2. 删除无用的账号:userdel [-r] 用户名
3.锁定帐号文件passwd、shadow
锁定并查看状态
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow //锁定passwd shadow 文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow //查看文件状态
----i----------- /etc/passwd //-----i---- 为锁定状态
----i----------- /etc/shadow //-----i---- 为锁定状态
[root@localhost ~]# passwd zhangsan //更改张三用户密码
更改用户 zhangsan 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd: 鉴定令牌操作错误 //无法更改
解锁文件
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow //解锁pssswd shadow 文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
---------------- /etc/passwd
---------------- /etc/shadow
2.密码安全控制
2.1设置密码有效期
方法一:修改密码配置文件适用于新建用户
vim /etc/login.defs
……
PASS_MAX_DAYS 30
方法二:适用于已有用户
[root@localhost ~]# chage -M 30 用户
[root@localhost ~]# cat /etc/shadow | grep 用户
方法一:
方法二:
2.2要求用户下次登录时修改密码
chage -d 0 lisi 强制在下次登陆时更改密码
cat /etc/shadow | grep 用户 shadow文件中的第三个字段被修改为0
3.命令历史限制
- 减少记录的命令条数
[root@localhost ~]# vim /etc/profile #编辑profile文件
export HISTSIZE=20 #保存20条历史记录
[root@localhost ~]# source /etc/profile #执行一次配置文件,让配置文件生效
- 登录时自动清空命令历史
vi ~/.bashrc
echo " " > ~/.bash_history
重启后清空历史命令
4.终端自动注销
- 闲置600秒后自动注销
vim /etc/profile #编辑profile文件
export TMOUT=600 #设定时间600秒
source /etc/profile #调用配置文件
二、su命令
1.使用su命令切换用户
用途及用法
- 用途:Substitute User,切换用户
- 格式 su -目标用户
密码验证
- root→任意用户,不验证密码
- 普通用户→其他用户,验证目标用户的密码
[root@localhost ~]$ su - root 带-选项表示将使用目标用户的登陆Shell环境
口令:
[root@localhost ~]# whoami
root
2.禁止用户使用su命令
1.将允许使用su命令的用户加入wheel组
gpasswd -a 用户 wheel #添加用户到wheel组中
grep wheel /etc/group #确定wheel组成员
2.启用pam_wheel认证模块
在/etc/pam.d/su文件里设置禁止用户使用su命令
在/etc/pam.d/su文件里设置禁止用户使用su命令
vim /etc/pam.d/su 编辑/etc/pam.d/su文件
2 // auth sufficient pam_rootok.so...
6 // #auth required pam_wheel.so use_uid #去掉此行开头的注释
...【1】以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
【2】两行都注释也是允许所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;
如果第一行不注释,则root使用su切换普通用户就不需要输入密码
(pam_rootok.so模块的主要作用是使uid为0的用户,即 root用户能够直接通过认证而不用输入密码)【3】如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令。
【4】如果注释第一行,开启第二行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。
3.查看su操作记录
- 安全日志文件:/var/log/secure
cat /var/log/secure 查看su命令操作记录
三、Linux中的PAM安全认证
PAM认证模块,叫做可插拔式的认证模块。一项重要的功能就是为了加强su命令的使用控制,可以借助于PAM认证模块,只允许极个别用户使用su命令进行切换。PAM提供了对所有服务进行认证的中央机制,适用于login,远程登录(telnet,rlogin,fsh,ftp),su等应用程序中,系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略。
PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证。用户访问服务器的时候,服务器某一个服务程序把用户的请求发送到PAM模块进行认证,不用的应用程序对应的PAM模块也是不同的。
如果想查看某个程序是否支持 PAM 认证,可以用 ls 命令进行查看/etc/pam.d/。
示例:查看su是否支持PAM模块认证
ls /etc/pam.d | grep su
下面简单的介绍四种常见认证类型:
(1)认证管理(authentication management)接受用户名和密码,进而对该用户的密码进行认证
(2)账户管理(account management)检查账户是否被允许登录系统,账号是否已经过期,账号的登录是否有时间段的限制等
(3)密码管理(password management)主要是用来修改用户的密码
(4)会话管理(session management)主要是提供对会话的管理和记账(accounting)
那么控制类型也可以称做Control Flags,用于PAM验证类型的返回结果,具体有以下四种:
(1)required验证失败时仍然继续验证,但返回Fail
(2)requisite验证失败则立即结束整个验证过程,返回Fail
(3)sufficient验证成功则立即返回,不再继续,否则忽略结果并继续
(4)optional不用于验证,只是显示信息(通常用于session类型)
PAM认证的构成
- 每一行都是独立的认证过程
- 每一行可以区分为三个字段:认证类型、控制类型、PAM模块、PAM模块参数
PAM安全认证流程
四、使用sudo机制提升权限
- 用途:以其他用户身份(如root)执行授权的命令
- 用法:sudo 授权命令
1.配置sudo授权
visudo
或者
vim /etc/sudoers
注意:保存退出时必须执行:wq!才能保存
2.授权格式
语法格式:
用户主机名=命令程序列表
用户主机名=(用户)命令程序列表
用户:直接授权指定的用户名,或采用“%组名"的形式(授权一个组的所有用户)
主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机
(用户): 用户能够以何种身份来执行命令。此项可 省略,缺省时以root用户的身份来运行命令
命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,"进行分隔。ALL则代表系统所有命令
我们给lisi提升权限
[root@localhost ~]# vim /etc/sudoers
3.查看sudo操作记录
- 需启用 Defaults logfile 配置
- 默认日志文件:/var/log/sudo
启用sudo操作日志
visudo
Defaults logfile = /var/log/sudo
这里我们进/var/log目录下查看发现没有sudo日志文件,因为这边没有执行sudo命令没有产生日志文件
4.别名的创建
用户别名 User_Alias
主机别名 Host_Alias
命令别名 Cmnd_AliasJerry localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff
通配符“*”表示所有,取反符号“!”表示排除%whell ALL=NOPASSWD:ALL
表示wheel组成员无需验证密码即可使用sudo执行任何命令使用关键字 User_Alias Host_Alias Cmnd_Alias 来进行设置别名(别名必须为大写)
User_Alias USERS=Tom,Jerry,Mike 用户的别名users包括:Tom,Jerry,Mike
Host_Alias HOSTS=localhost,bogon 主机别名hosts包括:localhost,bogon
Cmnd_Alias CMNDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel
USERS HOSTS=CMNDS 用户组 主机组 = 命令程序列表
五、开关机安全控制
1.调整BIOS引导设置
将第一引导设备设为当前系统所在硬盘
禁止从其他设备(光盘、U盘、网络)引导系统
将安全级别设为setup,并设置管理员密码
2.GRUB限制
使用grub2-mkpasswd-pbkdf2生成密钥
修改/etc/grub.d/00_header文件,添加密码记录
生成新的grub.cfg配置文件
2.1 限制修改GRUB引导参数
通常情况下在系统开机进入GRUB 菜单时,按 e 键可以查看并修改GRUB 引导参数,这对服务器是一个极大的威胁。可以为 GRUB 菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
grub2-mkpasswd-pbkdf2 #根据提示设置GRUB 菜单的密码
PBKDF2 hash of your password is grub.pbkdf2…… #省略部分内容为经过加密生成的密码字符串cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
cp /etc/grub.d/00_header /etc/grub.d/00_header.bakvim /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 文件
六、终端登录安全控制
1.限制root只在安全终端登录
- 安全终端配置:/etc/securetty
[root@localhost ~]# vim /etc/securetty
#tty5 #禁止root用户从终端tty5,tty6登录
#tty6
2.禁止普通用户登录
- 建立/etc/nologin文件
- 删除nologin文件或重启后即恢复正常
touch /etc/nologin #禁止普通用户登录
rm -rf /etc/nologin #取消登录限制