一、账号安全基本措施
-系统账户清理
(1)将非登录用户的Shell设为/sbin/nologin
/sbin/nologin——禁止终端登录,确保不被人为改动 (经常检查,防止恶意篡改)
[root@centos7-012 ~]# usermod -s /sbin/nologin tom (修改用户tom的登录shell) [root@centos7-012 ~]# cat /etc/passwd | grep "tom" (查看用户tom的基本信息) tom:x:1000:1000::/home/tom:/sbin/nologin
(2)锁定长期不使用的账号
例如一些用户长期不使用,但不确定是否删除,这时候就可以使用锁定账户
[root@centos7-012 ~]# usermod -L tom (锁定用户tom) [root@centos7-012 ~]# passwd -S tom (查看用户状态) tom LK 2020-12-30 0 99999 7 -1 (密码已被锁定。) [root@centos7-012 ~]# usermod -U tom (解锁用户tom) [root@centos7-012 ~]# passwd -S tom (再次查看用户状态) tom PS 2020-12-30 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
(3)删除无用的账号
例如mysql程序删除后,就可以删除mysql用户
[root@centos7-012 ~]# userdel mysql (删除mysql账户)
(4)锁定账号文件passwd、shadow
例如服务器账户已经确认创建完成,不再进行更改,这时候就可以锁定账号文件
[root@centos7-012 ~]# chattr +i /etc/passwd /etc/shadow (锁定账号文件) [root@centos7-012 ~]# lsattr /etc/passwd /etc/shadow (查看账号文件属性) ---------------- /etc/passwd ---------------- /etc/shadow [root@centos7-012 ~]# useradd lisi (这时候创建新用户,发现无法创建) useradd:无法打开 /etc/passwd [root@centos7-012 ~]# chattr -i /etc/passwd /etc/shadow (解锁账号文件) [root@centos7-012 ~]# useradd lisi (再次创建新用户,发现创建成功)
-密码安全控制
(1)设置密码有效期
******适用于新建用户的 [root@centos7-012 ~]# echo "PASS_MAX_DAYS 30" >> /etc/login.defs (设置有效期为30天) [root@centos7-012 ~]# tail -5 /etc/login.defs # Use SHA512 to encrypt password. ENCRYPT_METHOD SHA512 PASS_MAX_DAYS 30 ******适用于已有用户的 [root@centos7-012 ~]# chage -M 30 tom (设置用户tom的密码有效期为30天)
(2)要求用户下次登陆时修改密码
[root@centos7-012 ~]# chage -d 0 tom (强制用户tom在下次登陆时更改密码)
-命令历史限制
(1)减少记录的命令条数
[root@centos7-012 ~]# vim /etc/profile (编写系统脚本) 。。。。。。 44 45 HOSTNAME=`/usr/bin/hostname 2>/dev/null` 46 HISTSIZE=20 (修改为历史限制为20条) 47 if [ "$HISTCONTROL" = "ignorespace" ] ; then 48 export HISTCONTROL=ignoreboth 。。。。。。 保存退出 [root@centos7-012 ~]# source /etc/profile (运行脚本) [root@centos7-012 ~]# history (查看历史命令,发现只显示最后20条) 39 cat nologin.txt 40 passwd -S tom 41 passwd -L tom 42 usermod -L tom 43 passwd -S tom 44 usermod -U tom 45 passwd -S tom 46 usermod -s /sbin/nologin tom 47 cat /etc/passwd | grep "tom" 48 vim /etc/login.defs 49 mount /dev/cdrom /media/cdrom/ 50 yum -y install vim net-tools 51 vim /etc/login.defs 52 echo "PASS_MAX_DAYS 30" >> /etc/login.defs 53 tail -5 /etc/login.defs 54 chage -M 30 tom 55 chage -d 0 tom 56 vim /etc/profile 57 source /etc/profile 58 history
(2)注销时自动清空命令历史
/.bash_logout 用途: 用户登出时执行的命令 [root@centos7-012 ~]# vim ~/.bash_logout (修改) # ~/.bash_logout history -c (登出时清除历史命令并且清屏) clear
(3)终端自动注销
[root@centos7-012 ~]# vim ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH export TMOUT = 20 (添加自动注销时间为20秒) 保存退出 [root@centos7-012 ~]# source ~/.bash_profile (执行) 等待二十秒,会发现自动注销
二、用户切换以及提权
-使用su命令切换用户
(1)用途以及用法
用途: Substitute User,切换用户
格式: su - 用户名
(2)密码验证
使用root用户切换其他用户是不需要验证密码的
普通用户切换到其他用户需要验证用户密码
注意: 带 - 选项表示将使用目标用户的登录shell环境
[root@centos7-012 ~]# su - tom (root账户进行切换用户无需密码) 上一次登录:三 12月 30 18:27:47 CST 2020pts/0 上 [tom@centos7-012 ~]$ su - root (普通账户切换需要输入密码) 密码: (输入密码) 上一次登录:三 12月 30 18:27:44 CST 2020pts/0 上 [root@centos7-012 ~]# 只需要查看 @ 号之前的名称是谁,那么就是登录的谁的用户,也可以使用whoami来查看
(3)限制使用su命令的用户
在CentOS7系统中默认所有用户都可以使用su命令,防止密码穷举也就是暴力破解的危险,可以只允许指定用户使用su命令
******启用pam_wheel认证模块,将允许使用su命令的用户加入wheel组中 [root@centos7-012 ~]# vim /etc/pam.d/su 1 #%PAM-1.0 2 auth sufficient pam_rootok.so 3 auth required pam_wheel.so use_uid (添加) 4 # Uncomment the following line to implicitly trust users in the "wheel" group. 。。。。。。 保存退出 [root@centos7-012 ~]# grep wheel /etc/group (筛选wheel发现多了一个wheel组) wheel:x:10: [root@centos7-012 ~]# su - tom (切换到tom账户) 上一次登录:三 12月 30 18:28:13 CST 2020pts/0 上 [tom@centos7-012 ~]$ su - root (使用tom账户切换到root,发现输入密码也无法切换) 密码: su: 拒绝权限 ******注销tom,使用root登录 [root@centos7-012 ~]# gpasswd -a tom wheel (把tom账户加到wheel组中) 正在将用户“tom”加入到“wheel”组中 [root@centos7-012 ~]# su - tom (再次切换到tom账户) 上一次登录:三 12月 30 18:43:10 CST 2020pts/0 上 [tom@centos7-012 ~]$ su - root (使用tom账户切换root) 密码: 上一次登录:三 12月 30 18:45:14 CST 2020从 192.168.100.111pts/1 上 [root@centos7-012 ~]# (发现可以成功切换)
(4)查看su操作记录
******安全日志文件:/var/log/secure [root@centos7-012 ~]# tail /var/log/secure Dec 30 18:28:11 centos7-012 usermod[16119]: change user 'tom' shell from '/sbin/nologin' to '/bin/bash' Dec 30 18:28:13 centos7-012 su: pam_unix(su-l:session): session opened for user tom by root(uid=0) Dec 30 18:28:52 centos7-012 su: pam_unix(su-l:session): session opened for user root by root(uid=1000) Dec 30 18:43:10 centos7-012 su: pam_unix(su-l:session): session opened for user tom by root(uid=0) Dec 30 18:43:18 centos7-012 su: pam_succeed_if(su-l:auth): requirement "uid >= 1000" not met by user "root" Dec 30 18:45:14 centos7-012 sshd[16199]: Accepted password for root from 192.168.100.111 port 51545 ssh2 Dec 30 18:45:14 centos7-012 sshd[16199]: pam_unix(sshd:session): session opened for user root by (uid=0) Dec 30 18:45:25 centos7-012 gpasswd[16218]: user tom added by root to group wheel Dec 30 18:46:01 centos7-012 su: pam_unix(su-l:session): session opened for user tom by root(uid=0) Dec 30 18:46:06 centos7-012 su: pam_unix(su-l:session): session opened for user root by root(uid=1000)
-使用sudo机制提升权限
(1)su命令的缺点
知道root密码的用户越少越安全
sudo——普通用户拥有一部分管理权限,又不需要知道root密码
(2)sudo命令的用途以及用法
用途: 想要以其他用户身份(如root)执行授权的命令
用法: sudo 授权命令
(3)配置sudo授权/etc/sudoers
******配置sudo授权(往这个文件里写入要给指定用户的权限) 第一种方法: [root@centos7-012 ~]# cd /etc [root@centos7-012 etc]# ll ,,,,,, -r--r-----. 1 root root 4328 11月 28 2019 sudoers (默认是440也就是两个可读的权限) 。。。。。。 [root@centos7-012 etc]# vim /etc/sudoers (编写sudo的配置文件) 第二种方法: [root@centos7-012 etc]# visudo (进入sudo的配置文件)(这个进入方法保存退出时会提示给我们错误信息) 两种方法进入的文件是相同的
(4)记录格式
******格式:用户 主机名列表=命令程序列表 写完之后先用 : 进入末行模式后输入 w! 强制保存,再保存退(上面两种方法都得这么做) *用户:用户名 或 “%组名”(也就是组内所有用户) *主机名:一般为 localhost(本机) 或 实际主机名(得先看自己的主机名是什么就得写什么) *命令列表: 命令的绝对路径,多命令使用“,”分割 例如: [root@centos7-012 etc]# vim /etc/sudoers (进入sudo配置文件) 。。。。。。 100 root ALL=(ALL) ALL (这个就表示root在所有主机都有所有的权限) 。。。。。。 107 %wheel ALL=(ALL) ALL (这个表示wheel组内的所有成员在所有主机有着所有权限) 。。。。。。 ******按照这样写的话,如果想要boss用户可以使用sudo加权使用ifconfig命令: [root@centos7-012 ~]# useradd boss (创建boss账户) [root@centos7-012 ~]# passwd boss (设置boss账户的密码) 更改用户 boss 的密码 。 新的 密码: 无效的密码: 密码未通过字典检查 - 过于简单化/系统化 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 [root@centos7-012 ~]# which ifconfig (先查看ifconfig的完整路径) /usr/sbin/ifconfig [root@centos7-012 ~]# vim /etc/sudoers 。。。。。。 boss ALL=/usr/sbin/ifconfig (在末行加入一行boss可以在所有主机sudo加权使用ifconfig命令) 先输入“:”进入末行模式,然后输入“w!”强制保存之后再保存退出 ******验证 [root@centos7-012 ~]# su - boss (切换boss账户) 上一次登录:三 12月 30 18:46:01 CST 2020pts/1 上 [tom@centos7-012 ~]$ sudo /usr/sbin/ifconfig 我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点: #1) 尊重别人的隐私。 #2) 输入前要先考虑(后果和风险)。 #3) 权力越大,责任越大。 [sudo] boss 的密码: (输入boss的密码) ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.100.12 netmask 255.255.255.0 broadcast 192.168.100.255 inet6 fe80::ea8f:4112:94bb:75f7 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:46:da:b9 txqueuelen 1000 (Ethernet) RX packets 8064 bytes 702160 (685.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4766 bytes 671907 (656.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 476 bytes 38616 (37.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 476 bytes 38616 (37.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [boss@centos7-012 ~]$ sudo -l (查看当前账户可以使用sudo哪些命令) [sudo] boss 的密码: (输入boss密码) 匹配 %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 用户 boss 可以在 centos7-012 上运行以下命令: (root) /usr/sbin/ifconfig (可以使用ifconfig命令) ******/etc/sudoers中可以用一些符号 ******可以使用通配符*、取反符号! 例如: boss localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route (可以使用/sbin/下的所有命令但是不能使用/sbin/route命令) ******关键字、别名机制(必须大写) 别名格式:别名类型 指定别名=成员1,成员2,成员3。。。。。。 别名类型:(成员可以是用户也可以是命令) Host_Alias 定义主机别名; User_Alias 用户别名,别名成员可以是用户,用户组(前面要加%号) Runas_Alias 用来定义runas别名,这个别名指定的是“目的用户”,即sudo 允许切换至的用户 Cmnd_Alias 定义命令别名 例如: User_Alias AAA=tom,jack,rose (别名是AAA,成员有tom,jack,rose) Host_Alias BBB=smtp,pop (别名是BBB,成员有smtp,pop) Cmnd_Alias CCC=/bin/rpm,/usr/bin/yum (别名是CCC,成员有/bin/rpm,/usr/bin/yum)
(5)查看sudo操作记录
******需启用 Defaults logfile 配置 ******默认日志文件:/var/log/sudo [root@localhost ~]# visudo 。。。。。。 (启用日志配置以后,sudo操作过程才会被记录,在Defaults列前添加) 55 Defaults logfile = "/var/log/sudo" .。。。。。 进入末行模式先用w!强制保存,然后保存退出 ******这时候在boss用户中使用sudo [boss@centos7-012 ~]$ sudo /usr/sbin/ifconfig ******返回root账户,查看日志 [root@centos7-012 ~]# tail /var/log/sudo (查看日志,发现多了一条使用记录) Dec 30 22:50:14 : boss : TTY=pts/2 ; PWD=/home/boss ; USER=root ; COMMAND=/usr/sbin/ifconfig ******查询授权的sudo操作 sudo -l 【初次使用sudo时需验证当前用户的密码】 [boss@centos7-012 ~]$ sudo -l (在boss用户上查看) [sudo] boss 的密码: 匹配 %2$s 上 %1$s 的默认条目: logfile=/var/log/sudo, !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 用户 boss 可以在 centos7-012 上运行以下命令: (root) /usr/sbin/ifconfig 【默认超时为5分钟,在此期间不再重复验证】