Content One: Display all users’ password login, password deny and last-login
# lslogins
Content Two: Display a user’s password login, password deny and last-login
# lslogins <user>
# lslogins
# lslogins <user>
1) /etc/shadow 文件存储着用户的密码和与之相关的信息
2) /etc/shadow 文件以冒号 “:” 作为分隔符,分类 8 段
/etc/shadow 文件的第 1 段存储的是用户名,和 /etc/passwd 文件中的用户名是一一对应的
1) 如果是奇怪的字符串则代表是加密过的密码,格式是 $id$salt$hashed,其中 $id 是指加密算法。如果字符串:以 $1$ 开头则代表是用 MD5 加密,以 $2a$ 开头则代表是用 Blowfish 加密,以 $2y$ 开头则代表是用另一种算法长度的 Blowfish 加密,以 $5$ 开头则代表是用 SHA-256 加密,以 $6$ 开头则代表是用 SHA-512 加密
2) 如果是 2 个感叹号 “!!” 则代表从来都没有设置过密码
3) 如果为空则代表没有设置密码
4) 如果是 1 个星号 “*” 则代表用户被锁定,但是其它登陆方式不受限制,例 SSH 登陆
5) 如果是 1 个感叹号 “!” 则代表用户被锁定,但是其它登陆方式不受限制,例 SSH 登陆
6) 如果以 1 个感叹号开头 “!” 则代表用户被锁定
7) 如果以 2 个感叹号开头 “!!” 则代表用户被锁定
# cut -d: -f1,7
# passwd <user>
密码最后修改的日期于 1970 年 1 月 1 日相距的天数
# egrep ^[^:]+:[^\!*] /etc/shadow | cut -d: -f1,3
或者:
# chage -l <user> | grep 'Last password change'
# chage -d <date> <user>
或者:
# chage --lastday <date> <user>
两次修改密码最短天数间隔
1) 如果是 0 则代表随时可以修改密码
2) 如果是 99999 则代表永远都不能修改密码
# egrep ^[^:]+:[^\!*] /etc/shadow | cut -d: -f1,4
或者:
# chage -l <user> | grep 'Minimum number of days between password change'
# chage -m <days> <user>
或者:
# chage --mindays <days> <user>
修改密码后过多少天会过期
1) 如果是 99999 则代表永远都不会过期
2) 如果密码只是过期但是没有失效的话,则可以使用过期的密码更改密码再使用新密码登陆,如果密码失效的话则此密码不能再使用
# egrep ^[^:]+:[^\!*] /etc/shadow | cut -d: -f1,5
或者:
# chage -l <user> | grep 'Maximum number of days between password change'
# chage -M <days> <user>
或者:
# chage --maxdays <days> <user>
密码过期前,提前多少天发出警告
如果为空则代表不发出警告
# egrep ^[^:]+:[^\!*] /etc/shadow | cut -d: -f1,6
或者:
# chage -l <user> | grep 'Number of days of warning before password expires'
# chage -W <days> <user>
或者:
# chage --warndays <days> <user>
密码过期后过多少天会失效
1) 如果是 99999 则代表永远都不会失效
2) 如果密码只是过期但是没有失效的话,则可以使用过期的密码更改密码再使用新密码登陆,如果密码失效的话则此密码不能再使用
# egrep ^[^:]+:[^\!*] /etc/shadow | cut -d: -f1,7
或者:
# chage -l <user> | grep 'Password inactive'
# chage -I <days> <user>
或者:
# chage --inactive <days> <user>
用户的失效日期于 1970 年 1 月 1 日相距的天数
# egrep ^[^:]+:[^\!*] /etc/shadow | cut -d: -f1,8
或者:
# chage -l <user> | grep 'Account expires'
# chage -E <date> <user>
或者:
# chage --expiredate <date> <user>
这是一个保留位,目前没有作用
RHEL 8 的 SSH 加密算法默认会使用来自 crypto policies 系统的全局 SSH 加密算法,而此方法将让 SSH 使用单独设置的 SSH 加密算法。
# cp /etc/sysconfig/sshd /etc/sysconfig/sshd_backup
# vim /etc/sysconfig/sshd
将以下内容:
# CRYPTO_POLICY=
修改为:
......
CRYPTO_POLICY=
......
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config_backup
# vim /etc/ssh/sshd_config
添加以下内容:
......
Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512,hmac-sha2-256
KexAlgorithms ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
(
补充:这里以使用:
1) aes256-gcm@openssh.com、aes128-gcm@openssh.com、aes256-ctr、aes192-ctr 和 aes128-ctr SSH 加密方式 (cipher)
2) hmac-sha2-512 和 hmac-sha2-256 SSH 信息验证代码 (message authentication code)
3) ecdh-sha2-nistp521、ecdh-sha2-nistp384、ecdh-sha2-nistp256 和 diffie-hellman-group-exchange-sha256 SSH 算法 (algorithm)
为例
)
# systemctl restart sshd
# ssh -vv -oCiphers=3des-cbc -oPort=22 192.168.0.1
(补充:这里以测试 IP 地址是 192.168.0.1,端口号是 22,有没有启用 3des-cbc SSH 加密方式 (cipher) 为例)
# ssh -vv -oCiphers=3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc -oPort=22 192.168.0.1
(补充:这里以测试 IP 地址是 192.168.0.1,端口号是 22,有没有启用 3des-cbc、aes128-cbc、aes192-cbc 和 aes256-cbc SSH 加密方式 (cipher) 为例)
# ssh -vv -oMACs=hmac-md5 -oPort=22 192.168.0.1
(补充:这里以测试 IP 地址是 192.168.0.1,端口号是 22,有没有启用 hmac-md5 SSH 信息验证代码 (message authentication code) 为例)
# ssh -vv -oMACs=hmac-md5,hmac-md5-96,hmac-sha1,hmac-sha1-96,hmac-md5-etm@openssh.com,hmac-md5-96-etm@openssh.com -oPort=22 192.168.0.1
(补充:这里以测试 IP 地址是 192.168.0.1,端口号是 22,有没有启用 hmac-md5、hmac-md5-96、hmac-sha1、hmac-sha1-96、hmac-md5-etm@openssh.com 和 hmac-md5-96-etm@openssh.com SSH 信息验证代码 (message authentication code) 为例)
# sshd -T | egrep -i "ciphers|macs|kexalgorithms"
# nmap --script ssh2-enum-algos -sV -p 22 127.0.0.1
(补充:这里以测试 IP 地址是 192.168.0.1,端口号是 22 为例)
https://access.redhat.com/solutions/4410591
https://access.redhat.com/solutions/4278651
在给 nftables 防火墙的策略文件添加规则前,要先使用 nftables 防火墙的策略文件:
ip saddr 192.168.0.1 tcp dport ssh accept
或者:
ip saddr 192.168.0.1 tcp dport 22 accept
(补充:这里以允许 IP 地址 192.168.0.1 访问 22 端口为例)
ip saddr 192.168.0.1 tcp dport {22,80,443,3306,100,101,102,103} accept
或者:
ip saddr 192.168.0.1 tcp dport {22,80,443,3306,100-103} accept
(补充:这里以允许 IP 地址 192.168.0.1 访问 22 端口、80 端口、443 端口、3066 端口和 100 端口到 103 端口为例)
ip saddr {192.168.0.1,192.168.0.2,192.168.0.3} tcp dport {22,80,443,3306} accept comment "accept local port"
或者:
ip saddr {192.168.0.1-192.168.0.3} tcp dport {22,80,443,3306} accept comment "accept local port"
(补充:这里以允许 IP 地址 192.168.0.1、192.168.0.2 和 192.168.0.3 访问 22 端口、80 端口、443 端口和 3066 端口并添加注释 “accept local port” 为例)
tcp dport {22,80,443,3306} drop comment "drop remote port"
(补充:这里以拒绝所有 IP 地址的 22 端口、80 端口、443 端口和 3306 端口并添加注释 “drop remote port” 为例)
tcp dport {0-65535} drop
udp dport {0-65535} drop
ip saddr 192.168.0.1 ip protocol icmp icmp type echo-request accept
(补充:这里以允许 192.168.0.1 可以通过 ICMP 协议 ping 通为例)
ct state { established, related } accept
# gpasswd -a <user> <group>
或者:
# gpasswd –add <user> <group>
或者:
# gpasswd -M <group>
或者:
# gpasswd –members <group>
# gpasswd -a <user1>,<user2> <group>
或者:
# gpasswd –add <user1>,<user2> <group>
或者:
# gpasswd -M <user1>,<user2> <group>
或者:
# gpasswd –members <user1>,<user2> <group>
# gpasswd -d <user> <group>
或者:
# gpasswd –delete <user> <group>
# gpasswd -d <user1>,<user2> <group>
或者:
# gpasswd –delete <user1>,<user2> <group>
# gpasswd -A <user> <group>
或者:
# gpasswd –administrators <user> <group>
# gpasswd <group>
# gpasswd –r <group>
或者:
# gpasswd –remove-password <group>
限制某个组登录
# gpasswd -R <group>
或者:
# gpasswd –restrict <group>
# gpasswd -h
或者:
# gpasswd -help