系统:ubuntu 18.04
时间:2019年07月19日
注意:测试脚本可不执行,仅为测试配置是否成功
1. 口令生存期不合规
- 执行备份
[root@ ~]# cp -p /etc/login.defs /etc/login.defs_bak
- 编辑文件
[root@ ~]# vim /etc/login.defs
- 存在则修改,不存在则添加
PASS_MAX_DAYS 90
PASS_MIN_DAYS 10
PASS_WARN_AGE 7

- 测试脚本
cat /etc/login.defs |grep -v "^[[:space:]]*#"|grep -E '^\s*PASS_MAX_DAYS|^\s*PASS_MIN_DAYS|^\s*PASS_WARN_AGE'

2. 未删除无关账号
下面的系统自带的账号应该移除或锁定。
lp|sync|halt|news|uucp|operator|games|gopher|smmsp|nfsnobody|nobody
- 修改用户shell域
[root@ ~]# usermod -s /bin/false username
# 更改相应用户的shell为flase

- 删除用户
[root@ ~]# userdel username
# username为修改的具体用户名
# 查看所有用户和组 cat /etc/passwd
# 删除失败,可以使用- r -f,如userdel -r -f lp

- 锁定用户(如果删除用户,不执行该操作)
[root@ ~]# passwd -l username
# 锁定用户,只有具备超级用户权限的使用者方可使用。
[root@ ~]# passwd –d username
# 解锁用户,解锁后原有密码失效,登录设置新密码才能登录。
[root@ ~]# passwd -u username
# 解锁用户后,原密码仍然有效。
4.测试脚本
[root@ ~]# cd /opt
[root@ ~]# touch test.sh
[root@ ~]# vim test.sh
# 以下为该文件test.sh的内容
# 修改完毕后,执行脚本
[root@ ~]# sh test.sh
# 这是test.sh文件的内容
cat /etc/shadow|sed '/^\s*#/d'|awk -F: '($2!~/^*/) && ($2!~/^!!/) {print $1":"}'|egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:"
egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:" /etc/passwd|awk -F: '($7!~/bin\/false/) {print $1":"$7}'
echo "result_pw="`cat /etc/shadow|sed '/^\s*#/d'|awk -F: '($2!~/^*/) && ($2!~/^!!/) {print $1}'|egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:"|wc -l`
echo "result_shell="`egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:" /etc/passwd|awk -F: '($7!~/bin\/false/) {print $1":"$7}'|wc -l`


3. 文件与目录缺省控制权不合流
- 文件备份
[root@ ~]# cp -p /etc/profile /etc/profile_bak
- 编辑文件
[root@ ~]# vim /etc/profile
- 添加内容,在文件末尾
umask 027
- 执行命令让配置生效
[root@ ~]# source /etc/profile
- 测试脚本
[root@ ~]# awk '{print $1":"$2}' /etc/profile|grep -v "^[[:space:]]*#"|grep -i umask|tail -n1

4. 未配置用户最小授权
- 执行命令
[root@ ~]# chmod 644 /etc/passwd
[root@ ~]# chmod 400 /etc/shadow
[root@ ~]# chmod 644 /etc/group
[root@ ~]# chmod 644 /etc/services
[root@ ~]# chmod 600 /etc/xinetd.conf
[root@ ~]# chmod 600 /etc/security
- 测试脚本
# test.sh文件的内容,修改完执行该文件
ls -lL /etc/passwd 2>/dev/null
echo "passwd="`ls -lL /etc/passwd 2>/dev/null|grep -v "[r-][w-]-[r-]--[r-]--"|wc -l`
ls -lL /etc/group 2>/dev/null
echo "group="`ls -lL /etc/group 2>/dev/null|grep -v "[r-][w-]-[r-]--[r-]--"|wc -l`
ls -lL /etc/services 2>/dev/null
echo "services="`ls -lL /etc/services 2>/dev/null|grep -v "[r-][w-]-[r-]--[r-]--"|wc -l`
ls -lL /etc/shadow 2>/dev/null
echo "shadow="`ls -lL /etc/shadow 2>/dev/null|grep -v "[r-]--------"|wc -l`
ls -lL /etc/xinetd.conf 2>/dev/null
echo "xinetd="`ls -lL /etc/xinetd.conf 2>/dev/null|grep -v "[r-][w-]-------"|wc -l`
ls -lLd /etc/security 2>/dev/null
echo "security="`ls -lLd /etc/security 2>/dev/null|grep -v "[r-][w-]-------"|wc -l`

