一、监视系统日志
1. 集中式日志记录后台程序:syslogd(标准)、klogd(内核)和auditd(审计)
2. 日志文件示例:
/var/log/messages:标准系统错误消息
这是标准系统日志文件,它包含来自所有系统软件、非内核启动问题的消息以及转至dmesg的消息。仅可由root读取。
/var/log/dmesg:内核启动消息,查看硬件信息,命令dmesg
此日志文件在系统启动时编写,它包含来自内核的在启动过程中生成的消息。
/var/log/maillog:邮件系统消息
此日志文件包含来自邮件子系统的消息和错误。仅可由root读取。
/var/log/secure:安全、验证和xinetd消息
此日志文件包含来自与安全相关的系统(例如登录系统、tcp_wrapper和xinetd)的消息和错误。仅可由root读取,检测和调查网络资源滥用时非常有用。
/var/log/audit/audit.log:内核审核消息
此日志文件包含来自内核的审核消息,其中包括与SELinux相关的消息。使用ausearch和aureport查看。
3. 应用程序日志文件和目录也位于/var/log/中
二、syslogd和klogd配置
1. klogd将内核消息定向到syslogd
2. 这两个程序均由/etc/rc.d/init.d/syslog(rhel6为rsyslog)控制
脚本在/etc/sysconfig/syslog(rsyslog)中配置
SYSLOGD_OPTIONS=”-m 0”
3. 配置syslogd(rsyslogd)
/etc/syslog.conf (rsyslog.conf)
facility.prioritylog_location
*.info(日志等级);mail.none(除了mail);authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* (有短横线保存在内存中)-/var/log/maillog
4. logger从命令行生成定向到syslogd的消息。
EXAMPLES logger System rebooted
logger -p local0.notice -t HOSTIDM -f /dev/idmc
日志level:
LOG_EMERG system is unusable
LOG_ALERT action must be taken immediately
LOG_CRIT critical conditions
LOG_ERR error conditions
LOG_WARNING warning conditions
LOG_NOTICE normal, but significant, condition
LOG_INFO informational message
LOG_DEBUG debug-level message
系统日志文件中的每个条目都包含以下四项主要内容:1.消息的日期和时间。2.消息来自的主机。3.消息来自的应用程序或子系统名称,例如内核、vsftpd等,其中可能包括进程标识符。4.行中的其余部分(冒号后面)是实际消息内容。
三、回顾:使用cron使任务实现自动化
1. 用于计划周期性事件
2. 使用crontab编辑、安装和查看作业计划
crontab[-u user] file
crontab [ -l|-r|-e]
echo ‘*/15 8-17 * * 1-5 echo Breaktime’| crontab
3. 限制/允许用户访问crond
/etc/cron.allow允许
/etc/cron.deny拒绝
cron表
在cron表格文件(crontab)中计划的所有事件均由crond后台程序运行(该后台程序必须正在系统中运行)
用户crontab存储在/var/spool/cron中,未授权用户不可访问此文件,并且通常具有root权限的那些用户不得访问此文件。问了访问当前的crontab,使用了crontab命令。可以在当前目录中编辑用户crontab,并通过将其用作crontab命令的参数安装用户crontab,也可以通过使用-e选项完成这些操作。
Crontab中的字段可以使用任意数目的制表符或空格分隔。有效字段值如下表示:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
诸如@reboot等特殊时间规格别名可以替换前五个字段,这种情况下,在重新启动后执行。
@reboot : Run once after reboot.
@yearly : Run once a year, ie. "0 0 1 1 *".
@annually : Run once a year, ie. "0 0 1 1 *".
@monthly : Run once a month, ie. "0 0 1 * *".
@weekly : Run once a week, ie. "0 0 * * 0".
@daily : Run once a day, ie. "0 0 * * *".
@hourly : Run once an hour, ie. "0 * * * *".
cron访问控制
1)如果既不在/etc/cron.allow也不在/etc/cron.deny,则仅允许root安装新crontab文件
2)如果仅存在/etc/cron.deny,则除/etc/cron.deny中列出的那些用户外的所有用户均可安装crontab文件
3)如果仅存在/etc/cron.allow,则root和列出的所有用户均可安装crontab文件
4)如果这两个文件都存在,则忽略/etc/cron.deny
四、系统crontab文件
1. 与用户crontab文件格式不同
2. 默认/etc/crontab在以下各项中运行可执行文件:
/etc/cron.hourly/、/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/
3. /etc/cron.d/包含其他系统crontab文件
/etc/crontab和/etc/cron.d/中文件的格式与用户crontab不同。第六个字段是用户名,将用于执行第七个字段中的命令。
这些文件中的通用命令是run-parts shell脚本。此脚本使用一个参数、一个目录名,可调用该目录中的所有程序。/usr/bin/run-parts脚本没有联机文档。
五、默认每日cron作业
1. tmpwatch
清楚特定目录中的旧文件
防止填充满/tmp
Tmpwatch可删除/tmp中在240小时内未访问的所有文件。它也可删除/var/tmp中在720小时内未访问的文件。
2. logrotate
防止日志文件太大
配置存储在/etc/logrotate.conf和/etc/logrotate.d/中
logrotate能以预定义的时间间隔,或当来自不同子系统的日志文件达到预定义的大小时轮换这些日志文件,并且可以压缩旧日志(可选)。
配置存储在/etc/logrotate.conf中,用于常规设置;配置存储在/etc/logrotate.d/subsystem(rhel5)中,用于特定于子系统的设置。特定于服务的轮换规则通常由服务的RPM安装。
3. logwatch
提供有关系统活动的摘要
报告可疑消息
配置存储在/etc/ logwatch/中
Logwatch高度可配置,可以将其配置为检测大多数任意类型的活动。有关日志的筛选器的信息,参阅/usr/share/doc/logwatch-version。
六. anacron系统
1. anacron在系统启动时运作作业
2. 配置文件:/etc/anacrontab
字段1:如果作业在这几天中未运行
字段2:等待这几分钟,然后再运行作业
字段3:作业标识符
字段4:要运行的作业
3. 默认为与/etc/crontab关联
运行“错过的”每日、每周和每月作业
对于并非一直运行的计算机而言至关重要
anacron命令的目的是运行本应运行的cron作业。anacron的工作方式如下所示:
如果cron为run-parts、/etc/crontab或cron.daily/从cron.weekly/运行cron.monthly/命令,则要运行的第一个命令为0anacron。此命令在/var/spool/anacron/的文件中设置时间戳,注明此命令上次运行的时间。
在系统启动后,anacron命令运行。Anacrontab文件可指定cron.daily/、cron.weekly/和cron.monthly/中的命令应多长时间运行一次。如果这些命令在这段时间内未运行,则anacron会等待几分钟,然后再运行这些命令,从而确保计算机在cron应运行这些命令期间停机时,这些命令仍得以运行。
七、网络时间协议的准确时间
1. 许多应用程序都要求准确安排时间
2. 工作站硬件时钟往往会出现偏差而不予以更正
3. NTP通过控制秒的长度消除偏差
4. NTP客户端应使用三个时间服务器
5. 配置工具:system-config-date
6. 配置文件:/etc/ntp.conf(5分钟后生效)
7. 使用ntpq测试
NTP通过修改秒的长度消除偏差,很像调整老式钟表的摆钟。如果系统的时间晚于时间服务器的组合参考时间,会将秒的时间调短,以便系统时钟显示正确时间。这样就轻微地缩小了时间差异,而不会干扰其他应用程序。但是时间差异太大,NTP就会停止工作。在这种情况下,必须使用ntpdate手动重置时间。
如果具有三个集中式时间服务器,客户端就可以在服务器的其中一个NTP后台程序或时钟出现故障时拒绝假同步消息。如果需要,客户端可以与少数几个时间服务器同步,但是这样不***全。
[[email protected] ~]# ntpq -p remote refid st t when poll reach delay offset jitter ================================================================== *133.100.11.8 133.100.53.51 2 u 24 64 377 185.457 33.177 173.298
remote:响应这个请求的NTP服务器的名称。
refid:NTP服务器使用的上一级ntp服务器。
st :remote远程服务器的级别.由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端.所以服务器从高到低级别可以设定为1-16.为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的.
when: 上一次成功请求之后到现在的秒数。
poll : 本地机和远程服务器多少时间进行一次同步(单位为秒).在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围,之后poll值会逐渐增大,同步的频率也就会相应减小
reach:这是一个八进制值,用来测试能否和服务器连接.每成功连接一次它的值就会增加
delay:从本地机发送同步要求到ntp服务器的round trip time
offset:主机通过NTP时钟同步与所同步时间源的时间偏移量,单位为毫秒(ms)。offset越接近于0,主机和ntp服务器的时间越接近
jitter:这是一个用来做统计的值.它统计了在特定个连续的连接数里offset的分布情况.简单地说这个数值的绝对值越小,主机的时间就越精确
八、SELinux
1. 强制访问控制与自主访问控制
默认情况下,拒绝未明确允许的任何操作
2. 二进制策略可定义
安全上下文(凭证)
规则,以允许特定操作
布尔值,以有条件地启用或禁用规则
审核要求(日志记录)
3. 默认策略为targeted
防止系统服务受影响,而不阻止本地用户访问
大多数本地进程为unconfined_t
九、SELinux策略:故障排除
1. 模式:Enforcing、Permissive或Disabled
持续性:/etc/sysconfig/selinux
system-config-securitylevel
运行时:getenforce和setenforce 0|1
内核参数:selinux=0|1或enforcing=0|1
2. 日志:/var/log/{messages,audit/audit.log}
3. 一般建议
man -k selinux
setroubleshootd,sealert -b和sealert -a
建议如何避免错误,不确保安全!
/etc/sysconfig/selinux可以定义使用哪个SELinux策略以及以哪种模式运行。Disabled意味着完全忽略策略,Permissive模式用于故障排除或开发,它可记录策略违规,但是不阻止程序运行。Enforcing是默认模式。
getenforce命令可显示系统的当前SELinux模式。Targeted策略允许使用setenforce命令在Enforcing(1)和Permissive(0)模式之间切换。
内核参数可覆盖SELinux模式。
应用程序尝试执行策略未授权的某些操作时,如果正在运行auditd,SELinux会阻止访问,并在/var/log/audit/audit.log中记录错误(这是默认设置),如果auditd未运行,则SELinux会记录到/var/log/messages。应用程序通常不知道发生故障的原因。这会是故障排除非常困难。为了帮助进行故障排除,setroubleshootd后台程序将通过在警告面板中放置警告图标警告发生了错误。单击此图标,系统将显示可能会更正错误的方法。建议的解决方案可能并非问题的最佳解决方案,了解这一点很重要。如果GUI不可用,请使用sealert -a。
通过GUI工具(system-config-selinux,包policycoreutils-gui的一部分),可以更改其他一些SELinux选项。为了查看哪些布尔值、文件上下文和/或端口适用于限制的进程,大多数情况下会有一个相应的man page,如named_selinux或httpd_selinux。