centos7安全防护配置

前言

这段时间公司的服务器在做等保验证,对服务器的做了一些安全防护配置,留此记录。

操作系统版本:centos 7.6

密码有效周期

  • 相关文件:/etc/login.defs
参数 说明 默认值 修改值
PASS_MAX_DAYS 密码生存周期 9999 90
PASS_MIN_DAYS 密码更改最小间隔天数 0 30
PASS_MIN_LEN 密码最小长度 5 8
PASS_WARN_AGE 密码失效前警告天数 7 30

密码复杂度策略

  • 相关文件:/etc/security/pwquality.conf
参数 说明 默认值 修改值
minlen 密码最小长度 默认注释 8
dcredit 密码中的数字个数,小于0则表示至少n个 默认注释 -1
ucredit 密码中大写字母个数,小于0则表示至少n个 默认注释 -1
lcredit 密码中小写字母个数,小于0则表示至少n个 默认注释 -1
ocredit 密码中特殊字符个数,小于0则表示至少n个 默认注释 -1

密码重复使用次数限制

  • 相关文件:/etc/pam.d/system-auth,找到password sufficient,并替换成以下内容。密码重复使用次数限制不超过5次。主要就是追加remember=5
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5

命令行界面超时退出

  • 相关文件:/etc/profile,添加如下配置,10分钟内无交互则超时退出
export TMOUT=600
# readonly设置后无法临时修改TMOUT,需要修改profile后才行
readonly TMOUT

telnet相关

  • 禁止telnet远程登录。编辑/etc/services ,找到telnet并注释
  • 关闭telnet
systemctl stop telnet && systemctl disable telnet

禁止root用户远程登录

  • 相关文件:/etc/ssh/sshd_config,将PermitRootLogin的值设置为no
PermitRootLogin no

查看是否有空密码的用户

  • 有则手动修改密码
cat /etc/shadow | awk -F ':' '{if($2==0) print $0}'

用户认证失败次数限制

  • ssh方式认证失败次数限制。相关文件:/etc/pam.d/sshd。参考如下配置,在初始配置基础上加了第2行和第8行
#%PAM-1.0
auth       pam_tally2.so deny=5 unlock_time=600 no_lock_time
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
account    required     pam_tally2.so
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare
  • 用户认证次数限制。相关文件:/etc/pam.d/login。将如下内容放在#%PAM-1.0的下一行,也就是放在第二行
auth      required  pam_tally2.so   deny=5 ulock_time=600  even_deny_root root_unlock_time=600

禁止wheel组之外的用户su为root

  • 相关文件:/etc/pam.d/su,将以下内容放在第二行和第三行。这表明只有wheel组的成员可以使用su命令成为root用户。 可以把用户添加到wheel组,以使它可以使用su命令成为root用户。 添加方法为:usermod –aG wheel username
auth        sufficient  pam_rootok.so
auth        required    pam_wheel.so group=wheel

是否设置除root之外UID为0的用户

  • 相关文件:/etc/passwd
cat /etc/passwd | awk -F ':' '{if($3==0) print $0}'

是否允许匿名用户登录FTP

使用命令:ps -ef|grep vsftpd 查看vsftp进程是否存在,并查看vsftpd.conf的文件目录

cat vsftpd.conf|grep "anonymous_enable"

/etc/passwd文件内不包含ftp用户已禁用且vsftpd.conf文件中包含anonymous_enable=NO语句。

非FTP服务器建议直接停用vsftpd

系统文件权限

chmod 644 /etc/group
chmod 000 /etc/shadow
chmod 644 /etc/passwd

# 用户设置完后再设置文件的隐藏权限
# 集合等保的要求及运维难度,shadow文件从等保的角度来说的话设置好权限就行,不需要加锁
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
chattr +i /etc/passwd

chmod 600 /boot/grub2/grub.cfg
chmod 600 /etc/security

chmod 750 /tmp
chmod 750 /etc/rc.d/init.d/
chmod 750 /etc/rc0.d
chmod 750 /etc/rc1.d
chmod 750 /etc/rc2.d
chmod 750 /etc/rc3.d
chmod 750 /etc/rc4.d
chmod 750 /etc/rc5.d
chmod 750 /etc/rc6.d

