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 自動執行備份任務,可以按照以下步驟進行:

  1. 編寫一個備份指令碼並儲存為 /bin/systembackup.sh
  2. 編輯 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中,可以選擇需要在系統啟動時自動執行的服務。

實踐練習

以下是一些練習題來幫助鞏固所學知識:

  1. 設定MySQLscanner.sh指令碼在每週三下午3點執行。
  2. 設定MySQLscanner.sh指令碼在四月、六月和八月的每個月10號執行。
  3. 設定MySQLscanner.sh指令碼在每週二至四上午10點執行。
  4. 使用捷徑設定MySQLscanner.sh指令碼在每天中午12點執行。
  5. 更新rc.d指令碼以使PostgreSQL資料函式庫在系統啟動時自動執行。
  6. 安裝並使用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檔案下載及安裝過程。


結束輸出