Linux安全基线检查脚本

基线检查内容:

一:共享账号检查

配置名称:用户账号分配检查,避免共享账号存在配置要求:1、系统需按照实际用户分配账号; 2、避免不同用户间共享账号,避免用户账号和服务器间通信使用的账号共享。操作指南:参考配置操作:cat /etc/passwd查看当前所有用户的情况;检查方法:命令cat /etc/passwd查看当前所有用户的信息,与管理员确认是否有共享账号情况存在。配置方法:如需建立用户,参考如下: #useradd username #创建账号 #passwd username #设置密码 使用该命令为不同的用户分配不同的账号,设置不同的口令及权限信息等。适用版本:Linux Redhat AS 3、Linux Redhat AS 4

二:多余账户锁定策略

配置名称:多余账户锁定策略配置要求:应锁定与设备运行、维护等工作无关的账号。操作指南:参考配置操作: 查看锁定用户: # cat /etc/password,查看哪些账户的shell域中为nologin;检查方法:人工检查:  # cat /etc/password后查看多余账户的shell域为nologin为符合; BVS基线检查:  多余账户处于锁定状态为符合。配置方法:锁定用户: 修改/etc/password文件,将需要锁定的用户的shell域设为nologin; 或通过#passwd –l username锁定账户; 只有具备超级用户权限的使用者方可使用#passwd –l username锁定用户,用#passwd –d username解锁后原有密码失效,登录需输入新密码。 补充操作说明: 一般情况下,需要锁定的用户:lp,nuucp,hpdb,www,demon适用版本:Linux Redhat AS 3、Linux Redhat AS 4

三:root账户远程登录限制

配置名称:root账户远程登录账户限制配置要求:1、限制具备超级管理员权限的用户远程登录。 2、远程执行管理员权限操作,应先以普通权限用户远程登录后,再切换到超级管理员权限账号后执行相应操作。操作指南:使用root账户远程尝试登陆检查方法:1、root远程登录不成功,提示“Not on system console”; 2、普通用户可以登录成功,而且可以切换到root用户;配置方法:修改/etc/ssh/sshd_config文件,将PermitRootLogin yes改为PermitRootLogin no,重启sshd服务。适用版本:Linux Redhat AS 3、Linux Redhat AS 4

四:口令复杂度策略

配置名称:操作系统口令复杂度策略配置要求:口令长度至少12位,并包括数字、小写字母、大写字母和特殊符号。操作指南:1、参考配置操作 # cat /etc/pam.d/system-auth,找到password模块接口的配置部分,找到类似如下的配置行: password requisite /lib/security/$ISA/pam_cracklib.so minlen =6 2、补充操作说明 参数说明如下: 1、retry=N,确定用户创建密码时允许重试的次数; 2、minlen=N,确定密码最小长度要求,事实上,在默认配置下,此参数代表密码最小长度为N-1; 3、dcredit=N,当N小于0时,代表新密码中数字字符数量不得少于(-N)个。例如,dcredit=-2代表密码中要至少包含两个数字字符; 4、ucredit=N,当N小于0时,代表则新密码中大写字符数量不得少于(-N)个; 5、lcredit=N,当N小于0时,代表则新密码中小写字符数量不得少于(-N)个; 6、ocredit=N,当N小于0时,代表则新密码中特殊字符数量不得少于(-N)个;检查方法:# cat /etc/pam.d/system-auth,参考操作指南检查对应参数  口令的最小长度至少12位  口令最少应包含的字符数量  口令中最少应包含的字母字符数量  口令中最少应包含的非字母数字字符数量 通过以上4子项的输出综合判断该项是否满足。配置方法:# vi /etc/pam.d/system-auth,找到password模块接口的配置部分,按照配置要求内容修改对应属性。适用版本:Linux Redhat AS 4

五: 口令最长生存期策略

配置名称:口令最长生存期策略配置要求:要求操作系统的账户口令的最长生存期不长于90天操作指南:# cat /etc/login.defs文件中指定配置项,其中: PASS_MAX_DAYS配置项决定密码最长使用期限; PASS_MIN_DAYS配置项决定密码最短使用期限; PASS_WARN_AGE配置项决定密码到期提醒时间。检查方法:PASS_MAX_DAYS值小于等于90为符合; “对于采用静态口令认证技术的设备,账户口令的生存期不长于90天”项的当前值:表示当前的口令生存期长度。配置方法:vi /etc/login.defs文件,修改PASS_MAX_DAYS值为小于等于9适用版本:Linux Redhat AS 3、Linux Redhat AS 4

