CentOS7 运维 - 让你的Linux服务器更安全 | 用户账号分权管理 | GRUB保护 | 超详细

一、账户安全管理

①清理系统账户

  • 将非登陆用户的Shell设为/sbin/nologin或者/bin/falsh
usermod -s /sbin/nologin 用户名
  • 锁定长期不使用的账号
usermod -L 用户名           //锁定用户账户  
passwd -l 用户名            //锁定用户密码
passwd -S 用户名            //查看用户状态
  • 删除无用的账号
userdel -r 用户名           //删除用户及其宿主目录
  • 清空一个账号密码
passwd -d 用户名            //清空账户密码
  • 锁定账号文件passwd、shadow
chattr +i /etc/passwd /etc/shadow      //锁定文件
lsattr /etc/passwd /etc/shadow         //查看文件状态
chattr -i /etc/passwd /etc/shadow      //解锁文件

  • 禁止root用户登录
    在 Linux 系统中,login 程序会读取/etc/securetty 文件,以决定允许 root 用户从哪些终端(安全终端)登录系统
vi /etc/securetty           
#tty5           
//想要不让在哪个终端登陆就在该终端前加注释#
tty6  
  • 禁止普通用户登录
  • login 程序会检查/etc/nologin 文件是否存在,如果存在,则拒绝普通用户登录系统(root 用户不受限制)
touch /etc/nologin
//创建/etc/nologin文件即禁止普通用户登录
rm -rf /etc/nologin			
//删除该文件即取消登录限制

②密码安全控制

chage -M 日期 用户                //设置用户密码有效期
chage -E xxxx-xx-xx             //设置过期日期
[xxxx为年][xx为月]-[xx为日]

►设置新用户的密码有效期

vim /etc/login.defs     //修改密码配置文件适用于新建用户

►强制使某个用户下次登陆时更换密码

chage -d 0 用户             //强制在下次登陆时更改密码

③防止历史记录泄露

不法分子会查看上次输入的记录,可能导致root密码等重要信息揭露

►减少记录的命令条数

vi /etc/profile              //编辑全局变量配置文件
export HISTZIZE=200          //将内容插入最后一行


输出的历史记录将只保留200条

►登录时自动清理历史记录

vim ~/.bashrc
echo " " > ~/.bash_history     //将内容插入最后一行

④终端自动注销

当终端处于闲置一段时间后实现自动注销

vim /etc/profile              //编辑全局变量配置文件
export TMOUT=600             //将内容插入最后一行

⑤su用户切换命令

su命令使得每个用户都具有反复尝试其他用户的登陆密码,若是root用户,则风险更大

  1. 将允许使用su命令的用户加入wheel组
  2. 启用pam_wheel认证模块
vim /etc/pam.d/su

  • 以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的
  • 两行都注释也是允许所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码

pam_rootok.so模块的主要作用是使uid为0的用户,即 root用户能够直接通过认证而不用输入密码

  • 如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
  • 如果注释第一行,开启第二行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令

►第一列代表PAM认证模块类型
auth:对用户身份进行识别,如提示输入密码,判断是否为root。
account:对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
password:使用用户信息来更新数据,如修改用户密码。
session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。

►第二列代表PAM控制标记
required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
④optional:不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于 session 类型)。
include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。

►第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。

►第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。

►限制用户进行切换用户操作

vim /etc/pam.d/su
#auth    required    pam_wheel.so use_uid
//去除此段的#


►给某个用户切换用户操作的权限

gpasswd -a fox wheel     //将用户“fox”加入到whell组中

二、PAM安全认证

Linux-PAMlinux可插拔认证模块,是一套可定制、可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式

PAM使用/etc/pam.d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置文件,从而调用本地的认证模块,模块放置在/lib64/security下,以加载动态库的形式进行认证。比如使用su命令时,系统会提示输入root用户的密码,这就是su命令通过调用PAM模块实现的

查看su操作记录
安全日志文件:/var/log/secure

cat /var/log/secure

①PAM 认证原理

PAM 认证一般遵循的顺序:Service(服务)→PAM(配置文件)→pam_*.so(认证模块)

PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于 /lib64/security/下)进行安全认证

►用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM 模块也是不同的
如果想查看某个程序是否支持 PAM 认证,可以用 ls 命令进行查看/etc/pam.d/

ls /etc/pam.d/                    //PAM配置文件

ls /lib64/security/             //认证模块

三、账户权限管理

vim /etc/sudoers         //默认为只读,保存方式:wq!
或
visudo

①单个用户权限

►格式1:用户 主机名=命令程序列表
►格式2:(用户) 主机名=命令程序列表

fox foxhome=/sbin/ifconfig  //使fox拥有ifconfig权限
fox foxhome=!/sbin/reboot   //使fox没有reboot权限
fox foxhome=/sbin/*         //使fox拥有所有sbin权限
fox foxhome=/sbin/reboot,poweroff //加逗号自定义

►禁止某用户开关机

②别名组权限

►用户别名 User_Alias
►主机别名 Host_Alias
►命令别名 Cmnd_Alias

User_Alias USERS=fox,cat 
//用户的别名users包含fox和cat
Host_Alias HOSTS=foxhome,cathome   
//主机别名hosts包括:foxhome和cathome
Cmnd_Alias CMNDS=/sbin/reboot,poweroff
//可执行的命令包括关机和重启
USERS HOSTS=CMNDS        
//相当于:用户组   主机组  =  命令程序列表

四、GRUB保护

不法分子会借着开关机的期间进入BIOS界面篡改GRUB的内容,最后导致服务器无法正常开启

①设置GRUB密码

►使用grub2-mkpasswd-pbkdf2生成密钥

grub2-mkpasswd-pbkdf2

从grub到最后都是密钥,记得保存好

创建登录用户前记得先备份

//对重要文件进行备份
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

猜你喜欢

转载自blog.csdn.net/qq_42427971/article/details/113571645