目录
5、修改密码规则,修改 /etc/login.defs 文件里的内容来设置密码规则
1、临时清空history显示条数(开机以后还会显示,如果产生新的命令,还会继续显示)
可以通过修改/etc/pam.d/su配置文件来限定使用su命令的用户
永久修改limit限制vim /etc/security/limits.conf
一、系统安全与应用
在运维过程中,安全尤为重要,关于系统账号的安全加固,先总结几点,再逐一上实验:
安全加固操作有哪些 | |||
序号 | 分类 | 指令 | 操作命令 |
1 | 用户账号相关 | 锁定用户 | passwd -l 用户名 usermod -L 用户名 |
2 | 删除长期不登录的用户 | userdel -r 用户名 | |
3 | 程序用户不允许登录 | useradd 程序用户名 -s /sbin/nologin usermod 程序用户名 -s /sbin/nologin | |
4 | 禁止普通用户登录 | useradd 用户名 -s /sbin/nologin usermod 用户名 -s /sbin/nologin 或 touch /etc/nologin | |
5 | 指定用户账号失效时间 | useradd 用户名 -e 账号失效时间(2023-12-1) usermod 用户名 -e 账号失效时间(2023-12-1) | |
6 | 用户密码相关 | 限定密码有效期 | chage -d 0 用户名(下次登录需要改密码) chage -M 1 用户名(限定密码有效时间) |
7 | 设置密码长度 | 修改配置文件/etc/login.defs | |
8 | 限定重要文件的不可删除权限 | chattr +i /etc/passwd /etc/shadow | |
9 | 限制查看历史命令的长度 | vim /etc/profile (修改HISTSIZE的大小) | |
10 | sudo提权限定普通用户 | visudo vim /etc/sudoers | |
11 | 禁止切换用户 | 修改配置文件/etc/pam.d/su |
现在来逐一上实验:
1、锁定用户,不可以切换
##锁定方式
passwd -l 用户名
usermod -L 用户名
2、限定重要文件的删除权限chattr +i
[root@localhost opt]#chattr +i /etc/passwd /etc/shadow
[root@localhost opt]#lsattr /etc/passwd /etc/shadow
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost opt]#rm /etc/passwd
rm:是否删除普通文件 "/etc/passwd"?y
rm: 无法删除"/etc/passwd": 不允许的操作
[root@localhost opt]#chattr -i /etc/passwd /etc/shadow
[root@localhost opt]#lsattr /etc/passwd /etc/shadow
---------------- /etc/passwd
---------------- /etc/shadow
3、限定密码的失效时间
[root@localhost opt]#chage -M 1 zhangsan
[root@localhost opt]#cat /etc/shadow |tail -1
zhangsan:$6$jlpu/pzg$tFxTNvI5Imo/KL1S0nxiGgVAfuNWCPnRYa9YiR5tFmzWFcxfIsPMeeQXn0vIxqF3p6ElnOcWQizu4z1gauPc0.:19668:0:1:7:::
[root@localhost lisi]#chage -d 0 lisi
4、限定账号失效时间
[root@localhost opt]#usermod zhangsan -e 2023-12-7
[root@localhost opt]#cat /etc/shadow |tail -1
zhangsan:$6$jlpu/pzg$tFxTNvI5Imo/KL1S0nxiGgVAfuNWCPnRYa9YiR5tFmzWFcxfIsPMeeQXn0vIxqF3p6ElnOcWQizu4z1gauPc0.:19668:0:1:7::19698:
[root@localhost opt]#
5、修改密码规则,修改 /etc/login.defs 文件里的内容来设置密码规则
6、禁止普通用户登录
[root@localhost ~]#touch /etc/nologin
[root@localhost lisi]#rm -rf /etc/nologin
二、历史命令和终端
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程都会暴露
1、临时清空history显示条数(开机以后还会显示,如果产生新的命令,还会继续显示)
history -c
2、可以永久修改HISTSIZE的大小:直接修改配置文件
vim /etc/profile
##找到HISTSIZE的地方,可以用/HISTSIZE搜索
改为export HISTSIZE=200
##export变量可以向后面的shell传递变量的值,或者将shell函数输出为环境变量。
三、PAM安全认证
1、pam的工作原理
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
举个例子
1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)
PAM 认证类型包括四种:
认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证;
帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等;
密码管理(password management):主要是用来修改用户的密码;
会话管理(session management):主要是提供对会话的管理和记账。
控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果。
1)required 验证失败时仍然继续,但返回 Fail
2)requisite 验证失败则立即结束整个验证过程,返回 Fail
3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
4)optional 不用于验证,只是显示信息(通常用于 session 类型)
2、su,限制用户切换
su命令叫做切换用户,该命令切换用户有两种方式
格式 | 含义 |
su 用户名 | 非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换 |
su - 用户名 | 登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换 |
超级管理员切换至普通用户不需要密码,普通用户切换至超级用户,需要密码
注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。(每一个环境,环境变量可能会不一样,就会混乱)
可以通过修改/etc/pam.d/su配置文件来限定使用su命令的用户
①原始状态:第二行开启,这一行的含义是:sufficient一票通过,允许root用户能够直接通过认证而不用输入密码;
②第一种修改:将第二行注释,这样表明root切换至别的用户也需要输密码
验证一下
③第二种:在原始基础上,打开第六行,即2、6都开启,第六行的意思是,一票否决权,只允许超级管理员组里面的用户切换,2,6行开启的意思为只有root和wheel组用户能使用su命令
④第三种,将第二行注释,将第六行开启,那么就是root切换需要密码,且只允许wheel内使用su命令,那么root不是wheel组的,还能用吗?来验证一下
3、limit限制资源
ulimit 命令学习 都是临时修改
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制. ##常用
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n ##常用
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-u size:最大用户进程数
-v size:设置虚拟内存的最大值.单位:kbytes
unlimited 是一个特殊值,用于表示不限制
演示压力测试
永久修改limit限制vim /etc/security/limits.conf
##生产建议调优方案,建议根据实际情况来设置
* 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
四、授权用户切换sudo
序号 | sudo特性: |
1 | sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员 |
2 | sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器 |
3 | sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票,表示5分钟内不用输入用户密码 |
4 | sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。 它所存放的位置默认是在/etc/sudoers,使用visudo命令可以直接进入修改配置文件 |
5 | 提高了安全性能,不用泄露root密码,还能限定使用特定命令 |
简单来讲,就是通过sudo,可以让普通用户有超级管理员的某些命令权限
第一种:直接进入配置文件修改
vim /etc/sudoers
第二种:使用快捷命令
visudo
写完都可以检测一下语法
visudo -c
使用别名设置sudo权限
生产常用:
User_Alias USERS=xueyin,lisi
#Host_Alias HOST=localhost
Cmnd_Alias CMNDS=/usr/sbin/*,!/usr/sbin/reboot,!/usr/sbin/poweroff,!/usr/sbin/init,!/usr/bin/rm
#//利用别名,批量设置命令
USERS ALL=CMNDS
#//启用格式
##//日志
Defaults logfile = "/var/log/sudo"
总结
第一:与通配符结合使用visudo配置命令权限时,需要注意一个bug,例如允许lisi使用cat命令查看/var/log/目录下以m开头的文件,此时若在后面直接加上一些其他文件没有权限的文件则也可以同时打开(如sudo cat /var/log/messages /etc/passwd 可以查看用户信息文件 )
第二:命令的顺序,不要自相矛盾,比如/usr/bin/cat,!/usr/bin/cat默认后一个命令可以使用,所以范围大的写前面,有包含关系的写前面!!
第三:visudo和/etc/sudoers文件中都有一条默认的允许root用户使用所有命令的规则,但是linux 系统中root用户不一定是超级管理员,若uid等于0的账户是lisi而有一个名为root的普通用户,那么此用户也拥有超级管理员的所有命令执行权限。这叫做开发留了后手
五、grub菜单密码修改
记住一个命令就行:grub2-setpassword(注意是password 不是 passwd)
用于设置grub2菜单的密码