以linux的mail套件postfix取代M$ Exchange的mail功能(群組、通訊錄)

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

以linux的mail套件postfix取代M$ Exchange的mail功能(群組、通訊錄)

文章JBZ » 週一 1月 31, 2005 3:30 pm

1 前言:
因為之前學的主要都是Windows Base的東西,所以在很多費用上比起Linux的solution來多了很多,而在新的公司老闆又比較重視成本(不是只有這間拉,只是說服不了這間的老闆),剛好Linux這方面的東西自己又碰的比較少。所以呢,就有了下面的規劃。
公司絕大部分的使用者會的都是windows系統,而小弟在linux管理windows系統的上面不清楚有哪些比較好的套件(像是檔案管理、權限控管、帳號集中管控等),所以採用的是windows網域的方式(windows server 2003),架設DC將所有的使用者、電腦、資源等納入AD進行控管。

謹以此篇感謝ServerTeam同仁對小弟在Linux Debian上的指導。
George23
DickyHsu
Aman(postfix+sasl+amavisd-new+mcafee+procmail+spamassassin)。

2 目的:
為節省成本、節省人力負擔(統一帳號管理),以linux的mail套件postfix取代M$ Exchange的mail功能。

3 計畫:修改認證流程,讓linux系統能夠向AD網域取得帳號密碼。
(絕大部分的想法都是源自於旗標出版股份有限公司 施威銘研究室著 異質平台整合方案一書,小弟對linux真的很遜,什麼script、command都不會,要用得時候就上鳥哥的網站去查或是找書看,請參考上述的書籍13、14章。)。

4 實做:因為其他linux distribution在安裝套件時有太多要考慮的(相依性),按照小弟的功力是完全負荷不了,所以小弟用的linux distribution為Debian GNU/Linux 3.1 testing。

===========================================================================

1 設定winbind及修改系統認證方式

1.1 安裝SAMBA

1.1.1 檢查是否安裝SAMBA

代碼: 選擇全部
dpkg -l |grep samba


1.1.2 安裝SAMBA套件

代碼: 選擇全部
apt-get install samba


1.2 加入windows 2003 網域

1.2.1 修改samba設定檔
代碼: 選擇全部
vim /etc/samba/smb.conf


代碼: 選擇全部
#======================= Global Settings =======================

[global]

   workgroup = DomainName

   realm = DomainName.net.tw

   server string = %h server (Samba %v)

   netbios name = mail1

   wins support = yes

   wins server = 192.168.0.1

   security = ads

   encrypt passwords = true

   password server = DC-hq.DomainName.net.tw


1.2.2 修改hosts設定檔(如果你的DNS可以解析到網域的主機,就不用做此動作了。)
代碼: 選擇全部
vim /etc/hosts


代碼: 選擇全部
127.0.0.1       localhost.localdomain   localhost       mail1   mail1.DomainName.net.tw

192.168.0.1     DC-hq.DomainName.net.tw       DomainName.net.tw

1.2.3 修改Kerberos相關的訂定檔

1.2.3.1 安裝krb5-admin-server

代碼: 選擇全部
apt-get install krb5-admin-server


1.2.3.2 修改krb5.conf設定檔
代碼: 選擇全部
vim /etc/krb5.conf


代碼: 選擇全部
[libdefaults]

        default_realm = DC-HQ.DOMAINNAME.NET.TW s 網域DC主機

[realms]

        [u]DOMAINNAME.NET.TW [/u]= {

↑ 網域DC主機

        kdc = [u]DC-HQ.DOMAINNAME.NET.TW[/u]

↑ 網域DC主機

        admin_server = [u]DC-HQ.DOMAINNAME.NET.TW[/u]

↑ 網域DC主機

        default_domain = [code]DOMAINNAME.NET.TW [/code]s 網域名稱

        }

[domain_realm]

        .DomainName.net.tw = [u]DOMAINNAME.NET.TW [/u]s 網域名稱

        DomainName.net.tw = [u]DOMAINNAME.NET.TW [/u]s 網域名稱


1.2.3.3
代碼: 選擇全部
vim /etc/krb5kdc/kdc.conf


代碼: 選擇全部
[realms]

