一、账号安全控制
1、基本安全措施
1、系统账号清理
查找登录Shell是/sbin/nologin的用户
grep "/sbin/nologin$" /etc/passwd
锁定账号
usermod -L 账号名称
查看账号状态
passwd -S 账号名称
解锁账号
usermod -U 账号名称
锁定文件
chattr +i /etc/passwd /etc/shadow
查看为锁定的状态
lsattr /etc/passwd /etc/shadow
解锁文件
chattr -i /etc/passwd /etc/shadow
查看为解锁的状态
Isattr /etc/passwd /etc/shadow
2、密码安全控制
# vim /etc/pam.d/password-auth
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1
- difok= 定义新密码中必须要有几个字符和旧密码不同
- minlen=新密码的最小长度
- ucredit= 新密码中可以包含的大写字母的最大数目。-1 至少一个
- lcredit=新密码中可以包含的小写字母的最大数
- dcredit=定新密码中可以包含的数字的最大数目
注:这个密码强度的设定只对"普通用户"有限制作用,root用户无论修改自己的密码还是修改普通用户的时候,不符合强度设置依然可以设置成功
1、将密码的有效期设为30天,
# vim /etc/login.defs # 适用于新建的用户
PASS_MAX_DAYS 30
# chage -M 30 lisi # 适用于已有的用户
2、强制要求用户下次登录时重设密码
# chage -d 0 lisi
3、命令历史、自动注销
1、设置最多只记录200 条历史命令
# vim /etc/profile # 适用于新登录用户
HISTSIZE=200
# export HISTSIZE=200 # 适用于当前用户
2、当用户退出已登录Bash环境以后,所记录的历史命令将自动清空
# vim ~/.bash_logout
history -c
clear
3、当超过指定的时间没有任何输入时即自动注销终端,闲置超时由变量TMOUT来控制,默认单位为秒估)
# vim /etc/profile # 适用于新登录用户
export TMOUT=600
# export TMOUT=600 # 适用于当前用户
2、用户切换与提权
1、su命令:切换用户
# su - root
借助于pam_wheel认证模块,只允许极个别用户使用su命令进行切换
将授权使用su命令的用户添加到wheel组,修改 /etc/pam. d/su认证配置以启用pam_wheel认证
# gpasswd -a zhangsan wheel
正在将用户“zhangsan”加入到“wheel”组中
# grep wheel /etc/group
wheel:x:10:lisi,zhangsan
# vim /etc/pam.d/su
auth required pam_wheel.so use_uid # 去掉此行开头的#号
启用pam_wheel认证以后,未加入到wheel组内的其他用户将无法使用su命令
# su - zhangsan
[zhangsan@localhost ~]$ su - root
密码:
上一次登录:四 7月 16 20:31:08 CST 2020pts/0 上
# su - wangwu
[wangwu@localhost ~]$ su - root
密码:
su: 拒绝权限
2、sudo命令:提升执行权限
在配置文件/etc/sudoers中添加授权
# visudo
格式:用户(%组名) 主机=命令
例如:
授权用户jerry能够执行ifconfig命令来修改IP地址,而wheel组的用户无需验证密码即可执行任何命令
jerry ALL=(root) NOPASSWD: /sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL
用户、主机、 命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、 Host_Alias、Cmnd_Alias来进行设置
允许用户jerrys,tom,tsengyia在主机smtp、pop中执行rpm、yum命令
User_Alias operators=jerry,tom,tsengyia
Host_Alias MAILSVRS=smtp,pop
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
operators MAILSVRS=PKGTOOLS
通配符"*"、取反符号"!"
授权用户synaner可以执行/sbin/目录下除ifconfig、 route以外的其他所有命令程序
syrianer localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route
启用sudo日志记录以备管理员查看
Defults logfile = "/var/log/sudo"
3、通过sudo执行特权命令
查看用户获得哪些sudo授权
# sudo -l
查看用户的sudo操作记录
# tail /var/log/sudo
3、用户帐号限制
-
/etc/login.defs
配置文件是设置用户帐号限制的文件,可配置密码的最大过期天数,密码的最大长度约束等内容。 -
该文件里的配置对root用户无效。此文件中的配置与
/etc/passwd
和/etc/shadow
文件中的用户信息有冲突时,系统会以/etc/passwd
和/etc/shadow
为准。 -
/etc/login.defs
文件用于在Linux创建用户时,对用户的一些基本属性做默认设置,例如指定用户 UID 和 GID 的范围,用户的过期时间,密码的最大长度,等等。
设置项 | 含义 |
---|---|
MAIL_DIR /var/spool/mail | 创建用户时,系统会在目录 /var/spool/mail 中创建一个用户邮箱,比如 lamp 用户的邮箱是 /var/spool/mail/lamp。 |
PASS_MAX_DAYS 99999 | 密码有效期,99999 是自 1970 年 1 月 1 日起密码有效的天数,相当于 273 年,可理解为密码始终有效。 |
PASS_MIN_DAYS 0 | 表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0。 |
PASS_MIN_LEN 5 | 指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效。 |
PASS_WARN_AGE 7 | 指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天。 |
UID_MIN 500 | 指定最小 UID 为 500,也就是说,添加用户时,默认 UID 从 500 开始。注意,如果手工指定了一个用户的 UID 是 550,那么下一个创建的用户的 UID 就会从 551 开始,哪怕 500~549 之间的 UID 没有使用。 |
UID_MAX 60000 | 指定用户最大的 UID 为 60000。 |
GID_MIN 500 | 指定最小 GID 为 500,也就是在添加组时,组的 GID 从 500 开始。 |
GID_MAX 60000 | 用户 GID 最大为 60000。 |
CREATE_HOME yes | 指定在创建用户时,是否同时创建用户主目录,yes 表示创建,no 则不创建,默认是 yes。 |
UMASK 077 | 用户主目录的权限默认设置为 077。 |
USERGROUPS_ENAB yes | 指定删除用户的时候是否同时删除用户组,准备地说,这里指的是删除用户的初始组,此项的默认值为 yes。 |
ENCRYPT_METHOD SHA512 | 指定用户密码采用的加密规则,默认采用 SHA512,这是新的密码加密模式,原先的 Linux 只能用 DES 或 MD5 加密。 |
二、系统引导和登录控制
1、开关机安全控制
1、调整BIOS引导设置
(1)将第一优先引导设备(First Boot Device)设为当前系统所在磁盘。
(2)禁止从其他设备(如光盘、U盘、网络等)引导系统,对应的项设为"Disabled"。
(3)将BOS的安全级别改为"setup",并设置好管理密码,以防止未授权的修改。
2、禁止Ctrl+Alt+Del快捷键重启
# systemctl mask ctrl-alt-del.target # 禁止Ctrl+Alt+Del快捷键重启
Created symlink from /etc/systemd/system/ctrl-alt-del.target to /dev/null.
# systemctl daemon-reload # 刷新配置
# systemctl unmask ctrl-alt-del.target # 开启Ctrl+Alt+Del快捷键重启
# systemctl daemon-reload # 刷新配置
3、限制更改GRUB引导参数
# grub2-mkpasswd-pbkdf2
输入口令:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.0231854D0AD301240629102B62FCFB09E7347E7E3254E34ACE0186A41BA65A2A749B6A5F59AC37B6431649D5D0F3238CFC2ED92C407468C0CE2B29C2F3FFF9A8.1906AC682652E7EEC736AC3F4E866D2C5038EB4AED72D980331CE80ED4D05A9929F043A5EB7190FD3775294CE50FCFA745C16E783A93E52F77E0D3A9695C246A
# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
# vim /etc/grub.d/00_header
......
cat<< EOF
set superusers = "root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.0231854D0AD301240629102B62FCFB09E7347E7E3254E34ACE0186A41BA65A2A749B6A5F59AC37B6431649D5D0F3238CFC2ED92C407468C0CE2B29C2F3FFF9A8.1906AC682652E7EEC736AC3F4E866D2C5038EB4AED72D980331CE80ED4D05A9929F043A5EB7190FD3775294CE50FCFA745C16E783A93E52F77E0D3A9695C246A
EOF
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1127.8.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1127.8.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1062.18.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1062.18.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-fc8e001937cb4a35b289459e53090806
Found initrd image: /boot/initramfs-0-rescue-fc8e001937cb4a35b289459e53090806.img
done
2、终端登录控制
1、禁止root用户登录
# vim /etc/securetty # 禁止root用户从tty5、tty6登录
tty1
tty2
tty3
tty4
#tty5
#tty6
tty7
tty8
2、禁止普通用户登录(root用户不受限制),当手动删除/etc/nologin文件或者重新启动主机以后,即可恢复正常。
# touch /etc/nologin
三、弱口令检测、端口扫描
1、弱口令检测——John the Ripper
安装John the Ripper
# wget https://www.openwall.com/john/k/john-1.9.0.tar.gz
# tar zxf john-1.9.0.tar.gz -C /usr/src/
# cd /usr/src/john-1.9.0/src/
# make clean linux-x86-64
# cp /etc/shadow /root/shadow.txt
# cd /usr/src/john-1.9.0/run/
# ./john /root/shadow.txt
Loaded 2 password hashes with 2 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456 (root)
123456 (teacher)
2g 0:00:00:10 100% 2/3 0.1881g/s 566.4p/s 581.8c/s 581.8C/s 123456..pepper
Use the "--show" option to display all of the cracked passwords reliably
Session completed
查看已破解出的账户列表
./john --show /root/shadow.txt
root:123456::0:99999:7:::
teacher:123456:19743:0:99999:7:::
2 password hashes cracked, 0 left
使用密码字典文件
清空己破解出的账户列表后重新分析
# :> john.pot
# ./john --wordlist=./password.lst /root/shadow.txt
Loaded 2 password hashes with 2 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456 (root)
123456 (teacher)
2g 0:00:00:00 100% 5.714g/s 274.2p/s 548.5c/s 548.5C/s 123456..pepper
Use the "--show" option to display all of the cracked passwords reliably
Session completed
2、网络扫描——NMAP
1、安装NMAP软件包
# yum -y install nmap
参数 | 说明 | 参数 | 说明 |
---|---|---|---|
-p | 指定扫描的端口 | -n | 禁用反向DNS解析(以加快扫描速度) |
-sS | 查看目标端口是否正在监听,并立即断开连接;否则认为目标端口并未开放 | -sT | 查看目标端口正在监听服务,否则认为目标端口并未开放 |
-sF | 间接检测防火墙的健壮性 | -sU | 探测目标主机提供哪些UDP服务 |
-sP | 快速判断目标主机是否存活 | -P0 | 跳过ping检测 |
扫描常用的TCP端口
# nmap 127.0.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2024-01-22 21:25 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
873/tcp open rsync
Nmap done: 1 IP address (1 host up) scanned in 1.58 seconds
扫描常用的UDP端口
# nmap -sU 127.0.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2024-01-22 21:25 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
111/udp open rpcbind
5355/udp open|filtered llmnr
Nmap done: 1 IP address (1 host up) scanned in 2.68 seconds
例如:
检查192.168.4.0/24网段中有哪些主机提供FTP服务:
nmap -p 21 192.168.4.0/24
检测192.168.4.0/24网段中有哪些存活主机(能ping通):
nmap -n -sP 192.168.4.0/24
检测IP地址位于192.168.4.100-200的主机是否开启文件共享服务:
nmap -p 139,445 192.168.4.100-200
评论区