一、監視系統日誌
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後臺程序或時鐘出現故障時拒絕假同步消息。如果需要,客戶端可以與少數幾個時間服務器同步,但是這樣不***全。
[root@instructor ~]# 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。