DOMAINNAME.NET.TW = {

↑網域名稱

1.2.3.4 安裝krb5-clients

代碼: 選擇全部
apt-get install krb5-clients


1.2.4 測試跟DC的連線

代碼: 選擇全部
kinit administrator@DOMAINNAME.NET.TW s測試連線

      ↑網域管理者帳號 @ 網域名稱,要大寫

Password for administrator@DOMAINNAME.NET.TW: s 輸入管理者的密碼

若是沒有任何訊息,就表示成功了。

1.2.5 重新啟動Samba伺服器

代碼: 選擇全部
/etc/init.d/samba restart


1.2.6 加入網域

代碼: 選擇全部
net ads join

到網域控制站檢查是否加入,成功會出現像下面的字串:

Using short domain name -- DOMAINNAME

Joined 'WMAIL' to realm 'DOMAINNAME.NET.TW'

1.3 安裝WINBIND

代碼: 選擇全部
apt-get install winbind


1.4 確認NSS函式庫

代碼: 選擇全部
updatedb

locate libnss_winbind.so

/lib/libnss_winbind.so.2 s 會出現此訊息


1.5 確認PAM函式庫

代碼: 選擇全部
locate pam_winbind.so

/lib/security/pam_winbind.so s 會出現此訊息

1.6 編輯NSS設定檔
代碼: 選擇全部
vim /etc/nsswitch.conf


代碼: 選擇全部
passwd:         compat winbind

group:          compat winbind


1.7 Winbind相關服務設定
代碼: 選擇全部
vim /etc/samba/smb.conf


代碼: 選擇全部
   idmap uid = 10000-20000 a 設定網域帳號uid以後使用的範圍

   idmap gid = 10000-20000 a 設定網域帳號gid以後使用的範圍

   template shell = /bin/false a 設定網域帳號的使用者shell

   template homedir = /home/winnt/%D/%U a 設定網域使用者的家目錄

   winbind use default domain = yes a 設定不在getent passwd時出現網域名稱

1.8 修改/etc/login.defs檔案,以避免網域及本機帳號uid/gid衝突

代碼: 選擇全部
UID_MIN                  1000

UID_MAX                  9999

GID_MIN                   100

GID_MAX                  9999

修改完/etc/login.defs檔案,重新啟動winbind

代碼: 選擇全部
/etc/init.d/winbind restart


1.9 測試是否能取得網域帳號

代碼: 選擇全部
wbinfo –u

getent passwd

1.10 設定pam.d認證

1.10.1
代碼: 選擇全部
vim /etc/pam.d/common-auth


代碼: 選擇全部
auth    sufficient      pam_winbind.so  <--------加入這行

auth    required        pam_unix.so nullok_secure


1.10.2
代碼: 選擇全部
vim /etc/pam.d/common-account


代碼: 選擇全部
account sufficient      pam_winbind.so  <--------加入這行

account required        pam_unix.so


2 郵件系統:小弟只會postfix

2.1 安裝Postfix

代碼: 選擇全部
apt-get install postfix


2.2 安裝IMAP、IMAPS及POP3、POP3S套件

代碼: 選擇全部
apt-get install dovecot


2.2.1 dovecot 套在預設時,只啟動 imap 及 imaps,並沒有啟動 pop3 及 pop3s,因此,你必須修改 /etc/dovecot.conf 檔案,在 protocols 參數後面加入您要的通訊協定,如: protocols = imap imaps pop3 pop3s

2.2.2
代碼: 選擇全部
/etc/init.d/dovecot restart


2.2.3 替網域帳號建立home目錄

2.2.3.1 建立awk,
代碼: 選擇全部
vim mknthomedir.awk


代碼: 選擇全部
#!/bin/awk

 

BEGIN {

FS=":"

 

#uidmin設定為/etc/samba/smb.conf中uidmin的值

# uidmax設定為/etc/samba/smb.conf中uidmax的值

#僅針對UID範圍為設定中及群組為Domain User的帳號,進行家目錄的產生

 

uidmin=10000

uidmax=20000

 

}

 

{

    if ( $3 >= uidmin && $3 <= uidmax && $4 == 10000) {

        print "\nmake directory " $6 "\nchown " $3 "." $4 " " $6

        system ( "mkdir -p " $6 "; chown –R " $3 "." $4 " " $6 )

    }

}
2.2.3.2 利用awk script產生home目錄

代碼: 選擇全部
getent passwd | awk -f mknthomedir.awk


2.3 安裝postfix認證套件

代碼: 選擇全部
apt-get install sasl2-bin postfix-tls libsasl2 libsasl2-dev libsasl2-modules libsasl7


2.4 設定postfix

2.4.1
代碼: 選擇全部
vim /etc/postfix/sasl/smtpd.conf


代碼: 選擇全部
pwcheck_method: saslauthd

#pwcheck_method: pam

mech_list: login plain

#saslauthd_path:/var/run/saslauthd/mux


2.4.2
代碼: 選擇全部
vim /etc/postfix/main.cf


代碼: 選擇全部
myhostname = wbd.DomainName.net.tw

mydomain = DomainName.net.tw

myorigin = $myhostname

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

mydestination = wbd, wbd.DomainName.net.tw, localhost, DomainName.net.w

relayhost =

mynetworks = 127.0.0.0/8

smtpd_sasl_auth_enable = yes

broken_sasl_auth_clients = yes

smtpd_sasl_security_options = noanonymous

smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

smtpd_client_restrictions = permit_sasl_authenticated


2.4.3
代碼: 選擇全部
vim /etc/postfix/master.cf


代碼: 選擇全部
smtp      inet  n       -       n       -       -       smtpd


2.4.4
代碼: 選擇全部
vim /etc/default/saslauthd


START=yes

MECHANISMS="pam"


2.4.5
代碼: 選擇全部
chown -R postfix:postfix /var/run/saslauthd --> 每次開機都要做一次


2.4.6 將此指令寫到 /etc/rc2.d/S99saslauth,記得要 chmod 755 /etc/rc2.d/S99saslauth,這樣每次開機都會執行

2.4.7
代碼: 選擇全部
/etc/init.d/saslauthd restart


2.4.8
代碼: 選擇全部
/etc/init.d/postfix restart


3 郵件防毒及郵件過濾系統

3.1 安裝套件

3.1.1 防毒

3.1.1.1 install mcafee

3.1.1.2
代碼: 選擇全部
wget http://debian.marlow.dk/dists/woody/virus/pool/lib/libstdc++2.8_2.90.29-2.deb


3.1.1.3
代碼: 選擇全部
dpkg –i libstdc++2.8_2.90.29-2.deb


3.1.1.4 到 http://www.nai.com/us/downloads/evals/ 下載 McAfee VirusScan Command Line Scanner for Linux 或是直接下載
代碼: 選擇全部
wget http://download.nai.com/products/evaluation/virusscan/english/cmdline/linux/v4.32/intel/vlnx432e.tar.Z
http://download.nai.com/products/evaluation/virusscan/english/cmdline/linux/v4.40/vlnx440e.tar.Z


3.1.1.5
代碼: 選擇全部
tar -zxvf vlnx440e.tar.Z


3.1.1.6
代碼: 選擇全部
chown 755 install-uvscan


3.1.1.7
代碼: 選擇全部
./install-uvscan


3.1.2 濾信(有需要濾信才要裝)

3.1.2.1
代碼: 選擇全部
apt-get install spamc


3.1.2.2
代碼: 選擇全部
apt-get install spamassassin


3.1.2.3
代碼: 選擇全部
apt-get install amavisd-new


3.1.2.3.1 裝完之後看一下 /var/log/syslog 有沒有類似的訊息【Jun 5 00:30:00 debian amavis[1743]: Found primary av scanner NAI McAfee AntiVirus (uvscan) at /usr/local/bin/uvscan】

3.1.2.4
代碼: 選擇全部
apt-get install procmail


3.1.3 安裝解壓縮的程式,如果有人寄壓縮檔來的話還是要一一解開來看看是不是夾雜的病毒。(如果發現無法安裝unrar,請自行修改/etc/apt/sourcelist檔案的testing為unstable來安裝)

3.1.3.1
代碼: 選擇全部
apt-get install bzip2 unrar


3.2 設定

3.2.1 修改/etc/postfix/master.cf

代碼: 選擇全部
# ==========================================================================

# service type  private unpriv  chroot  wakeup  maxproc command + args

#               (yes)   (yes)   (yes)   (never) (100)

# ==========================================================================

smtp      inet  n       -       n       -       -       smtpd

#smtp      inet  n       -       n       -       -       smtpd –o content_filter=spamassassin:

#628      inet  n       -       -       -       -       qmqpd

pickup    fifo  n       -       -       60      1       pickup

cleanup   unix  n       -       -       -       0       cleanup

qmgr      fifo  n       -       -       300     1       qmgr

#qmgr     fifo  n       -       -       300     1       nqmgr

rewrite   unix  -       -       -       -       -       trivial-rewrite

bounce    unix  -       -       -       -       0       bounce

defer     unix  -       -       -       -       0       bounce

flush     unix  n       -       -       1000?   0       flush

proxymap  unix  -       -       n       -       -       proxymap

smtp      unix  -       -       -       -       -       smtp

#smtp      inet  n       -       n       -       -       smtp –o content_filter=spamassassin:

relay     unix  -       -       -       -       -       smtp

#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5

showq     unix  n       -       -       -       -       showq

error     unix  -       -       -       -       -       error

local     unix  -       n       n       -       -       local

virtual   unix  -       n       n       -       -       virtual

lmtp      unix  -       -       n       -       -       lmtp

#vscan            unix  -  n  n  -  10  pipe user=amavis argv=/usr/sbin/amavisd-new ${sender} ${recipient}

#localhost:10025  inet  n  -  n  -  -   smtpd -o content_filter=

smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o disable_dns_lookups=yes

127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000

#### 上面這四行不需要寫在同一行,妳要寫成一行也是可以,只不過不方便看﹔第二跟第三行前面記得要空隔 ###

#

# Interfaces to non-Postfix software. Be sure to examine the manual

# pages of the non-Postfix software to find out what options it wants.

#

# maildrop. See the Postfix MAILDROP_README file for details.

#

maildrop  unix  -       n       n       -       -       pipe

  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}