5. 未修改SSH的Banner警告信息
- 创建ssh_banner信息文件
[root@ ~]# touch /etc/ssh_banner
[root@ ~]# chown bin:bin /etc/ssh_banner
[root@ ~]# chmod 644 /etc/ssh_banner
[root@ ~]# echo " Authorized only. All activity will be monitored and reported " > /etc/ssh_banner
- 修改sshd_config文件
[root@ ~]# vim /etc/ssh/sshd_config
- 修改内容
# 找到Banner no这一行,取消注释,修改为
Banner /etc/ssh_banner
- 重启sshd服务
# 重启服务
[root@ ~]# systemctl restart sshd
# 查看状态
# [root@ ~]# systemctl status sshd
# 启动服务
# [root@ ~]# systemctl start sshd
# 停止服务
# [root@ ~]# systemctl stop sshd
- 测试脚本
# 这是test.sh文件的内容
ssh_banner=`cat /etc/ssh/sshd_config | grep -v '^[[:space:]]*#' | grep -i Banner|awk '{print $2}'`;
ssh_status=`netstat -antp|grep -i listen|grep ":22\>"|wc -l`;
if ([ "$ssh_status" != 0 ] && [ -s "$ssh_banner" ]);
then
echo "sshd is running.sshd banner is not null.sshd banner check result:true";
else
if [ "$ssh_status" != 0 ];
then
echo "sshd is running.sshd banner is null.sshd banner check result:false";
else
echo "sshd is not running.sshd banner check result:true";
fi;
fi;
unset ssh_banner ssh_status;

6. 未设置关键文件的属性
- 更改该日志文件属性
[root@ ~]# chattr +a /var/log/messages
#如果不存在则忽略
7. 未启用远程日志功能
- 编辑文件
[root@ ~]# vim /etc/rsyslog.conf
- 增加内容
*.* @<日志服务器ip或者域名>
- 重启syslog服务
# 重启服务
[root@ ~]# systemctl restart rsyslog
# 查看状态
# [root@ ~]# systemctl status rsyslog
# 启动服务
# [root@ ~]# systemctl start rsyslog
# 停止服务
# [root@ ~]# systemctl start rsyslog
8. 未配置记录安全事件日志
- 编辑文件
[root@ ~]# vim /etc/rsyslog.conf
- 加入如下内容
*.err;kern.debug;daemon.notice /var/adm/messages
# 其中/var/adm/messages为日志文件
- 文件不存在则创建
[root@ ~]# touch /var/adm/messages
# 创建失败就先新建adm目录
# [root@ ~]# mkdir /var/adm
- 修改权限为640
[root@ ~]# chmod 640 /var/adm/messages
- 重启日志服务
# 重启服务
[root@ ~]# systemctl restart rsyslog
# 查看状态
# [root@ ~]# systemctl status rsyslog
# 启动服务
# [root@ ~]# systemctl start rsyslog
# 停止服务
# [root@ ~]# systemctl start rsyslog
- 测试脚本
# 这是test.sh文件的内容
if [ -f /etc/syslog.conf ];
then
syslog=`cat /etc/syslog.conf | grep -v "^[[:space:]]*#" | grep "*.err\;kern\.debug\;daemon\.notice[[:space:]]*/var/adm/messages"|wc -l`;
if [ $syslog -ge 1 ];
then
echo "syslog check result:true";
else
echo "syslog check result:false";
fi;
fi;
if [ -f /etc/rsyslog.conf ];
then
rsyslog=`cat /etc/rsyslog.conf | grep -v "^[[:space:]]*#" | grep "*.err\;kern\.debug\;daemon\.notice[[:space:]]*/var/adm/messages"|wc -l`;
if [ $rsyslog -ge 1 ];
then
echo "rsyslog check result:true";
else
echo "rsyslog check result:false";
fi;
fi;
if [ -s /etc/syslog-ng/syslog-ng.conf ];
then suse_ret=`cat /etc/syslog-ng/syslog-ng.conf | grep -v "^[[:space:]]*#" | grep "level(err) or facility(kern) and level(debug) or facility(daemon) and level(notice)"`;
if [ -n "$suse_ret" ];
then suse_ret2=`cat /etc/syslog-ng/syslog-ng.conf | grep -v "^[[:space:]]*#" | grep 'file("/var/adm/msgs")'`;
if [ -n "$suse_ret2" ];
then suse_ret3=`cat /etc/syslog-ng/syslog-ng.conf | grep -v "^[[:space:]]*#" | grep "destination(msgs)"`;
fi;
fi;
fi;
if [ -n "$suse_ret3" ];
then echo "suse:valid";
else echo "suse:no value";
fi;
unset suse_ret suse_ret2 suse_ret3 rsyslog syslog;

