操作之前建议备份相关文件
1、Linux系统的用户帐号策略
1.1 Linux如何设置用户登录超时(闲置时间)
怎样让服务器在一定时间没有任何操作的终端自动断开连接?
OpenSSH基于安全的理由,如果用户连线到SSH Server后闲置一段时间,SSH Server会在超过特定时间后自动终止SSH连线。
1.1.1 针对所有用户
vi /etc/profile
...
export TMOUT=900 # 设置闲置时间为15分钟,单位为秒;如果没有此行则直接添加进去
...
保存退出,使用命令 source /etc/profile 立即生效
1.1.2. 针对特定用户(如针对user_1)
# cd /home/user_1/
# vi .bash_profile
...
export TMOUT=900
...
保存退出,使用命令 source /home/user_1/.bash_profile 立即生效
注:如果习惯保持长时间连接,可以改下面配置文件
1、打开ssh配置文件:
vi /etc/ssh/sshd_config 加入如下两个参数保存就可以:
TCPKeepAlive yes
ClientAliveCountMax 360
注:前一个参数表示要保持TCP连接,后一个参数表示客户端的SSH连线闲置多长时间后自动终止连线的数值,单位为分钟。
2、重启sshd生效:
/etc/init.d/sshd restart
1.1.3 账号锁定
尝试登陆失败错误次数,必须设置不能超过5次,超过5次后,暂时锁定30分钟或以上。
查看系统中是否含有pam_tally2.so模块,如果没有,则需要使用pam_tally.so模块
find /lib* -iname "pam_tally2.so"
find /lib* -iname "pam_tally.so"
①.在字符终端下,实现某一用户连续错误登陆N次后,就锁定该用户X分钟(pam_tally2)
执行 vi /etc/pam.d/login
在#%PAM-1.0 下新起一行,加入
auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=3600
如果不限制root用户,则可以写成
auth required pam_tally2.so deny=5 unlock_time=1800
even_deny_root 也限制root用户;
deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户;
unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;
root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒;
备注:
1、此处使用的是 pam_tally2 模块,如果不支持 pam_tally2 模块可以使用 pam_tally 模块。另外,不同的pam版本,设置可能有所不同,具体使用方法,可以参照相关模块的使用规则。
2、也可以直接在 system-auth 文件中直接添加这些命令,修改完成后,凡是调用 system-auth 文件的服务,都会生效。因为有自动解锁时间,所以,不用担心全部限制后,会出现永远无法登陆的”尴尬”情况。
3、可以使用 pam_tally2 -r -u username 命令,手动清除某用户记录次数。
②.设置Linux用户连续N次登陆失败时,自动锁定X分钟(pam_tally)
1、如果想在所有登陆方式上,限制所有用户,可以在 /etc/pam.d/system-auth 中增加2行
auth required pam_tally.so onerr=fail no_magic_root
account required pam_tally.so deny=3 no_magic_root even_deny_root_account per_user reset
deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户;
no_magic_root 连root用户也在限制范围,不给root特殊权限。
详细参数的含义,参见 /usr/share/doc/pam-xxxx/txts/README.pam_tally
如果不想限制root用户,可以将 even_deny_root_account 取消掉。
2、针对不同服务来限制不同登陆方式
#只在本地文本终端上做限制,可以编辑如下文件,添加的内容和上方一样。
vi /etc/pam.d/login
#只在远程telnet、ssh登陆上做限制,可以编辑如下文件,添加的内容和上方也一样。
vi /etc/pam.d/remote
vi /etc/pam.d/sshd
auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=3600
此处使用的是 pam_tally2 模块,如果不支持 pam_tally2 可以使用 pam_tally 模块。另外,不同的pam版本,设置可能有所不同,具体使用方法,可以参照相关模块的使用规则。
3、手动解除锁定:
#查看某一用户错误登陆次数:
pam_tally –user username
或者 pam_tally2 --user xxx (用户名)
#例如,查看work用户的错误登陆次数:
pam_tally –user work
#清空某一用户错误登陆次数:
pam_tally –user username –reset
#例如,清空 work 用户的错误登陆次数,
pam_tally –user work –reset
faillog -r 命令亦可。
解锁用户
pam_tally2 -r -u username
4、pam_tally没有自动解锁功能
因为pam_tally没有自动解锁的功能,所以,在设置限制时,要多加注意,万一全做了限制,而 root用户又被锁定了,就只能够进单用户模式解锁了,当然,也可以添加crontab任务,达到定时自动解锁的功能,但需要注意的是,如果在/etc /pam.d/system-auth 文件中添加了pam_tally的话,当root被锁定后,crontab任务会失效,所以,最好不要在system-auth 文件中添加pam_tally。
1.2 Linux设置用户的过期时间
在使用useradd命令创建了一个新的账户,并使用passwd命令设置其密码之后,如果给账户设置一个过期时间,尤其是针对那种临时账户。usermod命令可以做到这一点,使用方式如下:
sudo usermod -e 2020-12-31 xxx
上述命令是在说,系统中有一个名叫xxx的账户,我们设置好了他的账户在2020年12月31日过期。我们若是想要查看账户的过期信息,可以用下述命令去/etc/shadow文件中查看
sudo cat /etc/shadow
2、密码
2.1 密码策略
命令:
vi /etc/login.defs
默认设置:
# Password aging controls: # # PASS_MAX_DAYS Maximum number of days a password may be used. # PASS_MIN_DAYS Minimum number of days allowed between password changes. # PASS_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. # PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7
解析:
PASS_MAX_DAYS 90 --> 密码有效天数,最长多久要变更密码。
PASS_MIN_DAYS 1 --> 密码变更后,最快多久才能再次修改密码。
PASS_MIN_LEN 8 --> 密码的最小设定长度。
PASS_WARN_AGE 7 --> 密码失效之前几天发出警告信息。
2.2 密码锁定
vi /etc/pam.d/system-auth
auth required pam_tally.so onerr=fail deny=6 unlock_time=300
解释:设置位密码连续六次锁定,锁定时间300秒
解锁用户
faillog -u <用户名》 -r
2.3 口令复杂度
1.检查是否设置口令长度至少8位,并包括数字,小写字符、大写字符和特殊符号4类中至少2类。
vi /etc/pam.d/system-auth
找到pam_cracklib.so 在后面加一些参数,
例:password requisite pam_cracklib.so minlen=8 ucredit=-2 lcredit=-2 dcredit=-5 ocredit=-1
意思为最少有2个大写字母,2个小写字符,5个数字, 1个符号
注:ucredit:大写字母个数;lcredit:小写字母个数;dcredit:数字个数;ocredit:特殊字符个数
2.4 用户不能重复使用5次内已使用的口令。
修改文件:/ect/pam.d/system-auth,找到同时有 “password” 和 “pam_unix.so” 字段
相应行的后面添加 remember=5,而不是添加一行!
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remeber=5
通过/etc/security/opasswd中查看禁止使用近期用过的5个密码
3 检查日志审计功能设置,是否配置日志审计功能
查看日志服务是否开启#service -–status-all | grep syslog
在root权限下,使用命令more、cat或vi查看
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
4 ssh安全设置策略(/etc/ssh/sshd_config)
Port 22 #ssh服务端口号,我们可以改成高端口,一般端口扫描工具不会扫描高端口的。
AddressFamily any #ssh服务的协议族,可以用ipv4 ipv6或者直接使用any。
Protocol 2 #ssh服务协议版本,默认为1,建议使用2,1有漏洞。
KeyRegenerationInterval 3600 # 在SSH-1协议下,短命的服务器密钥将以此指令设置的时间为周期(秒),不断重新生成。这个机制可以尽量减小密钥丢失或者黑客攻击造成的损失。
ServerKeyBits 2048 # 指定临时服务器密钥的长度。1024存在认证漏洞,安全最低2048位。
LogLevel ERROR #日志级别,可以使用 QUIET, FATAL, ERROR, INFO(默认), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3。
LoginGraceTime 30 #限制用户必须在指定的时限内认证成功,建议设置低,增加暴力破解难度,单位为秒。
MaxAuthTries 3 #最多登录尝试次数,建议设置低一些,加大暴力破解难度。
RSAAuthentication yes #使用纯 RSA公钥认证。
PubkeyAuthentication yes #使用公钥认证,推荐使用安全高效!
AuthorizedKeysFile .ssh/authorized_keys #用户公钥文件保存路径,默认为用户的home目录下.ssh隐藏文件夹中的authorized_keys,建议更换到其他目录,防止丢失或者被恶意登陆者在默认的这个路径中找到篡改。
PermitEmptyPasswords no #不允许空密码登录,这个太危险啦。
GSSAPIAuthentication no #不基于 GSSAPI 的用户认证,关闭,优化性能。
UsePAM no #使用PAM认证,如果不用LDAP之类的登陆,建议关闭,优化性能。
X11Forwarding no #如果没有使用x11转发最好关闭掉,优化性能。
PrintMotd no #登录打印公告信息,可以修改或者关闭,修改/etc/motd来震慑恶意登陆者,默认会显示一些系统信息,关闭掉,减少恶意登陆者获取的信息量,防止被恶意利用。
PrintLastLog no #不打印最后登陆信息,减少恶意登陆者获取的信息量,防止被恶意利用。
TCPKeepAlive yes #保持长连接,加快连接速度,优化性能。
PidFile /var/run/sshd.pid #ssh服务的pid文件。
Banner none #不显示系统banner信息,如果开启会在每次登陆时显示系统信息,减少恶意登陆者获取的信息量,防止被恶意利用。
PermitRootLogin no #禁止root用户登陆,降低远程登陆的用户权限。
PasswordAuthentication no #允许用户名密码登陆,no,禁止使用用户名和密码登陆,使用公钥登陆,防止针对用户名和密码的暴力破解。
参考链接:
https://www.cnblogs.com/tdcqma/p/5460869.html
https://www.cnblogs.com/Dev0ps/p/9640319.html
https://blog.csdn.net/m0_37886429/article/details/79641551
来源:oschina
链接:https://my.oschina.net/u/2353881/blog/3197436