Linux---Centos口令安全设置

流过昼夜 提交于 2020-03-18 14:01:53

某厂面试归来,发现自己落伍了!>>>

操作之前建议备份相关文件

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

 

 

 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!