系統: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
修改用戶shell域
- 刪除用戶
[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
安裝ftp
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文件位置
- 修改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 目錄