#spamassassin unix - n n - - pipe flags=Rq user=nobody argv=/usr/bin/spamc -d 127.0.0.1 -f -p 783 -t 30 -e /usr/sbin/sendmail -i -f ${sender} -- ${recipient}

#  flags=Rq user=nobody argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

#user=filter argv=/usr/local/bin/sa-filter -f ${sender} -- ${recipient}

#

# The Cyrus deliver program has changed incompatibly, multiple times.

cyrus     unix  -       n       n       -       -       pipe

  flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -m "${extension}" ${user}

# Cyrus 2.1.5 (Amos Gouaux)

#cyrus     unix  -       n       n       -       -       pipe

#  user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

uucp      unix  -       n       n       -       -       pipe

  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)

ifmail    unix  -       n       n       -       -       pipe

  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)

bsmtp     unix  -       n       n       -       -       pipe

  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -d -t$nexthop -f$sender $recipient

scalemail-backend unix  -       n       n       -       2       pipe

  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}

# only used by postfix-tls

#tlsmgr   fifo  -       -       n       300     1       tlsmgr

#smtps    inet  n       -       n       -       -       smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

#587      inet  n       -       n       -       -       smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes


3.2.2
代碼: 選擇全部
vim /etc/postfix/main.cf


代碼: 選擇全部
content_filter = smtp-amavis:[127.0.0.1]:10024
加入上面這行

