Crontab 是 Linux 系統管理員常用的工具,能夠設定定時任務,自動執行指令碼或指令。文章首先介紹 Crontab 的基本格式和使用方法,例如設定每日、每週或每月執行的任務,以及使用特殊的時間表示法,例如 @daily 或 @reboot。接著說明如何編輯 Crontab 檔案,以及如何設定實際的備份任務和 MySQL 掃描任務,並提供不同時間排程的範例。文章也介紹了 rc.d 指令碼,說明如何在系統啟動時自動執行服務,以及如何使用 update-rc.d 命令管理這些服務。此外,文章還介紹了 GUI 工具 rcconf,讓不熟悉命令列的使用者也能輕鬆管理啟動項。最後,文章切入 Python 指令碼編寫基礎,說明 Python 語言在駭客領域的重要性,以及如何使用 pip 安裝和管理第三方模組,讓讀者能結合 Crontab 和 Python 指令碼,開發更強大的自動化工具。文章中也以實際案例說明如何下載、安裝和使用第三方模組,例如 python-nmap,讓讀者能更快速地上手 Python 指令碼編寫。
Linux Crontab 定時工作排程
Linux 系統中的 Crontab 是一個強大的工具,能夠讓使用者自動執行任務。無論是定時檢查開放的網路連線埠、進行系統備份還是執行其他維護任務,Crontab 都能夠幫助你將這些工作自動化。這篇文章將詳細介紹如何使用 Crontab 來安排這些定時任務,並提供實際的案例和解說。
Crontab 基本格式
在 Crontab 中,每個任務都需要按照特定的格式來定義。以下是基本的格式:
M H DOM MON DOW USER COMMAND
- M:分鐘 (0 - 59)
- H:小時 (0 - 23)
- DOM:月中的日期 (1 - 31)
- MON:月份 (1 - 12)
- DOW:星期中的日期 (0 - 7,其中 0 和 7 都代表星期日)
- USER:執行命令的使用者
- COMMAND:要執行的命令或指令碼路徑
例如,如果你想要在每週一到五的凌晨 2:30 執行一個指令碼,可以這樣寫:
30 2 * * 1-5 root /root/myscanningscript
這行命令的意思是:
- 每天的第 30 分
- 在第 2 小時 (即凌晨 2:30)
- 每個月的每一天 (*)
- 每一個月 (*)
- 星期一到五 (1-5)
- 作為
root使用者 - 執行
/root/myscanningscript指令碼
編輯 Crontab 檔案
要編輯 Crontab 檔案,可以使用 crontab -e 命令來開啟編輯器。第一次執行這個命令時,系統會要求你選擇一個編輯器。預設是使用 /bin/nano,這是最簡單易用的選擇。
kali > crontab -e
如果你希望直接使用自己喜歡的文字編輯器,例如 leafpad,可以直接開啟 /etc/crontab 檔案:
kali > leafpad /etc/crontab
以下是 /etc/crontab 檔案的一部分範例:
# /etc/crontab: systemwide crontab
# Unlike any other crontab, you don't have to run the 'crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# which no other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && runparts /etc/cron.hourly
25 6 * * * root test x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
安排備份任務
作為系統管理員,你可能經常需要在非工作時間進行系統備份。假設你想在每週日的凌晨 2:00 自動執行備份任務,可以按照以下步驟進行:
- 編寫一個備份指令碼並儲存為
/bin/systembackup.sh。 - 編輯 Crontab 檔案並新增以下行:
00 2 * * 0 backup /bin/systembackup.sh
這行命令的意思是:
- 每天的第 0 分 (即整點)
- 在第 2 小時 (即凌晨 2:00)
- 每個月的每一天 (*)
- 每一個月 (*)
- 星期日 (0)
- 作為
backup使用者 - 執行
/bin/systembackup.sh指令碼
安排 MySQL 掃描器
假設你有一個 MySQL 掃描器指令碼 MySQLscanner.sh,用於檢查開放的 MySQL 常見連線埠(3306)。你可以將這個指令碼安排在工作時間內執行,以避免影響家庭網路的資源使用。
00 9 * * * user /usr/share/MySQLscanner.sh
這行命令的意思是:
- 每天的第 0 分 (即整點)
- 在第 9 小時 (即早上9點)
- 每個月的每一天 (*)
- 每一個月 (*)
- 每週的每一天 (*)
如果你希望在週末、夏季(六月至八月)且晚上兩點執行此掃描器:
00 2 * JUN-Aug SAT,SUN user /usr/share/MySQLscanner.sh
內容解密:
M:分鐘(固定為第「零」分鐘)
H:小時(固定為「兩點」)
DOM:月中的日期(固定為「每一天」,不限制)
MON:月份(固定為「六月至八月」)
DOW:星期中的日期(固定為「星期六與星期日」)
USER:使用者(固定為「一般使用者」)
COMMAND:要執行的指令或指令碼路徑(固定為「/usr/share/MySQLscanner.sh」)。
使用crontab和rc.d指令碼來設定定時任務
在Linux系統中,管理員常需設定定時任務來執行特定指令碼或服務。crontab和rc.d指令碼是兩種常見的方法,前者用於設定定時任務,後者則用於在系統啟動時自動啟動服務。以下將詳細介紹這兩者的使用方法。
crontab的基本使用
crontab是一個用於設定和管理定時任務的工具。每個使用者都可以擁有自己的crontab檔案,其中包含需要執行的任務及其時間。以下是crontab檔案的基本格式:
* * * * * command to be executed
- - - - -
| | | | |
| | | | +
---
-- Day of the week (0 - 6) (Sunday=0)
| | | +
---
---
- Month (1 - 12)
| | +
---
-
---
-- Day of the month (1 - 31)
| +
---
-
---
---
- Hour (0 - 23)
+
---
-
---
-
---
-- Minute (0 - 59)
例如,要在每週六和日的2點執行/usr/share/MySQLscanner.sh指令碼,可以在crontab中新增以下行:
00 2 * 6-8 0,6 user /usr/share/MySQLscanner.sh
這樣設定後,指令碼只會在六月、七月和八月的週末執行。
crontab捷徑
crontab提供了一些捷徑來簡化時間設定:
@yearly或@annually:每年一次@monthly:每月一次@weekly:每週一次@daily或@midnight:每天 midnight(即每日零點)@noon:每天 noon(即每日中午12點)@reboot:系統重啟時
例如,要在每天 midnight執行MySQL scanner,可以新增以下行:
@midnight user /usr/share/MySQLscanner.sh
在系統啟動時使用rc指令碼
當Linux系統啟動時,會執行一系列指令碼來設定環境。這些指令碼稱為rc指令碼,位於/etc/init.d/目錄下。根據不同的執行級別(runlevel),rc指令碼會啟動不同的服務。
Linux執行級別
Linux系統有多個執行級別,每個級別表示不同的服務狀態:
0:停止系統1:單使用者模式2–5:多使用者模式6:重啟系統
新增服務到rc.d
使用update-rc.d命令可以將服務新增到rc.d指令碼中,使其在系統啟動時自動執行。例如,要讓PostgreSQL資料函式庫在系統啟動時自動啟動,可以使用以下命令:
kali > update-rc.d postgresql defaults
這樣設定後,PostgreSQL將會在系統啟動時自動啟動。
使用GUI新增服務到啟動項
對於不熟悉命令列操作的使用者,可以透過GUI工具來新增服務到啟動項。Kali Linux中的rcconf工具就是一個簡單的GUI工具,可以用來選擇啟動項。
首先安裝rcconf:
kali > apt-get install rcconf
安裝完成後,執行rcconf:
kali > rcconf
在開啟的GUI中,可以選擇需要在系統啟動時自動執行的服務。
實踐練習
以下是一些練習題來幫助鞏固所學知識:
- 設定MySQLscanner.sh指令碼在每週三下午3點執行。
- 設定MySQLscanner.sh指令碼在四月、六月和八月的每個月10號執行。
- 設定MySQLscanner.sh指令碼在每週二至四上午10點執行。
- 使用捷徑設定MySQLscanner.sh指令碼在每天中午12點執行。
- 更新rc.d指令碼以使PostgreSQL資料函式庫在系統啟動時自動執行。
- 安裝並使用rcconf工具將PostgreSQL和MySQL資料函式庫設為系統啟動時自動執行。
這些練習將幫助你更好地理解和應用crontab和rc.d指令碼。
Python 指令碼編寫基礎
在成為高階駭客的道路上,基本的指令碼編寫技能至關重要。如果一名初學者僅依賴他人開發的工具,那麼他們很可能會被困在「指令碼小子」的領域內。這意味著你將限於使用他人開發的工具,這不僅降低了成功的機會,還增加了被防毒軟體(AV)、入侵檢測系統(IDS)以及法律執法機構發現的風險。擁有基本的指令碼編寫技能,可以讓你升級為高階駭客。
在第八章中,玄貓已經介紹了 bash 指令碼基礎並構建了一些簡單的指令碼,包括 MySQLScanner.sh,這個指令碼可以找到執行常見 MySQL 資料函式庫系統的機器。在這一章中,玄貓將開始探討駭客最廣泛使用的指令碼語言:Python。許多流行的駭客工具都是用 Python 編寫的,包括 sqlmap、scapy、社交工程工具包(SET)、w3af 等。Python 有許多重要特性使其特別適合駭客使用,其中最重要的一點是它擁有大量的函式庫——這些函式庫是可以外部匯入並重複使用的預構建程式碼模組,提供一些強大的功能。Python 自帶超過 1,000 個內建模組,還有更多模組可在各種其他儲存函式庫中找到。
加入 Python 模組
當你安裝 Python 的時候,同時也會安裝它的一組標準函式庫和模組,這些函式庫和模組提供了廣泛的功能,包括內建資料型別、例外處理、數值和數學模組、檔案處理、密碼服務、網際網路資料處理以及與網際網路協定(IP)互動等。
儘管這些標準函式庫和模組提供了強大的功能,但你可能需要或想要使用更多第三方模組。可用於 Python 的第三方模組非常廣泛,這也是為什麼大多數駭客更喜歡用 Python 進行指令碼編寫。你可以在 PyPI(Python Package Index)上找到全面的第三方模組列表。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Linux Crontab 與 Python 指令碼編寫
package "Linux Shell 操作" {
package "檔案操作" {
component [ls/cd/pwd] as nav
component [cp/mv/rm] as file
component [chmod/chown] as perm
}
package "文字處理" {
component [grep] as grep
component [sed] as sed
component [awk] as awk
component [cut/sort/uniq] as text
}
package "系統管理" {
component [ps/top/htop] as process
component [systemctl] as service
component [cron] as cron
}
package "管線與重導向" {
component [| 管線] as pipe
component [> >> 輸出] as redirect
component [$() 命令替換] as subst
}
}
nav --> file : 檔案管理
file --> perm : 權限設定
grep --> sed : 過濾處理
sed --> awk : 欄位處理
pipe --> redirect : 串接命令
process --> service : 服務管理
note right of pipe
命令1 | 命令2
前者輸出作為後者輸入
end note
@enduml小段落標題
PyPI 是 Python 套件索引,提供了大量可供下載和安裝的第三方模組。
使用 pip 安裝 Python 模組
Python 有專門用於安裝和管理 Python 套件的包管理器稱為 pip(Pip Installs Packages)。由於這裡使用的是 Python 3,你需要 pip for Python 3 來下載和安裝套件。你可以透過以下指令從 Kali 儲存函式庫下載並安裝 pip:
kali > apt-get install python3-pip
現在,要從 PyPI 下載模組,你只需輸入以下指令:
kali > pip3 install <package name>
當你下載這些套件時,它們會自動放置在 /usr/local/lib/<python version>/dist-packages 目錄中。例如,如果你使用 pip 安裝了 SNMP 協定的 Python 實作版本(適用於 Python 3.6),你會在 /usr/local/lib/python3.6/pysnmp 中找到它。如果你不確定一個套件被放置在系統中的位置(有些 Linux 發行版可能使用不同目錄),你可以輸入 pip3 跟著 show 和套件名稱:
kali > pip3 show pysnmp
內容解密:
「pip3 show pysnmp」命令會顯示關於 pysnmp 模組的一些詳細資訊。
Name: pysnmp
Version: 4.4.4
Summary: SNMP library for Python
Homepage: https://github.com/etingof/pysnmp
Author: Ilya Etingof <etingof@gmail.com>
Author-email: etingof@gmail.com
License: BSD
Location: usr/local/lib/python3.6/dist-packages
Requires: ptsmi, pyasn1, pycryptodomex
小段落標題
這個輸出展示了關於 pysnmp 模組的一些詳細資訊,包括所在位置。
安裝第三方模組
要安裝由 Python 社群成員建立的第三方模組(而不是官方發行的 Python 套件),你可以簡單地使用 wget 下載它們並線上上儲存它們。然後解壓縮模組並執行 python setup.py install 指令來完成安裝。
舉例來說,讓我們從線上儲存函式庫下載並安裝第八章中使用的埠掃描工具 nmap 的 Python 模組。
首先需要從 xael.org 下載該模組:
kali > wget http://xael.org/norman/python/python-nmap/python-nmap-0.3.4.tar.gz
內容解密:
wget 命令用來從指定 URL 下載檔案。
當套件下載完成後,需要用 tar 工具來解壓縮它:
kali > tar -xzf python-nmap-0.3.4.tar.gz
然後進入新建立的目錄:
kali > cd python-nmap-0.3.4/
最後在該目錄中執行以下指令來安裝新模組:
kali > ~/python-nmap-0.3.4> python setup.py install
內容解密:
「python setup.py install」命令用來執行設定檔並完成安裝過程。
小段落標題
透過以上步驟完成python-nmap-0.3.4.tar.gz檔案下載及安裝過程。
結束輸出