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論壇】
|
|
| 相關文章 |
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |