[TOC]
0x00 前言简述 描述:Linux系统加固往往是下面几个方面入手,配置完成后将大大的提升机器的安全性,同时满足等保合规的要求;
系统加固分类:
0x01 用户加固管理 1.用户与权限加固 1.1) 用户与系统文件权限 描述:主要针对于用户默认权限以及文件目录创建的缺省权限;
PS:用户的umask安全配置将umask修改为022权限掩码即用户所获得的文件权限为644 (666-022),目录权限为755 (777-022)
[TOC]
0x00 前言简述 描述:Linux系统加固往往是下面几个方面入手,配置完成后将大大的提升机器的安全性,同时满足等保合规的要求;
系统加固分类:
0x01 用户加固管理 1.用户与权限加固 1.1) 用户与系统文件权限 描述:主要针对于用户默认权限以及文件目录创建的缺省权限;
PS:用户的umask安全配置将umask修改为022权限掩码即用户所获得的文件权限为644 (666-022),目录权限为755 (777-022)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 echo \*\*\*\* 修改umask 为022 \*\*\*\* egrep -q "^\s*umask\s+\w+.*$" /etc/profile && sed -ri "s/^\s*umask\s+\w+.*$/umask 022/" /etc/profile || echo "umask 022" >> /etc/profile egrep -q "^\s*umask\s+\w+.*$" /etc/csh.login && sed -ri "s/^\s*umask\s+\w+.*$/umask 022/" /etc/csh.login || echo "umask 022" >>/etc/csh.login egrep -q "^\s*umask\s+\w+.*$" /etc/csh.cshrc && sed -ri "s/^\s*umask\s+\w+.*$/umask 022/" /etc/csh.cshrc || echo "umask 022" >> /etc/csh.cshrc egrep -q "^\s*umask\s+\w+.*$" /etc/bashrc && sed -ri "s/^\s*umask\s+\w+.*$/umask 022/" /etc/bashrc || echo "umask 022" >> /etc/bashrc echo \*\*\*\* 设置用户目录默认权限为022egrep -q "^\s*(umask|UMASK)\s+\w+.*$" /etc/login.defs && sed -ri "s/^\s*(umask|UMASK)\s+\w+.*$/UMASK 022/" /etc/login.defs || echo "UMASK 022" >> /etc/login.defs echo \*\*\*\* 设置重要目录和文件的权限chmod 755 /etc; chmod 750 /etc/rc.d/init.d; chmod 777 /tmp; chmod 700 /etc/inetd.conf&>/dev/null 2&>/dev/null; chmod 755 /etc/passwd; chmod 755 /etc/shadow; chmod 644 /etc/group; chmod 755 /etc/security; chmod 644 /etc/services; chmod 750 /etc/rc*.d
CentOS禁止普通用户su到root相关权限涉及到两个文件:
/etc/pam.d/su
/etc/login.defs1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $ vim /etc/pam.d/su auth required pam_wheel.so use_uid SU_WHEEL_ONLY yes usermod -G wheel admin
weiyigeek.top-
1.2) 用户账号加固 描述:锁定与设备运行、维护等工作无关的账号,如果不需要登录系统shell应该/sbin/nologin
并且将该账号进行锁定登陆;1 2 3 4 5 6 7 8 9 passwd -l adm&>/dev/null 2&>/dev/null; passwd -l daemon&>/dev/null 2&>/dev/null; passwd -l bin&>/dev/null 2&>/dev/null; passwd -l sys&>/dev/null 2&>/dev/null; passwd -l lp&>/dev/null 2&>/dev/null; passwd -l uucp&>/dev/null 2&>/dev/null; passwd -l nuucp&>/dev/null 2&>/dev/null; passwd -l smmsplp&>/dev/null 2&>/dev/null; passwd -l mail&>/dev/null 2&>/dev/null; passwd -l operator&>/dev/null 2&>/dev/null; passwd -l games&>/dev/null 2&>/dev/null; passwd -l gopher&>/dev/null 2&>/dev/null; passwd -l ftp&>/dev/null 2&>/dev/null; passwd -l nobody&>/dev/null 2&>/dev/null; passwd -l nobody4&>/dev/null 2&>/dev/null; passwd -l noaccess&>/dev/null 2&>/dev/null; passwd -l listen&>/dev/null 2&>/dev/null; passwd -l webservd&>/dev/null 2&>/dev/null; passwd -l rpm&>/dev/null 2&>/dev/null; passwd -l dbus&>/dev/null 2&>/dev/null; passwd -l avahi&>/dev/null 2&>/dev/null; passwd -l mailnull&>/dev/null 2&>/dev/null; passwd -l nscd&>/dev/null 2&>/dev/null; passwd -l vcsa&>/dev/null 2&>/dev/null; passwd -l rpc&>/dev/null 2&>/dev/null; passwd -l rpcuser&>/dev/null 2&>/dev/null; passwd -l nfs&>/dev/null 2&>/dev/null; passwd -l sshd&>/dev/null 2&>/dev/null; passwd -l pcap&>/dev/null 2&>/dev/null; passwd -l ntp&>/dev/null 2&>/dev/null; passwd -l haldaemon&>/dev/null 2&>/dev/null; passwd -l distcache&>/dev/null 2&>/dev/null; passwd -l webalizer&>/dev/null 2&>/dev/null; passwd -l squid&>/dev/null 2&>/dev/null; passwd -l xfs&>/dev/null 2&>/dev/null; passwd -l gdm&>/dev/null 2&>/dev/null; passwd -l sabayon&>/dev/null 2&>/dev/null; passwd -l named&>/dev/null 2&>/dev/null $ nano /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin
weiyigeek.top-passwd
用户超时限制:1 2 3 4 echo \*\*\*\* 设置登录超时时间为10分钟egrep -q "^\s*(export|)\s*TMOUT\S\w+.*$" /etc/profile && sed -ri "s/^\s*(export|)\s*TMOUT.\S\w+.*$/export TMOUT=600/" /etc/profile || echo "export TMOUT=600" >> /etc/profile egrep -q "^\s*.*ClientAliveInterval\s\w+.*$" /etc/ssh/sshd_config && sed -ri "s/^\s*.*ClientAliveInterval\s\w+.*$/ClientAliveInterval 600/" /etc/ssh/sshd_config || echo "ClientAliveInterval 600 " >> /etc/ssh/sshd_config
用户访问限制:1 2 3 vim /etc/pam.d/sshd auth required /usr/lib64/security/pam_listfile.so item=user sense=deny file=/etc/ssh/user_deny_list onerr=succeed
2.用户认证密码策略调整 描述:设置用户登陆口令的复杂度以及长度限制,以及登录session失效时间;1 2 3 4 5 6 7 8 9 10 vi /etc/pam.d/system-auth password requisite pam_cracklib.so retry=5 difok=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 egrep -q "^\s*password\s*(requisite|required)\s*pam_cracklib.so.*$" /etc/pam.d/system-auth && sed -ri "s/^\s*password\s*(requisite|required)\s*pam_cracklib.so.*$/\password requisite pam_cracklib.so try_first_pass retry=3 minlen=12 dcredit=-1 ocredit=-1 lcredit=-1/" /etc/pam.d/system-auth || echo "password requisite pam_cracklib.so try_first_pass retry=3 minlen=12 dcredit=-1 ocredit=-1 lcredit=-1" >> /etc/pam.d/system-auth egrep -q "^\s*password\s*(requisite|required)\s*pam_cracklib.so.*$" /etc/pam.d/password-auth && sed -ri "s/^\s*password\s*(requisite|required)\s*pam_cracklib.so.*$/\password requisite pam_cracklib.so try_first_pass retry=3 minlen=12 dcredit=-1 ocredit=-1 lcredit=-1/" /etc/pam.d/password-auth || echo "password requisite pam_cracklib.so try_first_pass retry=3 minlen=12 dcredit=-1 ocredit=-1 lcredit=-1" >> /etc/pam.d/password-auth egrep -q "^\s*PASS_MIN_LEN\s+\S*(\s*#.*)?\s*$" /etc/login.defs && sed -ri "s/^(\s*)PASS_MIN_LEN\s+\S*(\s*#.*)?\s*$/\PASS_MIN_LEN 12/" /etc/login.defs || echo "PASS_MIN_LEN 12" >> /etc/login.defs
口令的生存周期:1 2 3 4 5 6 7 8 9 10 11 12 13 $ vi /etc/login.defs 修改配置文件 PASS_MAX_DAYS 180 PASS_MIN_DAYS 14 PASS_WARN_AGE 14 echo \*\*\*\* 口令生成周期最小14天最大180天预警14前天 \*\*\*\*egrep -q "^\s*PASS_MAX_DAYS\s+\S*(\s*#.*)?\s*$" /etc/login.defs && sed -ri "s/^(\s*)PASS_MAX_DAYS\s+\S*(\s*#.*)?\s*$/\PASS_MAX_DAYS 180/" /etc/login.defs || echo "PASS_MAX_DAYS 180" >> /etc/login.defs egrep -q "^\s*PASS_MIN_DAYS\s+\S*(\s*#.*)?\s*$" /etc/login.defs && sed -ri "s/^(\s*)PASS_MIN_DAYS\s+\S*(\s*#.*)?\s*$/\PASS_MIN_DAYS 14/" /etc/login.defs || echo "PASS_MIN_DAYS 14" >> /etc/login.defs egrep -q "^\s*PASS_WARN_AGE\s+\S*(\s*#.*)?\s*$" /etc/login.defs && sed -ri "s/^(\s*)PASS_WARN_AGE\s+\S*(\s*#.*)?\s*$/\PASS_WARN_AGE 14/" /etc/login.defs || echo "PASS_WARN_AGE 14" >> /etc/login.defs
密码重复使用次数限制:1 2 3 4 5 6 7 8 9 10 11 12 13 echo \*\*\*\* 记住3次已使用的密码 \*\*\*\*if [[ ! -f "/etc/security/opasswd" || "$(ls -l /etc/security/opasswd | egrep -c '\-rw\-\-\-\-\-\-\-') " != "1" ]];then mv /etc/security/opasswd /etc/security/opasswd.old > /dev/null 2>&1 touch /etc/security/opasswd chown root:root /etc/security/opasswd chmod +600 /etc/security/opasswd fi egrep -q "^\s*password\s*sufficient\s*pam_unix.so.*$" /etc/pam.d/system-auth && sed -ri "s/^\s*password\s*sufficient\s*pam_unix.so.*$/\password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=3/" /etc/pam.d/system-auth || echo "password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=3" >> /etc/pam.d/system-auth egrep -q "^\s*password\s*sufficient\s*pam_unix.so.*$" /etc/pam.d/password-auth && sed -ri "s/^\s*password\s*sufficient\s*pam_unix.so.*$/\password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=3/" /etc/pam.d/password-auth || echo "password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=3" >> /etc/pam.d/password-auth
用户认证失败次数限制:1 2 3 4 5 6 7 8 9 10 auth required pam_tally.so onerr=fail deny=10 unlock_time=300 echo \*\*\*\* 连续登录失败5次锁定帐号5分钟 \*\*\*\*sed -ri "/^\s*auth\s+required\s+pam_tally2.so\s+.+(\s*#.*)?\s*$/d" /etc/pam.d/sshd /etc/pam.d/login /etc/pam.d/system-auth /etc/pam.d/password-auth sed -ri '1a auth required pam_tally2.so deny=5 unlock_time=300 even_deny_root root_unlock_time=30' /etc/pam.d/sshd /etc/pam.d/login /etc/pam.d/system-auth /etc/pam.d/password-auth egrep -q "^\s*account\s+required\s+pam_tally2.so\s*(\s*#.*)?\s*$" /etc/pam.d/sshd || sed -ri '/^password\s+.+(\s*#.*)?\s*$/i\account required pam_tally2.so' /etc/pam.d/sshd egrep -q "^\s*account\s+required\s+pam_tally2.so\s*(\s*#.*)?\s*$" /etc/pam.d/login || sed -ri '/^password\s+.+(\s*#.*)?\s*$/i\account required pam_tally2.so' /etc/pam.d/login egrep -q "^\s*account\s+required\s+pam_tally2.so\s*(\s*#.*)?\s*$" /etc/pam.d/system-auth || sed -ri '/^account\s+required\s+pam_permit.so\s*(\s*#.*)?\s*$/a\account required pam_tally2.so' /etc/pam.d/system-auth egrep -q "^\s*account\s+required\s+pam_tally2.so\s*(\s*#.*)?\s*$" /etc/pam.d/password-auth || sed -ri '/^account\s+required\s+pam_permit.so\s*(\s*#.*)?\s*$/a\account required pam_tally2.so' /etc/pam.d/password-auth
0x02 日志加固管理 1.日志审计记录 描述:在反弹shell的时候使用了bash-i时,如果系统配置了/etc/bash.bashrc、~/.bashrc记录执行记录,应该可以记录到bash -i的执行记录(交互式会话会读取bashrc配置并执行)
基础操作:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 chattr -R +a /var/log lsattr -a /var/log -----a---------- /var/log egrep -q "^\s*authpriv\.\*\s+.+$" /etc/rsyslog.conf && sed -ri "s/^\s*authpriv\.\*\s+.+$/authpriv.* \/var\/log\/secure/" /etc/rsyslog.conf || echo "authpriv.* /var/log/secure" >> /etc/rsyslog.conf echo \*\*\*\* 配置安全事件日志审计touch /var/log /adm&>/dev/null; chmod 755 /var/log /adm semanage fcontext -a -t security_t '/var/log/adm' restorecon -v '/var/log/adm' &>/dev/null egrep -q "^\s*\*\.err;kern.debug;daemon.notice\s+.+$" /etc/rsyslog.conf && sed -ri "s/^\s*\*\.err;kern.debug;daemon.notice\s+.+$/*.err;kern.debug;daemon.notice \/var\/adm\/messages/" /etc/rsyslog.conf || echo "*.err;kern.debug;daemon.notice /var/log/adm" >> /etc/rsyslog.conf
历史命令设置:1 2 3 4 5 6 7 8 echo \*\*\*\* 设置保留历史命令的条数为30并加上时间戳egrep -q "^\s*HISTSIZE\s*\W+[0-9].+$" /etc/profile && sed -ri "s/^\s*HISTSIZE\W+[0-9].+$/HISTSIZE=30/" /etc/profile || echo "HISTSIZE=30" >> /etc/profile egrep -q "^\s*HISTTIMEFORMAT\s*\S+.+$" /etc/profile && sed -ri "s/^\s*HISTTIMEFORMAT\s*\S+.+$/HISTTIMEFORMAT='%F %T | '/" /etc/profile || echo "HISTTIMEFORMAT='%F %T | '" >> /etc/profile egrep -q "^\s*export\s*HISTTIMEFORMAT.*$" /etc/profile || echo "export HISTTIMEFORMAT" >> /etc/profile
其他日志审计记录:1 2 3 4 5 6 echo "$(date) - ${SSH_CONNECTION} - ${USER} " >> /tmp/login.txtssh -T root@10.10.107.222 /bin/bash -i Fri Aug 2 16:54:48 CST 2019 - 192.168.1.88 55321 10.10.107.222 22 - root
0x03 系统加固 1.系统文件配置相关 删除潜在威胁文件:1 2 3 find / -maxdepth 3 -name hosts.equiv | xargs rm -rf find / -maxdepth 3 -name .netrc | xargs rm -rf find / -maxdepth 3 -name .rhosts | xargs rm -rf
禁用ctrl+alt+del组合键:1 2 3 4 5 6 echo echo \*\*\*\* 禁用ctrl+alt+del组合键egrep -q "^\s*exec\s+/sbin/shutdown\s+.+$" /etc/init/control-alt-delete.conf && sed -ri "s/^\s*exec\s+\/sbin\/shutdown\s+.+$/exec \/usr\/bin\/logger \-p authpriv.notice \-t init 'Ctrl-Alt-Del was pressed and ignored'/" /etc/init/control-alt-delete.conf || echo "exec /usr/bin/logger -p authpriv.notice -t init 'Ctrl-Alt-Del was pressed and ignored' " >> /etc/init/control-alt-delete.conf mv /usr/lib/systemd/system/ctrl-alt-del.target /usr/lib/systemd/system/ctrl-alt-del.target.bat&>/dev/null 2&>/dev/null
配置自动屏幕锁定(适用于具备图形界面的设备):1 2 3 4 5 6 7 8 9 10 11 12 13 echo \*\*\*\* 对于有图形界面的系统配置10分钟屏幕锁定gconftool-2 > /dev/null 2>&1 if [[ "$?" == 0 ]];then gconftool-2 --direct \ --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory \ --type bool \ --set /apps/gnome-screensaver/idle_activation_enabled true \ --set /apps/gnome-screensaver/lock_enabled true \ --type int \ --set /apps/gnome-screensaver/idle_delay 10 \ --type string \ --set /apps/gnome-screensaver/mode blank-only fi
2.系统服务 限制不必要的服务:1 systemctl disable rsh&>/dev/null 2&>/dev/null;systemctl disable talk&>/dev/null 2&>/dev/null;systemctl disable telnet&>/dev/null 2&>/dev/null;systemctl disable tftp&>/dev/null 2&>/dev/null;systemctl disable rsync&>/dev/null 2&>/dev/null;systemctl disable xinetd&>/dev/null 2&>/dev/null;systemctl disable nfs&>/dev/null 2&>/dev/null;systemctl disable nfslock&>/dev/null 2&>/dev/null
0x04 服务应用加固 1.Ssh服务相关 描述:openssh 目前的默认配置文件相比以前虽然要安全的多,但还是有必要对生产系统中的 ssh 服务器进行基线检查。等保视角下的SSH 加固之旅:
1)身份鉴别:
首推公钥认证方式,通过ansible批量更新或者通过堡垒机的定时任务实现对管理的服务器上的公钥进行批量更新
严禁选择基于密码的、基于主机的认证方式,有条件的可以接入 Kerberos 认证;
基于权限最小化原则,限制不同用户使用不同角色的账户
选择安全的ssh-key生成算法生成的key1 2 3 4 5 ssh key 常见算法及安全性 DSA 已被证明不安全,且从OpenSSH Server 7 之后便不再支持 RSA RSA算法产生的私钥的安全性依赖于密钥的长度,如果密钥的长度小于3072,则不够安全,比如常见的2048 位的ssh key 是不够安全的,1024位直接被标记为不安全 ECDSA:这个算法产生的密钥安全性依赖于当前机器产生的随机数的强度 Ed25519: 目前最为推荐的ssh key 生成算法,安全性最好!
2)访问控制
网络层的访问控制:禁止端口转发
限制指定的IP才能连接:除了在防火墙上做规则限制,还可以通过TCP Wrapper 和sshd_config的配置命令
3)审计
实现等保的审计要求:选择加入堡垒机或者将ssh 登录日志、bash 操作日志集中转发之SOC或者内部日志平台(比如通过syslog方式)
4)入侵防范
文件说明:/root/.ssh/known_hosts 保存相关服务器的签名
(1)SSH 配置文件:/etc/ssh/ssh_config1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Port 2222 Protocol 2 PermitRootLogin no PermitEmptyPasswords no StrictModes yes MaxAuthTries 5 MaxSessions 6 IgnoreRhosts yes LoginGraceTime 120 HashKnownHosts yes ClientAliveInterval 300 ClientAliveCountMax 0 AllowUsers 用户名 AllowGroups 组名 DenyUsers 用户名 DenyGroups 组名 PubkeyAuthentication yes PasswordAuthentication no HostbasedAuthentication no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
(2) 限制IP登录SSH1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 在 /etc/hosts.allow 写 : sshd: 1.2.3.4 在 /etc/hosts.deny 写 : sshd: ALL iptables -A INPUT -s 1.2.3.4 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 堡垒机IP -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP ldd `which sshd` | grep libwrap cd /usr/local /bin/wget antivirus.neu.edu.cn/ssh/soft/fetch_neusshbl.sh chmod +x fetch_neusshbl.sh cd /etc/cron.hourly/ln -s /usr/local /bin/fetch_neusshbl.sh . ./fetch_neusshbl.sh
(3) 限制指定账户不能SSH只能SFTP在指定目录 比如以限制sftpgroup 组的用户都只能在自己的家目录sftp 上传下载,不能ssh连接获取shell为例1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 groupadd sftpgroup useradd -d /home/sftpuser -s /usr/sbin/nologin -M -N -gsftpgroup sftpuser mkdir -p /home/sftpuser/.ssh cat xxx.pub >/home/sftpuser/.ssh/authorized_keys chmod -R 700 /home/sftpuser/.ssh/ chown -R sftpuser:sftpgroup /home/sftpuser/.ssh Subsystem sftp internal-sftp Match group sftpgroup ChrootDirectory %h X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
Subsystem sftp /usr/lib/openssh/sftp-server 更为 internal-sftp,这两者有什么区别呢?
简单的说默认sftp进程由单独的二进制文件:/usr/lib/openssh/sftp-server启动(外部)
internal-sftp 则无需外部二进制文件额外启动一个进程整合在sshd进程内了(内部)
internal-sftp相较于 /usr/lib/openssh/sftp-server 优点在于:
性能好无需额外进程了
安全性好无需用户登录shell,且可使用ChrootDirectory 限制sftp行为活动的目录;
sftp-server 的存在主要是向后兼容。
ForceCommand internal-sftp 是什么意思? 答:防止用户执行他们自己自定义的命令限制用户命令执行上下文为sftp(可以理解为用户的’shell’就是sftp 那个上下文环境), 即用户除了能执行sftp中允许的命令外,其他命令啥也执行不了 PS:采用sftp软件登录:sftp -i 密匙path sftpuser@ip
则进入交换式;
ssh服务应用加固:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 echo echo \*\*\*\* 设置ssh登录前警告Bannerecho "**************WARNING**************" >> /etc/issue;echo "Authorized only. All activity will be monitored and reported." >> /etc/issueegrep -q "^\s*(banner|Banner)\s+\W+.*$" /etc/ssh/sshd_config && sed -ri "s/^\s*(banner|Banner)\s+\W+.*$/Banner \/etc\/issue/" /etc/ssh/sshd_config || echo "Banner /etc/issue" >> /etc/ssh/sshd_config echo echo \*\*\*\* 设置ssh登录后Bannerecho "**************WARNING**************" >> /etc/motd;echo "Login success. All activity will be monitored and reported." >> /etc/motd:<<! echo echo \*\*\*\* 禁止root远程SSH登录egrep -q "^\s*PermitRootLogin\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^\s*PermitRootLogin\s+.+$/PermitRootLogin no/" /etc/ssh/sshd_config || echo "PermitRootLogin no" >> /etc/ssh/sshd_config ! egrep -q "^\s*StrictModes\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*StrictModes\s+.+$/StrictModes yes/" /etc/ssh/sshd_config || echo "StrictModes yes" >> /etc/ssh/sshd_config egrep -q "^\s*Port\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*Port\s+.+$/Port 62222/" /etc/ssh/sshd_config || echo "Port 62222" >> /etc/ssh/sshd_config egrep -q "^\s*X11Forwarding\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*X11Forwarding\s+.+$/X11Forwarding no/" /etc/ssh/sshd_config || echo "X11Forwarding no" >> /etc/ssh/sshd_config egrep -q "^\s*AllowTcpForwarding\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*AllowTcpForwarding\s+.+$/AllowTcpForwarding no/" /etc/ssh/sshd_config || echo "AllowTcpForwarding no" >> /etc/ssh/sshd_config egrep -q "^\s*AllowAgentForwarding\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*AllowAgentForwarding\s+.+$/AllowAgentForwarding no/" /etc/ssh/sshd_config || echo "AllowAgentForwarding no" >> /etc/ssh/sshd_config
2.Ftp服务相关 FTP Banner 设置:1 2 echo \*\*\*\* FTP Banner 设置systemctl list-unit-files|grep vsftpd > /dev/null && sed -ri "/^\s*ftpd_banner\s*\W+.+$/s/^/#/" /etc/vsftpd/vsftpd.conf && echo "ftpd_banner='Authorized only. All activity will be monitored and reported.'" >> /etc/vsftpd/vsftpd.conf
禁止匿名用户登录FTP1 2 3 echo echo \*\*\*\* 禁止匿名用户登录FTPsystemctl list-unit-files|grep vsftpd > /dev/null && sed -ri "/^\s*anonymous_enable\s*\W+.+$/s/^/#/" /etc/vsftpd/vsftpd.conf && echo "anonymous_enable=NO" >> /etc/vsftpd/vsftpd.conf
禁止root用户登录FTP1 2 3 echo echo \*\*\*\* 禁止root用户登录FTPsystemctl list-unit-files|grep vsftpd > /dev/null && echo "root" >> /etc/vsftpd/ftpusers
限制FTP用户上传的文件所具有的权限1 2 3 4 5 6 echo echo \*\*\*\* 限制FTP用户上传的文件所具有的权限systemctl list-unit-files|grep vsftpd > /dev/null && sed -ri "/^\s*write_enable\s*\W+.+$/s/^/#/" /etc/vsftpd/vsftpd.conf && echo "write_enable=NO" >> /etc/vsftpd/vsftpd.conf systemctl list-unit-files|grep vsftpd > /dev/null && sed -ri "/^\s*ls_recurse_enable\s*\W+.+$/s/^/#/" /etc/vsftpd/vsftpd.conf && echo "ls_recurse_enable=NO" >> /etc/vsftpd/vsftpd.conf systemctl list-unit-files|grep vsftpd > /dev/null && sed -ri "/^\s*anon_umask\s*\W+.+$/s/^/#/" /etc/vsftpd/vsftpd.conf && echo "anon_umask=077" >> /etc/vsftpd/vsftpd.conf systemctl list-unit-files|grep vsftpd > /dev/null && sed -ri "/^\s*local_umask\s*\W+.+$/s/^/#/" /etc/vsftpd/vsftpd.conf && echo "local_umask=022" >> /etc/vsftpd/vsftpd.conf
限制FTP用户登录后能访问的目录1 2 3 echo echo \*\*\*\* 限制FTP用户登录后能访问的目录systemctl list-unit-files|grep vsftpd > /dev/null && sed -ri "/^\s*chroot_local_user\s*\W+.+$/s/^/#/" /etc/vsftpd/vsftpd.conf && echo "chroot_local_user=NO" >> /etc/vsftpd/vsftpd.conf
3.Telnet服务相关 配置禁用telnet服务1 egrep -q "^\s*telnet\s+\d*.+$" /etc/services && sed -ri "/^\s*telnet\s+\d*.+$/s/^/# /" /etc/services
4.Snmp服务相关 修改SNMP默认团体字:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 echo \*\*\*\* 修改SNMP默认团体字cat > /etc/snmp/snmpd.conf <<EOF com2sec name default $password group ****Grp v1 ****Sec group ****Grp v2c ****Sec view systemview included .1 80 view systemview included .1.3.6.1.2.1.1 view systemview included .1.3.6.1.2.1.25.1.1 view ****View included .1.3.6.1.4.1.2021.80 access ****Grp "" any noauth exact systemview none none access ****Grp "" any noauth exact ****View none none dontLogTCPWrappersConnects yes trapcommunity $password authtrapenable 1 trap2sink IP agentSecName ****Sec rouser ****Sec defaultMonitors yes linkUpDownNotifications yes EOF
二、Centos7检查的项目如下: 0x01 初始设置
1.1 文件系统配置:
将/tmp挂载至一个单独的分区
挂载时指定noexec,nosuid:不允许运行可执行文件
1.2 安全启动设置:
设置bootloader的配置文件的权限为600
设置bootloader的密码:进入引导界面需输入密码
为单用户启动认证机制
1.3 强制访问控制:
安装SELinux
设置SELinux的状态为enforcing
设置SELinux的policy为targeted 0x02 服务配置
2.1 时间同步设置:
开启时间同步服务
使用ntp或chrony来统一服务器的时间
不安装X-windows系统:即不使用可视化界面 0x03 网络配置
3.1 hosts设置:
配置/etc/hosts.allow与/etc/hosts.deny文件
配置/etc/hosts.allow与/etc/hosts.deny文件的权限为0644
配置/etc/hosts.allow与/etc/hosts.deny文件的属主为root
3.2 防火墙配置
安装iptables
设置各个Chain的默认策略为drop 0x04 审计设置
安装并使用auditd
配置记录审计日志的文件大小:8M
配置记录审计日志的文件个数:5
单个审计日志文件大小达到设定的值时触发的动作为:keep_logs/rotate
磁盘空间满后触发的动作为:rotate
auditd需配置的一些规则:
规则:审计更改日期和时间的操作 规则:审计更改用户/组信息的操作 规则:审计更改系统网络环境的操作 规则:审计更改系统强制访问控制的操作 规则:审计登入登出系统的事件 规则:审计企图改变文件权限的操作 规则:审计未授权情况下企图访问文件未成功的事件 规则:审计使用提权命令的操作 规则:审计删除文件的操作???? 规则:审计sudoers文件的变更 规则:审计sudoers日志文件的变更???? 规则:审计日志文件audit.log不能被改变
0x05 日志设置
安装并启用`rsyslog` 0x06 认证授权
6.1 配置cron:
开启cron服务
配置 /etc/crontab,/etc/cron.hourly,/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly,//etc/cron.d文件的权限为0700
设置cron.allow:只允许特定的用户可以使用cron
6.2 配置SSH:
配置/etc/ssh/sshd_config文件的权限为0600
关闭X11Forwarding
设置最大认证尝试次数:4
开启IgnoreRhosts:不启用基于主机的认证
关闭HostbasedAuthentication: 关闭基于主机的认证
禁止使用root直接登录:PermitRootLogin no
禁止使用空密码登录:PermitEmptyPasswords no
禁止用户环境:PermitUserEnvironment no
设置使用的MAC算法:
hmac-sha2-512-etm@openssh.com ,hmac-sha2-256-etm@openssh.com ,umac-128etm@openssh.com ,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com ,curve25519sha256@libssh.org ,diffie-hellman-group-exchange-sha256
设置空闲超时时间:180秒ClientAliveInterval 180
设置一次登录花费时间:120秒LoginGraceTime 120
6.3 配置PAM:
密码长度最少位数:12
密码中最少字符类型数:3
配置密码锁定:????
配置密码重用限制:不使用最近5次的密码
配置密码hash算法:SHA512
6.5 用户账户和环境设置:
密码有效时间:90天
密码更改最短间隔:7天
密码过期警告:7天
自动禁用特定时间内没有活动的账号:365天
配置系统账号的无法登录
配置root账号默认群组的GID为0
配置umask的默认值为027???
配置shell超时关闭会话时间:180
配置可以使用su命令的用户 0x07 系统维护
7.1 重要文件权限:
/etc/passwd 0644 uid 0 gid 0 /etc/shadow 0000 uid 0 gid 0 /etc/group 0644 uid 0 gid 0 /etc/gshadow 0000 uid 0 gid 0 /etc/passwd- 0644 uid 0 gid 0 /etc/shadow- 0000 uid 0 gid 0 /etc/group- 0644 uid 0 gid 0 /etc/gshadow- 0000 uid 0 gid 0
审计设置了SUID可执行文件的完整性 前面
审计设置了SGID的可执行文件的完整性
7.2 用户和组设置:
不允许密码为空的账号
只允许root账号的UID为0
设置path环境变量中的目录只有owner可写,group及other都没有w的权限
设置所有用户都有家目录
设置所有用户家目录的权限为0750
设置所有用户家目录的owner都为其自身
设置用户家目录内以.开头的文件,只有owner可写,group及other都没有w的权限
确保没有.netrc,.rhosts,.forward文件
确保所有在/etc/passwd中的组都在/etc/group
确保每个用户的UID都不同
确保每个组的GID都不同
确保用户名唯一
确保组名唯一
*本文作者:jerrybird,转载请注明来自FreeBuf.COM