8. 未配置账户登录日志
- 编辑文件
[root@ ~]# vim /etc/rsyslog.conf
- 加入如下内容
authpriv.* /var/log/authlog
# 其中/var/log/authlog为日志文件
- 文件不存在则创建
[root@ ~]# touch /var/log/authlog
- 修改权限为640
[root@ ~]# chmod 640 /var/log/authlog
- 重启日志服务
# 重启服务
[root@ ~]# systemctl restart rsyslog
# 查看状态
# [root@ ~]# systemctl status rsyslog
# 启动服务
# [root@ ~]# systemctl start rsyslog
# 停止服务
# [root@ ~]# systemctl start rsyslog
9. 记录cron行为日志
- 编辑文件
[root@ ~]# vim /etc/rsyslog.conf
- 加入如下内容
cron.* /var/log/cron
# 其中/var/log/cron为日志文件
- 文件不存在则创建
[root@ ~]# touch /var/log/cron
- 修改权限为640
[root@ ~]# chmod 640 /var/log/cron
- 重启日志服务
# 重启服务
[root@ ~]# systemctl restart rsyslog
# 查看状态
# [root@ ~]# systemctl status rsyslog
# 启动服务
# [root@ ~]# systemctl start rsyslog
# 停止服务
# [root@ ~]# systemctl start rsyslog
10. 日志文件安全不合规
对权限>640的日志文件赋予640权限
- 检测文件
[root@ ~]# LOGDIR=`cat /etc/rsyslog.conf | grep -v "^[[:space:]]*#"|awk '{print $2}'|sed 's/^-//g'|grep '^\s*\/'`;
[root@ ~]# ls -l $LOGDIR 2>/dev/null|grep -v "[r-][w-]-[r-]-----"|awk '{print $1" "$8" "$9}';
[root@ ~]# unset LOGDIR

- 修改权限
chmod 640 <file>
# file为检测步骤中输出的权限>640的日志文件

11. 未限制root用户SSH远程登录
- 备份文件
[root@ ~]# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
- 新建一个普通用户并设置高强度密码(防止设备上只存在root用户可用时,无法远程访问)
[root@ ~]# useradd -g root oem
[root@ ~]# passwd oem
# oem 为新增的用户名,添加到root组,可以随便更改
- 编辑文件
[root@ ~]# vim /etc/sudoers
- 添加内容
# 在root ALL=(ALL:ALL) ALL 下面新建一行
# oem 为上面新增的用户名
oem ALL=(ALL:ALL) ALL
# 在%admin ALL=(ALL) ALL下面新建一行
%oem ALL=(ALL) ALL
# 退出编辑案失败,可以使用wq!进行保存

- 把用户添加到root组
[root@ ~]# usermod -G root oem
# 把 admin加入sudo组 gpasswd –a admin sudo
# 把 admin退出sudo组 gpasswd –d admin sudo
- 编辑文件
[root@ ~]# vim /etc/ssh/sshd_config
- 修改内容
# PermitRootLogin值为no并去掉注释。
PermitRootLogin no
# 修改Protocol的值为2并去掉注释。
Protocol 2
# 只允许新建用户登录ssh
# AllowUsers oem
- 重启SSHD服务
# 重启服务
[root@ ~]# systemctl restart sshd
# 查看状态
# [root@ ~]# systemctl status sshd
# 启动服务
# [root@ ~]# systemctl start sshd
# 停止服务
# [root@ ~]# systemctl stop sshd
- 测试脚本
# 这是test.sh文件的内容
if grep -v "^[[:space:]]*#" /etc/ssh/sshd_config|grep -i "PermitRootLogin no"
then echo "This device does not permit root to ssh login,check result:true";
else
echo "This device permits root to ssh login,check result:false";
fi
if grep -v "^[[:space:]]*#" /etc/ssh/sshd_config|egrep "^protocol[[:space:]]*2|^Protocol[[:space:]]*2"
then echo "SSH protocol version is 2,check result:true"
else
echo "SSH protocol version is not 2,check result:false"
fi

12. 未限制root用户登录FTP
总共有四种情况:vsftp服务器,pure-ftp服务器,wu-ftp服务器和proftp服务器。默认是vsftp服务器。
安装命令:apt install vsftpd
启动命令:syetemctl start vsftpd

vsftp
- 确定ftpusers文件位置
[root@ ~]# cat /etc/pam.d/vsftpd
# auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# 其中file=/etc/ftpusers即为当前系统上的ftpusers文件.