六:系统关键目录权限控制

配置名称:关键目录权限控制配置要求:根据安全需要,配置某些关键目录其所需的最小权限; 重点要求password配置文件、shadow文件、group文件权限。 当前主流版本的linux系统在默认情况下即对重要文件做了必要的权限设置,在日常管理和操作过程中应避免修改此类文件权限,除此以外, 应定期对权限进行检查及复核,确保权限设置正确。操作指南:查看关键目录的用户对应权限参考命令 ls -l /etc/passwd ls -l /etc/shadow ls -l /etc/group检查方法:与管理员确认已有权限为最小权限。配置方法:参考配置操作: 通过chmod命令对目录的权限进行实际设置。 补充操作说明: /etc/passwd 所有用户都可读,root用户可写 –rw-r—r— 配置命令:chmod 644 /etc/passwd /etc/shadow 只有root可读 –r-------- 配置命令:chmod 600 /etc/shadow; /etc/group 必须所有用户都可读,root用户可写 –rw-r—r— 配置命令:chmod 644 /etc/group; 如果是有写权限,就需移去组及其它用户对/etc的写权限(特殊情况除外)执行命令#chmod -R go-w,o-r /etc适用版本:Linux Redhat AS 3、Linux Redhat AS 4

七:用户缺省权限控制

配置名称:用户缺省权限控制配置要求:控制用户缺省访问权限,当在创建新文件或目录时应屏蔽掉新文件或目录不应有的访问允许权限,防止同属于该组的其它用户及别的组的用户修改该用户的文件或更高限制。操作指南:1、# cat /etc/bashrc 查看全局默认设置umask值 2、查看具体用户home目录下bash_profile,具体用户的umask检查方法:查看全局默认设置umask值为027或更小权限为符合(如有特许权限需求,可根据实际情况判断); 查看具体用户的umask,本着最小权限的原则。配置方法:参考配置操作: 单独针对用户设置 可修改用户home目录下的.bash_profile脚本文件,例如,可增加一条语句:umask 027;对于权限要求较严格的场合,建议设置为077。 全局默认设置: 默认通过全局脚本/etc/bashrc设置所有用户的默认umask值,修改脚本即可实现对用户默认umask值的全局性修改, 通常建议将umask设置为027以上,对于权限要求较严格的场合,建议设置为077。适用版本:Linux Redhat AS 3、Linux Redhat AS 4

八:安全日志完备性要求

配置名称:安全日志完备性要求配置要求:系统应配置完备日志记录,记录对与系统相关的安全事件。操作指南:1、# cat /etc/syslog.conf查看是否有对应配置 2、# cat /var/log/secure查看是否有对应配置检查方法:1、cat /etc/syslog.conf确认有对应配置; 2、查看/var/log/secure,应记录有需要的设备相关的安全事件。配置方法:修改配置文件vi /etc/syslog.conf。 配置如下类似语句: authpriv.* /var/log/secure 定义为需要保存的设备相关安全事件。适用版本:Linux Redhat AS 3、Linux Redhat AS 4

九:统一远程日志服务器配置

配置名称:统一远程日志服务器配置配置要求:当前系统应配置远程日志功能,将需要重点关注的日志内容传输到日志服务器进行备份。操作指南:# cat /etc/syslog.conf查看是否有对应配置检查方法:配置了远程日志服务器为符合配置方法:1、参考配置操作 修改配置文件vi /etc/syslog.conf, 加上这一行: *.* @192.168.0.1 可以将 "*.*"替换为你实际需要的日志信息。比如:kern.* / mail.* 等等;可以将此处192.168.0.1替换为实际的IP或域名。 重新启动syslog服务,执行下列命令: services syslogd restart 2、补充操作说明 注意:*.*和@之间为一个Tab适用版本:Linux Redhat AS 3、Linux Redhat AS 4

十:设置history时间戳

