操作系统安全加固 CentOS 篇

前言

随着移动互联网爆发及越来越广泛的应用,一个应用系统经常会面临内部和外部威胁的风险,互联网安全已经成为影响互联网应用的关键问题。系统外围一般都会有防火墙、IDS、IPS 、抗 DDOS 等一系列安全防护手段,在云平台同样提供云防火墙、WAF、漏扫等一系列手段进行安全防护。

但在应用系统上的安全漏洞并不能完全消除,如承载应用系统的网络设备、操作系统、数据库及应用系统本身可能均存在大量的安全漏洞;甚至承载云平台的 SDN(软件定义网络)、SDS(软件定义存储)及其相关联的服务的操作系统,也会存在安装配置不符合安全需求、安全漏洞没及时修补、参数配置错误、使用维护不符合安全需求、开放不必要的端口及服务等等。这些漏洞有可能被控制,会导致数据被篡改或窃取,甚至会毁坏应用系统,导致不可挽救的损失。

本篇文章旨在指导系统管理人员或安全检查人员进行 CentOS 6.4 操作系统的安全合规性检查和配置。

注: CentOS 版本不一致时,请使用不同版本的命令行!

简洁安装操作系统

使用最简洁的方式安装 CentOS ,仅安装操作系统启动必需的服务和软件,降低因软件包而导致出现安全漏洞的可能性。

SSHbanner 信息

1) 执行如下命令创建 ssh banner 信息文件:

# touch /etc/sshbanner

# chown bin:bin /etc/sshbanner

# chmod 644 /etc/sshbanner

# echo " Authorized users only. " >/etc/sshbanner

可根据需要修改第 4 条命令中的 “警告文本”。

2) 修改 /etc/ssh/sshd_config 文件,添加如下行:

# vi /etc/ssh/sshd_config

Banner /etc/sshbanner

不同版本和编译安装的 SSH 服务配置文件位置不同

3) 重启SSH服务

# pkill sshd

# /usr/local/sbin/sshd

由于执行下面操作会断开SSH服务,故建议所有安全加固做完后重启服务器,使该配置生效

登录Banner提示

echo" Authorized users only. All activity may be monitored and reported "> /etc/motd

可根据需要命令中的 “警告文本”。

删除root以外UID为0的用户

`# awk -F “:” '($3==0) ' /etc/passwd`

# userdel "username"

若有 UID 为 0 的其它用户,使用 userdel 删除用户。

防 syn 攻击优化检查主机访问控制

1) 执行备份:

# cp -p /etc/hosts.allow /etc/hosts.allow_bak

# cp -p /etc/hosts.deny /etc/hosts.deny_bak

2) 编辑 /etc/hosts.allow 和 /etc/hosts.deny ,文件的配置格式为:

# vi /etc/hosts.allow

all:192.168.4.44:allow // 允许单个IP访问所有服务进程

sshd:192.168.1.:allow // 允许192.168.1的整个网段访问SSH服务进程

#vi /etc/hosts.deny