- 修改ftpusers文件,增加不能通过FTP登录的用户(每个用户各占一行)
root
daemon
bin
sys
adm
lp
uucp
nuucp
listen
nobody
noaccess
nobody4
- 配置vsftpd.conf文件,设定只允许特定用户通过FTP登录
[root@ ~]# vim /etc/vsftpd.conf
# 文件不存在则[root@ ~]# vim /etc/vsftpd/vsftpd.conf
- 修改内容
userlist_enable=YES
# 此选项被激活后,VSFTPD将读取userlist_file参数所指定的文件中的用户列表。
userlist_deny=NO
# 决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器,
# YES默认值,禁止文件中的用户登录,同时也不向这些用户发出输入口令的提示,
# NO只允许在文件中的用户登录FTP服务器.
userlist_file=/etc/vsftpd.user_list
- 编辑userlist_file对应的文件去掉root,添加新建用户oem
[root@ ~]# vim /etc/vsftpd.user_list
# 不存在则创建
wu-ftp
- 编辑文件
[root@ ~]# vim /etc/ftpusers
# 或者 vim /etc/ftpd/ftpusers
- 修改内容
# 在文件中用户将禁止登录FTP,另取一行录入root,例如:
root
venustech
proftp
- 编辑文件
[root@ ~]# vim proftpd.conf
# 不存在则vim /usr/local/etc/proftpd.conf
- 修改内容
# 在文件中查看是否存在如下内容,存在则将其注释掉:
RootLogin on
pure-ftp
- 编辑文件
[root@ ~]# vim /etc/pure-ftpd/pure-ftpd.conf
- 修改内容
# 是否存在如下内容,没有则新增,禁止uid<=100的用户登录FTP
MinUID 100
重启ftp服务
# 重启服务
[root@ ~]# systemctl restart vsftpd
# 查看状态
# [root@ ~]# systemctl status vsftpd
# 启动服务
# [root@ ~]# systemctl start vsftpd
# 停止服务
# [root@ ~]# systemctl stop vsftpd
13. 未限制匿名用户登录FTP
vsftp
- 编辑文件
[root@ ~]# vim /etc/vsftpd.conf
# 文件不存在则[root@ ~]# vim /etc/vsftpd/vsftpd.conf
- 修改内容
anonymous_enable=NO
# 如果存在anonymous_enable则修改,如果不存在则手动增加
wu-ftp
- 编辑文件
[root@ ~]# vim /etc/ftpd/ftpaccess
# 或者 vim /etc/ftpaccess
- 修改内容
# 如果文件中存在类似如下行,则注释掉,用户类型不能为guest或者anonymous:
class [类名] [guest/anonymous] [IP地址]
proftp
- 编辑文件
[root@ ~]# vim proftpd.conf
# 不存在则vim /usr/local/etc/proftpd.conf
- 修改内容
# 查看文件中找到如下结构:
# <Anonymous ~ftp>
# Group ftp
# UserAlias anonymous ftp
# </Anonymous>
# 在该结构中添加如下行:
AnonRequirePassword on
#启用认证功能,注意AnonRequirePassword后面跟的是多个tab符.
#或者将<Anonymous ~ftp>....</Anonymous>结构注释掉.
pure-ftp
- 编辑文件
[root@ ~]# vim /etc/pure-ftpd/pure-ftpd.conf
- 修改内容
# 修改NoAnonymous的值为yes(没有则添加)
NoAnonymous yes
重启ftp服务
# 重启服务
[root@ ~]# systemctl restart vsftpd
# 查看状态
# [root@ ~]# systemctl status vsftpd
# 启动服务
# [root@ ~]# systemctl start vsftpd
# 停止服务
# [root@ ~]# systemctl stop vsftpd
14. 登录超时时间未限制
- 备份文件
[root@ ~]# cp -p /etc/profile /etc/profile_bak
- 修改文件
[root@ ~]# vim /etc/profile
- 修改内容(没有就添加,有就修改)
TMOUT=300
export TMOUT
4.测试脚本
cat /etc/profile |grep -i TMOUT

15. 未禁止IP路由转发
- 备份文件
[root@ ~]# cp -p /etc/sysctl.conf /etc/sysctl.conf_bak
- 修改文件
[root@ ~]# vim /etc/sysctl.conf
- 修改内容
net.ipv4.ip_forward=0
- 使配置文件生效
[root@ ~]# sysctl -p
- 测试脚本
sysctl -n net.ipv4.ip_forward
# 输出结果为0,表示合规

16. 系统core dump状态不合规
- 编辑文件
[root@ ~]# vim /etc/security/limits.conf
- 添加内容(存在则修改,不存在则新增)
* soft core 0
* hard core 0
- 编辑文件
[root@ ~]# vim /etc/profile
- 修改内容
# 注释掉如下行:
ulimit -S -c 0 > /dev/null 2>&1
- 测试脚本
# 这是test.sh文件的内容
cat /etc/profile|grep -v "^[[:space:]]*#"|grep "ulimit[[:space:]]*-S[[:space:]]*-c[[:space:]]*0[[:space:]]*>[[:space:]]*/dev/null[[:space:]]*2>&1"
cat /etc/security/limits.conf|grep -v "[[:space:]]*#"

