CentOS 7系统安全加固配置参考
CentOS 7系统安全加固
准备工作
-
确认系统版本信息
-
# more /proc/version # more /etc/centos-release
-
账号与密码安全
-
查看空口令账号
-
root下 # awk -F: '($2 == ""){print $1}' /etc/shadow
-
-
查看root权限账户
-
# awk -F: '($3==0){print $1}' /etc/passwd
-
-
设置密码有效周期策略
-
【建议全局指定】 # vi /etc/login.defs PASS_MAX_DAYS 99999 # 一般可按 一个季度或者半年 PASS_MIN_LEN 5 # >=8位 【单独指定】 # charge -M 3 [账号名] 【强制3天后过期】 【新建账号强制密码过期】 # chage -d 0 [账号名]
-
-
设置密码复杂度
-
# vi /etc/pam.d/system-auth minlen=10 # 最小分数为10分, # 数字、英文大小写、特殊字符的默认长度都=1 # 如果要使得任何字符不产生对minlen的影响,则我们必须将这些字符类型的默认信用分设为负数 # 例如:ocredit=-1,lcredit=-1,ucredit=-1,dcredit=-1 # 如上配置表示,特殊字符、大小写字母、数字的评分为负,不会影响minlen设置的最小密码长度,同时负号后面的数字表示设置的密码中必须包含1位指定的字符类型。比如:123!@#Qwea,类似这种密码才能符合标准 dcredit=-1 # 必须要包含至少1个数字 ocredit=-2 # 必须包含2个特殊符号 ucredit=-1 # 必须包含1个大写字母 lcredit=-1 # 必须包含1个小写字母 enforce_for_root # 确保即使是root帮助用户设置密码,也应强制执行复杂度策略
-
-
设置用户登录失败次数与锁定
-
# vi /etc/pam.d/sshd ''' #%PAM-1.0 auth required pam_tally2.so deny=3 unlock_time=15 even_deny_root root_unlock_time=10 ''' # 新增一行配置 # 使用pam_tally2模块来锁定和解锁用户 # root也遵守这个3次失败锁定的规则 # 累计超过三次失败锁定 # 普通用户15秒后自动解锁 # root用户10秒后自动解锁 # pam_tally2 --user [账号名] 【查看当前锁定的用户信息】 # pam_tally2 -r -u 账号名 【解锁用户】
-
-
禁用闲置、临时、过期等账号
-
禁用账号 # usermod -L 账号名 【例如:usermod -L test】 账号解除禁用 # usermod -U 账号名 【usermod -U test1】 删除账号(保留其/home目录下的user目录) # userdel 账号名 【userdel test】 删除账号与其/home目录下的user目录 # userdel -r 账号名 【userdel -r test】
-
-
重复密码
-
配置文件
-
# 末尾添加 remember=3【表示第五次重置密码的时候,可以使用第一次重置的密码】仅在用户自己修改密码有效 ''' password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=3 '''
-
访问控制
-
禁用telnet
-
查看telnet服务是否在运行 # netstat -an |grep ":23" 如有则禁止该服务运行,并且禁止开机启动 # systemctl disable telnet
-
-
设置指定管理源范围
- 对接入服务器的IP、方式进行限制
- 白名单文件/etc/hosts.allow
- 参考.deny配置文件
- 白名单配置文件优先级大于黑名单配置文件
- 黑名单文件/etc/hosts.deny
- 拒绝单一IP所有访问:ALL:172.16.82.1:deny 将该配置加入配置文件
- 拒绝某个网段IP指定ssh不能访问:sshd:172.16.82.0/255.255.255.0:deny 将该配置加入配置文件
-
限定闲置超时时间
- 配置文件:/etc/profile
- 添加配置,例如设置5分钟闲置则自动断开连接:exprot TMOUT=300 【时间单位为秒】
-
限制FTP登录
- ???
系统安全设定
- 关闭不必要的服务
- 例如:蓝牙功能可以直接关闭,并且设置开机不允许启动
- 禁止开机自启动:$ systemctl disable bluetooth
权限设定
-
sudo权限
-
使用命令$ visudo 来编辑/etc/sudoers配置文件
-
root ALL=(ALL) ALL 【默认有】 test1 ALL=(root)/usr/sbin/visudo,/usr/bin/more /etc/shadow,/usr/bin/vi /etc/ssh/sshd_config【指定用户test1 可以使用sudo 来提取root权限,并且指定可以执行后面的三条命令】
-
使用$ sudo -l命令来查看本账号的sudo权限
-
-
禁止root用户远程登录
-
找到配置文件/etc/ssh/sshd_config
-
找到 #PermitRootLogin yes 解除注释,并将其修改为 PermitRootLogin no
-
引用文字
安全日志审计
-
开启本地日志服务
- syslog存储目录/var/log/
- 开启本地日志rsyslog$ service rsyslog start
-
开启日志审计服务
- 审计日志记录路径为 /var/log/audit/audit.log
- 开启审计服务$ service auditd start
- 查询审计日志,例如:查询用户登录审计日志$ ausearch -m USER_LOGIN
-
查看开机自启动服务
-
# systemctl list-unit-files
-
-
日志转存,防止日志丢失、修改、覆盖、删除等操作
-
日志转存配置文件:/etc/logrotate.conf
-
# rotate log files weekly weekly # 每周转存一次 # keep 4 weeks worth of backlogs rotate 4 # 保留四个日志备份文件 # create new (empty) log files after rotating old ones create # rotate后,创建一个新的空文件 # use date as a suffix of the rotated file dateext # 轮转的文件名字带有日期信息 # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # 此目录下的配置文件优先生效 # no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { # 指定/var/log/wtmp日志文件; monthly # 每月轮转一次,优先于全局设定的每周轮转一次; minsize 1M # 日志文件大于1M才会去轮转; create 0664 root utmp # 新日志文件的权限,属主,属组; rotate 1 # 保留一个日志备份,优先于全局设置的四个; } /var/log/btmp { # 指定/var/log/btmp日志文件; missingok # 如果日志丢失,不报错; monthly create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here. # 系统特定的日志也可以在主文件中配置。例如nginx等
-
-
设置bash保留历史命令的条数
- 找到配置文件/etc/profile
- 修改HISTSIZE,将其值改为10, 则只保留最后10条