[步骤] Linux 文件系统的安全 (通过禁止执行共享内存里的程序或文件来防止恶意软件)

步骤一:临时禁止 /dev/shm 目录的执行权限

# mount -o remount,noexec,nodev /dev/shm

步骤二:永久禁止 /dev/shm 目录的执行权限

2.1 修改 /etc/fstab 配置文件

# vim /etc/fstab

添加以下内容:

......
/dev/shm             /dev/shm   tmpfs  defaults,rw,remount,noexec,nodev  0  0

2.2 让修改的配置生效

# mount -a

步骤三:确认 /dev/shm 目录的执行权限已被禁止

# mount | grep -E '\s/dev/shm\s' | grep -v noexec ; mount | grep -E '\s/dev/shm\s' | grep -v nodev

(补充:当没有任何输出结果时,则代表 /dev/shm 目录的执行权限已被禁止)

[内容] audit 常用的监控规则

内容一:监控 SELinux 配置文件

1.1 在 audit 添加监控 SELinux 配置文件的规则

# vim /etc/audit/rules.d/audit.rules

添加以下内容:

......
-w /etc/selinux/ -p wa -k MAC-policy
-w /usr/share/selinux/ -p wa -k MAC-policy

1.2 让添加的监控 SELinux 配置文件的规则生效

# service auditd restart

1.3 确认添加的监控 SELinux 配置文件的规则已生效

# auditctl -l | grep -i selinux

内容二:监控 AppArmor 配置文件

2.1 在 audit 添加监控 AppArmor 配置文件的规则

# vim /etc/audit/rules.d/audit.rules

添加以下内容:

......
-w /etc/apparmor/ -p wa -k MAC-policy
-w /etc/apparmor.d/ -p wa -k MAC-policy

2.2 让添加的监控 AppArmor 配置文件的规则生效

# service auditd restart

2.3 确认添加的监控 AppArmor 配置文件的规则已生效

# auditctl -l | grep -i apparmor

[步骤] auditd 的设置 (日志保存时间)

方法一:通过 auditd 配置文件设置

1.1 设置 auditd 日志的保存时间

# vim /etc/audit/auditd.conf

确保部分内容如下:

......
local_events = yes
......
write_logs = yes
......
log_file = /var/log/audit/audit.log
......
max_log_file = 8
......
num_logs =5
......
max_log_file_action = ROTATE
......


补充:这里以
1) 开启 auditd 日志 (local_events = yes) (write_logs = yes)
2) 将 auditd 日志写入 /var/log/audit/audit.log 文件 (log_file = /var/log/audit/audit.log)
3) auditd 日志每达到 8M 大小就将旧的 auditd 日志进行备份并创建新的 auditd 日志 (max_log_file = 8) (max_log_file_action = ROTATE),也可以修改成: max_log_file_action = keep_logs
4) 旧的 auditd 日志保存 5 份 (num_logs =5)
为例

1.2 让设置的 auditd 时间生效

# service auditd restart

方法二:通过 logrotate 配置文件设置

2.1 设置 auditd 日志的保存时间

# vim /etc/logrotate.d/auditd

创建以下内容:

/var/log/audit/*
{
rotate 30
daily
missingok
compress
delaycompress
postrotate
touch /var/log/audit/audit.log ||:
chmod 0600 /var/log/audit/audit.log ||:
service auditd restart
endscript
}


补充:这里以:
1) 备份的日志文件保留 30 份 (rotate 30)
2) 每天将现在的日志文件进行备份并生成新的日志文件 (dayly)

2.2 让设置的 auditd 时间生效

# systemctl restart logrotate.service

[步骤] auditd 日志时间转换成可读格式以后再显示

方法一:通过创建额外的脚本实现 adutitd 日志时间格式的转换

1.1 创建用于 auditd 转换日志时间格式的脚本

# vim time_format_conversion.pl

创建以下内容:

s/(1\d{9})/localtime($1)/e

(补充:这里以创建名为 time_format_conversion.pl 的用于转换 auditd 日志时间格式的脚本为例)

1.2 转换 auditd 日志时间格式

# cat /var/log/audit/audit.log | perl -p time_format_conversion.pl

或者:

# less /var/log/audit/audit.log | perl -p time_format_conversion.pl

或者:

# more /var/log/audit/audit.log | perl -p time_format_conversion.pl

或者:

# head /var/log/audit/audit.log | perl -p time_format_conversion.pl

或者:

# tail /var/log/audit/audit.log | perl -p time_format_conversion.pl

或者:

# tail -f /var/log/audit/audit.log | perl -p time_format_conversion.pl

(补充:这里以使用名为 time_format_conversion.pl 的用于转换 auditd 日志时间格式的脚本为例)

方法二:使用 /usr/sbin/ausearch 命令实现 adutitd 日志时间格式的转换

# /usr/sbin/ausearch --start $(date +\%m/\%d/\%Y -d "-1 month") -i --input-logs | egrep "/sftp*[0-9a-zA-Z].*txt.*nametype=" | grep -v Log.txt | awk '{print $2,$3,$6}' | uniq

(补充:这里以显示在 /sftp 目录下以 txt 结尾的文件的 auditd 日志为例)