3.2.3
代碼: 選擇全部
vim /etc/procmailrc


代碼: 選擇全部
:0fw

* < 50000

| /usr/bin/spamassassin

 

:0:                       # 這三行是將垃圾信丟掉的設定

* ^X-Spam-Status: Yes     # 我怕誤判

/dev/null                 # 所以沒有加上。

3.2.4
代碼: 選擇全部
vim /etc/spamassassin/local.cf


代碼: 選擇全部
# SpamAssassin config file for version 2.5x

# generated by http://www.yrex.com/spam/spamconfig.php (version 1.01)

# How many hits before a message is considered spam.

required_hits           5.0

# Whether to change the subject of suspected spam

rewrite_subject         1

# Text to prepend to subject if rewrite_subject is used

subject_tag             *****SPAM*****

# Encapsulate spam in an attachment

report_safe             1

# Use terse version of the spam report

use_terse_report        0

# Enable the Bayes system

use_bayes               1

# Enable Bayes auto-learning

auto_learn              1

# Enable or disable network checks

skip_rbl_checks         0

use_razor2              1

use_dcc                 1

use_pyzor               1

# Mail using languages used in these country codes will not be marked

# as being possibly spam in a foreign language.

ok_languages            all

# Mail using locales used in these country codes will not be marked

# as being possibly spam in a foreign language.

ok_locales              all

3.2.4.1
代碼: 選擇全部
mkdir -p /nonexistent/.spamassassin/user_prefs


3.2.4.2
代碼: 選擇全部
vim /etc/default/spamassassin
修改 ENABLED=1

3.3 測試

