怎么找一家公司的网站,焦作网站网站建设,开一个网站需要什么手续,网站开发课设报告书此脚本是一个用于检查Linux系统安全配置的Bash脚本。它通过多项安全标准对系统进行评估#xff0c;主要检查以下内容#xff1a; IP地址获取#xff1a;脚本首先获取主机的IP地址#xff0c;确保其以10.115开头。 密码策略检查#xff1a; 检查最小密码长度#xff08;P…此脚本是一个用于检查Linux系统安全配置的Bash脚本。它通过多项安全标准对系统进行评估主要检查以下内容 IP地址获取脚本首先获取主机的IP地址确保其以10.115开头。 密码策略检查 检查最小密码长度PASS_MIN_LEN确保至少为12。 检查密码最大生存周期PASS_MAX_DAYS确保为90天。 检查密码复杂度策略确保满足特定要求。 用户权限与账户管理 检查是否限制普通用户使用su命令切换到root用户。 确认是否存在普通用户账户。 检查是否删除了不必要的工作账户如listen, gdm等。 系统安全配置 检查文件和目录的默认权限umask确保为027。 检查命令行界面的超时退出设置TMOUT确保为300秒。 确保启用了syslog日志审计。 确认日志文件的权限设置。 FTP与SSH配置 检查FTP匿名用户是否禁用VSFTP是否禁用匿名登录。 确保root用户的FTP登录被禁用。 检查SSH服务的状态确保其启用。 危险文件检查查找潜在危险文件如/etc/hosts.equiv等并确认其不存在。 Telnet检查确认Telnet服务未启用检查相关配置文件。 服务与端口管理检查不必要的服务和端口是否关闭。 DNS配置检查确保DNS配置符合指定的标准。
最后脚本会输出不合格项和检查失败项的详细信息并提供检查的汇总包括总检查项数、合格数、不合格数和检查失败数。 该脚本适用于系统管理员定期审计和加强Linux系统的安全性。
脚本代码
#!/bin/bash# 初始化计数器
total_checks0
pass_checks0
fail_checks0
not_found_checks0
declare -a results# 获取主机的IP地址以10.123开头
ip_address$(ip addr | awk /inet / /10\.123\./ {gsub(/\/[0-9]/, , $2); print $2})
echo 主机IP$ip_address# 检查口令最小长度
total_checks$((total_checks 1))
PASS_MIN_LEN$(grep ^PASS_MIN_LEN /etc/login.defs | awk {print $2})
if [[ -n $PASS_MIN_LEN ]]; thenif [[ $PASS_MIN_LEN -ge 12 ]]; thenpass_checks$((pass_checks 1))elseresults(PASS_MIN_LEN ($PASS_MIN_LEN) 不符合标准)fail_checks$((fail_checks 1))fi
elseresults(PASS_MIN_LEN 未找到)not_found_checks$((not_found_checks 1))
fi# 检查口令生存周期
total_checks$((total_checks 1))
PASS_MAX_DAYS$(grep ^PASS_MAX_DAYS /etc/login.defs | awk {print $2})
if [[ -n $PASS_MAX_DAYS ]]; thenif [[ $PASS_MAX_DAYS -eq 90 ]]; thenpass_checks$((pass_checks 1))elseresults(PASS_MAX_DAYS ($PASS_MAX_DAYS) 不符合标准)fail_checks$((fail_checks 1))fi
elseresults(PASS_MAX_DAYS 未找到)not_found_checks$((not_found_checks 1))
fi# 检查密码复杂度策略
total_checks$((total_checks 1))
PAM_CONFIG/etc/pam.d/system-auth# 检查未注释的密码复杂度策略
if grep -q ^[^#]*password\s\requisite\s\pam_pwquality.so $PAM_CONFIG; then# 直接提取行并检查参数line$(grep ^[^#]*password\s\requisite\s\pam_pwquality.so $PAM_CONFIG)# 提取每个参数ucredit$(echo $line | grep -o ucredit[-0-9]* | cut -d -f2)lcredit$(echo $line | grep -o lcredit[-0-9]* | cut -d -f2)dcredit$(echo $line | grep -o dcredit[-0-9]* | cut -d -f2)ocredit$(echo $line | grep -o ocredit[-0-9]* | cut -d -f2)# 检查参数值是否均为 -1if [[ $ucredit -1 $lcredit -1 $dcredit -1 $ocredit -1 ]]; thenpass_checks$((pass_checks 1))elseresults(密码复杂度配置不符合标准: ucredit$ucredit, lcredit$lcredit, dcredit$dcredit, ocredit$ocredit)fail_checks$((fail_checks 1))fi
elseresults(未配置有效的密码复杂度策略)not_found_checks$((not_found_checks 1))
fi
# 检查是否限制用户su到root
total_checks$((total_checks 1))
# 检查 pam_rootok.so
if grep -q ^[^#]*auth\s\sufficient\s\pam_rootok.so /etc/pam.d/su; thenpass_checks$((pass_checks 1))
elseecho 未找到: auth sufficient pam_rootok.so
fi# 检查 pam_wheel.so
if grep -q ^[^#]*auth\s\required\s\pam_wheel.so\s\groupwheel /etc/pam.d/su; thenpass_checks$((pass_checks 1))
elseecho 未找到: auth required pam_wheel.so groupwheel
fi# 根据找到的情况更新失败检查数
if [ $pass_checks -lt 2 ]; thenresults(用户su限制不符合标准)fail_checks$((fail_checks 1))
fi# 检查是否按用户分配账号
total_checks$((total_checks 1))
if grep -qE ^[^:]:.* /etc/passwd; thenpass_checks$((pass_checks 1))
elseresults(不存在普通用户账号)fail_checks$((fail_checks 1))
fi# 检查是否删除工作账号
for user in listen gdm webservd nobody nobody4 noaccess; dototal_checks$((total_checks 1))if grep -q ^$user: /etc/passwd; thenresults(账号 $user 存在)fail_checks$((fail_checks 1))elsepass_checks$((pass_checks 1))fi
done# 检查是否设置文件与目录缺省权限
total_checks$((total_checks 1))
UMASK$(grep ^umask /etc/profile)
if [[ -n $UMASK ]]; thenif [[ $UMASK *027* ]]; thenpass_checks$((pass_checks 1))elseresults(umask 设置不符合标准)fail_checks$((fail_checks 1))fi
elseresults(umask 未找到)not_found_checks$((not_found_checks 1))
fi# 检查命令行界面超时退出
total_checks$((total_checks 1))
TMOUT$(grep ^export TMOUT /etc/profile)
if [[ -n $TMOUT ]]; then# 提取 TMOUT 的值TMOUT_VALUE$(echo $TMOUT | cut -d -f2 | tr -d )# 检查是否设置为 300if [[ $TMOUT_VALUE 300 ]]; thenpass_checks$((pass_checks 1))elseresults(TMOUT 设置不符合标准当前值为: $TMOUT_VALUE)fail_checks$((fail_checks 1))fi
elseresults(TMOUT 未找到)not_found_checks$((not_found_checks 1))
fi# 检查是否启用syslog日志审计
total_checks$((total_checks 1))
if systemctl is-active --quiet rsyslog; thenpass_checks$((pass_checks 1))
elseresults(syslog 日志审计未启用)fail_checks$((fail_checks 1))
fi# 检查日志文件权限
declare -A expected_permissions([/var/log/cron]775[/var/log/secure]775[/var/log/messages]755[/var/log/maillog]775[/var/log/boot.log]775[/var/log/mail]775[/var/log/spooler]775
)# 检查每个日志文件的权限
for file in ${!expected_permissions[]}; dototal_checks$((total_checks 1))if [[ -f $file ]]; thenperms$(ls -ld $file | awk {print $1})# 检查其他用户权限if [[ ${perms:8:1} w ]]; thenresults($file 权限不符合标准)fail_checks$((fail_checks 1))elsepass_checks$((pass_checks 1))fielse# 文件不存在时将其视为符合标准pass_checks$((pass_checks 1)) # 符合标准fi
done# 检查FTP及SSH相关配置
total_checks$((total_checks 1))
if ! grep -q ftp /etc/passwd; thenpass_checks$((pass_checks 1))
elseresults(FTP匿名用户未禁用)fail_checks$((fail_checks 1))
fi# 检查VSFTP配置
total_checks$((total_checks 1))
if [ ! -f /etc/vsftpd.conf ] || grep -q anonymous_enableNO /etc/vsftpd.conf; thenpass_checks$((pass_checks 1))
elseresults(VSFTP未禁用匿名登录)fail_checks$((fail_checks 1))
fi# 检查root用户FTP登录
total_checks$((total_checks 1))
if [ ! -f /etc/ftpusers ] || grep -q root /etc/ftpusers; thenpass_checks$((pass_checks 1))
elseresults(root 用户FTP登录未禁用)fail_checks$((fail_checks 1))
fi# 检查SSH服务状态
total_checks$((total_checks 1))
if systemctl is-active --quiet sshd; thenpass_checks$((pass_checks 1))
elseresults(SSH服务未启用)fail_checks$((fail_checks 1))
fi# 检查是否删除潜在危险文件
for file in /etc/hosts.equiv /etc/.rhosts /etc/.netrc; dototal_checks$((total_checks 1))if [[ -e $file ]]; thenresults($file 存在)fail_checks$((fail_checks 1))elsepass_checks$((pass_checks 1))fi
done# 检查是否安装了 telnet 和 telnet-server
total_checks$((total_checks 1))
if rpm -qa | grep -qE telnet|telnet-server; then# 如果安装了检查 /etc/xinetd.d/telnet 配置total_checks$((total_checks 1))if [[ -f /etc/xinetd.d/telnet ]]; thendisable_line$(grep -E ^disable /etc/xinetd.d/telnet)if [[ $disable_line disable no ]]; thenresults(Telnet服务仍在启用)fail_checks$((fail_checks 1))elsepass_checks$((pass_checks 1))fielsepass_checks$((pass_checks 1))fi
elsepass_checks$((pass_checks 1))
fi# 检查是否关闭不必要的服务和端口
total_checks$((total_checks 1))
if ps -ef | grep -q [f]tp; thenresults(FTP服务仍在运行)fail_checks$((fail_checks 1))
elsepass_checks$((pass_checks 1))
fi# 检查DNS配置
total_checks$((total_checks 1))
DNS_IPS(114.114.114.114 233.5.5.5) # 指定的DNS IP地址
DNS_CONFIG$(grep -E ^nameserver /etc/resolv.conf | awk {print $2})if [[ -n $DNS_CONFIG ]]; thenfound_ipfalsefor ip in ${DNS_IPS[]}; doif [[ $DNS_CONFIG *$ip* ]]; thenfound_iptruebreakfidoneif [[ $found_ip false ]]; thenresults(DNS配置不符合标准: 未找到指定的DNS IP)fail_checks$((fail_checks 1))elsepass_checks$((pass_checks 1)) # 如果找到了至少一个IP增加合格计数fi
elseresults(DNS配置未找到)not_found_checks$((not_found_checks 1))
fi# 输出不合格项和检查失败项
if [ ${#results[]} -ne 0 ]; thenecho 不合格项和检查失败项:for result in ${results[]}; doecho $resultdone
elseecho 所有检查项均符合标准。
fi# 输出汇总
echo
echo 检查汇总:
echo 总检查项数: $total_checks
echo 合格数: $pass_checks
echo 不合格数: $fail_checks
echo 检查失败数: $not_found_checks检查结果示例