jxnxsdengyu
作者jxnxsdengyu课题专家组·2020-04-07 17:03
系统工程师·江西农信

技术技巧---Linux安全加固规范(RHEL6 x86)

字数 9981阅读 6482评论 1赞 1

Linux安全加固规范(RHEL6 x86)

为防范计算机系统风险,规范计算机系统安全加固脚本,拟定此安全加固标准规范。

1认证授权

1.1重要目录或文件权限设置

说明: /etc/security/ 为系统安全配置文件目录,禁止普通用户查看修改; /etc/init.d/ 、 /etc/rc*.d 为系统启动配置文件目录,禁止普通用户查看修改。

语句:

chmod 600 /etc/security

chmod 750 /etc/init.d/

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 644 /etc/passwd

chmod 644 /etc/group

chmod 400 /etc/shadow

chmod 644 /etc/services

chmod 600 /etc/security

chmod 600 /boot/grub/grub.conf

1.2重要文件属性设置

说明:从内核级别修改账户相关文件属性,禁止修改

语句:

chattr +i /etc/passwd

chattr +i /etc/gshadow

chattr +i /etc/group

chattr +i /etc/shadow

1.3用户umask设置

说明:修改用户默认环境变量文件,禁止普通用户查看其他用户文件。

语句:

sed -i 's/umask 002/umask 077/' /etc/profile

sed -i -c 's/umask 002/umask 077/' /etc/csh.cshrc

sed -i -c 's/umask 002/umask 077/' /etc/bashrc

echo "umask 077" >> /etc/csh.login

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

语句:

sed -i -c 's/UMASK.*077/UMASK 027/' /etc/login.defs

1.5设置ssh登录前警告Banner**

说明:设置 ssh 登录后警告 Banner 用于系统安全。

语句:

echo " Authorized only. All activity will be monitored and reported " > /etc/ssh_banner

chownbin:bin /etc/ssh_banner

chmod 644 /etc/ssh_banner

echo "Banner /etc/ssh_banner " >> /etc/ssh/sshd_config

/etc/init.d/sshd restart

2日志审计

3协议安全

4其他安全

*4.1设置命令行界面超时退出*

说明:设置自动超时退出为 10 分钟。

语句:

echo 'export TMOUT=600' >> /etc/profile

4.2调整系统启动服务

说明:调整系统启动服务,降低安全风险

语句:

chkconfig NetworkManager off

chkconfig abrt-ccpp off

chkconfig abrtd off

chkconfig acpid off

chkconfig atd off

chkconfig blk-availability off

chkconfig bluetooth off

chkconfig cpuspeed off

chkconfig ip6tables off

chkconfig iptables off

chkconfig kdump off

chkconfig lvm2-monitor off

chkconfig mdmonitor off

chkconfig netfs off

chkconfig rhnsd off

chkconfig rhsmcertd off

chkconfig spice-vdagentd off

chkconfig postfix off

chkconfig udev-post on

chkconfig psacct on

chkconfig ntpd on

chkconfig auditd on

chkconfig sysstat on

4.3禁止wheel组之外的用户使用su登陆到root用户

说明: wheel 组成员为系统默认特权用户组,禁止其他用户使用 su 登陆到 root 用户。

语句:

sed -ri 's/#auth(.required.uid$)/auth \1/' /etc/pam.d/su

*4.4系统core dump设置*

说明:关闭 core dump ,防止信息泄漏

语句:

sed -i -c '/.*soft core/d' /etc/security/limits.conf

sed -i -c '/.*hard core/d' /etc/security/limits.conf

cat << EOF >> /etc/security/limits.conf

  • soft core 0
  • hard core 0

EOF

4.5关闭不必要的服务和端口

for srv in lpd kshell time ntalk sendmail klogin printer echo discard chargen bootps tftp daytime ypbind ident

do

chkconfig --list ${srv} &amp;>/dev/null &amp;&amp; chkconfig ${srv} off

done

*4.6设置密码重复使用次数限制*

说明: 5 次以内密码修改不允许重复

语句:

sed -ri 's/(^password.*authtok)/\1 remember=5/' /etc/pam.d/system-auth - ac

4.7历史命令记录条数设置**

