系统账号清理
chattr + i [文件名]:锁定指定文件;
[root@clr ~]# chattr +i /etc/passwd /etc/shadow #锁定这两个文件/etc/passwd /etc/shadow
[root@clr ~]# lsattr /etc/passwd #查看指定文件/etc/passwd的状态,是否被锁定
----i----------- /etc/passwd #----i-----------表示该文件被锁定
[root@clr ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2298 4月 12 14:38 /etc/passwd #查看可得所属主用户root具有编辑权限
[root@clr ~]# echo 1111 >> /etc/passwd #尝试编辑/etc/passwd文件
-bash: /etc/passwd: 权限不够 #/etc/passwd /etc/shadow 这两个文件被锁定,将无法再修改编辑,例如修改用户密码、删除和添加用户都不允许,包括超级用户root
[root@clr ~]# useradd lisi #/etc/passwd /etc/shadow 这两个文件被锁定,无法增加新用户
useradd:无法打开 /etc/passwd
[root@clr ~]# echo 123123 | passwd --stdin clr #/etc/passwd /etc/shadow 这两个文件被锁定,无法修改用户密码
更改用户 clr 的密码 。
passwd: 鉴定令牌操作错误
[root@clr ~]# userdel clr #/etc/passwd /etc/shadow 这两个文件被锁定,无法删除已有用户
userdel:无法打开 /etc/passwd
chattr - i [文件名]:解锁指定文件;
[root@clr ~]# chattr -i /etc/passwd /etc/shadow #解锁指定文件
[root@clr ~]# lsattr /etc/passwd #查看指定文件/etc/passwd的状态,是否被锁定
---------------- /etc/passwd #----------------表示该文件未被锁定
[root@clr ~]# useradd lisi #添加用户
[root@clr ~]# userdel lisi #删除用户
[root@clr ~]# echo 123123 | passwd --stdin clr #修改用户密码
更改用户 clr 的密码 。
passwd:所有的身份验证令牌已经成功更新。 #解锁这两个文件/etc/passwd /etc/shadow之后,可以删除、添加和修改用户密码
[root@clr ~]# which chattr #查看命令chattr在系统中的位置
/usr/bin/chattr
md5sum [文件名]:查看指定用户的校验和(作用:判断一个文件的数据是否被修改);
[root@clr ~]# cat /etc/passwd | wc -l #统计系统中用户数量
44
[root@clr ~]# md5sum /etc/passwd
af6103b25d3d02c19014b675b93e1fb6 /etc/passwd #/etc/passwd文件的af6103b25d3d02c19014b675b93e1fb6校验和
[root@clr ~]# useradd zhangsan #添加用户,会导致/etc/passwd文件被修改
[root@clr ~]# md5sum /etc/passwd
ea46a9545295017f2676c1489bbf1013 /etc/passwd #/etc/passwd文件此时的ea46a9545295017f2676c1489bbf1013校验和,与之前不同,说明该文件已经被修改过
[root@clr ~]# md5sum /etc/shadow
09147db1291f537b3963350393f02345 /etc/shadow
[root@clr ~]# echo 123123 | passwd --stdin zhangsan #修改用户密码会更改/etc/shadow这个文件
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@clr ~]# md5sum /etc/shadow #查看此时/etc/shadow文件的校验码已经发生改变
d1e9f8e24fb741fee5f6bfa9d6e11c3c /etc/shadow
[root@clr ~]# md5sum /etc/shadow >> ./data.txt #将指定文件的md5sum校验和重定向写入到当前目录下的data.txt文件中
[root@clr ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg 公共 视频 文档 音乐
data.txt nohup.out 模板 图片 下载 桌面
[root@clr ~]# cat data.txt #查看data.txt目录中是否有新增加/etc/shadow的校验和文件
d1e9f8e24fb741fee5f6bfa9d6e11c3c /etc/shadow
注意:
一个文件无法被写入或修改的可能原因:用户权限不够,不具有对该文件的修改权限;该文件被锁定,无法修改编辑lsattr [文件名]:查看该文件是否被锁定。
/etc/login.defs文件:查看用户账号的基本属性;
[root@clr ~]# vim /etc/login.defs
#
#PASS_MAX_DAYS 99999 #密码的最长有效天数,99999代表无限期,只针对新建用户有效,对于系统中已经存在的用户是无效的
PASS_MAX_DAYS 30 #修改密码有效期为30天
PASS_MIN_DAYS 0 #密码的最短有效天数
PASS_MIN_LEN 5 #密码的最短长度
PASS_WARN_AGE 7 #报警日期
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000 #普通用户的UID号
UID_MAX 60000
[root@clr ~]# useradd xiaogao #修改/etc/login.defs文件,将密码有效期更改
为30天,添加新用户
[root@clr ~]# vim /etc/shadow #查看新用户的密码有效期
ftp:*:18353:0:99999:7:::
zhangsan:$6$.9TkGSqf$hw4Un3tB6VU.tl4QT1Uoau5p.ZYPq9VXCX5D5gsaTZgHfbsyN6JInrE8ZX4U38yccuGY2kF2n1P2yJBMimdar.:19459:0:99999:7:::
xiaogao:!!:19459:0:30:7::: #可以看到新创建的用户xiaogou的密码有效期为30天
chage -M [密码有效期天数] [系统中已存在的用户名]:修改系统中已经存在用户的密码有效期;
[root@clr ~]# chage -M 50 xiaozhang #修改系统中已经存在用户xiaozhang的密码有效期为50天;
[root@clr ~]# vim /etc/shadow #查看用户密码文件
nobody:*:18353:0:99999:7:::
xiaogao:!!:19459:0:30:7:::
xiaozhang:!!:19459:0:50:7::19459: #可以查看到已将用户xiaozhang的密码有效期更改为50天
chage -d 0 [用户名]:强制指定用户在下次登录时修改密码;
[root@clr ~]# echo 123 | passwd --stdin zhangsan #修改zhangsan用户的登录密码为123
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@clr ~]# chage -d 0 zhangsan #强制指定用户zhangsan在下次登录时修改密码
[root@clr ~]# vim /etc/shadow
lisi:!!:19459:0:99999:7:::
zhangsan:$6$onQc494r$hLmUnQ1CFU9E8kJ5JjpDA9rmUUT5jo8vFpi/85yoQuL1jvvdylnoWIZyMnxFGk1sPcKKJEHL9TDHSR7J3SAsf0:0:0:99999:7::: #可以查看到第三字段为0,表示zhangsan用户在下次登录系统时需要修改密码
export HISTSIZE:export全局变量,实现在所有的shell环境中都有效,保留指定要求的历史命令条数;
[root@clr ~]# vim /etc/profile #修改/etc/profile 文件,设置export HISTSIZE参数,更改保留历史命令条数;
# /etc/profile
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
unset i
unset -f pathmunge
export HISTSIZE=10 #export实现全局变量在所有的shell环境中都有效,修改HISTSIZE的参数为20,表示历史命令只保留20条
[root@clr ~]# source /etc/profile #source命令用于在当前shell环境中重新加载/etc/profile文件
[root@clr ~]# history #只剩下修改后的10条历史命令
141 chage -d 0 zhangsan
142 vim /etc/shadow
143 echo 123 | passwd --stdin zhangsan
144 chage -d 0 zhangsan
145 history
146 vim /etc/profile
147 source /etc/profile
148 vim /etc/profile
149 source /etc/profile
150 history
history -c:临时清空历史命令,系统重启之后历史命令会依然保留;
[root@clr ~]# history -c #临时清空历史命令
[root@clr ~]# history
132 history
[root@clr ~]# reboot #重启系统
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(CentOS 7-2) at 18:51:50.
Type `help' to learn how to use Xshell prompt.
[root@clr ~]# ls -A
.abc.txt.swp .bash_logout .cache data.txt .ICEauthority nohup.out .Xauthority 视频 下载
anaconda-ks.cfg .bash_profile .config .dbus initial-setup-ks.cfg .tcshrc 公共 图片 音乐
.bash_history #历史命令保留在该文件中 .bashrc .cshrc .esd_auth .local .viminfo 模板 文档 桌面
[root@clr ~]# vim .bash_history #所有历史命令都保存在.bash_history文件中
atrm 3
atq
which grub.cfg
crontab -e
crontab -l
crontab -l
crontab -e
vim /etc/crontab
history
reboot
~
".bash_history" 20L, 311C
echo ’ ’ > ~/.bash_history:实现开机登录,自动清空历史命令;
[root@clr ~]# vim /etc/profile #修改/etc/profile 文件,设置export HISTSIZE参数,更改保留历史命令条数,或者直接将~/.bash_history;
# /etc/profile
unset i
unset -f pathmunge
export HISTSIZE=20
echo '' > ~/.bash_history #实现将~/.bash_history文件清空
[root@clr ~]# reboot #重启系统
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(CentOS 7-2) at 19:09:07.
Type `help' to learn how to use Xshell prompt.
[root@clr ~]# vim .bash_history #.bash_history文件中历史命令已清除
[root@clr ~]# history
1 vim .bash_history
2 history
修改/etc/bashrc文件:实现开机登录,自动清空历史命令;
[root@clr ~]# vim /etc/bashrc
# vim:ts=4:sw=4
PS1="\[\e[1;35m\][\[\e[1;34m\]\u\[\e[1;36m\]@\[\e[1;34m\]\h \[\e[1;31m\]\w\[\e[1;35m\]]\[\e[1;36m\]\\$\[\e[0m\] "
history -c #将history -c放置在history -c文件中,实现在开机自启或者切换shell环境时,都自动清除历史命令
export TMOUT=[指定时间]:修改该参数,设置闲置指定时间后,终端自动注销,默认为0,表示终端永不注销;
[root@clr ~]# vim /etc/profile
echo '' > ~/.bash_history
export TMOUT=60 #修改该参数,设置闲置1分钟后,终端自动注销,默认为0,表示永不注销
[root@clr ~]# source /etc/profile
su - 用户名:切换并加载目标用户的家目录和shell环境;
[root@clr ~]# cd /opt/ #切换到/opt/目录下
[root@clr /opt]# su zhangsan
[zhangsan@clr /opt]$ exit #虽然此时登录的是zhangsan用户,但仍然还是处于/opt/目录下
exit
[root@clr /opt]# su - zhangsan
上一次登录:三 4月 12 20:39:09 CST 2023pts/0 上
[zhangsan@clr ~]$ ls -A #已经切换到zhangsan用户的家目录中
.bash_history .bash_profile .cache .dbus .ICEauthority .mozilla 模板 图片 下载 桌面
.bash_logout .bashrc #zhangsan用户加载的.bashrc文件 .config .esd_auth .local 公共 视频 文档 音乐
[root@clr ~]# su zhangsan #超级用户root切换到普通用户zhangsan,不需要密码
[zhangsan@clr /root]$ su root #普通用户zhangsan切换到root用户,需要密码
密码:
su: 鉴定故障
[zhangsan@clr /root]$ su lisi #普通用户zhangsan切换到普通用户lisi,也需要密码
密码:
[lisi@clr /root]$ whoami #查看当前登录用户
lisi
gpasswd -a [用户名] wheel:将指定用户加入到wheel组中;
[root@clr ~]# vim /etc/group #查看系统中已有的组名以及组账号
root:x:0:
mem:x:8:
kmem:x:9:
wheel:x:10: #wheel组
cdrom:x:11:
[root@clr ~]# gpasswd -a xiaozhang wheel #将xiaozhang用户加入到wheel组中
正在将用户“xiaozhang”加入到“wheel”组中
[root@clr ~]# id xiaozhang
uid=1005(xiaozhang) gid=1005(xiaozhang) 组=1005(xiaozhang),10(wheel)
[root@clr ~]# vim /etc/pam.d/su
1 #%PAM-1.0
2 auth sufficient pam_rootok.so #代表root用户可以免密切换
3 # Uncomment the following line to implicitly trust users in the "wheel" group.
4 #auth sufficient pam_wheel.so trust use_uid
5 # Uncomment the following line to require a user to be in the "wheel" group.
6 auth required pam_wheel.so use_uid #代表加入wheel组的用户才可以认证登录,切换到其他用户
7 auth substack system-auth
[root@clr ~]# su zhangsan #root用户可以免密切换到其他任意用户
[zhangsan@clr /root]$ su root #没有加入到wheel组的普通用户没有切换到root用户的权限
密码:
su: 拒绝权限
[zhangsan@clr /root]$ su lisi #没有加入到wheel组的普通用户没有切换到其他用户的权限
密码:
su: 拒绝权限
[zhangsan@clr /root]$ exit
exit
[root@clr ~]# su xiaozhang
[xiaozhang@clr /root]$ su zhangsan #加入到wheel组的xiaozhang用户可以切换到普通用户zhangsan
密码:
[zhangsan@clr /root]$ exit
exit
[xiaozhang@clr /root]$ su root #加入到wheel组的xiaozhang用户可以切换到超级用户root
密码:
如上图所示:
第2行开启,第6行注释时,这种状态下是允许所有用户间使用su命令进行切换,但root使用su切换普通用户不需要输入密码。
如上图所示
第2行和第6行都开启,表示只有root用户和wheel组内的用户才可以使用su命令。
如上图所示:
第2行注释,第6行都开启时,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。
如上图所示:**
第2行和第6行都注释时,表示所有用户都能使用su命令,但root下使用su切换到其他普通用户也需要输入密码。**
/etc/pam.d:PAM配置文件;
[root@clr ~]# ls /etc/pam.d #查看相关服务的PAM配置文件
atd fingerprint-auth-ac ksu pluto runuser-l sssd-shadowutils systemd-user
chfn gdm-autologin liveinst polkit-1 setup su vlock
chsh gdm-fingerprint login postlogin smartcard-auth sudo vmtoolsd
config-util gdm-launch-environment other postlogin-ac smartcard-auth-ac sudo-i xserver
crond gdm-password passwd ppp smtp su-l
cups gdm-pin password-auth remote smtp.postfix system-auth
fingerprint-auth gdm-smartcard password-auth-ac runuser sshd system-auth-ac
lib64/security:调用认证文件进行安全认证;
[root@clr ~]# cd /lib64/security #调用认证文件进行安全认证
[root@clr /lib64/security]# ll
总用量 1232
-rwxr-xr-x. 1 root root 19680 4月 1 2020 pam_access.so
-rwxr-xr-x. 1 root root 11184 4月 1 2020 pam_cap.so
-rwxr-xr-x. 1 root root 11192 4月 1 2020 pam_chroot.so
用户名 ALL=(root) /usr/sbin/ifconfig #赋予普通用户以root身份添加网卡IP地址的权限;
[root@clr ~]# su - zhangsan #切换到普通用户zhangsan
上一次登录:三 4月 12 22:05:21 CST 2023pts/0
[zhangsan@clr ~]$ ifconfig ens33:0 192.168.80.120/24 #普通用户zhangsan给网卡添加IP地址,由于添加网卡属于超级管理员的操作,因此普通用户无法操作
SIOCSIFADDR: 不允许的操作
SIOCSIFFLAGS: 不允许的操作
SIOCSIFNETMASK: 不允许的操作
[zhangsan@clr ~]$ sudo ifconfig ens33:0 192.168.80.120/24 #添加sudo命令后,仍然无法添加网卡地址
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] zhangsan 的密码:
zhangsan 不在 sudoers 文件中。此事将被报告。
[zhangsan@clr ~]$ exit
登出
您在 /var/spool/mail/root 中有新邮件
[root@clr ~]# vim /etc/sudoers #修改/etc/sudoers配置文件
root ALL=(ALL) ALL
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL #wheel组成员操作权限,效果类似于超级用户
## Allows members of the users group to mount and unmount the
## cdrom as root
%users localhost=/sbin/shutdown -h now #赋予users组成员在本地主机立即关机的权限
zhangsan ALL=(root) /usr/sbin/ifconfig #赋予普通用户zhangsan以root身份添加网卡IP地址的权限
lisi ALL=!/bin/rm #禁止普通用户lisi删除的权限
[zhangsan@clr ~]$ exit
登出
[zhangsan@clr ~]$ sudo ifconfig ens33:0 192.168.80.120/24 #普通用户zhangsan添加网卡IP地址
[sudo] zhangsan 的密码:
[zhangsan@clr ~]$ ifconfig
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.80.120 netmask 255.255.255.0 broadcast 192.168.80.255
ether 00:0c:29:e6:e0:8a txqueuelen 1000 (Ethernet)
[lisi@clr ~]$ cd /opt/
[lisi@clr /opt]$ rm -f clr.txt #普通用户lisi不具有删除系统中原有文件的权限,但对于Lisi自己创建的文件可以删除
rm: 无法删除"clr.txt": 权限不够
[lisi@clr /opt]$ sudo rm -f clr.txt
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] lisi 的密码:
对不起,用户 lisi 无权以 root 的身份在 clr 上执行 /bin/rm -f clr.txt。 #显示lisi用户无权以root身份执行删除命令
GZY ALL = NOPASSWD: ADMIN:赋予别名GZY内的所有用户在所有主机上以root身份执行ADMIN程序内的所有命令权限,并且不需要使用密码;
[root@clr ~]# 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@clr ~]# su - zhangsan
上一次登录:三 4月 12 23:44:03 CST 2023pts/0 上
[zhangsan@clr ~]$ which route
/usr/sbin/route
[zhangsan@clr ~]$ sudo route add -net 10.0.0.0/24 gw 192.168.80.20 dev ens33 #此时普通用户zhangsan可以使用超级用户root添加路由的权限
[zhangsan@clr ~]$ 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@clr ~]$ sudo reboot #禁止zhangsan用户的重启操作
对不起,用户 zhangsan 无权以 root 的身份在 clr 上执行 /sbin/reboot。
[zhangsan@clr ~]$ exit
登出
[root@clr ~]# su - lisi
上一次登录:三 4月 12 23:48:56 CST 2023pts/0 上
[lisi@clr ~]$ sudo ifconfig ens33:1 192.168.80.34 #此时普通用户lisi可以使用超级用户root添加网卡IP地址的权限
[lisi@clr ~]$ 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@clr ~]$ sudo init 6 #禁止普通用户lisi重启系统的权限
对不起,用户 lisi 无权以 root 的身份在 clr 上执行 /sbin/init 6。
sudo -l:查看当前登录用户获得那些sudo授权;
[lisi@clr ~]$ 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 可以在 clr 上运行以下命令:
(root) !/bin/rm
(root) NOPASSWD: /sbin/*, !/usr/sbin/reboot, !/usr/sbin/poweroff, !/usr/sbin/init, !/usr/sbin/shutdown
Defaults logfile = “/var/log/sudo” :保存日志文件,可以查看到所有用户登录系统的操作;
[root@clr ~]# vim /etc/sudoers
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
zhangsan ALL=(root) /usr/sbin/ifconfig
lisi ALL=!/bin/rm
User_Alias GZY=zhangsan,lisi
Cmnd_Alias ADMIN=/sbin/*,!/usr/sbin/reboot,!/usr/sbin/poweroff,!/usr/sbin/init,!/usr/sbin/shutdown
GZY ALL = NOPASSWD: ADMIN
Defaults logfile = "/var/log/sudo" #保存日志文件
[root@clr ~]# cd /var/log/
[root@clr /var/log]# vim sudo
Apr 13 00:09:36 : zhangsan : command not allowed ; TTY=pts/0 ; PWD=/root ;
USER=root ; COMMAND=/sbin/reboot #zhangsan用户不被允许的操作
Apr 13 00:09:51 : zhangsan : TTY=pts/0 ; PWD=/root ; USER=root ;
COMMAND=/sbin/route add -net 10.0.0.1/24 gw 192.168.80.20 dev ens33 #zhangsan用户添加路由的操作
Apr 13 00:10:12 : lisi : command not allowed ; TTY=pts/0 ; PWD=/home/lisi ; #用户lisi不被允许的操作
USER=root ; COMMAND=/sbin/reboot