简单说明

讨厌做安全加固!讨厌做安全加固!讨厌做安全加固!
然后花了将近两天时间整理实验了最近几年做过的安全加固项
还有很多可以做的安全加固项没有整理出来,以后逐步添加吧…
本篇博文是为了应付检查的加固项汇集,关键词是应付检查

系统密码相关的加固策略

1° 系统密码加固策略:
cp -av /etc/login.defs{,.source} # 原文件备份 sed -i
's/^PASS_MAX_DAYS.*$/PASS_MAX_DAYS 90/' /etc/login.defs sed -i
's/^PASS_MIN_DAYS.*$/PASS_MIN_DAYS 7/' /etc/login.defs sed -i
's/^PASS_MIN_LEN.*$/PASS_MIN_LEN 8/' /etc/login.defs sed -i
's/^PASS_WARN_AGE.*$/PASS_WARN_AGE 30/' /etc/login.defs #
设置密码最小长度为8位,密码最长生命周期为90天,密码最短更换周期为7天 # 密码过期警告信息在过期前30天开始
2° 该文件加固后策略对已经存在的用户不会生效,修复方法:
grep bash /etc/passwd|awk -F':' '{print $1}' # 查看目前可以登录系统的用户 for user in
$(grep bash /etc/passwd|awk -F':' '{print $1}') do chage -l ${user};done #
查看目前可以登录系统的用户的密码生命周期策略 ChangeDateStr=$(date +%F) ExpireDateStr=$(date -d'90
days' +%F) for user in $(grep bash /etc/passwd|awk -F':' '{print $1}') do chage
-m7 -M 90 -W 30 -d ${ChangeDateStr} -E ${ExpireDateStr} ${user};done #
将目前可以登录的系统用户的密码生存周期策略改掉 # 最后一次修改密码的日期为当前日期,过期策略为90天后
3° 使用pam策略加固系统密码:
cp -av /etc/pam.d/system-auth-ac{,.source} sed -i '/^password *requisite
*pam_cracklib.so/a\password required pam_pwhistory.so use_authtok remember=3
enforce_for_root' /etc/pam.d/system-auth-ac #
设置密码历史,无法使用3次以内的历史密码,当前密码在内3个历史密码,对root生效 #
密码历史记录在文件/etc/security/opasswd中,清空该文件删除密码历史 sed -i 's/^password *requisite
*pam_cracklib.so/& minlen=8 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
enforce_for_root/g' /etc/pam.d/system-auth-ac # 密码复杂度策略: #
至少包含:数字(dcredit)1位,大写字母(ucredit)1位 #
小写字母(lcredit)1位,特殊符号(ocredit)1位,最小长度(minlen)8位 # 该策略需要相应的pam模块pam_cracklib.so #
正常情况下可以在/lib64/security/目录中找到
4° 错误密码登录尝试:
echo 'LOGIN_RETRIES 6'>>/etc/login.defs # 错误密码登录尝试为6次 # 错误密码登录尝试策略会被pam策略覆盖 cp
-av /etc/pam.d/sshd{,.source} sed -i'1aauth required pam_tally2.so
even_deny_root deny=4 unlock_time=120 root_unlock_time=600' /etc/pam.d/sshd #
添加配置: # auth required pam_tally2.so even_deny_root deny=4 unlock_time=120
root_unlock_time=600 # 该行必需在第二行,使用ssh登录的用户,连续密码错误4次后会锁定,对root也生效 #
账号锁定后,等待解锁时间或者使用pam_tally2命令手动清空掉锁定状态,否则正确密码也无法登陆 # 该策略需要相应的pam模块pam_tally2.so
# 正常情况下可以在/lib64/security/目录中找到 # 登录错误锁定的维护 pam_tally2 -u root #查看root用户失败次数
pam_tally2 -r -u root#清空root用户失败次数
5° 规避策略:
cat >/root/checkOS/userPass.sh<<EOF #!/bin/bash source ~/.bash_profile
ChangeDateStr=\$(date +%F) ExpireDateStr=\$(date-d'90 days' +%F) for user in
\$(grep bash /etc/passwd|awk -F':' '{print \$1}') do chage -d \${ChangeDateStr}
-E \${ExpireDateStr} \${user};done EOF chmod +x /root/checkOS/userPass.sh
chattr +i /root/checkOS/userPass.sh crontab-l>/tmp/crontab.tmp echo -e "\n#
User Pass">>/tmp/crontab.tmp echo "0 0 * * * /root/checkOS/userPass.sh"
>>/tmp/crontab.tmp cat /tmp/crontab.tmp|crontab rm -rf /tmp/crontab.tmp
6° 回滚策略:
/bin/cp -av /etc/login.defs{.source,} for user in $(grep bash /etc/passwd|awk
-F':' '{print $1}'); do chage -m 0 -M 99999 -W 7 ${user};done /bin/cp -av
/etc/pam.d/system-auth-ac{.source,} /bin/cp -av /etc/pam.d/sshd{.source,}
7° 规避策略回滚:
chattr -i /root/checkOS/userPass.sh rm -rf /root/checkOS/userPass.sh crontab -l
>/tmp/crontab.tmp sed -i '/^# User Pass$/d' /tmp/crontab.tmp sed -i
'/^.*userPass.sh$/d' /tmp/crontab.tmp cat /tmp/crontab.tmp|crontab rm -rf
/tmp/crontab.tmp
关闭用户创建、删除、修改密码权限
chattr +i /etc/passwd /etc/shadow /etc/group # 对这三个文件加锁,使之无法修改 #
那么用户的添加和删除以及修改密码操作就无法完成了 # 受到影响的命令:useradd、userdel、chage、chgrp # 存在的问题: #
当用户密码过期需要修改时无法自主修改 # 需要使用root权限回滚该操作才可以 # 回滚: chattr -i /etc/passwd /etc/shadow
/etc/group
指定su权限账号,限制root远程登录
限制root账号的ssh登录 限制非root账号的su命令使用权限 设置专门用于su到root用户的账号 useradd sudoler
PASS=sudoler echo ${PASS}|passwd --stdin sudoler usermod -G sudoler,wheel
sudoler# 用户密码,可以根据需求改变 # 添加专门用于使用su命令的用户 # 将该用户添加到wheel组 cp -av
/etc/pam.d/su{,.source} sed -i
's/^#auth\t\trequired\tpam_wheel.so.*$/auth\t\trequired\tpam_wheel.so use_uid/g'
/etc/pam.d/su# 去掉su的pam文件的该行注释,使之生效 # auth required pam_wheel.so use_uid #
只有wheel组的用户才可以使用su命令 # 该配置项对root用户无效 echo 'PermitRootLogin no'
>>/etc/ssh/sshd_config /etc/init.d/sshd restart# 限制root,不能直接使用ssh登录 # 回滚
userdel -r sudoler /bin/cp -av /etc/pam.d/su{.source,} sed -i
's/^PermitRootLogin no/# &/g' /etc/ssh/sshd_config /etc/init.d/sshd restart
设置grub密码
PASS=$(echo -e "vincent\nvincent"|grub-md5-crypt|tail -1) # 使用grub-md5-crypt命令
生成grub的密码 sed -i "/hiddenmenu/ipassword --md5 ${PASS}" /boot/grub/grub.conf #
修改grub.conf,设置grub密码 # 回滚: sed -i 's/^password/# &/g' /boot/grub/grub.conf #
当重启主机,进入单用户模式修改root密码的时候 # 需要输入grub密码,才能设置进入单用户模式
配置用户同时登录的会话数,系统最多会话数
cp -av /etc/security/limits.conf{,.source} UserName=vincent echo "${UserName}
- maxlogins 5">>/etc/security/limits.conf # 限制用户同时登录的会话数,此限制对root用户无效 echo "* -
maxsyslogins 3">>/etc/security/limits.conf # 非root用户的系统最多会话数,此限制依然对root用户无效 #
当vincent可以有5个会话,系统最多会话小于5个时 # 用户vincent可以有5个会话,但不能再有其他会话登录了 #
因此一般系统最多会话要大于所有的用户会话数的和 # 回滚: /bin/cp -av /etc/security/limits.conf{.source,}
会话超时自动退出
echo "export TMOUT=180">>/etc/profile # 会话空闲3分钟会自动退出,需要重新登录该用户 # 回滚: sed -i
'/^export TMOUT.*$/d' /etc/profile
Ctrl-Alt-Delete 功能关闭
sed -i 's/^start on control-alt/# &/g' /etc/init/control-alt-delete.conf sed -i
's|^exec /sbin/shutdown|# &|g' /etc/init/control-alt-delete.conf #
关闭Ctrl-Alt-Delete三个组合键重启主机的功能 # 虚拟机可以在管理面板发送Ctrl-Alt-Delete组合键进行测试 # 回滚: sed -i
's/# start /start /g' /etc/init/control-alt-delete.conf sed -i 's|# exec |exec
|g' /etc/init/control-alt-delete.conf # 5版本的关闭方法: # 注释掉/etc/inittab文件中的相关行: #
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
限定root用户只能从某些上登录

该加固和限制root远程登录冲突
# 如果做了sshd的连续密码错误锁定加固策略,则为: sed -i 's|^\(auth required
\)\(pam_tally2.so.*\)$|\1pam_access.so accessfile=/etc/sshd_deny \2|g'
/etc/pam.d/sshd# 否则为: sed -i '1aauth required pam_access.so
accessfile=/etc/sshd_deny' /etc/pam.d/sshd # 策略文件: echo '-:root:ALL EXCEPT
192.168.77.245'>/etc/sshd_deny # 限定某个IP echo '-:root:ALL EXCEPT
192.168.77.245,192.168.77.77'>/etc/sshd_deny # 限定多个IP echo '-:root:ALL EXCEPT
192.168.77.0/24'>/etc/sshd_deny # 限定一个网段
系统守护进程启动目录权限加固
chmod -R 700 /etc/rc.d/init.d/ # 该目录下的所有系统守护进程脚本只有root用户具有读取和操作的权限 # 回滚: chmod
-R755 /etc/rc.d/init.d/
缩小命令历史记录数
sed -i 's/^HISTSIZE.*/HISTSIZE=0/g' /etc/profile # 将命令历史从默认的1000改为0,关闭命令历史记录 #
回滚: sed -i 's/^HISTSIZE.*/HISTSIZE=1000/g' /etc/profile
修改ssh登录时的最近一次登录信息、欢迎信息
echo 'PrintLastLog no'>>/etc/ssh/sshd_config /etc/init.d/sshd restart #
剔除ssh登录时候的Last login信息 echo -e '\n\n\n\tWelcome...\n\n\n'>/etc/motd # 该文件默认为空 #
填充相关的文本信息后ssh登录会显示这些信息 # 无需重启sshd服务 echo 'Banner /etc/ssh/sshbanner'
>>/etc/ssh/sshd_config echo'sshbanner'>/etc/ssh/sshbanner /etc/init.d/sshd
restart# 该方法首先打开sshd的Banner配置 # 该操作需要重启sshd服务 # Banner文件信息更换无需再次重启sshd服务 #
该方法设置的标语信息处于/etc/motd信息之上 # 回滚: rm -rf /etc/motd rm -rf /etc/ssh/sshbanner sed
-i's/^PrintLastLog no/# &/g' /etc/ssh/sshd_config sed -i 's|^Banner
/etc/ssh/sshbanner|# &|g' /etc/ssh/sshd_config /etc/init.d/sshd restart
系统不回应ping命令
echo 'net.ipv4.icmp_echo_ignore_all = 1'>>/etc/sysctl.conf sysctl -p #
所有ping本主机得到一个超时回应 # 也就是直接将接到的ping命令请求丢弃 # 回滚: sed -i
's/^net.ipv4.icmp_echo_ignore_all = 1$/net.ipv4.icmp_echo_ignore_all = 0/'
/etc/sysctl.conf sysctl -p
命令历史全记录