说明:操作记录保存数量由 1000 条改为 5 条,防止信息泄漏。对应配置核查中的“检查历史命令设置”

语句:

sed -i '/^[[:blank:]]*HISTSIZE/d' /etc/profile

sed -i '/^[[:blank:]]*HISTFILESIZE/d' /etc/profile

echo "HISTSIZE=5" >> /etc/profile

echo "HISTFILESIZE=5" >> /etc/profile

echo "export HISTSIZE HISTFILESIZE" >> /etc/profile

echo "export HISTTIMEFORMAT=\"%F %T \"" >> /etc/profile

4.8设置账户认证失败次数限制**

说明:更改本地登录尝试次数并设置锁定,失败 10 次后,非 root 用户锁定 120 秒, root 锁定 60 秒。 ssh 设置单次登录密码尝试次数由 6 次改为 3 次,防止用户暴力破解;

语句:

cp /etc/pam.d/system-auth /etc/pam.d/system-auth.date +%s.bak

sed -i -c '/auth.required.pam_tally2.so deny=.unlock_time=.root_unlock_time=.*/d' /etc/pam.d/system-auth-ac

sed -i '3aauth required pam_tally2.so deny=10 unlock_time=120 root_unlock_time=60' /etc/pam.d/system-auth-ac

sed -i '/^[[:blank:]]account[[:print:]]required[[:print:]]*pam_tally2.so/d' /etc/pam.d/system-auth-ac

line_no1=grep -n '^[[:blank:]]*account' /etc/pam.d/system-auth-ac |head -1|awk -F':' '{print $1}'

sed -i "${line_no1}aaccount required pam_tally2.so" /etc/pam.d/system-auth-ac

sed -ri 's/(#MaxAuthTries).*6/\1 3/' /etc/ssh/sshd_config

4.9取消不必要文件suidsgid权限

说明:取消不必要文件 suid 和 sgid 权限,禁止普通用户使用该命令。

语句:

chmod a-s /usr/bin/chage

chmod a-s /bin/mount

chmod a-s /bin/umount

chmod g-s /sbin/netreport

chmod a-s /usr/bin/chage

chmod a-s /usr/bin/chfn

chmod a-s /usr/bin/chsh

chmod a-s /usr/bin/gpasswd

chmod a-s /usr/bin/newgrp

chmod a-s /usr/sbin/usernetctl

4.10别名文件/etc/aliase(或/etc/mail/aliases)配置

说明:去除 /etc/aliase 中不安全别名。

语句:

sed -i -r 's/^games(.*)/#game\1/' /etc/aliases

sed -i -r 's/^ingres(.*)/#ingres\1/' /etc/aliases

sed -i -r 's/^system(.*)/#system\1/' /etc/aliases

sed -i -r 's/^toor(.*)/#toor\1/' /etc/aliases

sed -i -r 's/^uucp(.*)/#uucp\1/' /etc/aliases

sed -i -r 's/^manager(.*)/#manager\1/' /etc/aliases

sed -i -r 's/^dumper(.*)/#dumper\1/' /etc/aliases

sed -i -r 's/^operator(.*)/#operator\1/' /etc/aliases

sed -i -r 's/^decode(.*)/#decode\1/' /etc/aliases

sed -i -r 's/^root(.*)/#root\1/' /etc/aliases

4.11配置定时自动屏幕锁定

说明:设置定时自动屏幕锁定(默认5分钟),增加系统安全。

语句:

gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type string --set /apps/gnome-screensaver/mode blank-only

4.12关闭IP伪装和绑定多IP功能

说明:关闭 IP 伪装增强系统安全,关闭绑定多 IP 功能增强系统性能。

语句:

sed -i -c '/^[[:blank:]]*nospoof/d' /etc/host.conf

echo "nospoof on" >>/etc/host.conf

sed -i -c 's/multi[[:blank:]]*on/multi off/' /etc/host.conf

4.13关闭selinux**

说明:关闭 selinux ,避免应用错误

语句:

sed -i 's/^[[:blank:]]SELINUX=[[:print:]]/SELINUX=disabled/g' /etc/selinux/config

setenforce 0

4.14密码复杂度设置

说明: 设置密码复杂度要求,至少1个数字加1个大写字符,最小长度为 8 位。增加系统安全

语句:

