邓毓
作者邓毓2020-04-07 17:01
系统工程师, 江西农信

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

字数 7657阅读 531评论 0赞 1

Linux安全加固规范(RHEL7 x86)

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

1**认证授权**

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

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

语句:

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 750 /usr/lib/systemd

chmod 750 /etc/systemd

chmod 644 /etc/passwd

chmod 644 /etc/group

chmod 400 /etc/shadow

chmod 600 /boot/grub2/grub.cfg

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

chown bin:bin /etc/ssh_banner

chmod 644 /etc/ssh_banner

sed -i -c '/^Banner.*/d' /etc/ssh/sshd_config

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

systemctl restart sshd

2**日志审计**

3**协议安全**

4**其他安全**

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

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

语句:

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

4.2**调整系统启动服务,**

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

语句:

systemctl stop NetworkManager

systemctl disable NetworkManager

systemctl stop firewalld

systemctl disable NetworkManager

systemctl stop postfix

systemctl disable postfix

systemctl disable abrt-ccpp

systemctl disable abrt-oops

systemctl disable abrt-vmcore

systemctl disable abrt-xorg

systemctl disable abrt

systemctl disable Bluetooth

systemctl disable cups

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.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-ac /etc/pam.d/system-auth-ac.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

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 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

chmod g-s /sbin/netreport

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

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

语句:

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

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

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

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

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

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

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

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

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

sed -i -r 's/^root(.*)/#root1/' /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服务器并开启服务。

语句:

export ntp_server=X.X.X.X

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

echo "server ${ntp_server} iburst" >> /etc/ntp.conf

systemctl start ntpd

systemctl enable ntpd

4.16**系统内核参数配置**

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

语句:

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

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

sysctl –p

4.**17设置口令生存周期**

在文件/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.**18禁止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.**19禁止空口令账号**

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

语句:

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

do

passwd -l $user

done

4.**20禁止非交互式账号**

说明:系统中默认会创建一系列非交互式账号(系统账号)用于系统内部运作用,这些用户默认没有设置密码并且无法登陆,UID小于1000。但是通常当黑客入侵到系统中后,会尝试对这些用户默认配置进行攻击。可以加强系统预置帐户的安全性使得黑客更难以对这些用户进行破坏,如锁定用户和设置shell为/dev/null。另nfsnobody也是非交互账号但UID大于1000。常用的系统账号有: 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 1000 -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.**21 登录提示信息加固**

说明 :通过修改系统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.**22 禁止使用usb存储设备**

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

语句:

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

4.**23禁止Alt+Ctrl+Del组合键**

说明 : 禁止A lt+Ctrl+Del 键盘组合键关机重启系统,防止恶意或误操作导致系统重启。

语句:

systemctl mask ctrl-alt-del.target

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

1

添加新评论0 条评论

Ctrl+Enter 发表