以下安全设置均是在CentOS6.5_x86环境basic server下进行的验证。
一、用户帐号和环境
检查项 | 注释: | |
1 | 查看用户:awk -F ":" '{print $1}' /etc/passwd 查看用户组:cat /etc/group 删除用户:userdel lp 删除用户组:groupdel lp 用户列表文件:/etc/passwd 用户组列表文件:/etc/group 查看系统中有哪些用户:cut -d : -f 1 /etc/passwd 查看可以登录系统的用户:cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1 清除了uucp、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位。 | |
9 | 设置系统口令复杂度:修改/etc/pam.d/system-aut件下面这一行 password requisite pam_cracklib.so try_first_pass retry=3 minlen=12 dcredit=1 ucredit=1 lcredit=1 ocredit=1 | 这里限制的是普通用户修改自己口令时的复杂度。这个设置对root是无效的。 |
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 | |
12 | 设置帐户锁定登录失败锁定次数、锁定时间 Vi /etc/pam.d/system-auth 并增加下面一行内容 auth required pam_tally2.so onerr=fail deny=6 unlock_time=300 | 连续输入密码错误6次,则自动锁定5分钟。 解锁用户 faillog -u <用户名> -r |
13 | 修改帐户TMOUT值,设置自动注销时间 vi /etc/profile 增加TMOUT=600 | 无操作600秒后自动退出 |
14 | 设置Bash保留历史命令的条数 贾青个人资料#vi /etc/profile 修改HISTSIZE=5 | 即只保留最新执行的5条命令 |
15 | 防止误使用Ctrl+Alt+Del重启系统 #vi /etc/f 注掉重启系统的相关命令 | |
16 | 防止IP SPOOF: #vi /f 添加:nospoof on | 不允许服务器对IP地址进行欺骗 |
17 | 使用日志服务器: #vi /f 照以下样式修改 *.;; @192.168.10.199 | 这里只是作为参考,需要根据实际决定怎么配置参数 |
二、系统访问认证和授权
检查项 | 注释: | |
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 | echo “1” > /proc/sys/net/ipv4/conf/all/log_martians chown root:root /f chmod 600 /f | log_martians将进行ip假冒的ip包记录到/var/log/messages 其它核心参数使用CentOS默认值。 |
四、需要关闭的一些服务
设置项 | 注释: | |
1 | 关闭NFS客户端进程: 运行 chkconfig nfslock off chkconfig autofs off | |
2 | 禁止Netfs脚本 chkconfig netfs off | 如果不需要文件共享可禁止该脚本 |
正月剪头真的不吉利吗3 | 关闭Mail Server chkconfig postfix off | 多数Unix/Linux系统运行Sendmail作为邮件服务器, 而该软件历史上出现过较多安全漏洞,如无必要,禁止该服务 |
4 | 关闭cpuspeed Chkconfig cpuspeed off | 调节cpu速度用来省电,常用在Laptop上,对服务器没用 |
5 | 关闭IPv6 chkconfig ip6tables off | |
6 | 关闭cups chkconfig cups off | 通用unix打印服务 |
7 | 关闭atd chkconfig atd off | 在指定时间执行命令。建议使用crond |
五、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风急天高猿啸哀 渚清沙白鸟飞回 | 防火墙处理 SSH 端口 # 22 -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT -A INPUT -s 202.54.1.5/29 -m state --state NEW -p tcp --dport 22 -j ACCEPT | 这里仅作为参考,需根据实际需要调整参数 |
7 | 修改 SSH 端口和限制 IP 绑定: Port 64906 ListenAddress 192.168.1.5 ListenAddress 202.54.1.5 | Vi /etc/ssh/sshd_config 仅作为参考,需根据实际需要调整参数。 |
8 | 禁用空密码: PermitEmptyPasswords no | 禁止帐号使用空密码进行远程登录SSH |
9 | 记录日志: LogLevel INFO | 确保在 sshd_config 中将日志级别 LogLevel 设置为 INFO 或者 DEBUG,可通过 logwatch or logcheck 来阅读日志。 |
10 | 重启SSH ps aux |grep ssh kill -HUP pid | -HUP 让进程自动重启 |
六、封堵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源码,编译并安装。
七、开启防火墙策略
查看当前的iptables设置:
#iptables -L
清除当前的防火墙规则(如果是远程配置iptables请在清除规则前先执行下表中第一行)
#iptables -F
#iptables -X
#iptables -Z
添加自定义规则:
/sbin/iptables -P INPUT ACCEPT | 当Chain INPUT (policy DROP)时执行/sbin/iptables -F后,你将和服务器断开连接 所从在清空所有规则前把policy DROP改为INPUT,防止悲剧发生(该设置是针对远程配置iptables而言,本地则可忽略) |
/sbin/iptables -A INPUT -i lo -j ACCEPT | 允许来自于lo接口的数据包,如果没有此规则,你将不能通过127.0.0.1访问本地服务,例如ping 127.0.0.1。默认设置。 |
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT | 开放TCP协议22端口,以便能ssh。该条规则默认将不予设置,每台主机需要根据自己情况决定是使用默认22端口,还是其它端口。 注:主机也需要同步更改SSH监听端口 |
/sbin/iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT | 对进来的包的状态进行检测。已经建立tcp连接的包以及该连接相关的包允许通过。默认设置。 |
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT | 开放TCP协议80端口供web服务。默认不予设置。 |
/sbin/iptables -A INPUT -p tcp -s 10.241.121.15 -j ACCEPT | 10.241.121.15是另外一台服务器的内网ip,由于之间有通信,接受所有来自10.241.121.15的TCP请求 |
/sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT | 接受ping |
/sbin/iptables -P INPUT DROP | 屏蔽上述规则以外的所有请求,不可缺少,否则防火墙没有任何过滤的功能。默认设置。 |
可以使用 iptables -L -n 查看规则是否生效 | |
/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 20220 -j ACCEPT /sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 1562 -j ACCEPT /sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT /sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 7400:7600 -j ACCEPT /sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT /sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT | 左侧各规则只作为参考,默认均不予设置,请目标主机自行选择并设置。 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论