Linux 系統管理員和資安人員都需要熟悉程式管理技術。精確掌握程式狀態、資源消耗和控制方法,才能確保系統穩定執行並有效應對資安威脅。本文從 ps 命令的程式篩選開始,逐步深入 top 的動態監控、kill 的強制終止,以及 nice 和 renice 的優先順序調整。接著探討 at 和 crond 的排程機制,讓系統自動執行任務。最後,文章介紹環境變數的管理,如何設定和應用這些變數來控制系統行為、提升效能,並在資安情境下隱藏操作痕跡,提供更全面的程式管理視野。這些技術的熟練運用,能有效提升系統資源利用率,確保服務穩定性,並強化系統的安全性。
篩選程式以找到特定程式
在這段篩選後的輸出中,你應該可以看到所有比對「msfconsole」的程式。首先顯示的是 Metasploit 使用的 PostgreSQL 資料函式庫,接著是來自 /usr/bin/msfconsole 的 msfconsole 程式本身。最後,你應該會看到用來查詢 msfconsole 的 grep 命令。請注意,輸出中沒有包含 ps 命令的欄位標題清單。因為關鍵字 msfconsole 不在標題中,所以沒有顯示。即便如此,結果仍以相同的格式顯示。
從這些結果中,你可以學到一些重要的資訊。例如,如果你需要知道 Metasploit 使用了多少資源,可以參考第三欄(CPU 欄),發現它正使用你的 CPU 的 35.1%,並參考第四欄,發現它正使用系統記憶體的 15.2%。這可是相當多的資源需求!它真是一頭貪婪的獸!
用 top 命令找到最貪婪的程式
當你執行 ps 命令時,程式會按照它們啟動的順序顯示,因為核心按啟動順序分配 PID,所以你看到的是按照 PID 號碼排序的程式。
在許多情況下,我們想要知道哪些程式正在使用最多的資源。這時候 top 命令就派上用場了,因為它會按照資源使用量排序顯示程式,從最大開始。與只給我們一次快照的 ps 命令不同的是,top 會動態更新列表——預設每 10 秒更新一次。你可以觀察和監控那些資源貪婪的程式。
kali > top
內容解密:
這段命令會啟動 top 工具,該工具會動態顯示系統中的所有程式及其資源使用情況。這樣你就可以即時監控系統中的高資源消耗程式。
top - 15:31:17 up 2 days, ^;50, 4 users, load average: 0.00, 0.04, 0.09
Tasks: 176 total, 1 running, 175 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.3 us, 0.7 sy, ).) ni, 97.4 id, 0.0 wa, 0.0 hi, 0.0 si
KiB Mem : 1491220 total, 64848 free, 488272 used, 938100 buff/cache
KiB Swap : 1046524 total, 1044356 free, 2168 used, 784476 avail MEM
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
39759 root 20 0 893180 247232 11488 S 0.7 16.6 1:47.88 ruby
39859 root -2 - - - - S - -
39933 root -2 - - - - S - -
snip
專案解說:
- top:顯示目前時間、系統運作時間、使用者數及負載平均值。
- Tasks:顯示總程式數、執行中的程式數、睡眠中的程式數、停止中的程式數及僵屍程式數。
- %Cpu(s):顯示 CPU 各種狀態的使用百分比。
- KiB Mem:顯示記憶體總量、可用量、已用量及快取量。
- KiB Swap:顯示交換區總量、可用量及已用量。
- PID:顯示程式 ID。
- USER:顯示程式擁有者。
- PR:顯示優先順序。
- NI:顯示 nice 值。
- VIRT:顯示虛擬記憶體使用量。
- RES:顯示實際記憶體使用量。
- SHR:顯示分享記憶體使用量。
- S:顯示程式狀態(S:睡眠)。
- %CPU:顯示 CPU 消耗百分比。
- %MEM:顯示記憶體消耗百分比。
- TIME+:顯示程式執行時間。
- COMMAND:顯示啟動該程式的命令。
用 nice 和 renice 改變程式優先順序
在資訊安全領域中,「nice」這個詞語並不常見,但在 Unix/Linux 作業系統中,「nice」命令是用來影響核心對某個程式優先順序處理的。當我們執行 ps 命令時,會看到大量同時執行在系統上的程式,所有這些程式都在爭奪有限的資源。雖然核心最終會決定某個程式的優先順序,「nice」命令可以建議某個特定程式應該提升優先順序。
「nice」這個詞語背後的概念是當你使用它時,你決定如何對其他使用者和其他系統進行「友好」處理:如果你的某個程式佔用了大部分系統資源,那麼你就不算太友好。
「nice」值範圍
「nice」值範圍從 –20(高優先順序)到 +19(低優先順序),其中零為預設值。一個高「nice」值表示低優先順序;相反地,一個低「nice」值表示高優先順序(當然,這意味著對其他使用者和系統不太友好)。當一個程式啟動時,它會繼承父程式的「nice」值。不過只有該過程擁有者才能降低它自己的優先順序(即增加「nice」值),但不能提升(減少「nice」值)。當然了,超級使用者或 root 使用者可以任意設定「nice」值。
在啟動時設定優先順序
假設我們有一個位於 /bin/slowprocess 的名為 slowprocess 的過程。如果我們希望加速其完成時間,可以在啟動過程時設定優先順序:
kali > nice -n -10 /bin/slowprocess
內容解密:
這個命令會將 slowprocess 的優先順序增加 –10(即提高優先順序),從而讓它佔用更多系統資源來加速完成時間。
相反地,如果我們希望對其他過程友好一些並降低其優先順序:
kali > nice -n +10 /bin/slowprocess
在執行中改變優先順序
與 nice 不同的是,「renice」命令接受絕對值(範圍從 –20 到 +19)來設定優先順序而不是增減。「renice」還需要目標過程的 PID ,而不是過程名稱。因此如果我們想要改變一個已經執行且 PID 是 6996 的過程:
kali > renice +5 -p 6996
內容解密:
這個命令將名為 slowprocess 的過程優先順序設為 +5 (將其優先順序調低),這樣其他程式就可以獲得更多資源來執行。
請注意這些命令和技巧可以幫助你更高效地管理系統中的多重任務和有效利用系統資源。
處理Linux程式:調整優先順序、強制終止及背景執行
在Linux系統中,程式管理是一項關鍵技能。無論是調整程式的執行優先順序、強制終止異常行為的程式,還是將程式移至背景執行,都需要深入理解相關的命令與技巧。本文將詳細介紹如何使用renice、kill、top、killall及背景執行命令來有效管理Linux程式。
調整程式優先順序
在Linux中,每個程式都有一個優先順序值,稱為nice值。這個值可以調整以改變程式的執行優先順序。nice值範圍從-20到19,數值越低,優先順序越高。只有root使用者可以將程式的優先順序調低,而任何使用者都可以使用renice命令降低程式的優先順序。
kali > renice 20 6996
內容解密:
- renice命令:用於調整已執行程式的優先順序。
- 20:表示將程式的優先順序設為20(最低優先順序)。
- 6996:表示目標程式的PID(Process ID)。
此外,你也可以使用top命令來動態改變程式的優先順序。在top命令中執行時,按下R鍵,然後輸入PID和新的nice值即可。
此圖示說明瞭使用renice命令和top命令來調整程式優先順序的流程。
終止異常行為的程式
在某些情況下,程式可能會消耗過多系統資源或展現異常行為,這些異常行為的程式通常被稱為僵屍程式(zombie process)。這些僵屍程式會浪費系統資源,導致其他有用的程式無法正常執行。
當你識別出這些問題程式時,可以使用kill命令來終止它們。kill命令有多種不同的訊號可供使用,每個訊號都有不同的作用。
kali > kill -9 6996
內容解密:
- kill命令:用於終止執行中的程式。
- -9:表示傳送SIGKILL訊號,強制終止目標程式。
- 6996:表示目標程式的PID。
常用訊號說明:
- SIGHUP (1):重啟目標程式。
- SIGINT (2):傳送中斷訊號,通常用於停止前台執行的進行。
- SIGQUIT (3):終止目標並產生核心轉傾(core dump)。
- SIGTERM (15):預設終止訊號,要求目標進行自主清理。
- SIGKILL (9):強制終止目標進行。
如果不知道目標進行的PID,可以使用 killall 命令:
kali > killall -9 zombieprocess
內容解密:
- killall 命令:根據進行名稱來終止多個進行。
- -9:表示傳送SIGKILL訊號。
- zombieprocess:表示要終止的進行名稱。
背景執行與前台切換
在Linux中,所有命令都是在shell中執行。當你在命令列或圖形介面中執行一個長時間執行的命令時,shell會等待該命令完成才傳回新的一個提示符。如果你想讓該命令在背景執行以便同時進行其他工作,可以在命令後面加上&符號。
kali > leafpad newscript &
內容解密:
- leafpad newscript &:將leafpad編輯器放在背景執行以編輯newscript檔案。
- &:表示將該進行放在背景執行。
如果需要將背景執行的進行移到前台執行,可以使用 fg 命令:
kali > fg 1234
內容解密:
- fg 命令:將指定PID 的背景進行移到前台執行。
- 1234:表示目標進行 的PID。
如果不知道進行 的PID ,可以使用 `ps 命令 查詢:
kali > ps aux | grep leafpad
安排進行執行
Linux系統管理員和駭客經常需要安排進行在特定時間執行。例如:系統管理員可能需要每週六晚上2點備份系統;駭客可能需要定期執行刺探指令碼來查詢開放埠或漏洞。在Linux 中,可以使用 at 和 crond 來安排進行。
kali > at 2am Saturday -f /path/to/script.sh
內容解密:
- at 命令 :安排一個單次未來作業執行。
- 2am Saturday :指定時間和日期。
- -f /path/to/script.sh :指定要執行的指令碼路徑。
crond 的詳細介紹:
crond 用於安排每日、每週或每月定期作業執行。其組態檔案通常位於 /etc/crontab 或 /etc/cron.d/
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Linux 程式管理:篩選、終止、優先順序調整與排程
package "安全架構" {
package "網路安全" {
component [防火牆] as firewall
component [WAF] as waf
component [DDoS 防護] as ddos
}
package "身份認證" {
component [OAuth 2.0] as oauth
component [JWT Token] as jwt
component [MFA] as mfa
}
package "資料安全" {
component [加密傳輸 TLS] as tls
component [資料加密] as encrypt
component [金鑰管理] as kms
}
package "監控審計" {
component [日誌收集] as log
component [威脅偵測] as threat
component [合規審計] as audit
}
}
firewall --> waf : 過濾流量
waf --> oauth : 驗證身份
oauth --> jwt : 簽發憑證
jwt --> tls : 加密傳輸
tls --> encrypt : 資料保護
log --> threat : 異常分析
threat --> audit : 報告生成
@enduml
此圖示說明瞭使用 `at 和 crond 安排作業執行的流程。
總結來說,熟練掌握 Linux 的程式管理技巧對於提升系統效率和安全性至關重要。無論是調整優先順序、終止異常進行、背景執行還是安排作業執行,都需要深入理解相關命令和技巧。
Linux 中的 Process 管理
Linux 中的 Process 管理是每位 Linux 使用者及駭客必備的技能。掌握如何檢視、找到、終止、調整優先順序以及排程 Process 是管理 Linux 系統的關鍵。在進行攻擊時,駭客可能需要找到並終止目標系統上的特定 Process,例如防毒軟體或防火牆,同時也需管理多個 Process 並在攻擊中調整其優先順序。
時間格式與排程
at 命令允許使用者在指定時間執行命令。以下是常見的時間格式:
| 時間格式 | 含義 | |
–|
| | at 7:20pm | 預定在當天下午 7:20 執行 | | at 7:20pm June 25 | 預定在六月二十五日下午 7:20 執行 | | at noon | 預定在當天中午執行 | | at noon June 25 | 預定在六月二十五日中午執行 | | at tomorrow | 預定在明天執行 | | at now + 20 minutes | 預定在當前時間後 20 分執行 | | at now + 10 hours | 預定在當前時間後 10 小時執行 | | at now + 5 days | 預定在當前日期後 5 天執行 | | at now + 3 weeks | 預定在當前日期後 3 周執行 | | at 7:20pm 06/25/2019 | 預定在 2019 年六月二十五日下午 7:20 執行 |
當使用者以指定時間啟動 atdaemon,at 命令會進入互動模式,並顯示 at> 提示符。在此處,使用者可以輸入要在指定時間執行的命令。例如:
kali >at 7:20am
at >/root/myscanningscript
此範例會將 myscanningscript 排程為今天早上 7:20 執行。
Process 的檢視與管理
以下是一些常用命令來檢視和管理 Process:
ps 命令:用於顯示目前正在執行的 Process。
ps auxaux標誌會顯示所有使用者的所有 Process。top 命令:實時顯示系統資源使用情況及目前正在執行的 Process。
topkill 命令:用於終止指定的 Process。
kill <PID><PID>是要終止的 Process ID。renice 命令:用於調整目前正在執行的 Process 的優先順序。
renice <priority> -p <PID><priority>是新的優先順序值,範圍從 -20(最高優先順序)到 +19(最低優先順序)。
指令碼排程
使用者可以建立一個指令碼並將其排程為特定時間執行。以下是如何建立並排程一個指令碼的範例:
# 建立一個名為 myscanning 的指令碼
touch myscanning
# 編輯指令碼內容(內容不重要)
echo "echo 'This is a scan script'" > myscanning
# 排程指令碼於下週三凌晨一點執行
at now +3 days +1 hour < myscanning
內容解密:
此段落介紹瞭如何建立和排程一個指令碼,以便在特定時間自動執行。首先,使用 touch 命令建立一個名為 myscanning 的指令碼檔案。然後,使用 echo 命令將一些內容寫入該指令碼中。最後,使用 at 命令將該指令碼排程為三天後的一點執行。這裡使用了 now +3 days +1 hour 作為時間引數,表示從當前時間開始計算三天一小時後。
使用者環境變數管理
環境變數是控制系統外觀、行為及感覺的系統全域變數。使用者可以改變這些變數來提升系統效能、自訂工作環境並隱藏蹤跡。
檢視環境變數
可以使用 env 命令來檢視所有預設環境變數:
kali >env
檢視所有變數
若要檢視所有變數(包括 shell 變數、本地變數和 shell 函式),可以使用 set 命令:
kali >set | more
指令碼中使用環境變數
使用者可以在指令碼中設定和使用環境變數。以下是一些常見的環境變數:
HOME:使用者主目錄路徑。PATH:系統搜尋可執行檔案的路徑。SHELL:預設 shell 路徑。
Manage User Environment Variables in Linux
瞭解並管理 Linux 中的環境變數對於提升系統效能、方便操作以及隱蔽蹤跡都至關重要。雖然新手可能會覺得環境變數難以掌握,但熟悉它們是提升 Linux 技能不可或缺的一部分。
概念與分類別
Linux 中有兩種型別的變數:shell 和 environment(環境)。environment(環境)變數是系統全域變數,控制系統外觀、行為及感覺,並且會被子 shell 或 process繼承。shell(殼層)變數則僅在設定它們的 shell 中有效。
這些變數通常以 KEY=value 的形式存在,多個值則以 KEY=value1:value2 的形式表示。如果值中包含空格,則需用引號括起來。
檢視與修改環境變數
檢視預設環境變數
可以使用以下命令來檢視所有預設環境變數:
kali >env
這會列出所有系統預設的 environment(環境)變數。
檢視所有變數
若要檢視包括 shell(殼層)和 environment(環境)變數、自訂變數以及命令別名等全部託管內容,可使用 set命令:
kali >set | more
指令碼中的應用
在 Kali Linux 中,你可以透過編輯 shell 組態檔來設定和修改 environment(環境)和 shell(殼層)變數。這些組態檔通常包括 .bashrc、 .bash_profile 和 .profile。
例如,你可以在 .bashrc 中新增如下內容來設定一個自訂的 PATH:
export PATH=$PATH:/custom/bin/
這樣做不僅可以提升你對系統的控制力度,還能隱藏你對系統所做出的改動。
應使用案例項與練習題目
- 根據實際情況來列出可能發生的一些錯誤情形與其對應解決方案。
- 在 vps 上進行應用進行操作以觀察其中差異。
- 在不同 linux 虛擬機器上進行更多練習以熟悉操作。
- 操作相關指令時也需注意其語法與專業術語等相關知識點。