sshd:all:deny` // 拒绝其它所有 IP 访问 SSH 服务

预防Flood攻击

# vim /etc/sysctl.conf

net.ipv4.tcp_syncookies=1

# sysctl -p // 使之生效

关闭不必要服务

1) 关闭开启命令

# chkconfig 服务名 off/on // 开启关闭开机启动项

# service 服务名 stop/start // 天启关闭服务

2) 建议关闭的服务

3) 正常情况关闭完服务,使用命令仅可看到进程和业务进程。

禁止 ctrl+alt+del

# vi /etc/inittab

ca::ctrlaltdel:/bin/true

将行修改为

或者将此行删除、注释,修改为其它命令均可,如:

无用账户删除或锁定

1) 执行备份:

# cp -p /etc/passwd /etc/passwd.bak

# cp -p /etc/shadow /etc/shadow.bak

2) 锁定无用帐户:

方法一:在需要锁定的用户名的密码字段前面加 !! ,建议锁定的用户:lp、uucp、games、nobody 。

# vi /etc/shadow

test:!!$1$QD1ju03H$LbV4vdBbpw.MY0hZ2D/Im1:14805:0:99999:7:::

方法二:

# passwd -l test // 假设 test 为无用帐号

方法三:将文件中的无用帐户的域设置成。

# vi /etc/passwd

lp:x:4:7:lp:/var/spool/lpd:/bin/false

设置登录超时

1) 执行备份:

# cp -p /etc/profile /etc/profile.bak

# cp -p /etc/csh.cshrc /etc/csh.cshrc.bak

2) 在 /etc/profile 文件增加以下两行:

# vi /etc/profile

TMOUT=180

exportTMOUT

3) 修改 /etc/csh.cshrc 文件,添加如下行:

# vi /etc/csh.cshrc

setautologout=30

改变这项设置后,重新登录才能有效。

限制 root 远程登录

1) 执行备份:

# cp -p /etc/securetty /etc/securetty_bak

# cp -p /usr/local/etc/sshd_config /usr/local/etc/sshd_config_bak

2) 新建一个普通用户并设置高强度密码:

# useradd username

# passwd username

3) 禁止 root 用户远程登录系统:

# vi /etc/securetty

注释掉的行,保存退出,则禁止了 root 从 telnet 登录。

# vi /usr/local/etc/sshd_config

将设置为并不被注释,保存退出,则禁止了 root 从 ssh 登录。

用户缺省UMASK设置

1) 执行备份:

# cp -p /etc/profile /etc/profile_bak

# cp -p /etc/csh.login /etc/csh.login_bak

# cp -p /etc/csh.cshrc /etc/csh.cshrc_bak

# cp -p /etc/bashrc /etc/bashrc_bak

# cp -p /root/.bashrc /root/.bashrc_bak

# cp –p /root/.cshrc /root/.cshrc_bak

2) 修改 umask 设置:

# vi /etc/profile

# vi /etc/csh.login

# vi /etc/csh.cshrc

# vi /etc/bashrc

# vi /root/.bashrc

# vi /root/.cshrc

umask027

将 umask 值修改为 027,保存退出。

3) 配置文件中若没有,添加行到配置文件。

密码复杂度要求

使用或实现密码复杂度,两者不能同时使用。

pam_cracklib 主要参数说明:

pam_passwdqc主要参数说明:

具体操作如下:

1) 执行备份:

# cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth_bak

# cp -p /etc/pam.d/passwd /etc/pam.d/passwd_bak

2) 修改策略设置:

如配置密码长度最小 8 位,至少包含大小写字母、数字、其它字符中的两类,并对 root 用户生效,配置如下:

# vi /etc/pam.d/system-auth

password requisite pam_cracklib.sodcredit=-1ucredit=-1lcredit=-1ocredit=-1minclass=2minlen=8enforce_for_root

password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok

suse设备是/etc/pam.d/passwd文件

密码不重复 5 次设置

1) 执行备份:

# cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth_bak

2) 创建文件 /etc/security/opasswd,并设置权限:

# touch /etc/security/opasswd

# chown root:root /etc/security/opasswd

# chmod 600 /etc/security/opasswd

3) 修改策略设置,在所在行后面增加,保存退出;

# vi /etc/pam.d/system-auth

password required pam_unix.soremember=5

在相应行的后面添加 remember=5 ,而不是添加一行!

口令锁定策略

1) 执行备份:

# cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth.bak

2) 修改策略设置:增加到第二行,即后面。

# vi /etc/pam.d/system-auth

auth required pam_tally2.so even_deny_rootdeny=3unlock_time=120

even_deny_root:包含root用户

deny:拒绝次数

unlock_time:解锁时间

口令生存期

1) 执行备份:

# cp -p /etc/login.defs /etc/login.defs.bak

2) 修改策略设置:修改 PASS_MIN_LEN 、 PASS_MAX_DAYS 、PASS_MIN_DAYS、PASS_WARN_AGE的值,保存退出。举例如下:

# vi /etc/login.defs

PASS_MAX_DAYS90//口令最大有效天数

PASS_MIN_DAYS30//口令最小有效天数

PASS_MIN_LEN8//口令最少字符数

PASS_WARN_AGE7//口令过期提前警告天

ftp 加固(若启用服务)

更改 ftp 警告 Banner

1) 修改vsftp回显信息

# vi /etc/vsftpd/vsftpd.conf

ftpd_banner=" Authorized users only. All activity may be monitored and reported."

可根据实际需要修改告警文本内容。

2) 重启服务:

# service vsftpd restart

ftp 用户对文件/目录的存取权限

前提:系统使用vsftp

1) 修改 /etc/vsftpd.conf 或 /etc/vsftpd/vsftpd.conf ,确保以下行未被注释掉,如果没有该行,请添加:

# vi /etc/vsftpd.conf

write_enable=YES //允许上传。如果不需要上传权限,此项可不进行更改。

ls_recurse_enable=YES

local_umask=022//设置用户上传文件的属性为755

anon_umask=022//匿名用户上传文件(包括目录)的 umask

2) 重启 ftp 网络服务

# service vsftpd restart

限制FTP用户登录后能访问的目录

1)修改/etc/vsftpd.conf ,确保以下行未被注释掉,如果没有该行,请添加:

# vi /etc/vsftpd.conf

chroot_local_user=YES

2) 重启网络服务

# service vsftpd restart

限制FTP用户登录

1) 配置vsftpd.conf文件,设定只允许特定用户通过ftp登录,修改其中内容:

# vi /etc/vsftpd.conf

userlist_enable=YES // 此选项被激活后,VSFTPD 将读取 userlist_file 参数所指定的文件中的用户列表。

userlist_deny=NO // 决定禁止还是只允许由 userlist_file 指定文件中的用户登录FTP服务器。默认值 YES:禁止文件中的用户登录,同时也不向这些用户发出输入口令的提示;值为 NO:只允许在文件中的用户登录FTP服务器。

userlist_file=/etc/vsftpd/user_list

2) 判断条件

建议" root daemon bin sys adm lp uucp nuucp listen nobody noaccess nobody4 " 用户不能通过 FTP 登录。

Telnet 告警信息设置(若启用服务)

1) 修改 Telnet 回显信息,修改文件 /etc/issue 和 /etc/issue.net 中的内容:

#echo " Authorized users only. " > /etc/issue

#echo " Authorized users only. " > /etc/issue.net

可根据需要命令中的 “警告文本”。

2) 重启服务:

# service xinetd restart

开启 iptables 防火墙

防火墙是网络安全的重中之重,有关 ipatables 的使用和帮助,将会另外写一篇详细描述。

# 开启 iptables 并设置开机自启动

# iptables service restart

# chkconfig iptables on

下面是适合Web服务器的iptables规则示例和解释:

# IPT -P INPUT DROP #1

# IPT -P FORWARD DROP #1

# IPT -P OUTPUT DROP #1

# IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #2

# IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT #3

# IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT #3

# IPT -A INPUT -i lo -j ACCEPT #4

# IPT -A OUTPUT -o lo -j ACCEPT #4

# IPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT #5

# IPT -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT #5

# IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #6

#1、设置INPUT,FORWARD,OUTPUT链默认target为DROP,也就是外部与服务器不能通信。

#2、设置当连接状态为RELATED和ESTABLISHED时,允许数据进入服务器。

#3、设置外部客户端连接服务器端口80,22。

#4、允许内部数据循回。

#5、允许外部ping服务器。

#6、设置状态为RELATED和ESTABLISHED的数据可以从服务器发送到外部。

禁止 ping 服务器

禁止 ping 服务器可以使用 iptables 进行设置,同时也可采用修改禁止。

编辑 sysctl.conf 文件,在文件中增加一行

如果已经有这一行了,直接修改号后面的值,0 表示允许,1 表示禁止

修改完成后执行使新配置生效。

检查是否记录安全事件日志

修改 /etc/syslog.conf 或 /etc/rsyslog.conf ,在文件中加入如下内容:

# vi /etc/syslog.conf

*.err;kern.debug;daemon.notice /var/log/messages

# chmod 640 /var/log/messages

# service rsyslog restart

禁止普通用户合用 su 切换到 root 用户

1)把需要 su 到 root 的用户加入 wheel 组

# usermod -g wheel test // 例如把 test 用户加入 wheel 组

2)修改配置文件/etc/pam.d/su ,去掉下面行的注释

# vi /etc/pam.d/su

auth required pam_wheel.so use_uid // 保证当前行不被注释

3)配置生效后,仅 test 用户可使用 su 切换到 root 用户。

安全是一个永恒的话题,没有绝对的安全,只有不断加强的安全系统和体系。同时我们应该培养良好的安全意识和操作习惯。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181025G1MUCD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券