美文网首页
ubuntu18.04 安全配置和测试文档

ubuntu18.04 安全配置和测试文档

作者: 鹊南飞_ | 来源:发表于2019-07-19 15:29 被阅读0次

系统:ubuntu 18.04

时间:2019年07月19日

注意:测试脚本可不执行,仅为测试配置是否成功


1. 口令生存期不合规
  1. 执行备份
[root@ ~]# cp -p /etc/login.defs /etc/login.defs_bak
  1. 编辑文件
[root@ ~]# vim /etc/login.defs
  1. 存在则修改,不存在则添加
PASS_MAX_DAYS 90
PASS_MIN_DAYS 10
PASS_WARN_AGE 7
编辑内容
  1. 测试脚本
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

  1. 修改用户shell域
[root@ ~]# usermod -s /bin/false username        
# 更改相应用户的shell为flase
修改用户shell域
  1. 删除用户
[root@ ~]# userdel username
# username为修改的具体用户名
# 查看所有用户和组 cat /etc/passwd
# 删除失败,可以使用- r -f,如userdel -r -f lp
删除用户
  1. 锁定用户(如果删除用户,不执行该操作)
[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. 文件与目录缺省控制权不合流
  1. 文件备份
[root@ ~]# cp -p /etc/profile /etc/profile_bak
  1. 编辑文件
[root@ ~]# vim /etc/profile
  1. 添加内容,在文件末尾
umask 027
  1. 执行命令让配置生效
[root@ ~]# source  /etc/profile
  1. 测试脚本
[root@ ~]# awk '{print $1":"$2}' /etc/profile|grep -v "^[[:space:]]*#"|grep -i umask|tail -n1
测试结果
4. 未配置用户最小授权
  1. 执行命令
[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
  1. 测试脚本
# 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警告信息
  1. 创建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
  1. 修改sshd_config文件
[root@ ~]# vim /etc/ssh/sshd_config
  1. 修改内容
# 找到Banner no这一行,取消注释,修改为
Banner /etc/ssh_banner
  1. 重启sshd服务
# 重启服务
[root@ ~]# systemctl restart sshd
# 查看状态
# [root@ ~]# systemctl status sshd
# 启动服务
# [root@ ~]# systemctl start sshd
# 停止服务
# [root@ ~]# systemctl stop sshd
  1. 测试脚本
# 这是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. 未设置关键文件的属性
  1. 更改该日志文件属性
[root@ ~]# chattr +a /var/log/messages       
#如果不存在则忽略    

7. 未启用远程日志功能
  1. 编辑文件
[root@ ~]# vim /etc/rsyslog.conf
  1. 增加内容
*.* @<日志服务器ip或者域名>
  1. 重启syslog服务
# 重启服务
[root@ ~]# systemctl restart rsyslog
# 查看状态
# [root@ ~]# systemctl status rsyslog
# 启动服务
# [root@ ~]# systemctl start rsyslog
# 停止服务
# [root@ ~]# systemctl start rsyslog

8. 未配置记录安全事件日志
  1. 编辑文件
[root@ ~]# vim /etc/rsyslog.conf
  1. 加入如下内容
*.err;kern.debug;daemon.notice /var/adm/messages
# 其中/var/adm/messages为日志文件
  1. 文件不存在则创建
[root@ ~]# touch /var/adm/messages 
# 创建失败就先新建adm目录 
# [root@ ~]# mkdir /var/adm
  1. 修改权限为640
[root@ ~]# chmod 640 /var/adm/messages
  1. 重启日志服务
# 重启服务
[root@ ~]# systemctl restart rsyslog
# 查看状态
# [root@ ~]# systemctl status rsyslog
# 启动服务
# [root@ ~]# systemctl start rsyslog
# 停止服务
# [root@ ~]# systemctl start rsyslog
  1. 测试脚本
# 这是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. 未配置账户登录日志
  1. 编辑文件
[root@ ~]# vim /etc/rsyslog.conf
  1. 加入如下内容
authpriv.*      /var/log/authlog
# 其中/var/log/authlog为日志文件
  1. 文件不存在则创建
[root@ ~]# touch /var/log/authlog
  1. 修改权限为640
[root@ ~]# chmod 640 /var/log/authlog
  1. 重启日志服务
# 重启服务
[root@ ~]# systemctl restart rsyslog
# 查看状态
# [root@ ~]# systemctl status rsyslog
# 启动服务
# [root@ ~]# systemctl start rsyslog
# 停止服务
# [root@ ~]# systemctl start rsyslog

9. 记录cron行为日志
  1. 编辑文件
[root@ ~]# vim /etc/rsyslog.conf
  1. 加入如下内容
cron.*     /var/log/cron
# 其中/var/log/cron为日志文件
  1. 文件不存在则创建
[root@ ~]# touch /var/log/cron
  1. 修改权限为640
[root@ ~]# chmod 640 /var/log/cron
  1. 重启日志服务
# 重启服务
[root@ ~]# systemctl restart rsyslog
# 查看状态
# [root@ ~]# systemctl status rsyslog
# 启动服务
# [root@ ~]# systemctl start rsyslog
# 停止服务
# [root@ ~]# systemctl start rsyslog

10. 日志文件安全不合规

对权限>640的日志文件赋予640权限

  1. 检测文件
[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
检测文件
  1. 修改权限
chmod 640 <file>       
# file为检测步骤中输出的权限>640的日志文件
修改权限
11. 未限制root用户SSH远程登录
  1. 备份文件
[root@ ~]# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
  1. 新建一个普通用户并设置高强度密码(防止设备上只存在root用户可用时,无法远程访问)
[root@ ~]# useradd -g root oem
[root@ ~]# passwd oem
# oem 为新增的用户名,添加到root组,可以随便更改

  1. 编辑文件
[root@ ~]# vim /etc/sudoers
  1. 添加内容
# 在root    ALL=(ALL:ALL)       ALL 下面新建一行
# oem 为上面新增的用户名
oem    ALL=(ALL:ALL)       ALL
# 在%admin ALL=(ALL)  ALL下面新建一行
%oem    ALL=(ALL) ALL
# 退出编辑案失败,可以使用wq!进行保存
添加内容
  1. 把用户添加到root组
[root@ ~]# usermod -G root oem
# 把 admin加入sudo组 gpasswd –a admin sudo 
# 把 admin退出sudo组 gpasswd –d admin sudo 
  1. 编辑文件
[root@ ~]# vim /etc/ssh/sshd_config
  1. 修改内容
# PermitRootLogin值为no并去掉注释。
PermitRootLogin no
# 修改Protocol的值为2并去掉注释。
Protocol 2
# 只允许新建用户登录ssh
# AllowUsers oem
  1. 重启SSHD服务
# 重启服务
[root@ ~]# systemctl restart sshd
# 查看状态
# [root@ ~]# systemctl status sshd
# 启动服务
# [root@ ~]# systemctl start sshd
# 停止服务
# [root@ ~]# systemctl stop sshd
  1. 测试脚本
# 这是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
安装ftp

vsftp

  1. 确定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文件位置
  1. 修改ftpusers文件,增加不能通过FTP登录的用户(每个用户各占一行)
root
daemon
bin
sys
adm
lp
uucp
nuucp
listen
nobody
noaccess
nobody4
  1. 配置vsftpd.conf文件,设定只允许特定用户通过FTP登录
[root@ ~]# vim /etc/vsftpd.conf
# 文件不存在则[root@ ~]# vim /etc/vsftpd/vsftpd.conf
  1. 修改内容
userlist_enable=YES
# 此选项被激活后,VSFTPD将读取userlist_file参数所指定的文件中的用户列表。
userlist_deny=NO
# 决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器,
# YES默认值,禁止文件中的用户登录,同时也不向这些用户发出输入口令的提示,
# NO只允许在文件中的用户登录FTP服务器.
userlist_file=/etc/vsftpd.user_list
  1. 编辑userlist_file对应的文件去掉root,添加新建用户oem
[root@ ~]# vim /etc/vsftpd.user_list
# 不存在则创建

wu-ftp

  1. 编辑文件
[root@ ~]# vim /etc/ftpusers
# 或者 vim /etc/ftpd/ftpusers
  1. 修改内容
# 在文件中用户将禁止登录FTP,另取一行录入root,例如:
root
venustech

proftp

  1. 编辑文件
[root@ ~]# vim proftpd.conf
# 不存在则vim /usr/local/etc/proftpd.conf
  1. 修改内容
# 在文件中查看是否存在如下内容,存在则将其注释掉:
RootLogin   on

pure-ftp

  1. 编辑文件
[root@ ~]# vim /etc/pure-ftpd/pure-ftpd.conf
  1. 修改内容
# 是否存在如下内容,没有则新增,禁止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

  1. 编辑文件
[root@ ~]# vim /etc/vsftpd.conf
# 文件不存在则[root@ ~]# vim /etc/vsftpd/vsftpd.conf
  1. 修改内容
anonymous_enable=NO
# 如果存在anonymous_enable则修改,如果不存在则手动增加

wu-ftp

  1. 编辑文件
[root@ ~]# vim /etc/ftpd/ftpaccess
# 或者 vim /etc/ftpaccess
  1. 修改内容
# 如果文件中存在类似如下行,则注释掉,用户类型不能为guest或者anonymous:
class [类名] [guest/anonymous] [IP地址]

proftp

  1. 编辑文件
[root@ ~]# vim proftpd.conf
# 不存在则vim /usr/local/etc/proftpd.conf
  1. 修改内容
# 查看文件中找到如下结构:
# <Anonymous ~ftp>
# Group ftp
# UserAlias anonymous ftp
# </Anonymous>
# 在该结构中添加如下行:
AnonRequirePassword on
#启用认证功能,注意AnonRequirePassword后面跟的是多个tab符.
#或者将<Anonymous ~ftp>....</Anonymous>结构注释掉.

pure-ftp

  1. 编辑文件
[root@ ~]# vim /etc/pure-ftpd/pure-ftpd.conf
  1. 修改内容
# 修改NoAnonymous的值为yes(没有则添加)
NoAnonymous yes

重启ftp服务

# 重启服务
[root@ ~]# systemctl restart vsftpd
# 查看状态
# [root@ ~]# systemctl status vsftpd
# 启动服务
# [root@ ~]# systemctl start vsftpd
# 停止服务
# [root@ ~]# systemctl stop vsftpd

14. 登录超时时间未限制
  1. 备份文件
[root@ ~]# cp -p /etc/profile /etc/profile_bak
  1. 修改文件
[root@ ~]# vim /etc/profile
  1. 修改内容(没有就添加,有就修改)
TMOUT=300  
export TMOUT

4.测试脚本

cat /etc/profile |grep -i TMOUT
测试结果
15. 未禁止IP路由转发
  1. 备份文件
[root@ ~]# cp -p /etc/sysctl.conf /etc/sysctl.conf_bak
  1. 修改文件
[root@ ~]# vim /etc/sysctl.conf
  1. 修改内容
net.ipv4.ip_forward=0
  1. 使配置文件生效
[root@ ~]# sysctl -p
  1. 测试脚本
sysctl -n net.ipv4.ip_forward
# 输出结果为0,表示合规
测试结果
16. 系统core dump状态不合规
  1. 编辑文件
[root@ ~]# vim /etc/security/limits.conf
  1. 添加内容(存在则修改,不存在则新增)
*        soft    core        0
*        hard    core        0
  1. 编辑文件
[root@ ~]# vim /etc/profile
  1. 修改内容
# 注释掉如下行:
ulimit -S -c 0 > /dev/null 2>&1
  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地址不合规
  1. 备份文件
[root@ ~]# cp -p /etc/hosts.allow /etc/hosts.allow_bak
[root@ ~]# cp -p /etc/hosts.deny /etc/hosts.deny_bak
  1. 编辑文件
[root@ ~]# vim /etc/hosts.allow
  1. 修改内容
# 增加多行 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
  1. 编辑文件
[root@ ~]# vim /etc/hosts.deny
  1. 添加一行
all:all
# 拒绝一切远程访问配合文件hosts.allow使用。根据实际网段和需求进行实施。

18. 未修改SSH的Banner信息
  1. 新建文件
[root@ ~]# touch /etc/motd
  1. 添加内容
[root@ ~]# echo " Authorized users only. All activity may be monitored and reported " > /etc/motd
# 可根据实际需要修改该文件的内容。
  1. 测试脚本
# 这是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重定向
  1. 备份文件
[root@ ~]# cp -p /etc/sysctl.conf /etc/sysctl.conf_bak
  1. 编辑文件
[root@ ~]# vim /etc/sysctl.conf
  1. 修改内容
net.ipv4.conf.all.accept_redirects = 0
  1. 使配置文件生效
[root@ ~]# sysctl -p
  1. 测试脚本
[root@ ~]# sysctl -n net.ipv4.conf.all.accept_redirects
测试结果
19. 未修改FTP的Banner信息

vsftp

  1. 编辑文件
[root@ ~]# vim /etc/vsftpd.conf
# 文件不存在则[root@ ~]# vim /etc/vsftpd/vsftpd.conf
  1. 修改内容
# 修改ftpd_banner的值为
ftpd_banner=” Authorized users only. All activity may be monitored and reported.”
# 可根据实际需要修改该文件内容

wu-ftp

  1. 编辑文件
[root@ ~]# vim /etc/ftpusers
# 或者 vim /etc/ftpd/ftpusers
  1. 修改内容
# 确保该行未被注释:
banner          /etc/ftpd/banner.msg
  1. 编辑文件(没有就新建)
[root@ ~]# vim /etc/ftpd/banner.msg
  1. 将自定义BANNER写入其中
" Authorized users only. All activity may be monitored and reported "

proftp

  1. 编辑文件
[root@ ~]# vim /usr/local/etc/proftpd.conf
  1. 修改内容
# 查看Banner信息文件是否存在:
DisplayConnect         <file>
  1. Banner文件不存在则新建
[root@ ~]# touch <file>
  1. 编辑文件
[root@ ~]# vim <file>
  1. 将自定义BANNER写入其中
" Authorized users only. All activity may be monitored and reported "

pure-ftp

  1. 编辑文件
[root@ ~]# vim /etc/pure-ftpd/pure-ftpd.conf
  1. 修改内容
# 确保该行未被注释。
FortunesFile              <file>
  1. 编辑文件(没有就新建该文件夹或该文件)
[root@ ~]# vim /usr/share/fortune/zipp
  1. 将自定义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安装
  1. 启用空闲激活
[root@ ~]# gconftool-2 --direct  --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory  --type bool  --set /apps/gnome-screensaver/idle_activation_enabled true
  1. 启用屏幕锁定
[root@ ~]# gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory  --type bool  --set /apps/gnome-screensaver/lock_enabled true
  1. 设置屏保模式
[root@ ~]# gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory    --type string   --set /apps/gnome-screensaver/mode blank-only
  1. 设置空闲激活时间
[root@ ~]# gconftool-2 --direct  --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory   --type int   --set /apps/gnome-screensaver/idle_delay 15
  1. 测试脚本
# 这是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

  1. 编辑文件
[root@ ~]# vim /etc/vsftpd.conf
# 文件不存在则[root@ ~]# vim /etc/vsftpd/vsftpd.conf
  1. 修改内容
# 确保以下行未被注释掉,如果没有该行,请添加:
ls_recurse_enable=YES
local_umask=022        
anon_umask=022

wu-ftp

  1. 编辑文件
[root@ ~]# vim /etc/ftpusers
# 或者 vim /etc/ftpd/ftpusers
  1. 修改内容
upload /home/ftpd /incoming yes real guest anonymous 0644 dirs
# 确保其上载的文件权限为0644

proftp

  1. 编辑文件
[root@ ~]# vim /usr/local/etc/proftpd.conf
  1. 修改内容
# 查看是否存在如下配置
Umask   022

pure-ftp

  1. 编辑文件
[root@ ~]# vim /etc/pure-ftpd/pure-ftpd.conf
  1. 修改内容
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

  1. 编辑文件
[root@ ~]# vim /etc/vsftpd.conf
# 文件不存在则[root@ ~]# vim /etc/vsftpd/vsftpd.conf
  1. 修改内容
# 存在修改,不存在新增
chroot_list_enable=YES
# 注释掉chroot_local_user或者修改其值等于NO。
chroot_list_file=/etc/vsftpd.chroot_list
  1. 创建文件
[root@ ~]# touch /etc/vsftpd.chroot_list
  1. 修改权限
[root@ ~]# chmod 750 /etc/vsftpd.chroot_list
  1. 编辑文件
[root@ ~]# vim /etc/vsftpd.chroot_list
  1. 修改内容
# 添加用户,里面的用户登录后,只能活动在其家目录,无法切换目录,每个用户占一行。例如:
test
test1

wu-ftp

  1. 编辑文件
[root@ ~]# vim /etc/ftpusers
# 或者 vim /etc/ftpd/ftpusers
  1. 修改内容
# 如果文件中存在类似如下行:
restricted-uid *        
# 为*代表所有用户,也可以为具体的用户名

proftp

  1. 编辑文件
[root@ ~]# vim /usr/local/etc/proftpd.conf
  1. 修改内容
# 查看文件中是否存在如下行:
DefaultRoot ~   
# 将用户限制在自己的目录下
# 或者
DefaultRoot ~ group1,!group2
# 将用户限制在自己的目录下,对group1有效,对group2无效。

pure-ftp

  1. 编辑文件
[root@ ~]# vim /etc/pure-ftpd/pure-ftpd.conf
  1. 修改内容
# 在文件中找到如下行,修改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
  1. 编辑文件
vim /etc/pam.d/su
  1. 在文件开头加入以下两行(有则修改)
auth            sufficient      pam_rootok.so
auth            required        pam_wheel.so use_uid
# auth与sufficient之间由两个tab建隔开
# sufficient与动态库路径之间由一个tab建隔开
  1. 检测脚本
cat /etc/pam.d/su|grep -v "^[[:space:]]*#"|grep -v "^$"|grep "^auth"
检测结果
24. 未配置NTP
  1. 编辑文件
[root@ ~]# vim /etc/ntp.conf
  1. 添加内容
# 在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
  1. 启动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. 未更改主机解析地址的顺序
  1. 编辑文件
[root@ ~]# vim /etc/host.conf
  1. 编辑内容
order hosts,bind
# 第一项设置首先通过DNS解析IP地址,然后通过hosts文件解析。
multi on
# 第二项设置检测是否"/etc/hosts"文件中的主机是否拥有多个IP地址(比如有多个以太口网卡)。
nospoof on
# 第三项设置说明要注意对本机未经许可的IP欺骗,添加可能会出错。
  1. 检测脚本
cat /etc/host.conf|grep -v "^[[:space:]]*#"|egrep "order[[:space:]]hosts,bind|multi[[:space:]]on|nospoof[[:space:]]on"
检测结果
26. 历史命令设置不合规
  1. 编辑文件
[root@ ~]# vim /etc/profile
  1. 添加内容
# 在文件中加入如下两行(存在则修改):
HISTFILESIZE=5
HISTSIZE=5
  1. 使配置生效
[root@ ~]# source /etc/profile
  1. 检测脚本
cat /etc/profile|grep -v "^[[:space:]]*#"|grep "HISTFILESIZE"
cat /etc/profile|grep -v "^[[:space:]]*#"|grep "HISTSIZE"
检测结果
26. 未对root为ls、rm设置别名
  1. 输入命令
[root@ ~]# echo $SHELL
  1. 添加内容
# 如果输出csh:
# vim ~/.cshrc 在文件末尾增加如下两行
alias ls='ls -aol'
alias rm='rm -i'

# 如果输出bash:
# vim ~/.bashrc在文件末尾增加如下两行
alias ls='ls -aol'
alias rm='rm -i'

27. 未禁止IP源路由
  1. 检查
cat /proc/sys/net/ipv4/conf/*/accept_source_route
# 输出结果应全为0
  1. 修复
# 如果此项检查失败,请执行以下命令进行修复:
[root@ ~]# for f in /proc/sys/net/ipv4/conf/*/accept_source_route
> do
> echo 0 > $f
> done

28. 删除任何人都有写权限的目录的写权限
  1. 检查
[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. 去掉步骤1输出文件的其他用户的权限
[root@ ~]# chmod o-w <filename>
# -R : 对目前目录下的所有档案与子目录进行相同的权限变更
#[root@ ~]#  chmod -R 775 目录

相关文章

  • ubuntu18.04 安全配置和测试文档

    系统:ubuntu 18.04 时间:2019年07月19日 注意:测试脚本可不执行,仅为测试配置是否成功 1. ...

  • Web站点的功能测试方法

    一、站点测试 站点测试囊括许多领域,包括配置测试、兼容性测试、易用性测试、文档测试、安全性测试,并且假如站点是面向...

  • Ubuntu18.04服务器配置POSTFIX+SSL(TLS)

    闲谈:关于Ubuntu18.04服务器配置POSTFIX+SSL(TLS)安全验证+FOXmail这个套件的配置网...

  • 防火墙&WAF功能测试

    工具:kali 目标:测试防火墙和waf的安全功能并输出测试文档 后期完成

  • ELK + Filebeat 5.4.1配置

    本文档简单介绍如何配置ELK三大组件和Filebeat的流程 中文文档英文各版本的文档 版本: 当前开发(测试)和...

  • Ubuntu18.04配置静态ip遇到的报错

    Ubuntu18.04配置静态ip遇到的报错 说明: 因为很多测试环境在这个Ubuntu系统上装着,却由于虚拟服务...

  • 高效配置项测试,对人员素质的要求

    配置项测试与单元和集成测试不同,它属于黑盒测试,其测试依据为需求规格说明文档。通常,在比较正规的软件组织中,单元和...

  • 2019-04-26

    测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测...

  • /etc/apt/sources.list

    ubuntu18.04配置为阿里源

  • 前话:简单搭建一个环境

    参考文档:mybatis官方文档 1.添加依赖 2.添加mybatis配置文件 3.添加jdbc配置 4.测试de...

网友评论

      本文标题:ubuntu18.04 安全配置和测试文档

      本文链接:https://www.haomeiwen.com/subject/kpnjlctx.html