17. 控制远程访问的IP地址不合规
- 备份文件
[root@ ~]# cp -p /etc/hosts.allow /etc/hosts.allow_bak
[root@ ~]# cp -p /etc/hosts.deny /etc/hosts.deny_bak
- 编辑文件
[root@ ~]# vim /etc/hosts.allow
- 修改内容
# 增加多行 service: 允许访问的IP(service为服务,例如sshd)
sshd:192.168.1.*:allow
sshd:192.168.2.*:allow
sshd:192.168.3.*:allow
vsftpd:192.168.1.*:allow
vsftpd:192.168.2.*:allow
vsftpd:192.168.3.*:allow
- 编辑文件
[root@ ~]# vim /etc/hosts.deny
- 添加一行
all:all
# 拒绝一切远程访问配合文件hosts.allow使用。根据实际网段和需求进行实施。
18. 未修改SSH的Banner信息
- 新建文件
[root@ ~]# touch /etc/motd
- 添加内容
[root@ ~]# echo " Authorized users only. All activity may be monitored and reported " > /etc/motd
# 可根据实际需要修改该文件的内容。
- 测试脚本
# 这是test.sh文件的内容
ssh_status=`ps -ef|grep "sshd"|grep -v "grep"|wc -l`;
if ([ $ssh_status != 0 ] && [ -s /etc/motd ]);
then
echo "sshd is running,banner is not null,check result:true";
else
if [ $ssh_status -ge 1 ];
then
echo "sshd is running,banner is null,check result:false";
else
if [ -s /etc/motd ];
then
echo "sshd is not running,banner is not null,check result:true";
else
echo "sshd is not running,banner is null,check result:true";
fi;
fi;
fi;
unset ssh_status;
测试结果
16. 禁止ICMP重定向
- 备份文件
[root@ ~]# cp -p /etc/sysctl.conf /etc/sysctl.conf_bak
- 编辑文件
[root@ ~]# vim /etc/sysctl.conf
- 修改内容
net.ipv4.conf.all.accept_redirects = 0
- 使配置文件生效
[root@ ~]# sysctl -p
- 测试脚本
[root@ ~]# sysctl -n net.ipv4.conf.all.accept_redirects

