第21章 Linux 高級篇-日志管理
- 日志管理
- 基本介紹
日志文件是重要的系統信息文件,其中記錄了許多重要的系統事件,包括用戶的登錄信息、系統的啟動信息、系統的安全信息、郵件相關信息、各種服務相關信息等。這些信息有些非常敏感,所以在 Linux 中這些日志文件只有 root 用戶可以讀取。
日志對於安全來說也很重要,它記錄了系統每天發生的各種事情,通過日志來檢查錯誤發生的原因,或者受到攻擊時攻擊者留下的痕跡。
可以這樣理解日志是用來記錄重大事件的工具。- 系統常用的日志
/var/log/ 目錄就是系統日志文件的保存位置
日志文件 說明 /var/log/boot.log 系統啟動日志 /var/log/cron 記錄與系統定時任務相關的日志 /var/log/cups/ 記錄打印信息的曰志 /var/log/dmesg 記錄了系統在開機時內核自檢的信總。也可以使用 dmesg 命令直接查看內核自檢信息 /var/log/btmp 記錄錯誤登陸的日志。這個文件是二進制文件,不能直接用Vi查看,而要使用 lastb 命令查看 /var/log/lasllog 記錄系統中所有用戶最后一次的登錄時間的曰志。這個文件也是二進制文件。不能直接用Vi查看,而要使用lastlog命令查看 /var/log/mailog 記錄郵件信息的日志 /var/log/message 記錄系統里要佶息的日志.這個日志文件中會記錄 Linux 系統的絕大多數重要信息。如果系統出現問題,首先要檢查的應該就是這個日志文件 /var/log/secure 記錄驗證和授權方面的倍息,只要涉及賬戶和密碼的程序都會記錄,比如系統的登錄、ssh 的登錄、su 切換用戶,sudo 授權,甚至添加用戶和修改用戶密碼都會記錄在這個日志文件中 /var/log/wtmp 永久記錄所有用戶的登陸、注銷信息,同時記錄系統的后動、重啟、關機事件。同樣,這個文件也是二進制文件.不能直接用Vi查看,而要使用 last 命令查看 /var/tun/ulmp 記錄當前已經登錄的用戶的信息。這個文件會隨着用戶的登錄和注銷而不斷變化,只記錄當前登錄用戶的信息。同樣,這個文件不能直接用Vi查看,而要使用 w、who、users 等命令查看 除系統默認的日志之外,采用 RPM 包方式安裝的系統服務也會默認把日志記錄在 /var/log/ 目錄中(源碼包安裝的服務日志存放在源碼包指定的目錄中)。不過這些日志不是由 rsyslogd 服務來記錄和管理的,而是各個服務使用自己的日志管理文檔來記錄自身的日志。以下介紹的日志目錄在你的 Linux 上不一定存在,只有安裝了相應的服務,日志才會出現。
日志文件 說明 /var/log/httpd/ RPM 包安裝的apache取務的默認日志目錄 /var/log/mail/ RPM 包安裝的郵件服務的額外日志因錄 /var/log/samba/ RPM色安裝的Samba服務的日志目錄 /var/log/sssd/ 守護進程安全服務目錄
- 日志管理服務 rsyslogd
CentOS 7.6日志服務是 rsyslogd,CentOS 6.x 日志服務是 syslogd,rsyslogd 功能更強大。rsyslogd 的使用、日志文件的格式,和 syslogd 服務兼容的。
- 查詢 Linux 中的 rsyslogd 服務是否啟動
- ps aux | grep "rsyslog" | grep -v "grep"
- 查詢 rsyslogd 服務的自啟動狀態
- systemctl list-unit-files | grep rsyslog
- 配置文件:/etc/rsyslog.conf
- 編輯文件時的格式:*.*,其中第一個 * 代表日志類型,第二個 * 代表日志類別
日志類型 說明 auth 安全和認證相關消息,pam 產生的日志(不推薦使用 authpriv 替代) authpirv 安全和認證相關信息,ssh、ftp 等登錄信息的驗證信息(私有的) cron 系統定時任務 crond 和 at 產生的日志 daemon 和各個守護進程相關的日志 ftp ftp 守護進程產生的日志 kern 內核產生的日志(不是用戶進程產生的) lpr 打印產生的日志 郵件收發信息 news 與新聞服務器相關的日志 syslog 有syslogd服務產生的日志信息(雖然服務名稱已經改了 rsyslogd 服務,但是很多配置都還是沿用了 syslogd 的,這里並沒有修改服務名) user 用戶等級類別的日志信息 uucp uucp 子系統的日志信息,uucp 時早期 Linux 系統進行數據傳遞的協議,后來也經常用在新聞組服務中 local0-local7 為本地使用預留的服務
日志級別 說明 debug 一般的調試信息說明,日志通信最多 info 基本的通知信息 notice 普通信息,但是有一定的重要性 warning 警告信息,但是還不會影響到服務或系統的運行 err 錯誤信息,一般達到 err 等級的信息已經可以影響到服務或系統的運行了 crit 嚴重錯誤信息,比 err 等級還要嚴重,系統或整個軟件不能正常工作 alert 需要立刻修改的信息,比 crit 還要嚴重,必須立即采取行動 emerg 內核崩潰等重要信息,系統已經無法使用了 none 什么都不記錄 注意:日志級別從上到下,級別從低到高,記錄信息越來越少,優先處理的等級就越高,危害就越大。
- 由日志服務 rsyslogd 記錄的日志文件,日志文件的格式包含以下4列:
- 事件產生的時間
- 發生事件的服務器的主機名
- 產生事件的服務名或程序名
- 事件的具體信息
- 日志管理服務應用實例
在 /etc/rsyslog.conf 中添加一個日志文件 /var/log/hsp.log,當有事件發送時,該文件會接收到信息並保存。
- 在 /etc/rsyslog.conf 文件中增加如下命令
*.* /var/log/hsp.log
- 新建 /var/log/hsp.log 文件,重啟系統,再查看該文件內容。
- 日志輪替
- 基本介紹
- 日志是重要的系統文件,記錄和保存了系統中所有的重要事件。但是日志文件也需要進行定期的維護,因為日志文件是不斷增長的,如果完全不進行日志維護,而任由其隨意遞增,那么用不了多久,我們的硬盤就會被寫滿。
- 日志維護的最主要的工作就是把舊的日志文件刪除,從而騰出空間保存新的日志文件。這項工作如果靠管理員手工來完成,那其實是非常煩瑣的,而且也容易忘記。那么 Linux 系統是否可以自動完成日志的輪替工作呢?
- logrotate 就是用來進行日志輪替(也叫日志轉儲)的,也就是把舊的日志文件移動並改名,同時創建一個新的空日志文件用來記錄新日志,當舊日志文件超出保存的范圍時就刪除。
- 日志輪替文件的命名規則
- 日志輪替最主要的作用就是把舊的日志文件移動並改名,同時建立新的空日志文件,當舊日志文件超出保存的范圍時就刪除。那么,舊的日志文件改名之后,如何命名呢?主要依靠 /etc/logrotate.conf 配置文件中的“dateext”參數。
- 如果配置文件中有“dateext”參數,那么日志會用日期來作為日志文件的后綴,如“secure-20130605”。這樣日志文件名不會重疊,也就不需要對日志文件進行改名,只需要保存指定的日志個數,刪除多余的日志文件即可。
- 如果配置文件中沒有“dateext”參數,那么日志文件就需要進行改名了。當第一次進行日志輪替時,當前的“secure”日志會自動改名為“secure.1”,然后新建“secure”日志,用來保存新的日志;當第二次進行日志輪替時,“secure.1”會自動改名為“secure.2”,當前的“secure”日志會自動改名為“secure.1”,然后也會新建“secure”日志,用來保存新的日志;以此類推。
- 配置文件:/etc/logrotate.conf
可以設置全局的日志輪替規則,當然也可以單獨給某個日志文件指定策略。
在這個配置文件中,主要分為三部分:
- 第一部分是默認設置,如果需要轉儲的日志文件沒有特殊配置,則遵循默認設置的參數;
- 第二部分是讀取 /etc/logrotate.d/ 目錄中的日志輪替的子配置文件,也就是說,在 /etc/logrotate.d/ 目錄中的所有符合語法規則的子配置文件也會進行日志輪替;
- 第三部分是對 wtmp 和 btmp 日志文件的輪替進行設定,如果此設定和默認參數沖突,則當前設定生效(如 wtmp 的當前參數設定的輪替時間是每月,而默認參數的輪替時間是每周,則對 wtmp 這個日志文件來說,輪替時間是每月,當前的設定參數生效)。
- logrotate 配置文件的主要參數
參數 參數說明 daily 日志的輪替周期是毎天 weekly 日志的輪替周期是每周 monthly 日志的輪控周期是每月 rotate 數宇 保留的日志文件的個數。0指沒有備份 compress 當進行日志輪替時,對舊的日志進行壓縮 create mode owner group 建立新日志,同時指定新日志的權限與所有者和所屬組。如 create 0600 root utmp mail address 當進行日志輪替時.輸出內存通過郵件發送到指定的郵件地址 missingok 如果日志不存在,則忽略該日志的警告信息 nolifempty 如果曰志為空文件,則不進行日志輪替 minsize 大小 日志輪替的最小值。也就是日志一定要達到這個最小值才會進行輪持,否則就算時間達到也不進行輪替 size 大小 日志只有大於指定大小才進行日志輪替,而不是按照時間輪替,如 size 100k dateext 使用日期作為日志輪替文件的后綴,如 secure-20130605 sharedscripts 在此關鍵宇之后的腳本只執行一次 prerotate/cndscript 在日志輪替之前執行腳本命令。endscript 標識 prerotate 腳本結束 postrolaie/endscripl 在日志輪替之后執行腳本命令。endscripi 標識 postrotate 腳本結束
- 把自己的日志加入日志輪替
如果有些日志默認沒有加入日志輪替(比如源碼包安裝的服務的日志,或者自己添加的日志),那么這些日志默認是不會進行日志輪替的,這樣當然不符合我們對日志的管理要求。如果需要把這些日志也加入日志輪替,那該如何操作呢?
這里有兩種方法:
- 第一種方法是直接在 /etc/logrotate.conf 配置文件中寫入該日志的輪替策略,從而把日志加入輪替;
- 第二種方法是在 /etc/logrotate.d/ 目錄中新建立該日志的輪替文件,在該輪替文件中寫入正確的輪替策略,因為該目錄中的文件都會被包含到主配置文件中,所以也可以把日志加入輪替。
推薦第二種方法,因為系統中需要輪替的日志非常多,如果全部直接寫入 /etc/logrotate.conf 配置文件,那么這個文件的可管理性就會非常差,不利於此文件的維護。- 日志輪替服務應用實例
對於自己設置的 /var/log/hsp.log 日志,不是系統默認日志,而是通過 /etc/rsyslog.conf 配置文件自己生成的日志,所以默認這個日志是不會進行輪替的。如果需要把這個日志加入。就采用第二種方法,在 /etc/logrotate.d/ 目錄中建立此日志的輪替文件。
- 先創建 /etc/logrotate.d/hsplog 輪替文件
- 在文件中寫入命令,即事先約定好的日志輪替規則
/var/log/hsp.log { missingok daily copytruncate rotate 7 nolifempty }
- 日志輪替機制原理
- logrotate 在很多 Linux 發行版上都是默認安裝的。系統會定時運行 logrotate,一般是每天一次。系統是這么實現按天執行的。crond 會每天定時執行 /etc/cron.daily 目錄下的腳本,而這個目錄下有個文件叫 logrotate。logrotate 通過這個文件依賴定時任務執行的。
- 查看內存日志
- 基本介紹
日志管理工具 journalctl 是CentOS 7上專有的日志管理工具,該工具是從 message 這個文件里讀取信息。Systemd 統一管理所有 Unit 的啟動日志。帶來的好處就是,可以只用 journalctl 一個命令,查看所有日志(內核日志和應用日志)。日志的配置文件是 /etc/systemd/journald.conf- journalctl 用法
- 查看所有日志(默認情況下 ,只保存本次啟動的日志):journalctl
- 查看內核日志(不顯示應用日志):journalctl -k
- 查看系統本次啟動的日志:journalctl -b
- 實時滾動顯示最新日志:journalctl -f
- 顯示尾部的最新10行日志:journalctl -n
第22章 Linux 高級篇-定制自己的 Linux 系統
- 基本介紹
通過裁剪現有 Linux系統(CentOS 7.6),創建屬於自己的 min Linux 小系統,可以加深我們對 Linux 的理解。
- 基本原理
- 啟動流程介紹
制作 min Linux 小系統之前,先了解一下 Linux 的啟動流程
- 首先 Linux 要通過 POST 自檢,檢查硬件設備有沒有故障
- 如果有多塊啟動盤的話,需要在 BIOS 中選擇啟動磁盤
- 啟動 MBR 中的 bootloader 引導程序
- 加載內核文件
- 執行所有進程的父進程、老祖宗 systemd
- 打印歡迎界面
在 Linux 的啟動流程中,加載內核文件時關鍵文件:- kernel 文件:vmlinuz-3.10.0-957.el7.x86_64
- initrd文件:initramfs-3.10.0-957.el7.x86_64.img
- 制作 min Linux 思路分析
- 在現有的 Linux 系統(CentOS 7.6)上加一塊硬盤 /dev/sdb,在硬盤上分為兩個分區,一個是 /boot,一個是 /,並將其格式化。需要明確的是,現在加的這個硬盤在現有的 Linux 系統中是 /dev/sdb,但是,當我們把東西全部設置好時,要把這個硬盤拔除,放在新系統上,此時,就是 /dev/sda
- 在 /dev/sdb 硬盤上,將其打造成獨立的 Linux 系統,里面的所有文件是需要拷貝進去的
- 作為能獨立運行的 Linux 系統,內核是一定不能少,要把內存文件和 initramfs 文件也一起拷到 /dev/sdb 上
- 以上步驟完成,自制的 Linux 系統就完成,創建一個新的 Linux 虛擬機,將其硬盤指向我們創建的硬盤,啟動即可。
- 具體操作步驟
具體步驟,請查看原視頻。
第23章 Linux 內核源碼-介紹&內核升級
- Linux 0.01內核源碼
- 基本介紹
Linux 的內核代碼可以從網上下載,解壓后文件一般也都位於 Linux 目錄下,內核源代碼有很多版本,可以從 Linux 0.01 內核入手,總共的代碼有1萬行左右,最新版本5.9.8總共代碼超過700萬行,非常龐大。
內核地址:https://www.kernel.org/
- Linux 0.01內核源碼目錄&閱讀
- Linux 0.01的閱讀需要懂 C 語言
- 閱讀源碼前,應知道 Linux 內核源碼整體分布情況。現代的操作系統一般由進程管理、內存管理、文件系統、驅動程序和網絡等組成。Linux 內核源碼的各個目錄大致與此相對應。
- 在閱讀方法或順序上,有縱向和橫向之分。所謂縱向就是順着程序執行順序逐步進行;所謂橫向,就是按模塊進行。它們經常結合在一起進行。
- 對於 Linux 啟動的代碼可順着 Linux 的啟動順序一步步來閱讀;對於像內存管理部分,可以單獨拿出來進行閱讀分析。實際上,這是一個反復的過程,不可能讀一遍就理解。
- Linux 0.01內核源碼目錄
目錄 說明 boot 和系統引導相關的代碼 fs 存放 Linux 支持的文件系統代碼 include 存放 Linux 核心需要的頭文件,比如 asm,Linux,sys kernel 和系統內核相關的源碼 lib 存放庫代碼 mm 和內存管理相關的代碼
- 查看 init 目錄下,main.c 中 main 函數
目錄 說明 time_init() 初始化運行時間 tty_init() tty初始化 trap_init() 陷阱門(硬件中斷向量)初始化 sched_init() 調度程序初始化 buffer_init() 緩沖管理初始化 hd_init() 硬盤初始化 sti() 所有初始化工作完成后,開啟中斷 move_to_user_mode() 進入到用戶模式
- Linux 內核最新版和內核升級
- 內核地址:https://www.kernel.org/ 查看
- 下載&解壓最新版
- wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.8.16.tar.gz
- tar -zxvf linux-5.8.16.tar.gz
- Linux 內核升級
- uname -a // 查看當前的內核版本
- yum info kernel -q // 檢測內核版本,顯示可以升級的內核
- yum updata kernel // 升級內核
- yum list kernel -q // 查看已經安裝的內核
第24章 Linux 系統-備份與恢復
- 基本介紹
- Linux 備份和恢復很簡單,有兩種方式:
- 把需要的文件(或者分區)用TAR打包就行,下次需要恢復的時候,再解壓開覆蓋即可
- 使用 dump 和 restore命令
- 安裝 dump 和 restore
- 如果 Linux 上沒有 dump 和 restore 指令,需要先安裝
- yum -y install dump
- yum -y install restore
- 使用 dump 完成備份
- 基本介紹
- dump 支持分卷和增量備份(所謂增量備份是指備份最近一次備份以來修改過的文件,也稱差異備份)。
- 完全備份:完全備份就是把所有需要備份的數據全部備份,當然完全備份可以備份整塊硬盤,整個分區或某個具體的目錄。
- 增量備份:顧名思義,就是指備份增加的部分。好處就是備份數據少,占用資源也少。但壞處就是恢復的時候要先恢復原始的,然后恢復增量的,比較麻煩。
- dump 基本語法
- dump [-cu] [-123456789] [-f <備份后文件名>] [-T <日期>] [目錄或文件系統]
- dump []-wW
- dump -W #查詢分區的備份時間及備份級別(整個分區)
- cat /etc/dumpdates #查看已備份文件的備份時間
選項 說明 -c 創建新的歸檔文件,並將由一個或多個文件參數所指定的內容寫入歸檔文件的開頭。 -0123456789 備份的層級。0為最完整備份,會備份所有文件。若指定0以上的層級,則備份至上一次備份以來修改或新增的文件。 -f <備份后文件名> 備份后文件名 -j 調用 bzlib 庫壓縮備份文件,其實就是把備份文件壓縮為 .bz2 格式,讓文件更小 -T <日期> 指定開始備份的時間與日期 -u 備份完畢后,在 /etc/dumpdares 中記錄備份的文件系統,層級,日期與時間等。 -t 指定文件名,若該文件已存在備份文件中,則列出名稱 -W 顯示需要備份的文件及其最后一次備份的層級,時間 ,日期。 -w 與-W類似,但僅顯示需要備份的文件。
- dump 應用案例
- 案例1:將 /boot 分區所有內容備份到 /opt/boot.bak0.bz2 文件中,備份層級為“0”
dump -0uj -f /opt/boot.bak0.bz2 /boot/- 案例2:在 /boot 目錄下增加一個文件,再備份,備份等級為“1”(只備份上次使用層級“0”備份后發生過改變的數據),此次備份內容保存到 /opt/boot.bak1.bz2 文件中,比較兩次備份的文件大小
dump -1uj -f /opt/boot.bak1.bz2 /boot/- dump 備份文件或者目錄
dump 在備份分區時(比如 /boot),是可以支持增量備份的(備份層級可選1-9)。如果備份文件或者目錄時,不支持增量備份,只能完整備份,即只能使用備份級別0。
- 案例1:將 /etc 目錄所有內容備份到 /opt/etc.bak0.bz2 文件中,備份層級為“0”
dump -0uj -f /opt/etc.bak0.bz2 /etc/- 案例2:在 /etc 目錄下增加一個文件,再備份,備份等級為“1”,備份內容保存到 /opt/boot.bak1.bz2 文件中,輸入下面命令會報錯
dump -1uj -f /opt/ect.bak1.bz2 /ect/
- 使用 restore 完成恢復
- 基本介紹
restore 命令用來恢復已備份的文件,可以從 dump 生成的備份文件中恢復原文件。- restore 基本語法
- restore [模式選項] [選項]
- 選項: -f <指定備份文件的文件名>:從指定的文件中讀取備份數據,進行還原操作
- 模式選項:restore命令常用的模式有四種,這四種模式不能混用
選項 說明 -C 對比模式,將備份文件和實際文件相互對比 -i 交互模式,手工選擇需要恢復的文件 -t 查看模式,用於查看備份文件中有哪些文件 -r 還原模式,用於還原數據
- restore 應用案例
- 案例1:restore 比較模式
mv /boot/hello.java /boot/hello100.java #把/boot目錄中的一個文件改名字,造成丟失的假象
restore -C -f /opt/boot1.bak.bz2 #注意與之前最新的備份文件 /opt/boot1.bak.bz2 比較,發現文件丟失- 案例2:restore 查看模式
restore -t -f /opt/boot.bak0.bz2- 案例3:restore 還原模式,注意:如果有增量備份,需要先還原完全備份的文件,再進行增量備份文件的恢復,有幾個增量備份文件,就要恢復幾個,按順序來恢復即可
mkdir /opt/boottmp
cd /opt/boottmp
restore -r -f /opt/boot.bak0.bz2
restore -r -f /opt/boot.bak1.bz2- 案例4:restore 恢復備份的文件或者整個目錄文件
mkdir /opt/ecttmp
cd /opt/ecttmp
restore -r -f /opt/ect.bak0.bz2
第25章 Linux 可視化管理-Webmin 和 BT 運維工具
- Webmin
- 基本介紹
Webmin 是功能最強大的基於 Web 的 Unix/Linux 系統管理工具。管理員通過瀏覽器訪問 Webmin 的各種管理功能並完成相應的管理操作。除了各種版本的 Linux 以為還包括:AIX、HPUX、Solaris、Unixware、Irix 和 FreeBSD 等系統。- 安裝 Webmin &配置
- 下載安裝包:wget http://download.webmin.com/download/yum/webmin-1.700-1.noarch.rpm
- 安裝:rpm -ivh webmin-1.700-1.noarch.rpm
- 重置密碼:/usr/libexec/webmin/changepass.pl /etc/webmin root test
這里 root 是 Webmin 的用戶名,不是 Linux 系統的 root 用戶,並且把 root 密碼改成了 test- 修改 Webmin 服務的端口號(修改是出於安全目的)
編輯 /etc/webmin/miniserv.conf 文件,將 port=10000 修改為其他端口號,如 port=6666- 重啟 Webmin
/etc/webmin/restart #重啟
/etc/webmin/start #啟動
/etc/webmin/stop #停止- 防火牆放開6666端口
firewall-cmd --zone=public --remove-port=10000/tcp --permanent #配置防火牆關閉10000端口
firewall-cmd --zone=public --add-port=6666/tcp --permanent # 配置防火牆開放6666端口
firewall-cmd --reload #更新防火牆配置
firewall-cmd --zone=public --list-ports #查看已經開放的端口號- 登錄 Webmin
在瀏覽器里輸入 http://主機IP:6666 就可以訪問
用 root 用戶名和新密碼 test 登錄 Webmin
- BT(寶塔面板)
- 基本介紹
BT 寶塔 Linux 面板是提升運維效率的服務器管理軟件,支持一鍵 LAMP/LNMP/集群/監控/網站/FTP/數據庫/JAVA 等多項服務器管理功能。- 安裝和使用
安裝:yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
安裝成功后,控制台會顯示登錄地址、賬戶密碼,然后復制到瀏覽器就可以登錄。- 如果 BT 的用戶名和密碼忘記了,可以使用 bt default 命令查看。
第26章 Linux 面試題(騰訊,百度,美團,滴滴)
該章節內容可能會更新吧,未完待續。