sed -ri 's/(^pass.retry=3).type=/\1 dcredit=-1 ucredit=-1 minlen=8/' /etc/pam.d/system-auth - ac

sed -ri 's/(PASS_MIN_LEN.*)5/\18/' /etc/login.defs

4.15 使用NTP(网络时间协议)保持时间同步**

说明:正确开启ntp时间同步。

语句:

sed -i '/^[[:blank:]]*server[[:blank:]]/d' /etc/ntp.conf;

echo "server X.X.X.X iburst" >> /etc/ntp.conf;

service ntpd start ; chkconfig ntpd on

4.16 设置系统内核参数**

说明:设置系统内核参数,分为几个小项,如下:

禁止icmp源路由:

sysctl -w net.ipv4.conf.all.accept_source_route="0"

echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

禁止icmp重定向报文:

sysctl -w net.ipv4.conf.all.accept_redirects="0"

echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

icmp_echo_ignore_broadcasts配置:

sysctl -w net.ipv4.icmp_echo_ignore_broadcasts="1"

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

send_redirects配置:

sysctl -w net.ipv4.conf.all.send_redirects="0"

echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects

ip_forward配置:

sysctl -w net.ipv4.ip_forward="0"

echo "0" > /proc/sys/net/ipv4/ip_forward

*4.17系统内核参数配置*

说明:处于对网络的安全考虑,关闭重定向功能。

语句:

sed -i -c '/net.ipv4.conf.all.accept_redirects[[:blank:]]*=/d' /etc/sysctl.conf

echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.conf

sed -i -c '/net.ipv4.conf.all.send_redirects[[:blank:]]*=/d' /etc/sysctl.conf

echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf

sysctl -p

说明:删除系统默认安装后 sysctl.conf 中无效内核参数。

语句:

sed -i -c '/net.bridge.bridge-nf-call-ip6tables[[:blank:]]*=/d' /etc/sysctl.conf

sed -i -c '/net.bridge.bridge-nf-call-iptables[[:blank:]]*=/d' /etc/sysctl.conf

sed -i -c '/net.bridge.bridge-nf-call-arptables[[:blank:]]*=/d' /etc/sysctl.conf

sysctl -p

4.18设置口令生存周期**

在文件/etc/login.defs中设置 PASS_MAX_DAYS 不大于标准值,PASS_MAX_DAYS 90,如果该文件不存在,则创建并按照要求进行编辑

语句:

sed -i '/^[[:blank:]]PASS_MAX_DAYS[[:print:]]/d' /etc/login.defs

echo "PASS_MAX_DAYS 90" >> /etc/login.defs

4.19禁止UID为0的非root用户**

说明 :系统中每一个账号都被分配一个用户ID号,ID 号为 0 是为 root 和 adminbak 保留的,UID 号 1-99 是为系统其它预定义的帐号保留的,UID为0拥有系统的最高特权 。因此检查/etc/passwd文件,如有除root之外有UID=0账号的将其禁用。

语句 :

value=awk -F: '($3 == 0) { print $1 }' /etc/passwd |grep -v root |grep -v adminbak

if [ -n "$value" ]; then

for user in "$value"

do

/usr/sbin/userdel $user --force >/dev/null 2>&1

done

fi

注:解锁命令usermod - U $USER

4.20禁止空口令账号**

说明 :检查 /etc/shadow文件,如果有空口令的账号将其禁止。

语句:

for user in awk -F: '($2 == "") { print $1 }' /etc/shadow

do

passwd -l $user

done

4.21禁止非交互式账号**

说明 : 系统中默认会创建一系列非交互式账号(系统账号)用于系统内部运作用,这些用户默认没有设置密码并且无法登陆,UID小于500。但是通常当黑客入侵到系统中后,会尝试对这些用户默认配置进行攻击。可以加强系统预置帐户的安全性使得黑客更难以对这些用户进行破坏,如锁定用户和设置shell为/dev/null。另nfsnobody也是非交互账号但UID大于500。常用的系统账号有: a dm、lp、sync、shutdown、halt、bin、daemon、news、uucp、operator、games、nobody等。

语句:

for NAME in cut -d: -f1 /etc/passwd

do

MyUID=id -u $NAME

value=/usr/bin/passwd -S "$NAME" 2>/dev/null |grep "in use"