19. 未修改FTP的Banner信息
vsftp
- 编辑文件
[root@ ~]# vim /etc/vsftpd.conf
# 文件不存在则[root@ ~]# vim /etc/vsftpd/vsftpd.conf
- 修改内容
# 修改ftpd_banner的值为
ftpd_banner=” Authorized users only. All activity may be monitored and reported.”
# 可根据实际需要修改该文件内容
wu-ftp
- 编辑文件
[root@ ~]# vim /etc/ftpusers
# 或者 vim /etc/ftpd/ftpusers
- 修改内容
# 确保该行未被注释:
banner /etc/ftpd/banner.msg
- 编辑文件(没有就新建)
[root@ ~]# vim /etc/ftpd/banner.msg
- 将自定义BANNER写入其中
" Authorized users only. All activity may be monitored and reported "
proftp
- 编辑文件
[root@ ~]# vim /usr/local/etc/proftpd.conf
- 修改内容
# 查看Banner信息文件是否存在:
DisplayConnect <file>
- Banner文件不存在则新建
[root@ ~]# touch <file>
- 编辑文件
[root@ ~]# vim <file>
- 将自定义BANNER写入其中
" Authorized users only. All activity may be monitored and reported "
pure-ftp
- 编辑文件
[root@ ~]# vim /etc/pure-ftpd/pure-ftpd.conf
- 修改内容
# 确保该行未被注释。
FortunesFile <file>
- 编辑文件(没有就新建该文件夹或该文件)
[root@ ~]# vim /usr/share/fortune/zipp
- 将自定义BANNER写入其中
" Authorized users only. All activity may be monitored and reported "
重启ftp服务
# 重启服务
[root@ ~]# systemctl restart vsftpd
# 查看状态
# [root@ ~]# systemctl status vsftpd
# 启动服务
# [root@ ~]# systemctl start vsftpd
# 停止服务
# [root@ ~]# systemctl stop vsftpd
测试脚本
# 这是test.sh文件的内容
FTPSTATUS=`ps -ef|grep ftpd|grep -v grep|wc -l`
Check_ftp ()
{
if [ -f /etc/vsftpd.conf ];
then
FTPCONF="/etc/vsftpd.conf";
else
if [ -f /etc/vsftpd/vsftpd.conf ];
then
FTPCONF="/etc/vsftpd/vsftpd.conf";
fi;
fi;
if [ -f "$FTPCONF" ]
then
if [ `grep -v "^[[:space:]]*#" $FTPCONF|grep -i "ftpd_banner"|wc -l` -ne 0 ];
then
echo "vsftpd is running.Banner in $FTPCONF is recommended.FTP check result:true";
else
echo "vsftpd is running.Banner in $FTPCONF is not recommended.FTP check result:false";
fi;
fi;
if [ -f /etc/pure-ftpd/pure-ftpd.conf ];
then
if [ `cat /etc/pure-ftpd/pure-ftpd.conf|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "FortunesFile"|wc -l` -eq 0 ]
then
echo "pure-ftpd is running.banner in pure-ftpd.conf is not recommended.FTP check result:false.";
else
if [ -s "`cat /etc/pure-ftpd/pure-ftpd.conf|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "FortunesFile"|awk '{print $2}'`" ];
then
echo "pure-ftpd is running.Banner in pure-ftpd.conf is recommended.FTP check result:true.";
else
echo "pure-ftpd is running.Banner in pure-ftpd.conf is not recommended.FTP check result:false.";
fi;
fi;
else
if [ -f /etc/pure-ftpd.conf ]
then
if [ `cat /etc/pure-ftpd.conf|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "FortunesFile"|wc -l` -eq 0 ]
then
echo "pure-ftpd is running.banner in pure-ftpd.conf is not recommended.FTP check result:false.";
else
if [ -s "`cat /etc/pure-ftpd.conf|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "FortunesFile"|awk '{print $2}'`" ];
then
echo "pure-ftpd is running.Banner in pure-ftpd.conf is recommended.FTP check result:true.";
else
echo "pure-ftpd is running.Banner in pure-ftpd.conf is not recommended.FTP check result:false.";
fi;
fi
fi;
fi;
if [ -f /etc/ftpaccess ];
then
if [ `cat /etc/ftpaccess|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "^[[:space:]]*banner"|wc -l` -eq 0 ]
then
echo "wu-ftpd is running.banner in wu-ftpd.conf is not recommended.FTP check result:false.";
else
if [ -s "`cat /etc/ftpaccess|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "^[[:space:]]*banner"|awk '{print $2}'`" ];
then
echo "wu-ftpd is running.Banner in wu-ftpd.conf is recommended.FTP check result:true.";
else
echo "wu-ftpd is running.Banner in wu-ftpd.conf is not recommended.FTP check result:false.";
fi;
fi;
else
if [ -f /etc/ftpd/ftpaccess ]
then
if [ `cat /etc/ftpd/ftpaccess|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "^[[:space:]]*banner"|wc -l` -eq 0 ]
then
echo "wu-ftpd is running.banner in wu-ftpd.conf is not recommended.FTP check result:false.";
else
if [ -s "`cat /etc/ftpd/ftpaccess|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "^[[:space:]]*banner"|awk '{print $2}'`" ];
then
echo "wu-ftpd is running.Banner in wu-ftpd.conf is recommended.FTP check result:true.";
else
echo "wu-ftpd is running.Banner in wu-ftpd.conf is not recommended.FTP check result:false.";
fi;
fi;
fi;
fi;
if [ -f /etc/proftpd.conf ];
then
if [ -s "`cat /etc/proftpd.conf|sed '/^\s*#/d'|sed '/^\s*$/d'|sed '/<Anonymous.*>/,/<\/Anonymous>/d'|grep -i "DisplayConnect"|awk '{print $2}'`" ]
then
echo "proftpd is running.banner in proftpd.conf is recommended.FTP check result:true.";
else
echo "proftpd is running.banner in proftpd.conf is not recommended.FTP check result:false.";
fi;
else
if [ -f /etc/proftpd/proftpd.conf ];
then
if [ -s "`cat /etc/proftpd/proftpd.conf|sed '/^\s*#/d'|sed '/^\s*$/d'|sed '/<Anonymous.*>/,/<\/Anonymous>/d'|grep -i "DisplayConnect"|awk '{print $2}'`" ]
then
echo "proftpd is running.banner in proftpd.conf is recommended.FTP check result:true.";
else
echo "proftpd is running.banner in proftpd.conf is not recommended.FTP check result:false.";
fi;
else
if [ -f /usr/local/proftpd/etc/proftpd.conf ]
then
if [ -s "`cat /usr/local/proftpd/etc/proftpd.conf|sed '/^\s*#/d'|sed '/^\s*$/d'|sed '/<Anonymous.*>/,/<\/Anonymous>/d'|grep -i "DisplayConnect"|awk '{print $2}'`" ]
then
echo "proftpd is running.banner in proftpd.conf is recommended.FTP check result:true.";
else
echo "proftpd is running.banner in proftpd.conf is not recommended.FTP check result:false.";
fi;
fi;
fi;
fi;
unset FTPCONF;
}
if [ $FTPSTATUS -eq 0 ];
then
echo "FTP is not running.FTP check result:true"
else
Check_ftp;
fi;
unset FTPSTATUS;

20. 未设置屏幕锁定
apt install gconf2
# 提示命令不存在,可以用apt安装
- 启用空闲激活
[root@ ~]# gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type bool --set /apps/gnome-screensaver/idle_activation_enabled true
- 启用屏幕锁定
[root@ ~]# gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type bool --set /apps/gnome-screensaver/lock_enabled true
- 设置屏保模式
[root@ ~]# gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type string --set /apps/gnome-screensaver/mode blank-only
- 设置空闲激活时间
[root@ ~]# gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type int --set /apps/gnome-screensaver/idle_delay 15
- 测试脚本
# 这是test.sh文件的内容
echo "idle_activation_enabled="`gconftool-2 -g /apps/gnome-screensaver/idle_activation_enabled`
echo "lock_enabled="`gconftool-2 -g /apps/gnome-screensaver/lock_enabled`
echo "mode="`gconftool-2 -g /apps/gnome-screensaver/mode`
echo "idle_delay="`gconftool-2 -g /apps/gnome-screensaver/idle_delay`