配置名称:设置history时间戳配置要求:配置history时间戳,便于审计。操作指南: # cat /etc/bashrc查看是否有对应配置检查方法:已添加,如:“export HISTTIMEFORMAT="%F %T”配置为符合。配置方法:参考配置操作: 在/etc/bashrc文件中增加如下行: export HISTTIMEFORMAT="%F %T适用版本:Linux Redhat AS 4

十一:SSH登录配置

配置名称:SSH登录配置配置要求:系统应配置使用SSH等加密协议进行远程登录维护,并安全配置SSHD的设置。不使用TELENT进行远程登录维护。操作指南:1、查看SSH服务状态:# ps –elf|grep ssh; 2、查看telnet服务状态:# ps –elf|grep telnet。检查方法:1、 不能使用telnet进行远程维护; 2、 应使用SSH进行远程维护; 3、 SSH配置要符合如下要求; Protocol 2 #使用ssh2版本 X11Forwarding yes #允许窗口图形传输使用ssh加密 IgnoreRhosts yes#完全禁止SSHD使用.rhosts文件 RhostsAuthentication no #不设置使用基于rhosts的安全验证 RhostsRSAAuthentication no #不设置使用RSA算法的基于rhosts的安全验证 HostbasedAuthentication no #不允许基于主机白名单方式认证 PermitRootLogin no #不允许root登录 PermitEmptyPasswords no #不允许空密码 Banner /etc/motd #设置ssh登录时显示的banner 4、以上条件都满足为符合。配置方法:1、参考配置操作 编辑 sshd_config,添加相关设置,SSHD相关安全设置选项参考检查方法中的描述。 2、补充操作说明 查看SSH服务状态:# ps –elf|grep ssh适用版本:Linux Redhat AS 4

十二:关闭不必要的系统服务

配置名称:关闭不必要的系统服务配置要求:根据每台机器的不同角色,关闭不需要的系统服务。操作指南中的服务项提供参考,根据服务器的角色和应用情况对启动项进行修改。如无特殊需要,应关闭Sendmail、Telnet、Bind等服务。操作指南:执行命令 #chkconfig --list,查看哪些服务开放。检查方法:与管理员确认无用服务已关闭配置方法:1、参考配置操作 使用如下方式禁用不必要的服务 #service <服务名> stop #chkconfig --level 35 off 2、参考说明 Linux/Unix系统服务中,部分服务存在较高安全风险,应当禁用,包括: “lpd”,此服务为行式打印机后台程序,用于假脱机打印工作的UNIX后台程序,此服务通常情况下不用,建议禁用; “telnet”,此服务采用明文传输数据,登陆信息容易被窃取,建议用ssh代替; “routed”,此服务为路由守候进程,使用动态RIP路由选择协议,建议禁用; “sendmail”,此服务为邮件服务守护进程,非邮件服务器应将其关闭; “Bluetooth”,此服务为蓝牙服务,如果不需要蓝牙服务时应关闭; “identd”,此服务为AUTH服务,在提供用户信息方面与finger类似,一般情况下该服务不是必须的,建议关闭; “xfs”,此服务为Linux中X Window的字体服务,关于该服务历史上出现过信息泄露和拒绝服务等漏洞,应以减少系统风险; R服务(“rlogin”、“rwho”、“rsh”、“rexec”),R服务设计上存在严重的安全缺陷,仅适用于封闭环境中信任主机之间便捷访问, 其他场合下均必须禁用; 基于inetd/xinetd的服务(daytime、chargen、echo等),此类服务建议禁用。适用版本:Linux Redhat AS 3、Linux Redhat AS 4

十三:禁止Control-Alt-Delete键盘关闭命令

配置名称:禁止Control-Alt- Delete键盘关闭命令配置要求:应禁止使用Control-Alt-Delete组合键重启服务器,防止误操作操作指南:命令cat /etc/inittab,查看配置检查方法:/etc/inittab 中应有:“#ca::ctrlaltdel:/sbin/shutdown -t3 -r now”配置为符合。配置方法:1、参考配置操作 在“/etc/inittab” 文件中注释掉下面这行(使用#): ca::ctrlaltdel:/sbin/shutdown -t3 -r now 改为: #ca::ctrlaltdel:/sbin/shutdown -t3 -r now 为了使此改动生效,输入下面这个命令: # /sbin/init q 2、补充说明 禁止ctl-alt-del使得在控制台直接按ctl-alt-del不能重新启动计算机。适用版本:Linux Redhat AS 4

