根据此文章写了一个自动检测脚本

脚本位置:https://gitee.com/wdze/linux_security_settings

一、账号管理

1、用户密码

检测方法:

(1)是否存在如下类似的简单用户密码配置,比如:root/root, test/test, root/root1234
(2)执行:more /etc/login.defs,检查PASS_MAX_DAYS/ PASS_MIN_DAYS/PASS_WARN_AGE参数
(3)执行:awk -F: '($2 == "") { print $1 }' /etc/shadow, 检查是否存在空口令帐号

建议安全标准:

(1)在/etc/login.defs文件中配置:
PASS_MAX_DAYS   90        #新建用户的密码最长使用天数
PASS_MIN_DAYS   0          #新建用户的密码最短使用天数
PASS_WARN_AGE   14        #新建用户的密码到期提前提醒天数
(2)不允许存在空口令帐号

2、密码强度

检测方法:

/etc/pam.d/system-auth文件中是否对pam_cracklib.so的参数进行了正确设置。

建议安全标准:

密码长度至少8位,并包括数字、小写字母、大写字母和特殊符号4种中至少3种
建议在/etc/pam.d/system-auth 文件中配置:
password  requisite pam_cracklib.so difok=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=1

3、用户锁定策略

检测方法:

/etc/pam.d/system-auth文件中是否对pam_tally.so的参数进行了正确设置。

建议安全标准:

设置连续输错10次密码,帐号锁定5分钟,
使用命令“vim /etc/pam.d/system-auth”修改配置文件,添加
auth required pam_tally.so onerr=fail deny=10 unlock_time=300
注:解锁用户 faillog  -u  <用户名>  -r

4、禁止root用户远程登录

检测方法:

执行:more /etc/securetty,检查Console参数

建议安全标准:

建议在/etc/securetty文件中配置:CONSOLE = /dev/tty01

5、检查是否存在root外的UID为0用户

检测方法:

执行:awk -F: '($3 == 0) { print $1 }' /etc/passwd

建议安全标准:

UID为0的任何用户都拥有系统的最高特权,保证只有root用户的UID为0,返回值包括“root”以外的条目,则低于安全要求;

6、检查root环境变量中是否包含777的目录

检测方法:

执行:echo $PATH | egrep '(^|:)(\.|:|$)',检查是否包含父目录,
执行:find `echo $PATH | tr ':' ' '` -type d \( -perm -002 -o -perm -020 \) -ls,检查是否包含组目录权限为777的目录

建议安全标准:

确保root用户的系统路径中不包含父目录,在非必要的情况下,不应包含组权限为777的目录

7、远程连接的安全性配置

检测方法:

执行:find  / -name  .netrc,检查系统中是否有.netrc文件,
执行:find  / -name  .rhosts ,检查系统中是否有.rhosts文件

建议安全标准:

如无必要,删除这两个文件

8、用户的umask安全配置

检测方法:

执行:more /etc/profile  more /etc/csh.login  more /etc/csh.cshrc  more /etc/bashrc检查是否包含umask值且umask=027

建议安全标准:

建议设置用户的默认umask=027

9、重要目录和文件的权限

检测方法:

执行以下命令检查目录和文件的权限设置情况:
ls -l /etc/
ls -l /etc/rc.d/init.d/
ls -l /etc/inetd.conf	
ls -l /etc/passwd
ls -l /etc/shadow
ls -l /etc/group
ls -l /etc/security
ls -l /etc/services
ls -l /etc/rc*.d

建议安全标准:

对于重要目录,建议执行如下类似操作:
chmod -R 750 /etc/rc.d/init.d/*
这样只有root可以读、写和执行这个目录下的脚本。

10、查找未授权的SUID/SGID文件

检测方法:

for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do
find $PART \( -perm -04000 -o -perm -02000 \) -type f -xdev -print
done

建议安全标准:

若存在未授权的文件,则低于安全要求
建议经常性的对比suid/sgid文件列表,以便能够及时发现可疑的后门程序

11、检查任何人都有写权限的目录

检测方法:

for PART in `awk '($3 == "ext2" || $3 == "ext3") \
{ print $2 }' /etc/fstab`; do
find $PART -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
done

建议安全标准:

若返回值非空,则低于安全要求

12、查找任何人都有写权限的文件

检测方法:

for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do
find $PART -xdev -type f \( -perm -0002 -a ! -perm -1000 \) -print
done

建议安全标准:

若返回值非空,则低于安全要求

13、检查没有属主的文件

检测方法:

for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do
find $PART -nouser -o -nogroup -print
done
注意:不用管“/dev”目录下的那些文件。

建议安全标准:

若返回值非空,则低于安全要求
发现没有属主的文件往往就意味着有******你的系统了。不能允许没有主人的文件存在。如果在系统中发现了没有主人的文件或目录,先查看它的完整性,如果一切正常,给它一个主人。有时候卸载程序可能会出现一些没有主人的文件或目录,在这种情况下可以把这些文件和目录删除掉

14、检查异常隐含文件

检测方法:

用“find”程序可以查找到这些隐含文件。例如:
find  / -name ".. *" -print -xdev
find  / -name "…*" -print -xdev | cat -v
同时也要注意象“.xx”和“.mail”这样的文件名的。(这些文件名看起来都很象正常的文件名)

建议安全标准:

若返回值非空,则低于安全要求
在系统的每个地方都要查看一下有没有异常隐含文件(点号是起始字符的,用“ls”命令看不到的文件),因为这些文件可能是隐藏的***工具或者其它一些信息(口令破解程序、其它系统的口令文件,等等)。在UNIX下,一个常用的技术就是用一些特殊的名,如:“…”、“..    ”(点点空格)或“..^G”(点点control-G),来隐含文件或目录。

15、登录超时设置

检测方法:

使用命令“cat /etc/profile |grep TMOUT”查看TMOUT是否设置

建议安全标准:

使用命令“vi /etc/profile”修改配置文件,添加“TMOUT=”行开头的注释,建议设置为“TMOUT=180”,即超时时间为3分钟

16、远程登录设置

检测方法:

查看SSH服务状态:
service ssh status
查看telnet服务状态:
service telnet status

建议安全标准:

SSH服务状态查看结果为:running 
telnet服务状态查看结果为:not running/unrecognized

17、Root远程登录限制

检测方法:

使用命令“cat /etc/ssh/sshd_config”查看配置文件
(1)检查是否允许root直接登录
检查“PermitRootLogin ”的值是否为no
(2)检查SSH使用的协议版本
检查“Protocol”的值

建议安全标准:

(1)不允许root直接登录
设置“PermitRootLogin ”的值为no
设置后root用户需要使用普通用户远程登录后su进行系统管理
(2)修改SSH使用的协议版本
设置“Protocol”的版本为2

18、关闭不必要的服务

检测方法:

使用命令“who -r”查看当前init级别
使用命令“chkconfig --list <服务名>”查看所有服务的状态

建议安全标准:

若有不必要的系统在当前级别下为on,则低于安全要求
使用命令“chkconfig --level  <服务名> on|off|reset”设置服务在个init级别下开机是否启动

二、日志审计

1、syslog登录事件记录

检测方法:

执行命令:more /etc/syslog.conf
查看参数authpriv值

建议安全标准:

若未对所有登录事件都记录,则低于安全要求

2、Syslog.conf的配置审核

检测方法:

执行:more /etc/syslog.conf,查看是否设置了下列项:
kern.warning;*.err;authpriv.none\t@loghost
*.info;mail.none;authpriv.none;cron.none\t@loghost
*.emerg\t@loghost
local7.*\t@loghost

建议安全标准:

若未设置,则低于安全要求
建议配置专门的日志服务器,加强日志信息的异地同步备份

三、系统文件

1、系统core dump状态

检测方法:

执行:more /etc/security/limits.conf 检查是否包含下列项:
* soft core 0
* hard core 0

建议安全标准:

若不存在,则低于安全要求
core dump中可能包括系统信息,易被***者利用,建议关闭