21. 用户FTP访问安全配置不合规
vsftp
- 编辑文件
[root@ ~]# vim /etc/vsftpd.conf
# 文件不存在则[root@ ~]# vim /etc/vsftpd/vsftpd.conf
- 修改内容
# 确保以下行未被注释掉,如果没有该行,请添加:
ls_recurse_enable=YES
local_umask=022
anon_umask=022
wu-ftp
- 编辑文件
[root@ ~]# vim /etc/ftpusers
# 或者 vim /etc/ftpd/ftpusers
- 修改内容
upload /home/ftpd /incoming yes real guest anonymous 0644 dirs
# 确保其上载的文件权限为0644
proftp
- 编辑文件
[root@ ~]# vim /usr/local/etc/proftpd.conf
- 修改内容
# 查看是否存在如下配置
Umask 022
pure-ftp
- 编辑文件
[root@ ~]# vim /etc/pure-ftpd/pure-ftpd.conf
- 修改内容
Umask 177:077
# 此权限限制比较苛刻,如果配置后影响使用请通过系统自定义策略参数修改其值为133:022
重启ftp服务
# 重启服务
[root@ ~]# systemctl restart vsftpd
# 查看状态
# [root@ ~]# systemctl status vsftpd
# 启动服务
# [root@ ~]# systemctl start vsftpd
# 停止服务
# [root@ ~]# systemctl stop vsftpd
测试脚本
# 这是test.sh文件的内容
FTPSTATUS=`ps -ef|grep ftpd|grep -v grep|wc -l`;
Check_ftp ()
{
if [ -f /etc/vsftpd.conf ];
then
FTPCONF="/etc/vsftpd.conf";
else
if [ -f /etc/vsftpd/vsftpd.conf ];
then
FTPCONF="/etc/vsftpd/vsftpd.conf";
fi;
fi;
if [ -f "$FTPCONF" ]
then
cat $FTPCONF|grep -v "^[[:space:]]*#"|grep "ls_recurse_enable";
cat $FTPCONF|grep -v "^[[:space:]]*#"|grep "local_umask";
cat $FTPCONF|grep -v "^[[:space:]]*#"|grep "anon_umask";
fi;
if [ -f /etc/pure-ftpd/pure-ftpd.conf ];
then
echo "pureftp_umask="`cat /etc/pure-ftpd/pure-ftpd.conf|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "^[[:space:]]*Umask"`;
else
if [ -f /etc/pure-ftpd.conf ]
then
echo "pureftp_umask="`cat /etc/pure-ftpd.conf|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "^[[:space:]]*Umask"`;
fi;
fi;
if [ -f /etc/proftpd.conf ];
then
echo "proftp_umask="`cat /etc/proftpd.conf|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "^[[:space:]]*Umask"`;
else
if [ -f /etc/proftpd/proftpd.conf ];
then
echo "proftp_umask="`cat /etc/proftpd/proftpd.conf|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "^[[:space:]]*Umask"`;
else
if [ -f /usr/local/proftpd/etc/proftpd.conf ];
then
echo "proftp_umask="`cat /usr/local/proftpd/etc/proftpd.conf|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "^[[:space:]]*Umask"`;
fi;
fi;
fi;
if [ -f /etc/ftpaccess ];
then
cat /etc/ftpaccess|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "^[[:space:]]*upload";
else
if [ -f /etc/ftpd/ftpaccess ]
then
cat /etc/ftpd/ftpaccess|grep -v "^[[:space:]]*#"|grep -v "^[[:space:]]*$"|grep -i "^[[:space:]]*upload";
fi;
fi;
unset FTPCONF;
}
if [ $FTPSTATUS -eq 0 ];
then echo "FTP is not running.FTP check result:true.";
else
Check_ftp;
fi
unset FTPSTATUS;

