[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 應用技術 > Qmail > 正文
qmail郵件用戶與系統用戶分開詳解
本文出自:http://www.linuxeden.com 作者: (2001-12-18 10:29:25)
qmail郵件用戶完全可以與系統用戶分開,把用戶信息都放在MYSQL/POSTGRESQL中. 

具體實踐起來可以多看看QMAIL的幫助,做好思想準備,心臟不好者請慎重考慮現在許多做的FREEMAIL系統都是使用非系統用戶帳號,有的甚至編寫自己的FILE SYSTEM,效率更高。 

環境 

RedHat6.2(2.2.12-20)+mysql.3.22.30+qmail1.03+checkpassword0.81,測試過的PATCH為1.0和1.1。 

數據庫名設為QMAIL,QMAIL是按默認設置安裝在/var/qmail下,下載的源文件都放在 /usr/local/src下。
 
下載 

QMAIL 
CHECKPASSWORD
PATCH
MYSQL

安裝 

建立數據庫,結構如下: 

CREATE TABLE alias ( 
username varchar(32) DEFAULT '' NOT NULL, 
alias varchar(64) DEFAULT '' NOT NULL, 
alias_username varchar(32) DEFAULT '' NOT NULL, 
alias_host varchar(64) DEFAULT '' NOT NULL, 
KEY username (username), 
KEY alias (alias), 
UNIQUE user_alias (username,alias,alias_username,alias_host) 
); 

CREATE TABLE mailbox ( 
username varchar(32) DEFAULT '' NOT NULL, 
uid mediumint(9) DEFAULT '0' NOT NULL, 
gid mediumint(9) DEFAULT '0' NOT NULL, 
home varchar(64) DEFAULT '' NOT NULL, 
password varchar(16) DEFAULT '' NOT NULL, 
PRIMARY KEY (username), 
UNIQUE home (home), 
KEY password (password) 
); 

CREATE TABLE rcpthosts ( 
host varchar(64) DEFAULT '' NOT NULL, 
PRIMARY KEY (host) 
); 

CREATE TABLE virtual ( 
username varchar(32) DEFAULT '' NOT NULL, 
ext varchar(64) DEFAULT '' NOT NULL, 
virtual_username varchar(32) DEFAULT '' NOT NULL, 
virtual_host varchar(64) DEFAULT '' NOT NULL, 
PRIMARY KEY (virtual_username,virtual_host), 
KEY (virtual_username), 
KEY (virtual_host), 
UNIQUE virtual (username,ext,virtual_username,virtual_host) 
); 

安裝QMAIL,CHECKPASSWORD 

tar xzvf qmail-1.03.tar.gz 
mkdir /var/qmail 
groupadd nofiles 
useradd -g nofiles -d /var/qmail/alias alias 
useradd -g nofiles -d /var/qmail qmaild 
useradd -g nofiles -d /var/qmail qmaill 
useradd -g nofiles -d /var/qmail qmailp 
groupadd qmail 
useradd -g qmail -d /var/qmail qmailq 
useradd -g qmail -d /var/qmail qmailr 
useradd -g qmail -d /var/qmail qmails 
make setup check 
./config或者 ./config-fast your.full.host.name 

注:config 根據DNS來確認主機名+域名,在config,再config-fast 域名,不然收發郵件都有一個小問題。 

建立系統別名 

cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root

將要設定的用戶加入了別名中去 

echo xxxx >>.qmail-postmaster ... 
chmod 644 ~alias/.qmail* 

cp /var/qmail/boot/home /var/qmail/rc 

修改rc,將./Mailbox修改為./Maildir/ 
現在編譯的QMAIL是讓其支持Maildir格式,如要支持/var/spool/mail格式,只需 

cp /var/qmail/boot/proc /var/qmail/rc 

讓QMAIL在系統啟動時自動啟動 

echo "csh -cf '/var/qmail/rc &'" >> /etc/rc.d/rc.local 

安裝checkpassword 

解壓:tar -zxvf checkpassword-0.81.tar.gz。進入解壓的目錄執行 

make 
make setup check就可以了。 

現基本的QMAIL已經安裝完成了,要增加一個系統用戶如ABCD需以下步驟: 

/usr/sbin/useradd abcd;/usr/bin/passwd abcd 設好口令 
以此用戶名登錄,到此用戶的HOME目錄下:cd; 
/var/qamil/bin/maildirmake Maildir 
echo ./Maildir/ >.qmail 這樣就好了。 
以存在的用戶使用Maildir: 
以ROOT的話,可以直接su 用戶名或直接以root身份在所需用戶的HOME目錄下 
建立Maildir 及.qmail 
然再chown -R 該用戶名.該用戶組名 用戶的HOME目錄名。 

如以還建系統用戶,可使用以下步驟: 
在/etc/skel下建立echo ./Maildir/ >.qmail 
/maildirmake Maildir 
以建一個用戶就會自動建立Maildir .qmail了 

使QMAIL支持數據庫 

建立一個MYSQL帳號,設帳號名為MAIL 
GRANT ALL ON QMAIL.* TO MAIL@LOCALHOST IDENTIFIED BY "PASSWORD" 
測試一下mysql -umail -p 
建立一個sqlserver文件,包含以下內容 

server localhost 
login mail 
password mail 
db qmail 
port xxx 
socket xxx 

只能以一空格鍵分開,或用等號連接.,將其復制到/VAR/QMAIL/CONTROL,屬

 QMAILP.QMAIL-RW-R-R-- 

此文件的權限及設置都必須正確,不然會出現OUT OF MEMORY之類的出錯信息。 

PATCH qmail及checkpassword 
gunzip qmamil及checkpassword的PATCH文件 
進入 qmail-1.03及checkpassword-0.81目錄,修改Makefile中的MYSQL_LIB及 
MYSQL_INCLUDE指向正確的目錄。 

然 

QMAIL: patch -p1 <qmailpatchfilename 
make setup check 
checkpassword: patch -p1 <checkpasswordfilename 
make 
make setp check 

從Sendmail向Qmail遷移 

在/etc/inetd.conf文件中修改或加入smtp ,pop-3(各一行) 

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env 
tcp-env /var/qmail/bin/qmail-smtpd 

pop-3 stream tcp nowait root /var/qmail/bin/qmail-popup 
qmail-popup host.domainname /bin/checkpassword /var/qmail/bin/  
qmail-pop3d Maildir 

具體內容在QMAIL的DOC目錄,REMOVE.sendmail有詳細介紹。將sendmail的啟動語句注釋掉,可以試一下

  /usr/sbin/ntsyv 

再殺掉Sendmail進程. 

chmod 0 /usr/lib/sendmail 
chmod 0 /usr/sbin/sendmail 
chmod 0 /usr/lib/sendmail.mx 
mv /usr/lib/sendmail /usr/lib/sendmail.bak 
mv /usr/sbin/sendmail /usr/sbin/sendmail.bak 
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail 
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail 
killall -HUP inetd 

將現有的SENDMAIL郵件遷移到QMAIL下。可以在用戶HOME目錄Maildir/new下建立一個到/var/spool/mail/用戶名的連接 。我是直接將/var/spool/mail/用戶名 cp -p 至/home/用戶名/Maildir/new下。 如用sendmail的alias需要fastforward,所以我另外建了qmail的alias 

測試 

啟動mysql帶--log選項,以便發生錯誤時查看mysql log找出原因, 啟動QMAIL   
    (csh -cf '/var/qmail/rc &') 
查看一下QMAIL的進程:
    ps -ax | grep qmail 
檢查一下
   /var/log/maillog的信息 

發給一個系統用戶,看有沒有收到信,如有錯誤檢查home目錄Maildir的權限設置虛擬用戶:在MAILBOX表格中輸入username,uid,gid,home,password信息然再根據所指定的home建立相應的目錄,Maildir .qmail 再chown -R uid.gid home目錄。測試一下給此虛擬用戶發信。 qmail+mysql安裝成功的話在/var/log/maillog及mysql的log下都有查尋數據庫的信息。 

配制 

為其它主機轉信須在/var/qmail/control/rcpthosts添加域名,去到relay限制可將此文件刪除或試一下加入0.0.0.0, 如使用tcpserver可建立/etc/tcp.smtp來限制relay限制。 

設置主機多個域名:將名稱加入 

/var/qmail/control/local, 
/var/qmail/control/rcpthosts 
/var/qmail/control/me 

別名: 

echo "用戶">/var/qmail/alias/.qmail-別名 
mailist:跟別名一樣,只不過在別名文件中鍵入多個用戶,每個用戶以回車隔開;但存在一個問題當mailist中包括發件人時,發件人發給mailist自己也能收到,以我會試一下ezmlm。用戶可以在自己的目錄裡建立Maillist,如用戶名為abc,想建一個Maillist發給一組用戶只需在abc的HOME目錄下建立.qmail-test,將用戶加入到此文件中,只只要發給abc-test就行了。 

抄送: 

發信給 user1@ab.cd,同時抄送給user2,dd@jite.com。方法:編輯/home/user1/.qamil 內容如下 

./Maildir/ 
|forward user2 dd@jite.com 

轉信: 

user1@ab.cd轉向dd@jite.com 。方法:編輯/home/user1/.qamil 內容如下 

dd@jite.com 
去掉轉信和發信的限止:去掉/var/qmail/control/rcpthosts文件 
masquerading: 
在/var/qmail/control/defaulhost中加入要偽裝的主機名,將此文件設為644。具體實踐起來可以多看看QMAIL的幫助。現在許多做的FREEMAIL系統都是使用非系統用戶帳號,有的甚至編寫自己的FILE SYSTEM,效率更高
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
 

★  樊強制作 歡迎分享  ★