目录
1.账号安全控制
1.1 系统账号清理
1.2 密码安全控制
1.3 命令历史限制
1.4 命令总结
2.系统引导和登录控制
2.1 使用su命令切换用户
2.2 限制使用su命令的用户
3.可插拔式认证模块PAM
3.1 linux中的PAM安全认证
3.2 PAM认证原理编辑
3.3 PAM认证的构成
3.4 PAM安全认证流程
3.5 使用sudo机制提升权限
3.6 配置sudo授权
1.账号安全控制
1.1 系统账号清理
系统账号清理
chattr + i [文件名]:锁定指定文件
chattr +i /etc/passwd /etc/shadow #锁定这两个文件/etc/passwd /etc/shadow
lsattr /etc/passwd #查看指定文件/etc/passwd的状态,是否被锁定
----i----------- /etc/passwd #----i-----------表示该文件被锁定
ll /etc/passwd
-rw-r--r--. 1 root root 2298 4月 12 14:38 /etc/passwd #查看可得所属主用户root具有编辑权限
echo 1111 >> /etc/passwd #尝试编辑/etc/passwd文件
-bash: /etc/passwd: 权限不够 #/etc/passwd /etc/shadow这两个文件被锁定,将无法再修改编辑,例如修改用户密码、删除和添加用户都不允许,包括超级用户root
useradd lisi #/etc/passwd /etc/shadow这两个文件被锁定,无法增加新用户
useradd:无法打开 /etc/passwd
echo 123123 | passwd --stdin clr #/etc/passwd /etc/shadow这两个文件被锁定,无法修改用户密码
更改用户 clr 的密码 。
passwd: 鉴定令牌操作错误
userdel clr #/etc/passwd /etc/shadow 这两个文件被锁定,无法删除已有用户
userdel:无法打开 /etc/passwd
chattr - i [文件名]:解锁指定文件;
chattr -i /etc/passwd /etc/shadow #解锁指定文件
lsattr /etc/passwd #查看指定文件/etc/passwd的状态,是否被锁定
---------------- /etc/passwd #----------------表示该文件未被锁定
useradd lisi #添加用户
userdel lisi #删除用户
echo 123123 | passwd --stdin clr #修改用户密码
更改用户 clr 的密码 。
passwd:所有的身份验证令牌已经成功更新。 #解锁这两个文件/etc/passwd /etc/shadow之后,可以删除、添加和修改用户密码
which chattr #查看命令chattr在系统中的位置
/usr/bin/chattr
md5sum [文件名]:通过校验和,判断一个指定文件的数据内容是否被修改;
注意:一个文件无法被写入或修改的可能原因:用户权限不够,不具有对该文件的修改权限;该文件被锁定,无法修改编辑lsattr [文件名]:查看该文件是否被锁定。
1.2 密码安全控制
/etc/login.defs文件:查看用户账号的基本属性;
useradd dingzhen #修改/etc/login.defs文件,将密码有效期更改为30天,添加新用户
vim /etc/shadow #查看新用户的密码有效期
dingzhen:!!:19459:0:30:7::: #可以看到新创建的用户丁真的密码有效期为30天
chage -M [密码有效期天数] [系统中已存在的用户名]:修改系统中已经存在用户的密码有效期
chage -d 0 [用户名]:强制指定用户在下次登录时修改密码;
1.3 命令历史限制
export HISTSIZE:export全局变量,实现在所有的shell环境中都有效,保留指定要求的历史命令条数;
vim /etc/profile #修改/etc/profile 文件,设置export HISTSIZE参数,更改保留历史命令条数
export HISTSIZE=20 #export实现全局变量在所有的shell环境中都有效,修改HISTSIZE的参数为20,表示历史命令只保留20条
source /etc/profile #source命令用于在当前shell环境中重新加载/etc/profile文件
. /etc/profile #与同上效果一样
history -c:临时清空历史命令,系统重启之后历史命令会依然保留;
history -c #临时清空历史命令
reboot #重启系统
ls -A
.bash_history #历史命令保留在该文件中 、
vim .bash_history #所有历史命令都保存在.bash_history文件中
echo ’ ’ > /.bash_history:将空数据内容重定向写入到/.bash_history文件中,实现开机登录,自动清空历史命令;
vim /etc/profile #修改/etc/profile文件,设置export HISTSIZE参数,更改保留历史命令条数,或者直接将~/.bash_history文件清空
export HISTSIZE=20
echo '' > ~/.bash_history #实现将~/.bash_history文件清空
reboot #重启系统
vim .bash_history #.bash_history文件中历史命令已清除
history
1 vim .bash_history
2 history
修改/etc/bashrc文件:实现开机登录,自动清空历史命令;
1.4 命令总结
账号安全
禁止用户登录系统
usermod -s /sbin/nologin 用户名 #禁止用户登录系统
锁定用户
usermod -L 用户名
passwd -l 用户名
查看指定用户是否被锁定
passwd -s 用户名 #查看指定用户状态,是否被锁定
删除用户
userdel -r 用户名 #删除指定用户连同宿主目录一并删除
锁定指定文件:userdel -r 用户名 #删除指定用户连同宿主目录一起删除
解锁指定文件:chattr -i /etc/passwd,shadow
查看指定文件,是否被锁定:lsattr 文件名
密码安全
设置密码有效期 chage -M 天数 用户名 #针对已存在的用户,99999代表密码永不过时
/etc/login.defs -->PASS_MAX_DAYS #针对新建用户
登录立即修改密码:chage -d 0 用户名
历史命令
闲置历史命令数:/etc/profile --> export HISTSIZE 历史命令条数----> source /etc/profile
清空历史命令:history -c--->echo ' ' ~/.bash_history
2.系统引导和登录控制
2.1 使用su命令切换用户
su - 用户名:切换并加载目标用户的家目录和shell环境;
2.2 限制使用su命令的用户
gpasswd -a [用户名] wheel:将指定用户加入到wheel组中;
vim /etc/group #查看系统中已有的组名以及组账号
wheel:x:10: #wheel组
gpasswd -a zhangsan wheel #将zhangsan用户加入到wheel组中
id zhangsan
uid=1005(xiaozhang) gid=1005(zhangsan) 组=1005(zhangsan),10(wheel)
vim /etc/pam.d/su
2 auth sufficient pam_rootok.so #root用户可以免密切换到其他用户
6 auth required pam_wheel.so use_uid #只有加入到wheel组的用户才可以认证登录,切换到其他用户
[root@clr ~]# su zhangsan #root用户可以免密切换到其他任意用户
[zhangsan@clr /root]$ su root #没有加入到wheel组的普通用户没有切换到root用户的权限
密码:
su: 拒绝权限
[zhangsan@clr /root]$ su lisi #没有加入到wheel组的普通用户没有切换到其他用户的权限
密码:
su: 拒绝权限
[root@clr ~]# su zhangsan
[xiaozhang@clr /root]$ su root #加入到wheel组的zhangsan用户可以切换到普通用户root
密码:
[zhangsan@clr /root]$ exit
exit
[xiaozhang@clr /root]$ su root #加入到wheel组的xiaozhang用户可以切换到超级用户root
密码:
修改su的PAM认证配置文件 vim /etc/pam.d/su -> 开启 auth required pam_wheel.so use_uid 的配置
总结
(1)将可信任能够使用su命令切换的用户加入到wheel组中;
(2)在/etc/pam.d/su文件中,取消第二行和第六行的注释,即可实现root用户可以免密切换到其他普通用户,只有加入到wheel组中 的可信任用户能够使用su命令,并输入正确的密码切换到其他用户中。
3.可插拔式认证模块PAM
3.1 linux中的PAM安全认证
3.2 PAM认证原理
PAM认证模块
/etc/pam.d:PAM配置文件;
[root@localhost ~]# ls /etc/pam.d #查看相关服务的PAM配置文件
atd gdm-pin postlogin-ac su
chfn gdm-smartcard ppp sudo
chsh ksu remote sudo-i
config-util liveinst runuser su-l
crond login runuser-l system-auth
cups other setup system-auth-ac
PAM认证模块文件
3.3 PAM认证的构成
3.4 PAM安全认证流程
3.5 使用sudo机制提升权限
用户名 ALL=(root) /usr/sbin/ifconfig #赋予普通用户以root身份添加网卡IP地址的权限;
[root@localhost ~]# su - zhangsan #切换到普通用户zhangsan
[zhangsan@localhost ~]$ ifconfig ens33:0 192.168.80.120/24 #普通用户zhangsan给网卡添加IP地址,由于添加网卡属于超级管理员的操作,因此普通用户无法操作
SIOCSIFADDR: 不允许的操作
SIOCSIFFLAGS: 不允许的操作
SIOCSIFNETMASK: 不允许的操作
[zhangsan@localhost ~]$ sudo ifconfig ens33:0 192.168.80.120/24 #添加sudo命令后,仍然无法添加网卡地址
vim /etc/sudoers #修改/etc/sudoers配置文件
zhangsan ALL=(root) /usr/sbin/ifconfig #赋予普通用户zhangsan以root身份添加网卡IP地址的权限
sudo ifconfig ens32:1 192.16.80.100/24
此时zhangsan用户就可以修改网卡
GZY ALL = NOPASSWD: ADMIN:赋予别名GZY内的所有用户在所有主机上以root身份执行ADMIN程序内的所有命令权限,并且不需要使用密码
[root@localhost ~]# vim /etc/sudoers
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL #赋予wheel组成员在所有主机上对所有命令的权限,效果类似于超级用户root
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
zhangsan ALL=(root) /usr/sbin/ifconfig #赋予普通用户zhangsan,以root身份给网卡添加IP地址的权限
lisi ALL=!/bin/rm #禁止lisi用户删除文件的权限
User_Alias GZY=zhangsan,lisi #给zhangsan,lisi这两个用户设置别名GZY
Cmnd_Alias ADMIN=/sbin/*,!/usr/sbin/reboot,!/usr/sbin/poweroff,!/usr/sbin/init,!/usr/sbin/shutdown
#给指定程序命令设置别名ADMIN,(赋予超级管理员用户的所有权限,重启系统、立即关机命令除外)
GZY ALL = NOPASSWD: ADMIN #赋予别名GZY内的所有用户在所有主机上以root身份执行ADMIN程序内的所有命令权限,并且不需要使用密码
[root@localhost ~]# su - zhangsan
上一次登录:三 4月 12 23:44:03 CST 2023pts/0 上
[zhangsan@localhost ~]$ which route
/usr/sbin/route
[zhangsan@localhost ~]$ sudo route add -net 10.0.0.0/24 gw 192.168.80.20 dev ens33 #此时普通用户zhangsan可以使用超级用户root添加路由的权限
[zhangsan@localhost ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.80.2 0.0.0.0 UG 100 0 0 ens35
0.0.0.0 192.168.80.2 0.0.0.0 UG 101 0 0 ens33
10.0.0.0 192.168.80.20 255.255.255.0 UG 0 0 0 ens33 #新添加的路由信息
[zhangsan@localhost ~]$ sudo reboot #禁止zhangsan用户的重启操作
对不起,用户 zhangsan 无权以 root 的身份在 localhost 上执行 /sbin/reboot。
[zhangsan@localhost ~]$ exit
登出
[root@localhost ~]# su - lisi
上一次登录:三 4月 12 23:48:56 CST 2023pts/0 上
[lisi@localhost ~]$ sudo ifconfig ens33:1 192.168.80.34 #此时普通用户lisi可以使用超级用户root添加网卡IP地址的权限
[lisi@localhost ~]$ ifconfig
ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.80.34 netmask 255.255.255.0 broadcast 192.168.80.255
ether 00:0c:29:e6:e0:8a txqueuelen 1000 (Ethernet)
[lisi@localhost ~]$ sudo init 6 #禁止普通用户lisi重启系统的权限
对不起,用户 lisi 无权以 root 的身份在 localhost 上执行 /sbin/init 6。
sudo -l:查看当前登录用户获得那些sudo授权
[lisi@localhost ~]$ sudo -l #查看当前用户lisi获得那些sudo授权
匹配 %2$s 上 %1$s 的默认条目:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME
HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 lisi 可以在 localhost 上运行以下命令:
(root) !/bin/rm
(root) NOPASSWD: /sbin/*, !/usr/sbin/reboot, !/usr/sbin/poweroff, !/usr/sbin/init, !/usr/sbin/shutdown
3.6 配置sudo授权