这应该是一些命令历史相关的技巧性的项,而非加固项
echo 'shopt -s histappend'>>/etc/profile # 相同用户打开多个会话时,命令历史不会互相覆盖 #
退出shell时,命令历史添加到文件中,而非覆盖原文件 echo "export PROMPT_COMMAND='history -a'"
>>/etc/profile# 在显示命令提示符时,保存 history echo "export HISTTIMEFORMAT='%F %T '"
>>/etc/profile# 命令历史中加入命令执行的时间 echo "export HISTSIZE=100000">>/etc/profile echo
"export HISTFILESIZE=100000">>/etc/profile # 增加命令历史的记录数量,默认是1000 echo "export
HISTCONTROL=ignoredups">>/etc/profile # 剔除连续重复的条目,连续的重复被剔除,只保留连续的第一条
host.conf 配置文件锁定
cat /etc/host.conf order hosts,bind multi on nospoof on # order
指定DNS解析顺序,一般是先hosts后resolv.conf指定的DNS服务器 # multi 指定主机能不能有多个IP地址,ON代表允许 #
nospoof 指定不允许IP伪装,此参数必须设置为ON chattr +i /etc/host.conf # 将文件锁定,防止误删、误该 # 回滚:
chattr -i /etc/host.conf
禁用icmp源路由选项 accept_source_route
echo 'net.ipv4.conf.all.accept_source_route = 0'>>/etc/sysctl.conf echo
'net.ipv4.conf.default.accept_source_route = 0'>>/etc/sysctl.conf echo
'net.ipv4.conf.lo.accept_source_route = 0'>>/etc/sysctl.conf echo
'net.ipv4.conf.eth0.accept_source_route = 0'>>/etc/sysctl.conf echo
'net.ipv6.conf.all.accept_source_route = 0'>>/etc/sysctl.conf echo
'net.ipv6.conf.default.accept_source_route = 0'>>/etc/sysctl.conf echo
'net.ipv6.conf.lo.accept_source_route = 0'>>/etc/sysctl.conf echo
'net.ipv6.conf.eth0.accept_source_route = 0'>>/etc/sysctl.conf sysctl -p #
禁用icmp源路由选项,防止黑客欺骗,截取信息包 # 系统默认就是全部禁用的
禁用不使用的suid/sgid程序
find / -type f \( -perm -04000 -o -perm -02000 \) 2>/dev/null|sort|uniq #
参数-perm -4000查出包含suid的文件 # 参数-perm -2000查出包含sgid的文件 for i in $(find / -type f
\( -perm -4000 -o -perm -2000 \) 2>/dev/null|sort|uniq) do ls -l $i;done|column
-t# 这些程序查出来之后的处理很困难 # 比mount命令,本身就是只有root才可以执行的,但却不能卸载,否则系统无法重启 #
比如su命令,我们可以做加固处理 # 使用 chmod a-s XXX 做加固 # 因为不同系统的使用情况,包含的命令多少会不同,加固是否会造成影响需要自己验证
文件和目录权限相关
find / -type f \( -perm -2 -o -perm -20 \) -exec ls -l {} \; find / -type d \(
-perm -2 -o -perm -20 \) -exec ls -ld {} \; # 查询任何人可以写的文件和目录 find / -nouser -o
-nogroup# 查询没有所属人或者所属组的文件或者目录 find / \( -type b -o -type c \) | grep -v '^/dev/'
# 查询/dev目录外的特殊的块文件
未完…待续…

[TOC]

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信