十四:安装操作系统更新补丁

配置名称:安装操作系统更新补丁配置要求:安装操作系统更新补丁,修复系统漏洞操作指南:1、查看当前系统补丁版本 2、检查官网当前系统版本是否发布安全更新。检查方法:版本应保持为最新配置方法:通过访问https: //rhn.redhat.com/errata/下载补丁安装包,在打开的页面上,选择与自己使用相对应的系统后,点击连接进入补丁包下载列表界面,选择需要的补丁下载。 下载的补丁为rpm安装包,将该安装包复制到目标系统上,使用命令rpm –ivh xxx.rpm进行安装,随后重新启动系统, 检查所安装补丁的服务或应用程序是否运行正常,即完成该补丁的安装和升级工作。适用版本:Linux Redhat AS 3 Linux Redhat AS 4分类: 网络安全

脚本功能:

检测密码设置策略的口令生存期是否符合规范 
检测密码设置策略的口令更改最小间隔天数是否符合规范 
检测密码设置策略的口令最小长度是否符合规范 
检测密码设置策略的口令过期前警告天数是否符合规范 
检测是否设置帐号超时自动注销 
检测是否设置系统引导管理器密码 
检测是否存在空口令账号 
检查是否存在除root之外UID为0的用户 
检查用户umask设置是否符合规范 
检查重要目录或文件权限是否符合规范 
检查系统core dump是否符合规范 
检测是否禁止root用户远程登录 
检查系统openssh安全配置,禁止使用协议1 
检测保留历史命令的条数 
检测重要文件是否设置不可修改 
检测snmp团体字设置不能使用默认的团体字 
检测是否关闭关闭系统信任主机 
检测是否日志审核配置 
检测系统磁盘分区是否有足够的剩余空间

脚本代码:

#! /bin/bash 
#vesion 1.0
#author by  (魔法剑客)

ipadd=`ifconfig -a | grep Bcast | awk -F "[ :]+" '{print $4}' | tr "\n" "_"`
cat <<EOF
*************************************************************************************
*****               linux基线检查脚本                 *****
*****               Author(魔法剑客)                    *****
*************************************************************************************
*****               linux基线配置规范设计               *****
*****               输出结果"/tmp/${ipadd}_checkResult.txt"             *****
*************************************************************************************
EOF


echo "IP: ${ipadd}" >> "/tmp/${ipadd}_checkResult.txt"

user_id=`whoami`
echo "当前扫描用户:${user_id}" >> "/tmp/${ipadd}_checkResult.txt"

scanner_time=`date '+%Y-%m-%d %H:%M:%S'`
echo "当前扫描时间:${scanner_time}" >> "/tmp/${ipadd}_checkResult.txt"

echo "***************************"
echo "账号策略检查中..."
echo "***************************"

#编号:SBL-Linux-02-01-01 
#项目:帐号与口令-用户口令设置
#合格:Y;不合格:N
#不合格地方

passmax=`cat /etc/login.defs | grep PASS_MAX_DAYS | grep -v ^# | awk '{print $2}'`
passmin=`cat /etc/login.defs | grep PASS_MIN_DAYS | grep -v ^# | awk '{print $2}'`
passlen=`cat /etc/login.defs | grep PASS_MIN_LEN | grep -v ^# | awk '{print $2}'`
passage=`cat /etc/login.defs | grep PASS_WARN_AGE | grep -v ^# | awk '{print $2}'`

echo "SBL-Linux-02-01-01:" >> "/tmp/${ipadd}_checkResult.txt"
if [ $passmax -le 90 -a $passmax -gt 0 ];then
  echo "Y:口令生存周期为${passmax}天,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:口令生存周期为${passmax}天,不符合要求,建议设置不大于90天" >> "/tmp/${ipadd}_checkResult.txt"
fi

if [ $passmin -ge 6 ];then
  echo "Y:口令更改最小时间间隔为${passmin}天,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:口令更改最小时间间隔为${passmin}天,不符合要求,建议设置大于等于6天" >> "/tmp/${ipadd}_checkResult.txt"