22. 限制FTP用户登录后能访问的目录不合规
vsftp
- 编辑文件
[root@ ~]# vim /etc/vsftpd.conf
# 文件不存在则[root@ ~]# vim /etc/vsftpd/vsftpd.conf
- 修改内容
# 存在修改,不存在新增
chroot_list_enable=YES
# 注释掉chroot_local_user或者修改其值等于NO。
chroot_list_file=/etc/vsftpd.chroot_list
- 创建文件
[root@ ~]# touch /etc/vsftpd.chroot_list
- 修改权限
[root@ ~]# chmod 750 /etc/vsftpd.chroot_list
- 编辑文件
[root@ ~]# vim /etc/vsftpd.chroot_list
- 修改内容
# 添加用户,里面的用户登录后,只能活动在其家目录,无法切换目录,每个用户占一行。例如:
test
test1
wu-ftp
- 编辑文件
[root@ ~]# vim /etc/ftpusers
# 或者 vim /etc/ftpd/ftpusers
- 修改内容
# 如果文件中存在类似如下行:
restricted-uid *
# 为*代表所有用户,也可以为具体的用户名
proftp
- 编辑文件
[root@ ~]# vim /usr/local/etc/proftpd.conf
- 修改内容
# 查看文件中是否存在如下行:
DefaultRoot ~
# 将用户限制在自己的目录下
# 或者
DefaultRoot ~ group1,!group2
# 将用户限制在自己的目录下,对group1有效,对group2无效。
pure-ftp
- 编辑文件
[root@ ~]# vim /etc/pure-ftpd/pure-ftpd.conf
- 修改内容
# 在文件中找到如下行,修改ChrootEveryone的值为yes(没有则添加)
ChrootEveryone yes
# 启用chroot,所有用户登录后,只能在自己的家目录里活动。
重启ftp服务
# 重启服务
[root@ ~]# systemctl restart vsftpd
# 查看状态
# [root@ ~]# systemctl status vsftpd
# 启动服务
# [root@ ~]# systemctl start vsftpd
# 停止服务
# [root@ ~]# systemctl stop vsftpd
23. 使用PAM认证模块禁止wheel组之外的用户su为root
- 编辑文件
vim /etc/pam.d/su
- 在文件开头加入以下两行(有则修改)
auth sufficient pam_rootok.so
auth required pam_wheel.so use_uid
# auth与sufficient之间由两个tab建隔开
# sufficient与动态库路径之间由一个tab建隔开
- 检测脚本
cat /etc/pam.d/su|grep -v "^[[:space:]]*#"|grep -v "^$"|grep "^auth"

24. 未配置NTP
- 编辑文件
[root@ ~]# vim /etc/ntp.conf
- 添加内容
# 在server一行添加ntp服务器的IP地址
server 192.168.7.49 prefer
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
- 启动ntpd服务
/etc/init.d/ntpd start
# suse9启动ntp服务为:/etc/init.d/xntpd start
# 提示文件不存在,则使用以下命令
# 启动NTPD服务:
[root@ ~]# systemctl start ntpd
# 停止NTPD服务:
[root@ ~]# systemctl stop ntpd
# 查看NTPD服务:
[root@ ~]# systemctl status ntpd
25. 未更改主机解析地址的顺序
- 编辑文件
[root@ ~]# vim /etc/host.conf
- 编辑内容
order hosts,bind
# 第一项设置首先通过DNS解析IP地址,然后通过hosts文件解析。
multi on
# 第二项设置检测是否"/etc/hosts"文件中的主机是否拥有多个IP地址(比如有多个以太口网卡)。
nospoof on
# 第三项设置说明要注意对本机未经许可的IP欺骗,添加可能会出错。
- 检测脚本
cat /etc/host.conf|grep -v "^[[:space:]]*#"|egrep "order[[:space:]]hosts,bind|multi[[:space:]]on|nospoof[[:space:]]on"

26. 历史命令设置不合规
- 编辑文件
[root@ ~]# vim /etc/profile
- 添加内容
# 在文件中加入如下两行(存在则修改):
HISTFILESIZE=5
HISTSIZE=5
- 使配置生效
[root@ ~]# source /etc/profile
- 检测脚本
cat /etc/profile|grep -v "^[[:space:]]*#"|grep "HISTFILESIZE"
cat /etc/profile|grep -v "^[[:space:]]*#"|grep "HISTSIZE"

26. 未对root为ls、rm设置别名
- 输入命令
[root@ ~]# echo $SHELL
- 添加内容
# 如果输出csh:
# vim ~/.cshrc 在文件末尾增加如下两行
alias ls='ls -aol'
alias rm='rm -i'
# 如果输出bash:
# vim ~/.bashrc在文件末尾增加如下两行
alias ls='ls -aol'
alias rm='rm -i'
27. 未禁止IP源路由
- 检查
cat /proc/sys/net/ipv4/conf/*/accept_source_route
# 输出结果应全为0
- 修复
# 如果此项检查失败,请执行以下命令进行修复:
[root@ ~]# for f in /proc/sys/net/ipv4/conf/*/accept_source_route
> do
> echo 0 > $f
> done
28. 删除任何人都有写权限的目录的写权限
- 检查
[root@ ~]# for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`
> do
> find $PART -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -xdev -exec ls -ld {} \; 2>>/dev/null;
> done
- 去掉步骤1输出文件的其他用户的权限
[root@ ~]# chmod o-w <filename>
# -R : 对目前目录下的所有档案与子目录进行相同的权限变更
#[root@ ~]# chmod -R 775 目录
网友评论