# 检查日志文件是否非全局可写
# 日志文件的权限设置为非全局可写,即限制相关用户访问日志文件的权限
chmod 775 /var/log/maillog
chmod 755 /var/log/messages
# chmod 775 /var/log/localmessages
chmod 775 /var/log/spooler
chmod 775 /var/log/boot.log
chmod 775 /var/log/mail
chmod 775 /var/log/cron
chmod 775 /var/log/secure

可执行文件的SUID权限

检查/usr/bin目录下有SUID权限的可执行文件,视情况剔除SUID权限。

find /usr/bin -type f   \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \;

用户目录缺省访问权限设置

  • 相关文件:/etc/login.defs,将UMASK的值从077改为027

日志文件权限设置

  1. 检查syslog进程,ps -ef | grep syslog
  2. 根据syslog的不同执行指令
# syslogd
LOGDIR=`cat /etc/syslog.conf 2>/dev/null | grep -v "^[[:space:]]*#"|sed '/^#/d' |sed '/^$/d' |awk '(($2!~/@/) && ($2!~/*/) && ($2!~/-/)) {print $2}';`;ls -l $LOGDIR 2>/etc/null | grep  "^-";

# syslog-ng
LOGDIR=`cat /etc/syslog-ng/syslog-ng.conf 2>/dev/null | grep -v "^[[:space:]]*#"|grep "^destination"|grep file|cut -d\" -f2`;ls -l $LOGDIR 2>/dev/null | grep "^-";

# rsyslogd
LOGDIR=`cat /etc/rsyslog.conf | grep -v "^[[:space:]]*#" |sed '/^#/d' |sed '/^$/d' |awk '(($2!~/@/) && ($2!~/*/) && ($2!~/-/)) {print $2}'`;ls -l $LOGDIR 2>/etc/null | grep "^-";

权限值没有限定,只要满足同组用户、其他用户不出现r-x,rw-,rwx即可。640或600

安全事件日志配置

  1. 查看配置文件
# 查询运行中的日志服务
ps -ef|grep syslog
# syslog-ng服务使用以下命令查看配置文件:
cat /etc/syslog-ng/syslog-ng.conf 
# syslog服务使用以下命令查看配置文件:
cat /etc/syslog.conf
# rsyslog服务使用以下命令查看配置文件:
cat /etc/rsyslog.conf
  1. rsyslog日志服务配置安全事件日志。编辑/etc/rsyslog.conf
# 其中/var/adm/messages为日志文件
# 如果该文件不存在,则创建该文件
# touch /var/adm/messages
# chmod 666 /var/adm/messages

# 添加以下配置
*.err;kern.debug;daemon.notice                          /var/adm/messages
  1. 重启日志服务
systemctl restart rsyslog

设置ssh登录警告Banner

  • 登录前banner警告
touch /etc/ssh_banner
chown bin:bin /etc/ssh_banner
chmod 644 /etc/ssh_banner
echo " Authorized only. All activity will be monitored and reported " > /etc/ssh_banner
# 编辑 /etc/ssh/sshd_config , 添加如下行
Banner /etc/ssh_banner
# 重启sshd
systemctl restart sshd
  • 登录后警告
echo "Login success. All activity will be monitored and reported " > /etc/motd

历史命令设置

编辑/etc/profile,修改如下变量,无则添加

HISTSIZE=5
HISTFILESIZE=5

删除或锁定用户

需要锁定的用户:adm, lp, mail, uucp, operator, games, gopher, ftp, nobody, nobody4, noaccess, listen, webservd, rpm, dbus, avahi, mailnull, smmsp, nscd, vcsa, rpc, rpcuser, nfs, sshd, pcap, ntp, haldaemon, distcache, apache, webalizer, squid, xfs, gdm, sabayon, named。

# 删除用户
userdel username
# 锁定用户
usermod -L username
# 解锁用户
usermod -U username

authconfig使用

# 密码复杂度
authconfig --enablereqdigit --update
authconfig --enablereqlower --update
authconfig --enablerequpper --update
authconfig --enablereqother --update
posted @ 2022-12-20 10:53  花酒锄作田  阅读(1008)  评论(0编辑  收藏  举报