LPI Linux 認證/配置郵件列表
權重:1
描述: 安裝和維護郵件列表。透過檢視日誌監控和解決問題。
- 關鍵知識領域
- 安裝、配置和操作郵件列表
- Mailman 配置檔案、術語和工具
- Majordomo 配置檔案、術語和工具
- Ezmlm 配置檔案、術語和工具
- 以下是使用檔案、術語和工具的部分列表
- 不適用
Majordomo 是一個郵件列表管理程式。它的目標是處理發往特定電子郵件地址的所有傳入郵件,並將其重新分配到電子郵件地址列表。Majordomo 還負責新增和刪除電子郵件地址及其列表。
由於 Majordomo 負責管理電子郵件列表,因此它嚴重依賴於 MTA,如 Sendmail、Smail、Qmail 或 Postfix。
別名檔案(通常為 /etc/aliases)用於建立電子郵件地址的別名。例如,安裝 Majordomo 後,別名檔案中的條目通常如下所示
majordomo-owner: jarchie
此條目表示所有發往 majordomo-owner@host.com 的郵件實際上將傳送給 jarchie@host.com。請注意,沒有必要在 jarchie 後面新增 @host.com,因為兩個使用者都在同一主機上。如果需要將訊息重定向到不同主機上的不同使用者,則必須新增 @host.com 部分。
別名檔案中的另一種條目允許將電子郵件重定向到檔案中列出的多個地址
testlist: :include:/usr/local/majordomo-1.94.5/lists/testlist
此條目表示傳送到 testlist@host.com 的任何訊息將被重定向到檔案 /usr/local/majordomo-1.94.5/lists/testlist 中列出的所有地址。testlist 檔案可能如下所示
johnarchie@emeraldis.com srobirds@yahoo.com acreswell@geocities.com
Majordomo 能夠透過利用此功能來新增或刪除列表中的地址。處理訂閱請求時,使用者的電子郵件地址將附加到 testlist 檔案;處理退訂請求時,使用者的電子郵件地址將從 testlist 檔案中刪除。也可以透過使用文字編輯器(如 vi)手動新增或刪除地址,只需編輯檔案即可。
由於 Majordomo 需要能夠處理透過電子郵件傳送給它的命令,因此 Sendmail 必須能夠執行 Majordomo 程式並將訊息傳遞給它。這是透過在別名檔案中新增另一種型別的條目來實現的
majordomo: "|/usr/local/majordomo-1.94.5/wrapper majordomo"
程式 /usr/local/majordomo-1.94.5/wrapper 是一個包裝器(根據配置,為 SUID 和 SGID majordomo 或守護程式),它執行 Majordomo 程式。別名條目第二部分周圍的引號用於告訴 Sendmail 此條目的這部分是一個語句;如果 wrapper 和 majordomo 之間沒有空格,則引號將是不必要的。| 被稱為“管道”;它用於告訴 Sendmail 透過標準輸入將電子郵件傳送給包裝器。(由於包裝器在這裡所做的只是呼叫 majordomo,因此電子郵件實際上被髮送給 Majordomo。)包裝器接受一個引數 - 它要執行的程式的引數。(第一個引數之後的任何引數都將傳遞給包裝器正在執行的程式。)出於安全原因,包裝器僅執行位於 Majordomo 目錄 /usr/local/majordomo-1.94.5/ 中的程式。此限制可以防止程式設計師使用包裝器執行不應具有 Majordomo 許可權的程式。(例如,wrapper /bin/vi 將允許任何使用者編輯任何 Majordomo 配置檔案。)當訊息傳送到 majordomo@host.com 時,Sendmail 啟動包裝器,包裝器反過來啟動 majordomo,然後 Sendmail 透過標準輸入將訊息傳送到 majordomo 指令碼。Majordomo 然後從訊息中提取命令並相應地做出響應。
當然,Majordomo 是本文件圍繞的程式碼,它由一系列 Perl 指令碼組成,其唯一目的是管理郵件列表。
Majordomo 必須在特定的 UID 和 GID 下執行,這樣當執行任何指令碼時,它們將在 Majordomo 的 UID 下執行。因此,有必要確定 Majordomo 應該在哪個 UID 和 GID 下執行。此外,Majordomo 必須是 Sendmail 受信使用者
檢查 /etc/passwd 和 /etc/group 檔案以查詢未使用的 UID 和 GID。在本例中,選擇了 16 的 UID 和 16 的 GID。您必須決定 Majordomo 指令碼將駐留的位置。如果您使用的是陰影密碼檔案,請新增類似於
majordomo:x:16:16:Majordomo List Manager:/usr/local/majordomo-1.94.5:
的行到您的 /etc/passwd,並在 /etc/shadow 中新增相應的條目。
majordomo:*:10883:0:88888:7:::
使用這些檔案中的其他條目作為關於要新增內容的確切資訊的指南。這些只是我係統的值。如果您沒有使用陰影密碼,則只需要在 /etc/passwd 檔案中新增一個條目。
要建立 Majordomo 組,請新增類似於
majordomo:x:16:jarchie
的行到您的 /etc/group 檔案中。將您的使用者名稱附加到行的末尾將允許您訪問組可寫的 Majordomo 檔案。
Makefile 包含安裝 Majordomo 所需的所有資訊;通常有必要編輯 Makefile 中引用系統特定設定的行,這樣 Majordomo 才能在您的系統上乾淨地安裝。大多數預設設定都是正確的;但是,以下設定幾乎總是需要根據系統進行更改。
PERL = /bin/perl CC = cc W_HOME = /usr/test/majordomo-$(VERSION) MAN = $(W_HOME)/man W_USER = 123 W_GROUP = 45
應更改為更適合您的系統的設定。例如,在我的設定中,這些值被更改為
PERL = /usr/bin/perl CC = gcc W_HOME = /usr/local/majordomo-1.94.5 MAN = /usr/man W_USER = 16 W_GROUP = 16
此外,必須建立 majordomo.cf 檔案。建立此檔案的一種簡單方法是將提供的 sample.cf 檔案複製到 majordomo.cf 並對其進行編輯。
同樣,大多數設定在預設情況下都是正確的,但以下行可能需要根據您的系統從
$whereami = "example.com"; $whoami = "Majordomo\@$whereami"; $whoami_owner = "Majordomo-Owner\@$whereami"; $homedir = "/usr/test/majordomo"; $digest_work_dir = "/usr/local/mail/digest"; $sendmail_command = "/usr/lib/sendmail";
更改為更合適的設定,例如
$whereami = "kes.emeraldis.com"; $whoami = "majordomo\@$whereami"; $whoami_owner = "majordomo-owner\@$whereami"; $homedir = "/usr/local/majordomo-1.94.5"; $digest_work_dir = "/usr/local/majordomo-1.94.5/digest"; $sendmail_command = "/usr/sbin/sendmail";
$whoami 和 $whoami_owner 不需要更改 Majordomo 才能正常工作;但是,我更改了它們,因為我喜歡避免輸入大寫字母。$digest_work_dir 是一個臨時目錄,摘要檔案應該放在其中;此目錄應分配到您想要儲存摘要的位置。如果您不打算使用摘要列表,請不要擔心此選項。$whereami、$homedir 和 $sendmail_command 應更改為適合您系統的相應值。與 Makefile 不同,這些選項可以在安裝 Majordomo 後始終透過編輯 Majordomo 安裝目錄中的 majordomo.cf 來更改。(配置檔案在安裝期間只是被複制。)
下一步是編譯 Majordomo 包裝器。包裝器是唯一需要編譯的 Majordomo 元件,因為其他所有內容都是 Perl 指令碼的集合,因此不會被編譯。
$ make wrapper
要安裝 Majordomo 檔案,請執行以下命令
# make install # make install-wrapper
第一個命令可以作為 Majordomo 使用者執行(假設 majordomo 可以建立或訪問 $home_dir),但第二個命令需要作為 root 執行,這樣安裝指令碼才能將 Majordomo 包裝器設定為 SUID root。(由於 majordomo 是沒有登入 shell 或密碼建立的,如果您想以 majordomo 身份執行第一個命令,則需要以 root 身份 su majordomo 才能成為 majordomo。)
必須為 Majordomo 建立 Sendmail 別名,以便傳送給 Majordomo 的命令可以由 majordomo 處理,並且必須為 Majordomo 所有者建立別名,以便人們可以透過標準的 owner-majordomo 地址給您傳送電子郵件。將以下條目新增到您的別名檔案中
majordomo: "|/usr/local/majordomo-1.94.5/wrapper majordomo" owner-majordomo: jarchie majordomo-owner: jarchie
然後測試您的配置,作為普通使用者(而不是 majordomo 或 root),執行
$ /usr/local/majordomo-1.94.5/wrapper config-test
此程式可以檢測 Majordomo 安裝中的大多數問題。
要建立列表,請在 Majordomo 列表目錄中建立一個與列表名稱相同的檔案。例如,要建立一個名為 test 的列表,請作為 Majordomo 建立一個 test 檔案
[root@kes /]# su majordomo [majordomo@kes /]$ touch /usr/local/majordomo-1.94.5/lists/test
並新增相關的別名
test: :include:/usr/local/majordomo-1.94.5/lists/test owner-test: jarchie test-request: "|/usr/local/majordomo-1.94.5/wrapper request-answer test" test-approval: jarchie
現在透過向 Majordomo 傳送 lists 命令來測試列表的操作
[jarchie@kes jarchie]$ echo lists | mail majordomo
Majordomo 只需要一秒鐘就可以回覆一條包含當前設定的所有列表的訊息。接下來,嘗試傳送 help 命令。
[jarchie@kes jarchie]$ echo help | mail majordomo
Majordomo 應該回復包含 Majordomo 接受的所有命令的列表。儲存訊息以供將來參考可能是個好主意。
要檢視別名是否正常工作,請嘗試訂閱和退訂該列表
[jarchie@kes jarchie]$ echo subscribe test | mail majordomo
您將收到包含如何確認訂閱的說明以及確認您的命令已成功執行的信件的電子郵件。在發回確認資訊後,Majordomo 應該傳送兩封信 - 一封信說明您的訂閱請求已成功,另一封信歡迎您加入 test 列表。列表所有者也將收到一條訊息,說明您已訂閱該列表。
要退訂列表,請傳送 unsubscribe 命令
[jarchie@kes jarchie]$ echo unsubscribe test | mail majordomo
您應該收到一封信,說明您的命令已成功執行。
對於某些列表,可能希望 Majordomo 在訊息到達列表之前處理訊息。例如,Majordomo 有 resend 指令碼可以根據內容(例如禁忌詞語)自動過濾訊息,以防止人們向列表傳送 Majordomo 命令,以及其他功能。要使用這些選項,有必要使用一組更好的別名,例如
test: "|/usr/local/majordomo-1.94.5/wrapper resend -l test test-list" test-list: :include:/usr/local/majordomo-1.94.5/lists/test owner-test: jarchie test-owner: jarchie test-request: "|/usr/local/majordomo-1.94.5/wrapper majordomo -l test"
最後一個條目允許使用者簡單地向 test-request@kes.emeraldis.com 傳送包含 subscribe 的郵件,而不是向 majordomo@kes.emeraldis.com 傳送包含 subscribe test 的郵件。另外,請注意,如果 sendmail 使用 smrsh,上述別名應該引用安全路徑中的包裝器副本 - 通常是 /etc/smrsh/wrapper。
Majordomo 許可權設定錯誤導致 Majordomo 工作不正常的情況很常見。幸運的是,Sendmail 和 Majordomo 通常會給出指示問題的合理錯誤訊息。例如,lists 目錄必須由 sendmail 設定的 uid 使用者(通常是 mail 或 daemon)可執行。如果 sendmail 無法執行 lists,則必須放寬許可權。
[root@kes root]# chmod +x /usr/local/majordomo-1.94.5/lists
另一個常見問題是由 lists 目錄可由組寫入造成的。要解決此問題,可以清除組可寫入位,或使用 sendmail 選項 IncludeFileInGroupWritableDirPath。
Majordomo 旨在執行在隔離系統上;指令碼中存在幾個眾所周知的安全漏洞,允許任何能夠執行包裝器的本地使用者以 majordomo 使用者身份執行程式碼。如果 Majordomo 必須執行在為使用者提供 shell 訪問許可權的系統上,那麼建議加強對包裝器的許可權。可以透過清除世界可執行位並將包裝器 chgrp 給需要執行 Majordomo 指令碼的使用者來完成。例如,如果 Sendmail 和 MajorCool 都被用於執行包裝器,使用以下命令
[root@kes root]# cp /usr/local/majordomo-1.94.5/wrapper /etc/smrsh/wrapper [root@kes root]# chmod 4750 /usr/local/majordomo-1.94.5/wrapper [root@kes root]# chown root:nobody /usr/local/majordomo-1.94.5/wrapper [root@kes root]# chmod 4750 /etc/smrsh/wrapper [root@kes root]# chown root:mail /etc/smrsh/wrapper
來保護系統。這將允許 sendmail(在 mail 下執行)執行 /etc/smrsh/wrapper,同時允許 web 伺服器的 MajorCool(在 nobody 下執行)執行 /usr/local/majordomo-1.94.5/wrapper。但是,此解決方案將允許任何具有 mail 或 nobody 的 UID 或 GID 的使用者也訪問 majordomo 帳戶。為了保護 nobody 帳戶,重要的是不允許普通使用者使用伺服器端包含或 CGI 指令碼,除非這些服務不在 nobody 下執行。
關鍵術語、檔案和實用程式:Majordomo MTA