CentOS7 系统安全加固实施方案
CentOS7.0系统安全加固手册
以下安全设置均是在CentOS7.0_x64环境下minimal安装进行的验证。
一、用户帐号和环境
检查项
注释:
1
清除了operator、lp、shutdown、halt、games、gopher 帐号
删除的用户组有: lp、uucp、games、dip
其它系统伪帐号均处于锁定SHELL登录的状态
2
验证是否有账号存在空口令的情况:
awk -F: '($2 == "") { print $1 }' /etc/shadow
3
检查除了root以外是否还有其它账号的UID为0:
awk -F: '($3 == 0) { print $1 }' /etc/passwd
任何UID为0的账号在系统上都具有超级用户权限.
淦是什么意思梗出处
4
检查root用户的$PATH中是否有.或者所有用户/组用户可写的目录
超级用户的$PATH设置中如果存在这些目录可能会导致超级用户误执行一个特洛伊木马
5
用户的home目录许可权限设置为700
用户home目录的许可权限限制不严可能会导致恶意用户读/修改/删除其它用户的数据或取得其它用户的系统权限
6
是否有用户的点文件是所有用户可读写的:
for dir in \
`awk -F: '($3 >= 500) { print $6 }' /etc/passwd`
do
for file in $dir/.[A-Za-z0-9]*
do
if [ -f $file ]; then
chmod o-w $file
fi
done
done
Unix/Linux下通常以.开头的文件是用户的配置文件,如果存在所有用户可读/写的配置文件可能会使恶意用户能读/写其它用户的数据或取得其它用户的系统权限
7
为用户设置合适的缺省umask值:
cd /etc
for file in profile csh.login csh.cshrc bashrc
do
if [ `grep -c umask $file` -eq 0 ];
then
神话情话echo "umask 022" >> $file
fi
chown root:root $file
chmod 444 $file
done
为用户设置缺省的umask值有助于防止用户建立所有用户可写的文件而危及用户的数据.
8
设备系统口令策略:修改/etc/login.defs文件
将PASS_MIN_LEN最小密码长度设置为12位。
10
限制能够su为root 的用户:#vi /etc/pam.d/su
在文件头部添加下面这样的一行
auth          required        pam_wheel.so use_uid
这样,只有wheel组的用户可以su到root
操作样例:
#usermod -G10 test 将test用户加入到wheel组
11
修改别名文件/etc/aliases:#vi /etc/aliases 
注释掉不要的 #games: root #ingres: root #system: root #toor: root #uucp: root #manager: root #dumper: root #operator: root #decode: root #root: marc 
修改后执行/usr/bin/newaliases
13
修改帐户TMOUT值,设置自动注销时间
vi /etc/profile
增加TMOUT=600
无操作600秒后自动退出
14
设置Bash保留历史命令的条数
#vi /etc/profile
修改HISTSIZE=5
即只保留最新执行的5条命令
16
防止IP SPOOF:
#vi /f 添加:nospoof on
不允许服务器对IP地址进行欺骗
17
使用日志服务器:
#vi /f 照以下样式修改
*.;;    @192.168.10.199
这里只是作为参考,需要根据实际决定怎么配置参数
二、系统访问认证和授权
情侣头像大全2013最新版的
检查项
注释:
1
限制 at/cron给授权的用户:
cd /etc/
rm -f cron.deny at.deny
echo root >cron.allow
echo root >at.allow
chown root:root cron.allow at.allow
chmod 400 cron.allow at.allow
Cron.allow和at.allow文件列出了允许允许crontab和at命令的用户名单, 在多数系统上通常只有系统管理员才需要运行这些命令
5
Crontab文件限制访问权限:
chown root:root /etc/crontab
chmod 400 /etc/crontab
chown -R root:root /var/spool/cron
chmod -R go-rwx /var/spool/cron
chown -R root:root /etc/cron.*
chmod -R go-rwx /etc/cron.*
系统的crontab文件应该只能被cron守护进程(它以超级用户身份运行)来访问,一个普通用户可以修改crontab文件会导致他可以以超级用户身份执行任意程序
6
建立恰当的警告banner:
echo "Authorized uses only. All activity may be \
monitored and reported." >>/etc/motd
chown root:root /etc/motd
chmod 644 /etc/motd
echo "Authorized uses only. All activity may be \
monitored and reported." >> /etc/issue
echo "Authorized uses only. All activity may be \
monitored and reported." >> /etc/issue
改变登录banner可以隐藏操作系统类型和版本号和其它系统信息,这些信息可以会对攻击者有用.
7
限制root登录到系统控制台:
cat <<END_FILE >/etc/securetty
tty1
tty2
tty3
tty4
tty5
tty6
END_FILE
chown root:root /etc/securetty
chmod 400 /etc/securetty
通常应该以普通用户身份访问系统,然后通过其它授权机制(比如su命令和sudo)来获得更高权限,这样做至少可以对登录事件进行跟踪
8
设置守护进程掩码
vi /etc/rc.d/init.d/functions
设置为 umask 022
系统缺省的umask 值应该设定为022以避免守护进程创建所有用户可写的文件
三、核心调整
顺风快递物流查询
设置项
注释:
1
禁止core dump:
cat <<END_ENTRIES >>/etc/f
* soft core 0
* hard core 0
END_ENTRIES
允许core dump会耗费大量的磁盘空间.
2
chown root:root /f
chmod 600 /f
log_martians将进行ip假冒的ip包记录到/var/log/messages
其它核心参数使用CentOS默认值。
四、需要关闭的一些服务
苹组词设置项
注释:
1
关闭Mail Server
chkconfig postfix off
多数Unix/Linux系统运行Sendmail作为邮件服务器, 而该软件历史上出现过较多安全漏洞,如无必要,禁止该服务
五、SSH安全配置
设置项
注释:
1
配置空闲登出的超时间隔:
ClientAliveInterval 300
ClientAliveCountMax 0
Vi /etc/ssh/sshd_config
2
禁用 .rhosts 文件
IgnoreRhosts yes
Vi /etc/ssh/sshd_config
3
禁用基于主机的认证
HostbasedAuthentication no
Vi /etc/ssh/sshd_config
4
禁止 root 帐号通过 SSH 登录
PermitRootLogin no
Vi /etc/ssh/sshd_config
5
用警告的 Banner
Banner /etc/issue
Vi /etc/ssh/sshd_config
6
iptables防火墙处理 SSH 端口 # 64906
-A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 64906 -j ACCEPT
-A INPUT -s 202.54.1.5/29 -m state --state NEW -p tcp --dport 64906 -j ACCEPT
这里仅作为参考,需根据实际需要调整参数
7
修改 SSH 端口和限制 IP 绑定:
Port 64906
安装selinux管理命令
yum -y install policycoreutils-python
修改 port contexts(关键),需要对context进行修改
semanage port -a -t ssh_port_t -p tcp 64906
semanage port -l | grep ssh      ----查看当前SElinux 允许的ssh端口
Vi /etc/ssh/sshd_config
仅作为参考,需根据实际需要调整参数。
8
禁用空密码:
PermitEmptyPasswords no
禁止帐号使用空密码进行远程登录SSH
9
记录日志:
LogLevel  INFO
确保在 sshd_config 中将日志级别 LogLevel 设置为 INFO 或者 DEBUG,可通过 logwatch or 
小儿垂钓古诗logcheck 来阅读日志。
10
重启SSH
systemctl restart sshd.service
重启ssh
六、封堵openssl的Heartbleed漏洞
检测方法:在服务器上运行以下命令确认openssl版本
# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
以上版本的openssl存在Heartbleed bug,需要有针对性的打补丁。
升及补丁:
#yum -y install openssl
验证:
# openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013
built on: Thu Jun  5 12:49:27 UTC 2014
以上built on 的时间是2014.6.5号,说明已经修复了该漏洞。
注:如果能够临时联网安装以上补丁,在操作上会比较简单一些。如果无法联网,则有两种处理办法:首选从安装光盘拷贝独立的rpm安装文件并更新;另一个办法是提前下载最新版本的openssl源码,编译并安装。
七、开启防火墙策略
在CentOS7.0中默认使用firewall代替了iptables service。虽然继续保留了iptables命令,但已经仅是名称相同而已。除非手动删除firewall,再安装iptables,否则不能继续使用以前的iptables配置方法。以下介绍的是firewall配置方法:
#cd /usr/lib/firewalld/services  //该目录中存放的是定义好的网络服务和端口参数,只用于参考,不能修改。这个目录中只定义了一部分通用网络服务。在该目录中没有定义的网络服务,也不必再增加相关xml定义,后续通过管理命令可以直接增加。
#cd /etc/firewalld/services/        //从上面目录中将需要使用的服务的xml文件拷至这个目录中,如果端口有变化则可以修改文件中的数值。
# Check firewall state.
firewall-cmd --state
# Check active zones.
firewall-cmd --get-active-zones
# Check current active services.
firewall-cmd --get-service
# Check services that will be active after next reload.
firewall-cmd --get-service --permanent
查看firewall当前的配置信息,最后一个命令是查看写入配置文件的信息。
# # Set permanent and reload the runtime config.
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --reload
# firewall-cmd --permanent --zone=public --list-services
打开HTTP服务端口并写入配置文件
从配置文件中重载至运行环境中。
# firewall-cmd --permanent --zone=public --remove-service=https
# firewall-cmd --reload
从已有配置中删除一个服务端口
# firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp
# firewall-cmd --reload
# firewall-cmd --zone=public --list-ports
8080-8081/tcp
# firewall-cmd --permanent --zone=public --list-ports
8080-8081/tcp
#
# firewall-cmd --permanent --zone=public --remove-port=8080-8081/tcp
# firewall-cmd --reload
打开或关闭一段TCP端口的方法,同理如果使用了其它非通用端口,那么也可以这么操作。
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" \
    source address="192.168.0.4/24" service name="http" accept"
# firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" \
    source address="192.168.0.4/24" service name="http" accept"
The following command allows you to open/close HTTP access to a specific IP address.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。