fi

if [ $passlen -ge 8 ];then
  echo "Y:口令最小长度为${passlen},符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:口令最小长度为${passlen},不符合要求,建议设置最小长度大于等于8" >> "/tmp/${ipadd}_checkResult.txt"
fi

if [ $passage -ge 30 -a $passage -lt $passmax ];then
  echo "Y:口令过期警告时间天数为${passage},符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:口令过期警告时间天数为${passage},不符合要求,建议设置大于等于30并小于口令生存周期" >> /"/tmp/${ipadd}_checkResult.txt"
fi

echo "***************************"
echo "账号是否会主动注销检查中..."
echo "***************************"
checkTimeout=$(cat /etc/profile | grep TMOUT | awk -F[=] '{print $2}')
if [ $? -eq 0 ];then
  TMOUT=`cat /etc/profile | grep TMOUT | awk -F[=] '{print $2}'`
  if [ $TMOUT -le 600 -a $TMOUT -ge 10 ];then
    echo "Y:账号超时时间${TMOUT}秒,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
  else
    echo "N:账号超时时间${TMOUT}秒,不符合要求,建议设置小于600秒" >> "/tmp/${ipadd}_checkResult.txt"
  fi
else
  echo "N:账号超时不存在自动注销,不符合要求,建议设置小于600秒" >> "/tmp/${ipadd}_checkResult.txt"
fi



#编号:SBL-Linux-02-01-02 
#项目:帐号与口令-root用户远程登录限制
#合格:Y;不合格:N
#不合格地方

echo "***************************"
echo "检查root用户是否能远程登录限制..."
echo "***************************"

