|
 |
推荐文章 |
|
|
|
|
|
|
|
|
|
|
|
◎官方網站: http://www.procmail.org/
◎敘述
基本上來說 procmail 可以和個人 .forword 轉信檔案結合.
不過若是以系統管理者安裝的話,可以直接結合 mailer 送信程式.
當procmail啟動時,首先會先設定一些環境變數作為預設的變數.
並且從stdin(標準輸入) 讀取郵件訊息,從表頭中區分郵件主體.
此時,若沒有執行其他的命令列參數,procmail將會讀取家目錄下的 .procmailrc 檔案
依據這個檔案進行處理,郵件訊息將會分散到右邊的資料夾.
如果找不到rc檔案,或是rc檔案處理失敗,
procmail將會把信件存到系統原先預設的郵件位置.
如果rc檔案不存在 或是沒有附加上 -p 參數執行, procmail 將會優先讀取
家目錄中的 .procmailrc 檔案.
此檔案用來解釋 /usr/local/etc/procmailrc 命令.(如果此檔案存在的話..= =")
所以當建立 /usr/local/etc/procmailrc 時,請務必留心.
如果情況允許,請用root權限進行處理.
若透過 suid root 或是以root權限執行,procmail可以視為郵件遞送媒介.
procmail也可以視為一個普通的郵件過濾器.
procmail也可以作為用來專門解決郵件過濾.
例如:先前版本被用來鑲入sendmail規則.
關於rc檔案的格式,請參閱 procmailrc(5)
更進一步的資料,請參閱 procmailsc(5)
相關rc檔案的範例檔,請參閱 procmailex(5)
◎安裝
◎語法
procmail [-ptoY] [-f fromwhom]
[parameter=value | rcfile] ...
procmail [-toY] [-f fromwhom] [-a argument] ...
-d recipient ...
procmail [-ptY] -m [parameter=value] ... rcfile
[argument] ...
procmail [-toY] [-a argument] -z
procmail -v
◎執行參數
-v 顯示版本資訊,包含編譯時間,設定檔..
-p 保留任何的舊環境變數.通常procmail在啟動時會清除環境變數.
(except for the value of TZ)
一般來說,procmail會蓋過所有已經存在的環境變數.
也就是說他會*快樂的*用自己定義的變數,蓋過任何先前已經定義的環境變數.
至於有哪些環境變數會被預先設置 請參閱 procmailrc(5)
若 -p 和 -m 參數被定義,
那麼會被預先設定 LOGNAME, HOME, SHELL, ORGMAIL 和 MAILDIR.
-t 當procmail無法遞送郵件時不會被退信而是把信件放到郵件暫存區稍後再試.
-f fromwhom
讓procmail重建郵件的"From" ,讓fromwhom做為郵件的寄發者.
若fromwhom包含-符號,則procmail只是單純的變更From部分的修改時間.
(若From部分不存在,則會產生一個新的)
-o 簡單的覆蓋假造的"From"部分,而非允許每一個人都可以產生"From"部分.
-Y 呈現傳統的Berkeley郵件信箱格式,忽略Content-Length部分.
-a argument
設定變數1($1)的值為argument.用來傳遞meta訊息.
主要是用來傳遞針對sendmail mailer規則中關於$@x 訊息.
(泡泡:$@為the host,x則為full-name)
-d recipient 明確的遞送模式,遞送程式以本機的使用者為遞送收件者
-m 將procmail視為單純的郵件過濾器.以此模式執行必須先行定義rc檔案.
若rc完整檔案路徑為 /usr/local/etc/procmailrcs/ 開始,
則procmail將會具有此檔案的擁有者身分.
-z 開啟LMTP模式(Local Mail Transfer Protocol)
◎說明
任何參數包含 = 將會被視為指定環境變數.
其餘參數將會被認定為rc檔案路徑
(若非使用完整路徑或用./表示目前資料夾,其餘都是以家目錄為相對路徑)
除非加上-m參數,若加上此參數情況則以目前資料夾做為相對路徑.
若沒有定義rc檔案,procmail將會讀取家目錄下的.procmailrc 檔案.
再不然的話,則會以命令列定義的變數執行.
◎範例:
雖然 man page 說您若不是對 sendmail.cf 語法非常熟悉的管理者
,請跳過這一部份 .. 不過泡泡還是有加註一些說明,希望您能夠大概了解.
若真有興趣去翻翻 Eric Allman 寫的 sendmail 書籍 O'REILLY 出版. | 當procmail要與sendmail規則相結合時,常會用到-m參數.
為了達到這個目的,在sendmail.cf檔案中額外建立procmail的mailer是非常方便的.
看起來可能會像是這個樣子:
Mprocmail, P=/usr/local/bin/procmail, F=mSDFMhun, S=11, R=21,
A=procmail -m $h $g $u
泡泡說明:
M 設定義郵件遞送程式(mail delivery agent)
P 設定程式路徑
F 設定程式參數
S 定義採用哪一個規則(rule set)來改寫郵件寄件者的email位址.
R 定義採用哪一個規則(rule set)來改寫郵件收件者的email位址.
A 設定程式於命令列執行時採用的參數 | 可以讓您用類似以下的規則來進行郵件過濾:
R$*<@some.where>$*
$#procmail $@/etc/procmailrcs/some.rc $:$1@some.where.procmail$2
R$*<@$*.procmail>$*
$1<@$2>$3 Already filtered, map back
泡泡說明:
符合 任意字串含空字元($*)<@some.where>任意字串含空字串($*) 則
郵件遞送程式($#)為procmail
來源host($@)為/etc/procmailrcs/some.rc
使用者($:)為$1@some.where.procmail$2
在符合第一行規則(R)後 進行第二行規則比對.
符合 任意字串含空字元($*)<@任意字串含空字元($*).procmail>任意字串含空字元$*
化簡為 $1<@$2>$3
Already filtered, map back只是單純的註解.
第一行定義 mail delivery agent (郵件遞送程式), host 和 user ;
第二行把email address進行簡化. | rc檔案的範例:
SENDER = "<$1>" # fix for empty sender addresses
SHIFT = 1 # remove it from $@
:0 # 主題包含junk的信件 送往 /dev/null
* ^Subject:.*junk
/dev/null
:0 w # 放行其他信件
! -oi -f "$SENDER" "$@"
◎小結:
結合sendmail後,剩下來的就是編輯過濾方式,就可以完成相關的 procmail 設定.
◎相關檔案:
/usr/local/etc/procmailrc 基本全域性的rc設定檔案
/usr/local/etc/procmailrcs/ rc檔案的存放資料夾
$HOME/.procmailrc 個人的procmail設定檔
◎注意:
由於 /usr/local/etc/procmailrcs/ 資料夾非常特殊,
若一般使用者能夠在此使用chown權限,那麼就會取得root或是其他使用者的權限.
所以最低限度,請務必讓這個資料夾只能夠讓root執行.
泡泡說明:
若使用者test新增一個檔案內容為 rm -rf / 並且以test帳號身分執行該檔案
那麼該使用者就可以編輯那個檔案並且取得以root執行的權限.
並刪除所有磁區 | ◎作者:
Stephen R. van den Berg <srb@cuci.nl>
Philip A. Guenther <guenther@sendmail.com>
◎資料來源: procmail(1)
|
|
|
|
|
|
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
|
|
|
|
|
责任编辑: 原点 |
投稿作者: 本站收集 |
|
|
信息来源: 网络 |
录入时间: 2005-3-13 |
|
|
|
| |
|