ulock=$?

if [ $MyUID -lt 500 -a $NAME != 'root' -a $ulock -eq 0 ]; then

usermod -L -s /dev/null $NAME

fi

done

usermod -L -s /dev/null nfsnobody > /dev/null 2>&1

注 :查看账号是否锁定命令:passwd -S $NAME

解锁命令 : passwd - u $NAME 或 usermod -U $NAME

4.22 登录提示信息加固

说明 :通过修改系统banner,避免泄漏操作系统名称,版本号,主机名称等,并且给出登录提示信息。 /etc/issue是针对本地控制台登录前的配置文件;/etc/issue.net是针对网络远程登录前(如telnet,但不包括ssh)的配置文件; /etc/motd是针对登录后的配置文件 。

语句:

e cho "ATTENTION:You have logged onto a secured server..ONLY Authorized users can access.." > /etc/issue

#e cho "ATTENTION:You have logged onto a secured server..ONLY Authorized users can access.. " > /etc/issue .net

e cho "ATTENTION:You have logged onto a secured server..ONLY Authorized users can access.. " > /etc/motd

4.23 禁止使用usb存储设备**

说明 : 在生产系统中应 禁止使用usb存储设备, 防止 物理 usb 设备引入木马文件。

语句:

echo "install usb-storage /bin/true" >> /etc/modprobe.d/usb-storage.conf

4.24禁止Alt+Ctrl+Del组合键

说明 : 禁止A lt+Ctrl+Del 键盘组合键关机重启系统,防止恶意或误操作导致系统重启。编辑/etc/init/c ontrol-alt-delete.conf文件 。

语句:

sed -i 's,^start.*,#start on control-alt-delete, ' /etc/init/control-alt-delete.conf

sed -i 's,^exec.*,#exec /sbin/shutdown -r now "Control-Alt-Delete pressed",' /etc/init/control-alt-delete.conf

5漏洞补丁

5.1OpenSSH漏洞补丁

说明:RHEL6.6自带的openssh版本为 5.3p1-104.el6 ,带有以下漏洞:

OpenSSH J-PAKE授权问题漏洞(CVE-2010-4478)

OpenSSH 远程权限提升漏洞(CVE-2016-10010)

Openssh MaxAuthTries限制绕过漏洞(CVE-2015-5600)

OpenSSH glob表达式拒绝服务漏洞(CVE-2010-4755)

OpenSSH <=7.2p1 xauth命令注入漏洞(CVE-2016-3115)

OpenSSH do_setup_env函数权限提升漏洞(CVE-2015-8325)

OpenSSH auth_password函数拒绝服务漏洞(CVE-2016-6515)

Portable OpenSSH 'ssh-keysign'本地未授权访问漏洞

OpenSSH sshd mm_answer_pam_free_ctx释放后重利用漏洞(CVE-2015-6564)

OpenSSH 安全漏洞(CVE-2016-1908)

OpenSSH 远程代码执行漏洞(CVE-2016-10009)

OpenSSH默认服务器配置拒绝服务漏洞(CVE-2010-5107)

OpenSSH 'x11_open_helper()'函数安全限制绕过漏洞(CVE-2015-5352)

OpenSSH 信息泄露漏洞(CVE-2011-4327)

OpenSSH CBC模式信息泄露漏洞(CVE-2008-5161)【原理扫描】

OpenSSH 'schnorr.c'远程内存破坏漏洞(CVE-2014-1692)

OpenSSH 安全限制绕过漏洞(CVE-2016-10012)

OpenSSH auth_parse_options函数信任管理漏洞(CVE-2012-0814)

OpenSSH sshd monitor组件欺骗漏洞(CVE-2015-6563)

OpenSSH 'ssh_gssapi_parse_ename()'函数拒绝服务漏洞

操作:

通过防火墙禁止对公网开放ssh协议端口(默认为22);

参考 https://rhn.redhat.com/errata/RHSA-2017-0641.html,将openssh 套件升级至 openssh-5.3p1-122.el6 版本(即RHEL6.9自带版本)。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论1 条评论

loveyang2012loveyang2012系统运维工程师自由职业者
2020-08-07 22:33
umask 的修改谁用谁知道,那酸爽
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广