echo "SBL-Linux-02-01-02:" >> "/tmp/${ipadd}_checkResult.txt"
remoteLogin=$(cat /etc/ssh/sshd_config | grep -v ^# |grep "PermitRootLogin no")
if [ $? -eq 0 ];then
  echo "Y:已经设置远程root不能登陆,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:已经设置远程root能登陆,不符合要求,建议/etc/ssh/sshd_config添加PermitRootLogin no" >> "/tmp/${ipadd}_checkResult.txt"
fi
#编号:SBL-Linux-02-01-03
#项目:帐号与口令-检查是否存在除root之外UID为0的用户
#合格:Y;不合格:N
#不合格地方
#查找非root账号UID为0的账号
echo "SBL-Linux-02-01-03:" >> "/tmp/${ipadd}_checkResult.txt"
UIDS=`awk -F[:] 'NR!=1{print $3}' /etc/passwd`
flag=0
for i in $UIDS
do
  if [ $i = 0 ];then
    echo "N:存在非root账号的账号UID为0,不符合要求" >> "/tmp/${ipadd}_checkResult.txt"
  else
    flag=1
  fi
done
if [ $flag = 1 ];then
  echo "Y:不存在非root账号的账号UID为0,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
fi
#编号:SBL-Linux-02-01-04
#项目:帐号与口令-检查telnet服务是否开启
#合格:Y;不合格:N
#不合格地方
#检查telnet是否开启
echo "SBL-Linux-02-01-04:" >> "/tmp/${ipadd}_checkResult.txt"
telnetd=`cat /etc/xinetd.d/telnet | grep disable | awk '{print $3}'`
if [ "$telnetd"x = "yes"x ]; then
  echo "N:检测到telnet服务开启,不符合要求,建议关闭telnet" >> "/tmp/${ipadd}_checkResult.txt"
fi
#编号:SBL-Linux-02-01-05
#项目:帐号与口令-root用户环境变量的安全性
#合格:Y;不合格:N
#不合格地方
#检查目录权限是否为777
echo "SBL-Linux-02-01-05:" >> "/tmp/${ipadd}_checkResult.txt"
dirPri=$(find $(echo $PATH | tr ':' ' ') -type d \( -perm -0777 \) 2> /dev/null)
if [  -z "$dirPri" ] 
then
  echo "Y:目录权限无777的,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:文件${dirPri}目录权限为777的,不符合要求。" >> "/tmp/${ipadd}_checkResult.txt"
fi
#编号:SBL-Linux-02-01-06
#项目:帐号与口令-远程连接的安全性配置
#合格:Y;不合格:N
#不合格地方
echo "SBL-Linux-02-01-06:" >> "/tmp/${ipadd}_checkResult.txt"
fileNetrc=`find / -xdev -mount -name .netrc -print 2> /dev/null`
if [  -z "${fileNetrc}" ];then
  echo "Y:不存在.netrc文件,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:存在.netrc文件,不符合要求" >> "/tmp/${ipadd}_checkResult.txt"
fi
fileRhosts=`find / -xdev -mount -name .rhosts -print 2> /dev/null`
if [ -z "$fileRhosts" ];then
  echo "Y:不存在.rhosts文件,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:存在.rhosts文件,不符合要求" >> "/tmp/${ipadd}_checkResult.txt"
fi
#编号:SBL-Linux-02-01-07
#项目:帐号与口令-用户的umask安全配置
#合格:Y;不合格:N
#不合格地方
#检查umask设置
echo "SBL-Linux-02-01-07:" >> "/tmp/${ipadd}_checkResult.txt"
umask1=`cat /etc/profile | grep umask | grep -v ^# | awk '{print $2}'`
umask2=`cat /etc/csh.cshrc | grep umask | grep -v ^# | awk '{print $2}'`
umask3=`cat /etc/bashrc | grep umask | grep -v ^# | awk 'NR!=1{print $2}'`
flags=0
for i in $umask1
do
  if [ $i != "027" ];then
    echo "N:/etc/profile文件中所所设置的umask为${i},不符合要求,建议设置为027" >> "/tmp/${ipadd}_checkResult.txt"
    flags=1
    break
  fi
done
if [ $flags == 0 ];then
  echo "Y:/etc/profile文件中所设置的umask为${i},符合要求" >> "/tmp/${ipadd}_checkResult.txt"
fi 
flags=0
for i in $umask2
do
  if [ $i != "027" ];then
    echo "N:/etc/csh.cshrc文件中所所设置的umask为${i},不符合要求,建议设置为027" >> "/tmp/${ipadd}_checkResult.txt"
    flags=1
    break
  fi
done  
if [ $flags == 0 ];then
  echo "Y:/etc/csh.cshrc文件中所设置的umask为${i},符合要求" >> "/tmp/${ipadd}_checkResult.txt"
fi
flags=0
for i in $umask3
do
  if [ $i != "027" ];then
    echo "N:/etc/bashrc文件中所设置的umask为${i},不符合要求,建议设置为027" >> "/tmp/${ipadd}_checkResult.txt"
    flags=1
    break
  fi
done
if [ $flags == 0 ];then
  echo "Y:/etc/bashrc文件中所设置的umask为${i},符合要求" >> "/tmp/${ipadd}_checkResult.txt"
fi
#编号:SBL-Linux-02-01-08
#项目:帐号与口令-grub和lilo密码是否设置检查
#合格:Y;不合格:N
#不合格地方
#grub和lilo密码是否设置检查
echo "SBL-Linux-02-01-08:" >> "/tmp/${ipadd}_checkResult.txt"
grubfile=$(cat /etc/grub.conf | grep password)
if [ $? -eq 0 ];then
  echo "Y:已设置grub密码,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:没有设置grub密码,不符合要求,建议设置grub密码" >> "/tmp/${ipadd}_checkResult.txt"
fi
lilo=$(cat /etc/lilo.conf | grep password)
if [ $? -eq 0 ];then
  echo "Y:已设置lilo密码,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:没有设置lilo密码,不符合要求,建议设置lilo密码" >> "/tmp/${ipadd}_checkResult.txt"
fi
#编号:SBL-Linux-02-02-01
#项目:文件系统-重要目录和文件的权限设置
#合格:Y;不合格:N
#不合格地方
echo "SBL-Linux-02-02-01:" >> "/tmp/${ipadd}_checkResult.txt"
echo "***************************"
echo "检查重要文件权限中..."
echo "***************************"
file1=`ls -l /etc/passwd | awk '{print $1}'`
file2=`ls -l /etc/shadow | awk '{print $1}'`
file3=`ls -l /etc/group | awk '{print $1}'`
file4=`ls -l /etc/securetty | awk '{print $1}'`
file5=`ls -l /etc/services | awk '{print $1}'`
file6=`ls -l /etc/xinetd.conf | awk '{print $1}'`
file7=`ls -l /etc/grub.conf | awk '{print $1}'`
file8=`ls -l /etc/lilo.conf | awk '{print $1}'`
#检测文件权限为400的文件
if [ $file2 = "-r--------" ];then
  echo "Y:/etc/shadow文件权限为400,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:/etc/shadow文件权限不为400,不符合要求,建议设置权限为400" >> "/tmp/${ipadd}_checkResult.txt"
fi
#检测文件权限为600的文件
if [ $file4 = "-rw-------" ];then
  echo "Y:/etc/security文件权限为600,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:/etc/security文件权限不为600,不符合要求,建议设置权限为600" >> "/tmp/${ipadd}_checkResult.txt"
fi
if [ $file6 = "-rw-------" ];then
  echo "Y:/etc/xinetd.conf文件权限为600,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:/etc/xinetd.conf文件权限不为600,不符合要求,建议设置权限为600" >> "/tmp/${ipadd}_checkResult.txt"
fi
if [ $file7 = "-rw-------" ];then
  echo "Y:/etc/grub.conf文件权限为600,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:/etc/grub.conf文件权限不为600,不符合要求,建议设置权限为600" >> "/tmp/${ipadd}_checkResult.txt"
fi
if [ -f /etc/lilo.conf ];then
  if [ $file8 = "-rw-------" ];then
    echo "Y:/etc/lilo.conf文件权限为600,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
  else
    echo "N:/etc/lilo.conf文件权限不为600,不符合要求,建议设置权限为600" >> "/tmp/${ipadd}_checkResult.txt"
  fi
  
else
  echo "N:/etc/lilo.conf文件夹不存在"
fi
#检测文件权限为644的文件
if [ $file1 = "-rw-r--r--" ];then
  echo "Y:/etc/passwd文件权限为644,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:/etc/passwd文件权限不为644,不符合要求,建议设置权限为644" >> "/tmp/${ipadd}_checkResult.txt"
fi
if [ $file5 = "-rw-r--r--" ];then
  echo "Y:/etc/services文件权限为644,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:/etc/services文件权限不为644,不符合要求,建议设置权限为644" >> "/tmp/${ipadd}_checkResult.txt"
fi
if [ $file3 = "-rw-r--r--" ];then
  echo "Y:/etc/group文件权限为644,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:/etc/group文件权限不为644,不符合要求,建议设置权限为644" >> "/tmp/${ipadd}_checkResult.txt"
fi
#编号:SBL-Linux-02-02-02
#项目:文件系统-查找未授权的SUID/SGID文件
#合格:Y;不合格:N
#不合格地方
echo "SBL-Linux-02-02-02:" >> "/tmp/${ipadd}_checkResult.txt"
unauthorizedfile=`find / \( -perm -04000 -o -perm -02000 \) -type f `
echo "C:文件${unauthorizedfile}设置了SUID/SGID,请检查是否授权" >> "/tmp/${ipadd}_checkResult.txt"
#编号:SBL-Linux-02-02-03
#项目:文件系统-检查任何人都有写权限的目录
#合格:Y;不合格:N;检查:C
#不合格地方
echo "SBL-Linux-02-02-03:" >> "/tmp/${ipadd}_checkResult.txt"
checkWriteDre=$(find / -xdev -mount -type d \( -perm -0002 -a ! -perm -1000 \) 2> /dev/null)
if [  -z "${checkWriteDre}" ];then
  echo "Y:不存在任何人都有写权限的目录,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:${checkWriteDre}目录任何人都可以写,不符合要求" >> "/tmp/${ipadd}_checkResult.txt"
fi  
#编号:SBL-Linux-02-02-04
#项目:文件系统-检查任何人都有写权限的文件
#合格:Y;不合格:N;检查:C
#不合格地方
echo "SBL-Linux-02-02-04:" >> "/tmp/${ipadd}_checkResult.txt"
checkWriteFile=$(find / -xdev -mount -type f \( -perm -0002 -a ! -perm -1000 \) 2> /dev/null)
if [  -z "${checkWriteFile}" ];then
  echo "Y:不存在任何人都有写权限的目录,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:${checkWriteFile}目录任何人都可以写,不符合要求" >> "/tmp/${ipadd}_checkResult.txt"
fi  
#编号:SBL-Linux-02-02-05
#项目:文件系统-检查异常隐含文件
#合格:Y;不合格:N;检查:C
#不合格地方
echo "SBL-Linux-02-02-05:" >> "/tmp/${ipadd}_checkResult.txt"
hideFile=$(find / -xdev -mount \( -name "..*" -o -name "...*" \) 2> /dev/null)
if [  -z "${hideFile}" ];then
  echo "Y:不存在隐藏文件,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
else
  echo "N:${hideFile}是隐藏文件,建议审视" >> "/tmp/${ipadd}_checkResult.txt"
fi  
#编号:SBL-Linux-03-01-01 
#项目:日志审计-syslog登录事件记录
#合格:Y;不合格:N;检查:C
#不合格地方
echo "SBL-Linux-03-01-01:" >> "/tmp/${ipadd}_checkResult.txt"
recodeFile=$(cat /etc/syslog.conf)
if [  ! -z "${recodeFile}" ];then
   logFile=$(cat /etc/syslog.conf | grep -V ^# | grep authpriv.*)
  if [ ! -z "${logFile}" ];then
    echo "Y:存在保存authpirv的日志文件" >> "/tmp/${ipadd}_checkResult.txt"
  else
    echo "N:不存在保存authpirv的日志文件" >> "/tmp/${ipadd}_checkResult.txt"
  fi
else
  echo "N:不存在/etc/syslog.conf文件,建议对所有登录事件都记录" >> "/tmp/${ipadd}_checkResult.txt"
fi  
#编号:SBL-Linux-03-01-02
#项目:系统文件-检查日志审核功能是否开启
#合格:Y;不合格:N;检查:C
echo "SBL-Linux-03-01-02:" >> "/tmp/${ipadd}_checkResult.txt"
auditdStatus=$(service auditd status 2> /dev/null)
if [ $? = 0 ];then
  echo "Y:系统日志审核功能已开启,符合要求" >> "/tmp/${ipadd}_checkResult.txt"
fi
if [ $? = 3 ];then
  echo "N:系统日志审核功能已关闭,不符合要求,建议service auditd start开启" >> "/tmp/${ipadd}_checkResult.txt"
fi
#编号:SBL-Linux-04-01-01 
#项目:系统文件-系统core dump状态
#合格:Y;不合格:N;检查:C
echo "SBL-Linux-04-01-01:" >> "/tmp/${ipadd}_checkResult.txt"
limitsFile=$(cat /etc/security/limits.conf | grep -V ^# | grep core)
if [ $? -eq 0 ];then
  soft=`cat /etc/security/limits.conf | grep -V ^# | grep core | awk {print $2}`
  for i in $soft
  do
    if [ "$i"x = "soft"x ];then
      echo "Y:* soft core 0 已经设置" >> "/tmp/${ipadd}_checkResult.txt"
    fi
    if [ "$i"x = "hard"x ];then
      echo "Y:* hard core 0 已经设置" >> "/tmp/${ipadd}_checkResult.txt"
    fi
  done
else 
  echo "N:没有设置core,建议在/etc/security/limits.conf中添加* soft core 0和* hard core 0" >> "/tmp/${ipadd}_checkResult.txt"
fi
#编号:SBL-Linux-04-01-02
#项目:系统文件-检查磁盘动态空间,是否大于等于80%
#合格:Y;不合格:N;检查:C
#
echo "SBL-Linux-04-01-02:" >> "/tmp/${ipadd}_checkResult.txt"
space=$(df -h | awk -F "[ %]+" 'NR!=1{print $5}')
for i in $space
do
  if [ $i -ge 80 ];then
    echo "C:警告!磁盘存储容量大于80%,建议扩充磁盘容量或者删除垃圾文件" >> "/tmp/${ipadd}_checkResult.txt"
  fi
done

 

转载于:https://www.cnblogs.com/pythonal/p/10017160.html

你可能感兴趣的:(Linux安全基线检查脚本)