目录
密码安全策略
设置密码的有效期和最小长度
设置用户密码的复杂度
登录安全策略
设置用户远程登录的安全策略
安全的远程管理方式
访问控制
限制root用户登录
修改ssh 22端口
设置登录超时时间
限制IP访问
安全审计
审核策略开启
日志属性设置
查看系统登录日志
操作系统安全加固就是使操作系统安全稳定的各种技术方案。安全加固可从操作系统内外来看,对内就是是操作系统配置以及内核参数的调整,加强内部管理。对外,操作系统可以通过建立防火墙,关闭不必要开放的端口等等,建立安全的网络屏障。
-
密码安全策略
操作系统和数据库系统管理用户身份鉴别信息应具有不易被冒用的特点,口令应有复杂度要求并定期更换。设置有效的密码策略,防止攻击者破解出密码。
密码相关的安全策略,主要是通过 /etc/login.defs 与 pam_cracklib.so 实现的。
/etc/login.defs:只控制了账号密码的有效期和最小长度。修改完/etc/login.defs文件后,会立即生效,但是它只对修改后创建的用户生效。
pam_cracklib.so:该模块实现了账户密码的复杂度控制。早期用的是pam_cracklib.so模块,后来改成用pam_pwquality.so了,该模块完全兼容旧的pam_cracklib.so模块。该模块对应的配置文件路径在/etc/pam.d/目录下。
查看空口令帐号并为弱/空口令帐号设置强密码
[root@localhost ~]# awk -F: '($2 == ""){print $1}' /etc/shadow
设置密码的有效期和最小长度
修改vim /etc/login.defs配置密码周期策略
[root@localhost ~]# vim /etc/login.defs
/etc/login.defs参数说明:
PASS_MAX_DAYS 90 #密码最大有效期,此处参数PASS_MAX_DAYS为90,表示90天后,密码会过期,99999表示永不过期。
PASS_MIN_DAYS 10 #两次修改密码的最小间隔时间,0表示可以随时修改账号密码
PASS_MIN_LEN 8 #密码最小长度,对于root无效
PASS_WARN_AGE 7 #密码过期前多少天开始提示
注:修改了 /etc/login.defs下参数时,会立即生效,但是它只对修改后创建的用户生效,以前的帐号还是按99999天周期时间来算
设置用户密码的复杂度
备份原有配置文件
[root@localhost ~]# cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
设置复杂度策略
[root@localhost ~]# vim /etc/pam.d/system-auth
找到包含pam_pwquality.so模块的行,将原有行注释并修改为如下的新配置,密码长度最少12位,至少包含一个大写字母,一个小写字母,一个数字,一个特殊符号。
password requisite pam_cracklib.so try_first_pass local_users_only retry=3 difok=2 authtok_type= minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
注释说明:
difok=2 #本次密码与上次密码至少不同字符数
minlen=12 #密码最小长度为8个字符。
lcredit=-1 #密码应包含的小写字母的至少一个
ucredit=-1 #密码应包含的大写字母至少一个
dcredit=-1 #将密码包含的数字至少为一个
retry=3 #重试多少次后返回密码修改错误
ocredit=-1 #设置其他符号的最小数量,例如@,#、! $%等,至少要有一个
enforce_for_root #确保即使是root用户设置密码,也应强制执行复杂性策略。
【注】这个设置对于root没有作用,只针对普通用户修改自己密码时起作用
如果新建用户的密码不符合密码复杂度,就会出现BAD PASSWORD: it is based on a dictionary word提示。
passwd ttt
Changing password for user ttt.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
创建新用户进行验证
-
登录安全策略
登录安全相关的控制策略,主要是通过 pam_tally2.so 模块实现的,比如尝试登录失败多少次就锁定用户多少分钟。同样,该模块对应的配置文件路径也是在vim /etc/pam.d/login目录下。
设置用户远程登录的安全策略
执行指令# vim /etc/pam.d/login添加以下一行
[root@localhost ~]#vim /etc/pam.d/login
在字符终端下,实现某一用户连续错误登陆N次后,就锁定该用户X分钟
执行 vim /etc/pam.d/login
在#%PAM-1.0 下新起一行,加入
auth required pam_tally2.so deny=3 unlock_time=5 even_deny_root root_unlock_time=10
如果不限制root用户,则可以写成
auth required pam_tally2.so deny=3 unlock_time=5
说明:
even_deny_root=n #root用户失败登录次数超过deny=n次后拒绝访问
deny=n #设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户;
unlock_time=n #设定普通用户锁定后,多少时间后解锁,单位是秒;
root_unlock_time=n #与even_deny_root相对应的选项,如果配置该选项,则root用户在登录失败次数超出限制后被锁定指定时间。
解锁用户:
pam_tally2 --user <username> #查看用户登录失败次数记录
[root@localhost ~]# pam_tally2 --user root
pam_tally2 --user <username> --reset #清空失败次数记录,即解锁用户
或者[root@localhost ~]# pam_tally2 -r -u root
安全的远程管理方式
当对服务器进行远程管理时,应采取必要措施,防止鉴别信息在网络传输过程中被窃听。
防止远程管理过程中,密码等敏感信息被窃听
禁止telnet运行,禁止开机启动
关闭telnet有两种方法
方法一: vi /etc/xinetd.d/telnet 将disable = no 改为 disable = yes
方法二: chkconfig telnet off
重启服务生效 service xinetd restart
删除包 rmp -e telnet-server --nodeps
vim /etc/services 注释掉23端口
访问控制
应及时删除多余的、过期的帐户,避免共享帐户的存在。
删除或禁用临时、过期及可疑的帐号,防止被非法利用。
主要是管理员创建的普通帐号,如:test
usermod -L user 禁用帐号,帐号无法登录,/etc/shadow第二栏显示为!开头
userdel user 删除user用户
userdel -r user 将删除user用户,并且将/home目录下的user目录一并删除
限制root用户登录
首先创建一个普通用户test2,然后配置好su授权,需要时使用su授权执行命令,限制root用户直接登录服务器。
创建普通用户test2
[root@localhost ~]# useradd test2
[root@localhost ~]# passwd test2
为普通用户test2添加su授权
[root@localhost ~]# vim /etc/sudoers
root ALL=(ALL) ALL
test2 ALL=(ALL) ALL
登录test2普通用户验证
修改root用户禁止ssh登录系统
执行指令
[root@localhost ~]# vim /etc/ssh/sshd_config
PermitRootLogin no
[root@localhost ~]# systemctl restart sshd 重启ssh服务
再次使用root用户登录就被限制了
可以使用普通用户登录后,su 切换至root用户
修改ssh 22端口
[root@localhost ~]# vim /etc/ssh/sshd_config
Port 2022
[root@localhost ~]# systemctl restart sshd 重启
验证
设置登录超时时间
通过命令查看cat /etc/profile grep TMOUT
vim /etc/profile
添加export TMOUT=600 --600秒超时
-
限制IP访问
通过设置,使得SSH只允许特定用户从特定的IP登录,其它未经允许的用户和IP都不能登录。
[root@localhost ~]# vim /etc/hosts.allow
sshd:192.168.2.*:allow #允许访问的网段
sshd:192.168.3.10:allow #允许访问的IP
添加sshd:ALL限制所有ip地址访问
[root@localhost ~]# vim /etc/hosts.deny
-
安全审计
审核策略开启
审计范围应覆盖到服务器和重要客户端上的每个操作系统用户和数据库用户;
开启审核策略,若日后系统出现故障、安全事故则可以查看系统日志文件,排除故障、追查入侵者的信息等。
查看rsyslog与auditd服务是否开启
[root@localhost ~]# systemctl status rsyslog
[root@localhost ~]# systemctl status auditd
日志属性设置
应保护审计记录,避免受到未预期的删除、修改或覆盖等。
防止重要日志信息被覆盖
让日志文件转储一个月,保留6个月的信息,先查看目前配置
[root@localhost ~]# vim /etc/logrotate.conf
把原始配置修改成 rotate 6
[root@localhost ~]# more /etc/logrotate.conf | grep -v "^#\|^$"
-
查看系统登录日志
[root@localhost ~]# lastlog #查看登录用户、端口和登录时间等信息
[root@localhost ~]# last –x #查看系统关闭、用户登录和退出的信息
[root@localhost ~]# lastb #查看尝试登录的失败信息
[root@localhost ~]# tail -f /var/log/messages #查看系统日志
[root@localhost ~]# last #参看账号登录情况