Linux 系統管理員的日常工作中,軟體和硬體故障排除是不可或缺的技能。快速診斷問題根源並有效解決,才能確保系統穩定執行。本文除了介紹常見的軟體問題排除技巧,例如分析錯誤日誌、管理防火牆規則、重新安裝軟體和重啟系統外,也探討硬體故障的預防和診斷方法,並提供實用的硬體資訊收集工具,例如 hwinfo、lshw、lspci、lsblk 和 lscpu 等。此外,文章也強調系統安全的重要性,提供自動化安全檢查指令碼範例,協助管理員定期監控系統安全狀態,並示範如何透過差異比較檢查,及早發現潛在的安全威脅。
排除軟體問題的實務方法與技巧
在 Linux 系統管理中,排除軟體問題是一項至關重要的任務。當系統或應用程式出現故障時,管理員需要具備快速診斷和解決問題的能力。本文將介紹幾個實用的方法和技巧,幫助您更有效地排除軟體問題。
分析錯誤訊息與日誌
當系統或應用程式出現錯誤時,第一步是檢視錯誤訊息和日誌。例如,在 Apache HTTP Server 無法啟動的案例中,錯誤訊息指出設定檔 /etc/httpd/conf/httpd.conf 的第 34 行存在語法錯誤。管理員可以使用 grep 命令搜尋相關的日誌檔案,或使用 journalctl 命令檢視系統日誌,以找出更詳細的錯誤資訊。
$ cd /var/log
$ sudo grep -ir "Syntax error" *
Binary file journal/027dd8a8c9624671b26d07e94eae8f1d/system.journal matches
$ sudo journalctl -xe
-- Support: https://access.redhat.com/support
--
-- The unit httpd.service has entered the 'failed' state with result 'exit-code'.
Oct 16 08:49:44 server1 systemd[1]: Failed to start The Apache HTTP Server.
內容解密:
cd /var/log:切換到/var/log目錄,該目錄通常存放系統和應用程式的日誌檔案。sudo grep -ir "Syntax error" *:使用grep命令在/var/log目錄及其子目錄中搜尋包含 “Syntax error” 的檔案。-i引數表示忽略大小寫,-r引數表示遞迴搜尋。sudo journalctl -xe:使用journalctl命令檢視最新的系統日誌。-x引數表示顯示詳細的錯誤訊息,-e引數表示跳轉到日誌的末尾。
管理防火牆及其規則
防火牆可以有效地阻擋未經授權的存取,但也可能幹擾故障排除的過程。在排除故障時,應避免直接停用防火牆,而是新增規則以允許必要的流量。這樣可以避免因忘記重新啟用防火牆而導致的安全風險。
移除和重新安裝軟體
當軟體問題持續無法解決時,移除和重新安裝軟體可能是一個有效的解決方案。在重新安裝之前,應備份應用程式的設定檔和資料,並確保安裝的是最新穩定的版本。同時,也要檢查系統是否已更新到最新狀態,並具備與應用程式相容的工具和公用程式。
重啟系統
定期重啟系統是 Linux 系統管理中的一個良好實踐。重啟可以重新整理硬體和軟體的組態,並幫助發現潛在的問題。例如,使用 dmesg 命令可以檢視系統啟動過程中的錯誤訊息。
$ dmesg | grep -i error
[ 8.741308] [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.
[ 8.741321] [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.
$ dmesg | grep -i fail
[ 0.063026] acpi PNP0A03:00: fail to add MMCONFIG information, can't access ...
[ 8.741308] [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.
內容解密:
dmesg:顯示系統啟動過程中的訊息。grep -i error和grep -i fail:過濾出包含 “error” 或 “fail” 的訊息,以便快速發現錯誤。
處理硬體故障
硬體故障通常很容易診斷,因為硬體要麼正常運作,要麼完全故障。然而,在某些情況下,硬體會出現間歇性故障,例如網路介面卡(NIC)間歇性失效或硬碟檔案損壞。當硬體完全故障時,通常需要更換新的硬體。
硬體故障的預防與診斷
在伺服器系統的維護中,硬體故障是不可避免的問題。為了減少硬體故障對系統的影響,伺服器系統通常具備多個子系統的冗餘設計,例如冗餘電源供應、多網路介面卡(NICs)以及充足的記憶體(RAM)。使用磁碟陣列(如RAID 10)可以確保在磁碟故障時,系統仍能正常運作,避免影響日常運作。
預防硬體故障
雖然硬體診斷工具可以提供基本的狀態資訊,但在大多數情況下,硬體故障很難預測。硬體要麼正常運作,要麼完全故障。然而,某些硬體元件可能會出現部分故障。例如,網路介面卡可能會開始傳送畸形封包,這種情況下應該及時更換故障的網路卡。機械式硬碟可能會出現檔案損壞、無法正常啟動等問題,而固態硬碟硬碟(SSDs)通常不會出現部分故障,它們要麼正常工作,要麼完全失效。
記憶體模組(RAM)通常會整體失效,不太可能出現部分故障。當記憶體模組故障時,系統在啟動過程中可能無法正確識別全部記憶體容量。例如,如果系統組態了64 GB的RAM,但由於某個記憶體模組故障,可能只會識別到48 GB。這是因為記憶體模組通常成對使用,如果其中一個模組故障,其配對的模組也可能被系統視為故障。
蒐集系統硬體資訊
為了有效管理和維護系統,瞭解系統的硬體組態是非常重要的。以下是一些常用的命令,用於蒐集系統的硬體資訊:
hwinfo 命令
hwinfo 是一個功能強大的工具,可以詳細列出系統的硬體資訊。使用 --short 選項可以生成簡要報告。
# hwinfo --short
cpu:
Intel(R) Core(TM) i5-5350U CPU @ 1.80GHz, 1800 MHz
keyboard:
/dev/input/event2 AT Translated Set 2 keyboard
mouse:
/dev/input/mice Mouse
graphics card:
VMware VMWARE0405
sound:
Intel 82801AA AC'97 Audio Controller
storage:
Intel 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI...
Intel 82371AB/EB/MB PIIX4 IDE
network:
enp0s3 Intel PRO/1000 MT Desktop Adapter
network interface:
lo Loopback network interface
enp0s3 Ethernet network interface
disk:
/dev/sdb VBOX HARDDISK
/dev/sdc VBOX HARDDISK
/dev/sda VBOX HARDDISK
partition:
/dev/sdc1 Partition
/dev/sda1 Partition
/dev/sda2 Partition
cdrom:
/dev/sr0 VBOX CD-ROM
usb controller:
Apple KeyLargo/Intrepid USB
bios:
BIOS
bridge:
Intel 82371SB PIIX3 ISA [Natoma/Triton II]
Intel 82371AB/EB/MB PIIX4 ACPI
Intel 440FX - 82441FX PMC [Natoma]
hub:
Linux Foundation 1.1 root hub
memory:
Main Memory
unknown:
FPU
DMA controller
PIC
Keyboard controller
InnoTek Systemberatung VirtualBox Guest Service
ls 命令系列
除了 hwinfo,還有一些以 ls 開頭的命令可以用於蒐集硬體資訊,例如 lscpu、lsblk、lspci 等。這些命令提供了對系統硬體不同方面的詳細資訊。
蒐集資訊的重要性
蒐集和記錄每台實體機器的硬體資訊對於後續的維護和故障排除至關重要。對於虛擬機器來說,由於其硬體組態相對一致,因此蒐集單一虛擬機器的資訊即可代表該虛擬化平台上的其他虛擬機器。
Linux 系統故障排除:硬體資訊與安全檢查工具
在 Linux 系統管理中,瞭解硬體資訊和進行安全檢查是故障排除的關鍵步驟。本文將介紹多種實用的命令列工具,幫助您收集硬體資訊和進行安全檢查。
硬體資訊收集工具
lshw:詳細硬體資訊
lshw 是一個用於收集系統硬體詳細資訊的工具。它能夠提供 CPU、主機板、記憶體、韌體、快取組態和匯流排速度等資訊。您可以選擇使用 -html 選項生成 HTML 報告。
# lshw
輸出範例:
server1
description: Computer
product: VirtualBox
vendor: innotek GmbH
version: 1.2
serial: 0
width: 64 bits
capabilities: smbios-2.5 dmi-2.5 vsyscall32
configuration: family=Virtual Machine uuid=1f88c169-07a7-024b-8d54-6dc9070...
lspci:PCI 裝置列表
lspci 用於列出所有 PCI 裝置,包括製造商和版本資訊。
# lspci
輸出範例:
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:02.0 VGA compatible controller: VMware SVGA II Adapter
lsblk:區塊裝置列表
lsblk 用於列出所有區塊裝置,包括掛載點、大小和其他資訊。需要以 root 身份執行才能檢視完整報告。
# lsblk
輸出範例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 8G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 7G 0 part
├─cl-root 253:0 0 6.2G 0 lvm /
└─cl-swap 253:1 0 820M 0 lvm [SWAP]
lscpu:CPU 架構資訊
lscpu 用於報告系統 CPU 的架構資訊。
# lscpu
輸出範例:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 61
Model name: Intel(R) Core(TM) i5-5350U CPU @ 1.80GHz
自動化安全檢查
為了及時發現系統安全問題,建議建立自動化的安全檢查流程。以下是一個範例指令碼,用於生成每日安全報告:
#!/bin/bash
# Daily Report Script
today=$(date +%m-%d-%Y)
touch /opt/note/$today.html
echo "<pre>" >> /opt/note/$today.html
echo "Last Log " >> /opt/note/$today.html
last | grep root >> /opt/note/$today.html
echo "Non-privileged accounts in the Last Log " >> /opt/note/$today.html
每日安全報告內容解密:
today=$(date +%m-%d-%Y):取得當天的日期,並以指定的格式儲存到today變數中。touch /opt/note/$today.html:在/opt/note/目錄下建立一個以當天日期為名稱的 HTML 檔案。echo "<pre>" >> /opt/note/$today.html:在 HTML 檔案中加入<pre>標籤,用於保留文字格式。last | grep root:使用last命令列出最近的登入記錄,並使用grep命令過濾出包含root使用者的記錄,寫入 HTML 檔案中。echo "Non-privileged accounts in the Last Log ":輸出非特權帳戶的登入記錄到 HTML 檔案中。
透過這些工具和指令碼,您可以有效地收集系統硬體資訊和進行安全檢查,從而及時發現和解決潛在問題。
系統安全防護:強化 Linux 系統的關鍵步驟
系統安全是確保 Linux 系統正常運作且免受重大資安威脅的關鍵任務。作為系統管理員,強化系統安全是首要且最耗時的任務。本章節將著重於預防資安問題,並簡要介紹偵測與緩解措施。
保護 Root 帳戶
Root 帳戶是 Linux 系統中最具權力的帳戶,必須嚴格保護其存取權。若有人入侵此帳戶,便能鎖定系統、管理員許可權、竊取資料或持續控制系統並進一步入侵內部網路的其他系統。絕不能將 Root 密碼記錄下來或與系統管理員以外的任何人分享。
除了保護一般使用者帳戶(透過密碼複雜度、長度和到期時間)之外,身為系統管理員,您還需承擔保護 Root 帳戶的最終責任。使用者帳戶密碼可能因被分享、記錄、網路釣魚攻擊或社交工程而被盜取。因此,無論密碼多麼複雜,仍容易受到多種攻擊,建議使用無密碼的金鑰檔案來取代傳統密碼。
在安全性和可用性之間取得平衡
安全性是您的首要責任,但同時您也需要支援可用的系統。最安全的系統是關閉電源並鎖起來,但這樣它就無法使用。因此,您需要在安全性與可用性之間取得平衡。
系統必須具備使用者、軟體、檔案和網路連線才能發揮作用。所有這些元素都會使系統變得較不安全但更具可用性。您的任務是:
- 保護系統免受網路攻擊
- 保護系統免受粗心使用者的影響
- 保護使用者之間的安全
- 保護系統組態和資料,除非授權人員,否則任何人不得存取
最小化系統的攻擊面
安裝新系統時,必須謹慎選擇要安裝的服務。例如,安裝根據 Red Hat 的伺服器系統時,我會選擇最小安裝,通常只包含 SSH 服務。並根據需要新增服務和套件,以保持系統的小型化和專注於單一任務。我從不將圖形使用者介面(GUI)或圖形顯示管理器安裝到伺服器上。
# 範例:最小化安裝 Red Hat 伺服器
dnf install -y openssh-server
systemctl enable sshd
systemctl start sshd
自動化安全檢查指令碼範例
#!/bin/bash
today=$(date +"%Y-%m-%d")
echo "<pre>" > /opt/note/$today.html
last | grep -v root >> /opt/note/$today.html
echo " " >> /opt/note/$today.html
echo "Root Accounts " >> /opt/note/$today.html
grep :0 /etc/passwd >> /opt/note/$today.html
echo " " >> /opt/note/$today.html
echo "Files modified since yesterday " >> /opt/note/$today.html
find /etc -mtime -1 >> /opt/note/$today.html
echo "</pre>" >> /opt/note/$today.html
內容解密:
today=$(date +"%Y-%m-%d"):取得當前的日期,並儲存於變數today中,用於建立當天的報告檔案名稱。echo "<pre>" > /opt/note/$today.html:建立一個新的 HTML 檔案,並寫入<pre>標籤,表示預格式化文字的開始。last | grep -v root:查詢最近登入系統的使用者記錄,並過濾掉 root 使用者的記錄,將結果寫入報告檔案。grep :0 /etc/passwd:查詢具有 root 許可權(UID 為 0)的帳戶,並將結果寫入報告檔案,用於檢查是否有未授權的 root 帳戶。find /etc -mtime -1:查詢在過去一天內被修改的/etc目錄下的檔案,用於檢查是否有異常的組態變更。
差異比較檢查範例
# diff 2022-10-20.html 2022-10-21.html
4a5
> jamd:x:0:0:root:/root:/bin/sh
內容解密:
diff命令用於比較兩個檔案的差異。- 如果輸出結果為空,表示兩個檔案內容相同;否則,會列出具體的差異內容。
- 上述範例顯示,有一個新的 root 許可權帳戶
jamd在 2022-10-21 的報告中被新增,這可能表示系統已被入侵。