3.3.1 用 amavis 的身份執行 /usr/local/bin/uvscan 如果沒有錯誤的話就可以了。

代碼: 選擇全部
debian:~# su - amavis

amavis@debian:~$ /usr/local/bin/uvscan

This program is more than   6 months old. New viruses come out all the

time - we would suggest that you upgrade your copy.

Usage:

  uvscan [--afc] [--allole] [--analyse | --analyze]

         [-c | --clean] [--cleandocall] [--config file]

         [--dam] [-d | --dat | --data-directory] [--delete]

         [--exclude file] [-e | --exit-on-error] [--extlist]

         [--extensions EXT1[,EXT2...]] [--extra file]

         [--fam] [-f | --file file] [--floppya] [--floppyb]

         [-h | --help] [--ignore-compressed] [--ignore-links] [--load file]

         [--mailbox] [--manalyse | --manalyze | --macro-heuristics]

         [--maxfilesize XXX] [--mime] [-m | --move directory]

         [--noboot] [--nocomp] [--nodecrypt] [--nodoc] [--noexpire]

         [--norename] [--one-file-system]

         [--panalyse | --panalyze] [-p | --atime-preserve | --plad]

         [--program] [-r | --recursive | --sub]

         [--secure] [-s | --selected] [--summary]

         [-u | --unzip] [-v | --verbose] [--version] [--virus-list]

         [-] {file / directory}

A target has not been specified for scanning!

Thank you for choosing to evaluate VirusScan from Network Associates.

This  version of the software is for Evaluation Purposes Only and may be

used  for  up to 30 days to determine if it meets your requirements.  To

license  the  software,  or to  obtain  assistance during the evaluation

process,  please call (408) 988-3832.  If you  choose not to license the

software,  you  need  to remove it from your system.  All  use  of  this

software is conditioned upon compliance with the license terms set forth

in the README.TXT file.

3.3.2
代碼: 選擇全部
tail -f /var/log/syslog
會看到,這個就是 amavisd-new 預設是用 clamav 來掃毒,所以我們必須把他拿掉

代碼: 選擇全部
Jun  5 00:48:24 debian postfix/smtpd[716]: disconnect from web41008.mail.yahoo.com[66.218.93.7]

Jun  5 00:48:25 debian amavis[771]: (00771-01) Clam Antivirus-clamd: Can't connect to UNIX socket /var/run/clamav/clamd.ctl: No such file or directory, retrying (2)

Jun  5 00:48:31 debian amavis[771]: (00771-01) Clam Antivirus-clamd: Can't connect to UNIX socket /var/run/clamav/clamd.ctl: No such file or directory, retrying (3)
3.3.3
代碼: 選擇全部
vim /etc/amavis/amavisd.conf
代碼: 選擇全部
將 clamav 的區段加上 #

### http://www.clamav.net/

#['Clam Antivirus-clamd',

#  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.ctl"],

#  qr/\bOK$/, qr/\bFOUND$/,

#  qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

### http://www.clamav.net/

#  ['Clam Antivirus - clamscan', 'clamscan',

#    '--stdout --no-summary -r {}', [0], [1],

#    qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],


3.3.4
代碼: 選擇全部
/etc/init.d/amavis restart


3.3.5 如果不要回報病毒,修改 /etc/amavis/amavisd.conf 設定,將$virus_admin = "postmaster\@$mydomain"; 行加上 #,如果有其他的相關資訊就一併拿掉。

3.3.6 定時更新病毒碼
代碼: 選擇全部
crontab -e


代碼: 選擇全部
00 * * * * "/usr/bin/wget "http://download.nai.com/products/mcafee-avert/daily_dats/DAILYDAT.ZIP" -O /tmp/DAILYDAT.ZIP ; /usr/bin/unzip -o /tmp/DAILYDAT.ZIP -d /usr/local/uvscan" 2&>1 > /dev/null

3.3.7

4 Web Mail

4.1 安裝openwebmail,選擇auth_pam.pl、apache & apache-ssl

代碼: 選擇全部
apt-get install openwebmail


4.2 增加openwebmail的pam認證設定
代碼: 選擇全部
vim /etc/pam.d/openwebmail


代碼: 選擇全部
#%PAM-1.0

@include common-auth

@include common-account

@include common-session

4.3
代碼: 選擇全部
vim /etc/openwebmail/openwebmail.conf


代碼: 選擇全部
domainnames                     mail1.DomainName.net.tw

 

