目录
1、账号安全管理
(1)禁止程序用户登录
(2)锁定禁用长期不使用的用户
(3)删除无用的账号
(4)禁止账号和密码的修改
2、密码安全管理
设置密码有效期
1)针对已有用户
2)针对新建用户
3)强制用户下次登录修改密码
3、历史命令安全管理
(1)查看历史命令
(2)限制历史命令数量
(3)清空历史记录
(4)登录后自动清空
(5)自动注销
4、限制su切换用户
5、ssh登录用户输入三次密码错误则锁定用户
6、sudo提权
1、账号安全管理
(1)禁止程序用户登录
usermod -s /sbin/nologin 用户名
(2)锁定禁用长期不使用的用户
passwd -l 用户名 usermod -L 用户名 #查看锁定账号状态 passwd -S 用户名
(3)删除无用的账号
userdel -r 用户名
(4)禁止账号和密码的修改
chattr +i 文件名 #锁定文件状态
chattr -i 文件名 #解锁文件状态
lsattr 文件名 #查看文件状态
输出一个文件,然后锁定其文件状态,无法再往里编辑内容
锁定账号文件/etc/passwd,将无法添加账号,修改账号和删除账号等操作
锁定密码文件/etc/shadow,将无法修改其密码
2、密码安全管理
用户密码文件:/etc/shadow
设置密码有效期
1)针对已有用户
:chage -M 有效期天数 用户名
修改wangwu账号的有限期为30天,查看密码文件发现wangwu的第五个字段密码最长期限为30
2)针对新建用户
vi/etc/login.defs文件里修改PASS_MAX_DAYS 30
修改etc/login.defs文件里PASS_MAX_DAYS值为30,新建用户zhangsan并给其设置密码,查看zhangsan的密码文件,其第五个字段密码最长期限为30
要想使账号永不过期,只需将etc/login.defs文件里PASS_MAX_DAYS值修改为99999
3)强制用户下次登录修改密码
chage -d 0 用户名
3、历史命令安全管理
(1)查看历史命令
history
(2)限制历史命令数量
vim /etc/profile -->export HISTSIZE=数量
source /etc/profile
使查看历史命令只能查看最近30条命令
(3)清空历史记录
history -c(临时清空)
(4)登录后自动清空
历史命令所在文件:vim .bash_history
vim /etc/profile--> echo > ~/.bash_history
编辑/etc/profile文件
重启后查看.bash_history文件
(5)自动注销
vim /etc/profile --> export TMOUT=XX --> source /etc/profile
设置30秒不操作自动注销
4、限制su切换用户
1、将信任的用户加入到wheel组中:gpasswd wheel -a 用户名
2、修改su的PAM认证配置文件:vim /etc/pam.d/su ->开启第六行的配置
补充:PAM的介绍
Linux-PAM,是linux可插拔认证模块,是一套可定制、可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式。
PAM使用/etc/pam.d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置文件,从而调用本地的认证模块,模块放置在/lib64/security下,以加载动态库的形式进行认证。比如使用su命令时,系统会提示输入root用户的密码,这就是su命令通过调用PAM模块实现的。PAM 认证原理:
1.PAM 认证一般遵循的顺序:Service(服务)--> PAM(配置文件)--> pam_*.so;
2.PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于 /lib64/security/下)进行安全认证。
3.用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM 模块也是不同的。
如果想查看某个程序是否支持 PAM 认证,可以用 ls 命令进行查看/etc/pam.d/。PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用
第一列代表PAM认证模块类型
auth:认证模块接口,如验证用户身份、检查密码是否可以通过,并设置用户凭据
account:账户模块接口,检查指定账户是否满足当前验证条件,如用户是否有权访问所请求的服务,检查账户是否到期
password:密码模块接口,用于更改用户密码,以及强制使用强密码配置
session:会话模块接口,用于管理和配置用户会话。会话在用户成功认证之后启动生效第二列代表PAM控制标记
required:模块结果必须成功才能继续认证,如果在此处测试失败,则继续测试引用在该模块接口的下一个模块,直到所有的模块测试完成,才将结果通知给用户。
requisite:模块结果必须成功才能继续认证,如果在此处测试失败,则会立即将失败结果通知给用户。
sufficient:模块结果如果测试失败,将被忽略。如果sufficient模块测试成功,并且之前的required模块没有发生故障,PAM会向应用程序返回通过的结果,不会再调用堆栈中其他模块。
optional:该模块返回的通过/失败结果被忽略。一般不用于验证,只是显示信息(通常用于 session 类型)。
include:与其他控制标志不同,include与模块结果的处理方式无关。该标志用于直接引用其他PAM模块的配置参数第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。
传递给模块的参数。参数可以有多个,之间用空格分隔开
控制标记的补充说明:
required:表示该行以及所涉及模块的成功是用户通过鉴别的【必要条件】。换句话说,只有当对应于应用程序的所有带required标记的模块全部成功后,该程序才能通过鉴别。同时,如果任何带required标记的模块出现了错误,PAM并不立刻将错误消息返回给应用程序,而是在所有此类型模块都调用完毕后才将错误消息返回调用他的程序。
反正说白了,就是必须将所有的此类型模块都执行一次,其中任何一个模块验证出错,验证都会继续进行,并在执行完成之后才返回错误信息。这样做的目的就是不让用户知道自己被哪个模块拒绝,通过一种隐蔽的方式来保护系统服务。就像设置防火墙规则的时候将拒绝类的规则都设置为drop一样,以致于用户在访问网络不成功的时候无法准确判断到底是被拒绝还是目标网络不可达。requisite:与required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别。不同之处在于其一旦失败就不再执行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返回错误信息。与上面的required相比,似乎要显得更光明正大一些。
sufficient:表示该行以及所涉及模块验证成功是用户通过鉴别的【充分条件】。也就是说只要标记为sufficient的模块一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。即便后面的层叠模块使用了requisite或者required控制标志也是一样。当标记为sufficient的模块失败时,sufficient模块会当做optional对待。因此拥有sufficient标志位的配置项在执行验证出错的时候并不会导致整个验证失败,但执行验证成功之时则大门敞开。所以该控制位的使用务必慎重。
optional:他表示即便该行所涉及的模块验证失败用户仍能通过认证。在PAM体系中,带有该标记的模块失败后将继续处理下一模块。也就是说即使本行指定的模块验证失败,也允许用户享受应用程序提供的服务。使用该标志,PAM框架会忽略这个模块产生的验证错误,继续顺序执行下一个层叠模块。
PAM实例:
用户1 用户2 用户3 用户4
auth required 模块1 pass fail pass pass
auth sufficient 模块2 pass pass fail pass
auth required 模块3 pass pass pass fail
结果 pass fail pass pass
5、ssh登录用户输入三次密码错误则锁定用户
vim /etc/pam.d/sshd
auth required pam_tally2.so deny=3 unlock_time=60 even_deny_root root_unlock_time=60
在 /etc/pam.d/sshd 文件中添加auth required pam_tally2.so deny=3 unlock_time=60 even_deny_root root_unlock_time=60
用别的虚拟机终端连接,连续输入三次错误密码会锁定用户,就算你输入正确密码也登不上去,只能等60秒后才能登录成功
6、sudo提权
visudo vim/etc/sudoers(要用wq!强制保存)
#用户/组授权
用户名 主机名=程序列表 #命令要用绝对路径表示,支持通配符*表示所有,!表示取反
%组名 主机名=程序列表
用户名 主机名=NOPASSWD:程序列表 #NOPASSWD:表示sudo不要密码验证
#别名设置
User_Alies 大写的别名=用户1,用户2.....
Host_Alies 大写的别名=主机名1,主机名2....
Cmnd_Alies 大写的别名=命令路径1,命令路径2....
用户别名 主机别名=命令别名
sudo 授权命令#设置sudo日志路径
Defaults logfile = "/var/log/sudo.log"
sudo -l #普通用户查看有哪些sudo权限
wangwu账户是没有临时修改网卡IP的权限
编辑/etc/sudoers文件,在里添加wangwu ALL=/sbin/ifconfig内容
我们再切换到wangwu用户,发现wanngwu用户可以通过sudo来临时修改网卡IP