global_addressbook              /usr/lib/cgi-bin/openwebmail/etc/address.book

enable_webdisk                  no

enable_sshterm                  no

enable_pop3                     no

enable_changepwd                no

default_iconset                 Cool3D.Chinese.Traditional

default_bgrepeat                no

default_fontsize                11pt

default_msgsperpage             20

default_sendbuttonposition      both

default_replywithorigmsg        at_end

 

<default_signature>

---------------------------------------------

Digital Family Center (http://www.DomainName.net.tw)

</default_signature>


4.4
代碼: 選擇全部
vim /etc/apache/http.conf


代碼: 選擇全部
AddDefaultCharset off


4.5 在/var/www/底下建立一個index.html檔案
代碼: 選擇全部
vim /var/www/index.html


代碼: 選擇全部
<html><head>
<meta http-equiv="Refresh"
content="0;URL=http://your_server/cgi-bin/openwebmail/openwebmail.pl">
</head></html>

4.6
代碼: 選擇全部
apt-get install apache-ssl


4.7 修改 /etc/apache-ssl/httpd.conf

代碼: 選擇全部
再最後一行加入

Include /etc/openwebmail/apache.conf

5 自動化作業

5.1 自動更新及建立AD網域使用者家目錄

5.1.1
代碼: 選擇全部
vim /root/mknthomedir.awk


代碼: 選擇全部
#!/bin/awk

 

#uidmin設定為/etc/samba/smb.conf中uidmin的值

# uidmax設定為/etc/samba/smb.conf中uidmax的值

#僅針對UID範圍為設定中及群組為Domain User的帳號,進行家目錄的產生

 

BEGIN {

        FS=」:」

        uidmin=10000

        uidmax=20000

}

 

{

        if ( $3 >= uidmin && $3 <= uidmax && $4 == 10000) {

                        print 「\nmake directory 「 $6 「\nchown 「 $3 「:」 $4 「 「 $6

                        system ( 「mkdir –p 「 $6 「; chown –R 「 $3 「:」 $4 「 「 $6 )

        }

}

5.1.2

5.1.3
代碼: 選擇全部
crontab –e


代碼: 選擇全部
0 * * * * getent passwd | awk –f /root/mknthomedir.awk
#設定每小時產生一次使用者家目錄

5.2 自動更新及建立郵件群組

5.2.1 分析

5.2.1.1 配合AD網域使用者帳戶中,所有使用者的帳戶全名前加入部門代碼;進而讓linux系統能從getent passwd中獲得的可分析的資料,再針對第五欄位$5進行處理,見5.2.1.2。
定時寫入檔案:將結果寫入到/etc/alias,並透過crontab –e寫入進行定時更新。

$1帳號:$2密碼:$3UID:$4GID:$5全名:$6家目錄:$7

5.2.1.2 從$5前五碼進行判斷:

代碼: 選擇全部
3XXXX表示為DOMAINNAME:將所有前五碼開頭為3XXXX的皆歸入為00000全公司這個群組。

31100表示為:將所有前五碼開頭為311XX的皆歸入為31100這個群組。

32100表示為:將所有前五碼開頭為321XX的皆歸入為32100這個群組。

33000表示為:將所有前五碼開頭為33XXX的皆歸入為33000這個群組。

33100表示為:將所有前五碼開頭為331XX的皆歸入為33100這個群組。

33200表示為:將所有前五碼開頭為332XX的皆歸入為33200這個群組。

33300表示為:將所有前五碼開頭為333XX的皆歸入為33300這個群組。

33400表示為:將所有前五碼開頭為334XX的皆歸入為33400這個群組。

33500表示為:將所有前五碼開頭為335XX的皆歸入為33500這個群組。

33600表示為:將所有前五碼開頭為336XX的皆歸入為33600這個群組。

33700表示為:將所有前五碼開頭為337XX的皆歸入為33700這個群組。

35000表示為:將所有前五碼開頭為35XXX的皆歸入為35000這個群組。

35100表示為:將所有前五碼開頭為351XX的皆歸入為35100這個群組。

35200表示為:將所有前五碼開頭為352XX的皆歸入為35200這個群組。

35300表示為:將所有前五碼開頭為353XX的皆歸入為35300這個群組。

36000表示為:將所有前五碼開頭為36XXX的皆歸入為36000這個群組。

36100表示為:將所有前五碼開頭為361XX的皆歸入為36100這個群組。

36200表示為:將所有前五碼開頭為362XX的皆歸入為36200這個群組。

37000表示為:將所有前五碼開頭為37XXX的皆歸入為37000這個群組。

37100表示為:將所有前五碼開頭為371XX的皆歸入為37100這個群組。

37200表示為:將所有前五碼開頭為372XX的皆歸入為37200這個群組。

37300表示為:將所有前五碼開頭為373XX的皆歸入為37300這個群組。

37400表示為:將所有前五碼開頭為374XX的皆歸入為37400這個群組。

38000表示為:將所有前五碼開頭為38XXX的皆歸入為38000這個群組。

38100表示為:將所有前五碼開頭為381XX的皆歸入為38100這個群組。

39000表示為:將所有前五碼開頭為39XXX的皆歸入為39000這個群組。

39100表示為:將所有前五碼開頭為391XX的皆歸入為39100這個群組。


5.2.2 實作

5.2.2.1
代碼: 選擇全部
vim /root/mkalias.awk
主要作用為產生新的郵件群組表

代碼: 選擇全部
#!/bin/awk

 

BEGIN {

        FS=":"

}

 

{

        g3xxxx = substr($5,1,1)

        g3yyxx = substr($5,1,3)

        g3yxxx = substr($5,1,2)

        g3xxyy = substr($5,4,2)

        if ( g3xxxx ~ /^3/ && g3xxyy ~ /^00/ ){

                g00000 = g00000 "," $1;

                if ( g3yyxx ~ /^311/ ){

                        g31100 = g31100 "," $1;

                } else if ( g3yyxx ~ /^321/ ){

                        g32100 = g32100 "," $1;

                } else if ( g3yxxx ~ /^33/ ){

                        g33000 = g33000 "," $1;

                        if ( g3yyxx ~ /^331/ ){

                                g33100 = g33100 "," $1;

                        } else if ( g3yyxx ~ /^332/ ){

                                g33200 = g33200 "," $1;

                        } else if ( g3yyxx ~ /^333/ ){

                                g33300 = g33300 "," $1;

                        } else if ( g3yyxx ~ /^334/ ){

                                g33400 = g33400 "," $1;

                        } else if ( g3yyxx ~ /^335/ ){

                                g33500 = g33500 "," $1;

                        } else if ( g3yyxx ~ /^336/ ){

                                g33600 = g33600 "," $1;

                        } else if ( g3yyxx ~ /^337/ ){

                                g33700 = g33700 "," $1;

                        }

                } else if ( g3yxxx ~ /^35/ ){

                        g35000 = g35000 "," $1;

                        if ( g3yyxx ~ /^351/ ){

                                g35100 = g35100 "," $1;

                        } else if ( g3yyxx ~ /^352/ ){

                                g35200 = g35200 "," $1;

                        } else if ( g3yyxx ~ /^353/ ){

                                g35300 = g35300 "," $1;

                        }

                } else if ( g3yxxx ~ /^36/ ){

                        g36000 = g36000 "," $1;

                        if ( g3yyxx ~ /^361/ ){

                                g36100 = g36100 "," $1;

                        } else if ( g3yyxx ~ /^362/ ){

                                g36200 = g36200 "," $1;

                        }

                } else if ( g3yxxx ~ /^37/ ){

                        g37000 = g37000 "," $1;

                        if ( g3yyxx ~ /^371/ ){

                                g37100 = g37100 "," $1;

                        } else if ( g3yyxx ~ /^372/ ){

                                g37200 = g37200 "," $1;

                        } else if ( g3yyxx ~ /^373/ ){

                                g37300 = g37300 "," $1;

                        } else if ( g3yyxx ~ /^374/ ){

                                g37400 = g37400 "," $1;

                        }

                } else if ( g3yxxx ~ /^38/ ){

                        g38000 = g38000 "," $1;

                        if ( g3yyxx ~ /^381/ ){

                                g38100 = g38100 "," $1;

                        }

                } else if ( g3yxxx ~ /^39/ ){

                        g39000 = g39000 "," $1;

                        if ( g3yyxx ~ /^391/ ){

                                g39100 = g39100 "," $1;

                        }

                }

        }

}

END {

        print "00000: " substr(g00000,2);

        print "31100: " substr(g31100,2);

        print "32100: " substr(g32100,2);

        print "33000: " substr(g33000,2);

        print "33100: " substr(g33100,2);

        print "33200: " substr(g33200,2);

        print "33300: " substr(g33300,2);

        print "33400: " substr(g33400,2);

        print "33500: " substr(g33500,2);

        print "33600: " substr(g33600,2);

        print "33700: " substr(g33700,2);

        print "35000: " substr(g35000,2);

        print "35100: " substr(g35100,2);

        print "server: " substr(g35200,2);

        print "35300: " substr(g35300,2);

        print "36000: " substr(g36000,2);

        print "36100: " substr(g36100,2);

        print "36200: " substr(g36200,2);

        print "37000: " substr(g37000,2);

        print "37100: " substr(g37100,2);

        print "37200: " substr(g37200,2);

        print "37300: " substr(g37300,2);

        print "37400: " substr(g37400,2);

        print "38000: " substr(g38000,2);

        print "38100: " substr(g38100,2);

        print "39000: " substr(g39000,2);

        print "39100: " substr(g39100,2);

}

5.2.2.2
代碼: 選擇全部
vim /root/RenewAlias.bash
建立更新/etc/aliases檔案的程式

代碼: 選擇全部
#!/bin/bash

rm DomainAccAlias

rm TempAlias

getent passwd | awk -f mkalias.awk > DomainAccAlias

cat NativeAlias > TempAlias

cat DomainAccAlias >> TempAlias

cp TempAlias /etc/aliases

newaliases

5.2.2.3
代碼: 選擇全部
cp /etc/aliases /root/NativeAlias
複製aliases檔案為NativeAlias

5.2.2.4
代碼: 選擇全部
crontab –e
寫入排程,
代碼: 選擇全部
每小時執行一次

0 * * * * sh /root/RenewAlias.bash

5.2.3 這樣就完成了,以後系統每小時會自動更新郵件群組一次。

5.3 自動化建立OpenWebMail公用通訊錄

5.3.1 如何設定OpenWebMail使用公用通訊錄
代碼: 選擇全部
vim /etc/openwebmail/openwebmail.conf

代碼: 選擇全部
global_addressbook              /usr/lib/cgi-bin/openwebmail/etc/address.book


5.3.2
代碼: 選擇全部
vim RenewAddressBook.bash


代碼: 選擇全部
#!/bin/bash

getent passwd | awk -f mkAddressBook.awk > /root/UserMailList

recode utf-8..big5 /root/UserMailList

cat /root/UserMailList > /usr/lib/cgi-bin/openwebmail/etc/address.book

cat /root/GroupMailList >> /usr/lib/cgi-bin/openwebmail/etc/address.book

## mkAddressBook.awk作為更新使用者通訊錄的SCRIPT,存放到UserMailList

## recode utf-8..big5 /root/UserMailList因為從AD抓過來的資料為UTF-8,所以透過程式轉換為BIG5

##自行安裝recode a apt-get install recode

## GroupMailList存放群組郵件的清單,日後群組有異動時修改這個文件。

5.3.3
代碼: 選擇全部
vim mkAddressBook.awk


#!/bin/awk



BEGIN {

FS=":"

}



{

g3xxxx = substr($5,1,1)

g3xxyy = substr($5,4,2)

if ( g3xxxx ~ /^3/ && g3xxyy ~ /^00/ ){

print $5 "@@@" $1 "@mail1.DomainName.net.tw@@@";

}

}

5.3.4
代碼: 選擇全部
vim GroupMailList
a 請自行編寫群組郵件的清單,格式為:

代碼: 選擇全部
姓名稱呼   @@@電子郵件位址@@@備註

5.3.5
代碼: 選擇全部
crontab -e


代碼: 選擇全部
1 * * * * sh /root/RenewAddressBook.bash

5.4 防止USER使用收信軟體傳送或接收Web Mail的信件。

5.4.1
代碼: 選擇全部
vim /etc/inetd.con
找到POP運行程序in.qpopper(假如是用qpopper)

5.4.2
代碼: 選擇全部
vim /etc/hosts.allow


代碼: 選擇全部
in.qpopper: 127.0.0.1

#設定只讓該程序由127.0.0.1進入使用

5.4.3
代碼: 選擇全部
 vim /etc/hosts.deny


代碼: 選擇全部
in.qpopper: ALL

#設定該程序拒絕所有USER
JBZ
可愛的小學生
可愛的小學生
 
文章: 1
註冊時間: 週二 9月 28, 2004 12:43 am

回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客

cron