ラベル OpenLDAP の投稿を表示しています。 すべての投稿を表示
ラベル OpenLDAP の投稿を表示しています。 すべての投稿を表示

2012年6月24日日曜日

Samba+OpenLDAP(PDC) ユーザー設定について

Samba+OpenLDAP(PDC) を運用したときのユーザーの登録について記載します。

まず先に結論から申し上げると作成済みのユーザー(Linuxアカウント)に Samba+OpenLDAP(PDC) のドメインにログオンできるようにするには、下記の2つのコマンドを実行する必要があります。

(前提条件として下記が設定済みである)
・Samba および OpenLDAPがPDC対応で正しくインストールされている。
・作成済みのユーザー(Linuxアカウント)がldapaddコマンド等でLDAPに登録済み。
・ログオンするPCのコンピュータ名が smbldap-useradd -w <コンピュータ名> で登録済み


[root@hoge ~]# smbldap-usermod -a <作成済みLinuxアカウント>

[root@hoge ~]# smbldap-passwd <作成済みLinuxアカウント>

今回は、Linuxユーザーとして作成済みのユーザーをSamba+OpenLDAP(PDC)のユーザーとして登録(再設定するための方法)記載します。

※基本的な設定については、別途記載することにします。

■変更前の設定内容■
[root@hoge ~]# smbldap-usershow pelo
dn: uid=pelo,ou=Users,dc=hogehoge,dc=com
uid: pelo
cn: pelo
objectClass: account,posixAccount,top
userPassword: {SSHA}*******************************
loginShell: /bin/bash
uidNumber: 3002
gidNumber: 3002
homeDirectory: /home/pelo
[root@hoge ~]# 

Windowsクライアントからログインできるユーザーは下記のようになっています。
比較すると、samba専用のアトリビュートが作成されていないことがわかります。

[root@hoge ~]# smbldap-usershow knownuser
dn: uid=knownuser,ou=Users,dc=hogehoge,dc=com
uid: knownuser
cn: knownuser
objectClass: account,posixAccount,top,shadowAccount,sambaSamAccount
shadowMin: 0
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/knownuser
gecos: Known User
shadowLastChange: 15462
shadowMax: 45
sambaSID: S-1-5-21-2725434548-1602857623-2035637331-1001
displayName: Known User
userPassword: {SSHA}*******************************
sambaNTPassword: *******************************
sambaPasswordHistory: 0000000000000000000000000000000000000000000000000000000000000000
sambaPwdLastSet: 1335947382
sambaAcctFlags: [U          ]
[root@hoge ~]# 

既に作成済みのユーザーについてsamba専用のアトリビュート情報の追加を行うには、smbldap-usermod-a オプションで実行する必要があることがわかりました。
善は急げで、早速実行します。

[root@hoge ~]# smbldap-usermod -a pelo
Warning: sambaPrimaryGroupSID could not be set beacuse group of user pelo is not a mapped Domain group!
To get a list of groups mapped to Domain groups, use "net groupmap list" on a Domain member machine.
Use of uninitialized value in string at /usr/sbin/smbldap-usermod line 346.
Use of uninitialized value in string eq at /usr/sbin/smbldap-usermod line 347.
Use of uninitialized value in string eq at /usr/sbin/smbldap-usermod line 347.
Use of uninitialized value in string eq at /usr/sbin/smbldap-usermod line 347.
Use of uninitialized value in concatenation (.) or string at /usr/sbin/smbldap-usermod line 347.
[root@hoge ~]# 

アレレ?。
何やら、嫌らしいエラーメッセージが表示されてしまいました。
usr/sbin/smbldap-usermod の346行目と347行目を確認しましたが、影響なさそうなので無視して先へ進むことにします。

    $cn = "$Options{'N'}";
    $cn .= " " . $Options{'S'}

smbldap-usermodコマンドの実施後に内容が変わったかどうかを検証します。

[root@hoge ~]# smbldap-usershow pelo
dn: uid=pelo,ou=Users,dc=hogehoge,dc=com
uid: pelo
objectClass: account,posixAccount,top,shadowAccount,sambaSamAccount
userPassword: {SSHA}zrb5IhKHtVErK8rdx/e0pqtG4kJ0ES29
shadowLastChange: 15476
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 3002
gidNumber: 3002
homeDirectory: /home/pelo
sambaPwdLastSet: 0
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaPwdMustChange: 2147483647
sambaSID: S-1-5-21-2725434548-1602857623-2035637331-7004
sambaAcctFlags: [UX]
cn:  
displayName:  
[root@hoge ~]#

上記の赤字青字の部分が追加されていることを確認できます。
しかし、青字のアトリビュートは未設定のようです。
cn は氏名(Common Name)を設定するアトリビュートで、displayName もWindowsで利用される氏名を設定するアトリビュートのようです。
      →→→ ■OpenLDAPの基本的なアトリビュートについて■
上記の内容でWindows7クライアントからドメインにログオンを行ってもまだエラーになってしまいます。
ログオンできるユーザーとの違いを確認したらsambaのパスワード関連のアトリビュートがないようです。(sambaLMPassword,sambaAcctFlags,sambaNTPassword,,,)
よって、再度パスワードを再設定するコマンド(smbldap-passwd)を実行してパスワードを上書きします。    ↓ 今度は無事にWindows7クライアントからドメインにログオンできました。

赤字の部分が smbldap-passwd を実行した結果に追加されたアトリビュートです。

[root@hoge ~]# smbldap-usershow pelo
dn: uid=pelo,ou=Users,dc=hogehoge,dc=com
uid: pelo
objectClass: account,posixAccount,top,shadowAccount,sambaSamAccount
shadowMin: 0
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 3002
gidNumber: 3002
homeDirectory: /home/pelo
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaSID: S-1-5-21-2725434548-1602857623-2035637331-7004
cn:  
displayName:  
sambaLMPassword: *******************************
sambaAcctFlags: [U]
sambaNTPassword: *******************************
sambaPwdLastSet: 1340506248
sambaPwdMustChange: 1344394248
userPassword: {SSHA}*******************************
shadowLastChange: 15515
shadowMax: 45
[root@hoge ~]# 

2012年6月23日土曜日

smbldap-usershow コマンドがエラーになる。

Samba+OpenLDAPでのユーザー情報を確認しようとsmbldap-usershowコマンドを実行したらエラーになってしまった。

[root@hoge ~]# smbldap-usershow hogehoge
Use of uninitialized value in string at /usr/lib/perl5/vendor_perl/5.8.8/smbldap_tools.pm line 397.
Use of uninitialized value in string at /usr/lib/perl5/vendor_perl/5.8.8/smbldap_tools.pm line 397.
user hogehoge doesn't exist

smbldap_tools.pm の397行目を確認したら、 $ldap_slave->bind( "$config{slaveDN}", password => "$config{slavePw}" ); となっていた。
slaveDNの設定に問題があるようなので、確認をすると下記の対応でエラーが解消された。

■ /etc/smbldap-tools/smbldap_bind.conf ■
# $Id: smbldap_bind.conf 35 2011-02-23 09:07:36Z fumiyas $
#
############################
# Credential Configuration #
############################
# Notes: you can specify two differents configuration if you use a
# master ldap for writing access and a slave ldap server for reading access
# By default, we will use the same DN (so it will work for standard Samba
# release)
slaveDN="cn=Manager,dc=hogehoge,dc=com"  <-- 追加
slavePw="****************"  <-- 追加
masterDN="cn=Manager,dc=hogehoge,dc=com"
masterPw="****************"

Samba+OpenLDAPを特にスレーブサーバを立てていないのでslaveの設定は不要と思っていたが、このslaveの記述がないとエラーになってしまうようでした。
なんだか良く理解できないが、コマンドが実行できるようになったので安心した。

2012年5月14日月曜日

LDAPによるUNIXアカウントなしユーザー認証

表題の「LDAPによるUNIXアカウントなしユーザー認証」が出来ずに苦労したが、解決するとなんとまぁ自分の愚かさに呆れるだけであった。

■環境
 CentOS 5.8
 SELinux:Enforcing
  OPENLDAP:2.3.43
  SAMBA:3.6.3
[root@hoge etc]# cat ldap.conf | grep -v "^#\|^$"
host 127.0.0.1
base dc=hoge,dc=com
uri ldap://127.0.0.1/
binddn cn=proxy,dc=hoge,dc=com
bindpw secretword
timelimit 120
bind_timelimit 120
bind_policy soft
idle_timelimit 3600
nss_base_passwd         ou=Users,dc=hoge,dc=com
nss_base_shadow         ou=Users,dc=hoge,dc=com
nss_base_group          ou=Groups,dc=hoge,dc=com
nss_base_hosts          ou=Computers,dc=hoge,dc=com
nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus,radvd,tomcat,radiusd,news,mailman,nscd,gdm
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5
[root@hoge etc]# 

なんと bindpw を値を平文で登録していなかったためにバインド認証エラーが発生していた。

なにげに slapcat を実行したら下記のように binddn の後に pwdFailureTime と出力されておりやっと気がついた次第です。(ーー;)

dn: cn=proxy,dc=hoge,dc=com
objectClass: organizationalRole
objectClass: simpleSecurityObject
cn: proxy
userPassword:: a1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD=
structuralObjectClass: organizationalRole
entryUUID: ********-*********-****-************
creatorsName: cn=Manager,dc=hoge,dc=com
createTimestamp: 20120508013259Z
pwdFailureTime: 20120509030611Z
pwdFailureTime: 20120509030647Z
pwdFailureTime: 20120509030723Z
pwdFailureTime: 20120509030759Z
       ・
       ・
       ・

2012年3月8日木曜日

LDAPの初期化(再設定)

  1. ldap(slapd)を停止する。
  2. [root@hoge ~]# service ldap stop
    slapd を停止中:                        [ OK ]
    [root@hoge ~]#
    (レプリケーションの場合は、スレーブを先に停止させる。)

  3. slapd.conf等の必要編集を行う。slaptestも実施しておく

  4. ldapデータベースを物理的に削除する。
  5. /var/lib/ldap フォルダの中の DB_CONFIG 以外を削除する。
    ※こちらの設定では、/var/lib/ldap にldapデータベースが登録される設定のため。
      /etc/openldap/slapd.conf で指定

    [root@hoge ldap]# ls -il
    合計 1208
    131133 -rw-r----- 1 root root      921  1月 24 08:14 DB_CONFIG
    131116 -rw------- 1 ldap ldap    24576  3月  7 10:21 __db.001
    131117 -rw------- 1 ldap ldap   278528  3月  7 10:21 __db.002
    131118 -rw------- 1 ldap ldap   270336  3月  7 10:21 __db.003
    131119 -rw------- 1 ldap ldap    98304  3月  7 10:21 __db.004
    131120 -rw------- 1 ldap ldap   352256  3月  7 10:21 __db.005
    131121 -rw------- 1 ldap ldap    24576  3月  7 10:21 __db.006
    131082 -rw-r--r-- 1 ldap ldap     4096  3月  7 10:21 alock
    131126 -rw------- 1 ldap ldap     8192  1月 28 20:48 cn.bdb
    131124 -rw------- 1 ldap ldap     8192  1月 28 20:48 dn2id.bdb
    131132 -rw------- 1 ldap ldap     8192  1月 28 20:48 gidNumber.bdb
    131123 -rw------- 1 ldap ldap    32768  1月 31 20:54 id2entry.bdb
    131122 -rw------- 1 ldap ldap 10485760  3月  7 10:21 log.0000000001
    131130 -rw------- 1 ldap ldap     8192  1月 22 20:00 loginShell.bdb
    131129 -rw------- 1 ldap ldap     8192  1月 28 20:48 memberUid.bdb
    131125 -rw------- 1 ldap ldap     8192  1月 28 20:48 objectClass.bdb
    131127 -rw------- 1 ldap ldap     8192  1月 24 21:44 ou.bdb
    131128 -rw------- 1 ldap ldap     8192  1月 22 20:00 uid.bdb
    131131 -rw------- 1 ldap ldap     8192  1月 22 20:00 uidNumber.bdb
    
    削除後の内容
    [root@hoge ldap]# ls -il
    合計 8
    131133 -rw-r----- 1 root root 921  1月 24 08:14 DB_CONFIG
    [root@hoge ldap]# 
    

  6. ldap(slapd)を起動する。
  7. [root@hoge ~]# service ldap start
    slapd の設定ファイルをチェック中:  config file testing succeeded
                                                           [  OK  ]
    slapd を起動中:                                            [  OK  ]
    [root@hoge ~]# 
    
  8. 初期情報を登録
  9. 基本データ(base.ldif)
    dn: dc=example,dc=com
    objectClass: dcObject
    objectClass: organization
    dc: example
    o: example
    
    dn: ou=People,dc=example,dc=com
    objectClass: organizationalUnit
    ou: People
    
    dn: ou=Group,dc=example,dc=com
    objectClass: organizationalUnit
    ou: Group
    
    dn: ou=Hosts,dc=example,dc=com
    objectClass: organizationalUnit
    ou: Hosts
    ldapaddコマンドでLDIFファイルの内容を登録します。
    
    # ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f base.ldif 
    Enter LDAP Password:
    adding new entry "dc=horisawa,dc=info"
    
    adding new entry "cn=Manager,dc=horisawa,dc=info"
    
    adding new entry "ou=People,dc=horisawa,dc=info"
    
    adding new entry "ou=Group,dc=horisawa,dc=info"
    
    adding new entry "ou=Hosts,dc=horisawa,dc=info"
    
    
    ユーザ/グループの登録(既存unixアカウントをそのまま移行する)
    • /etc/passwdのアカウントをLDAPへ登録する。
    • /etc/passwdから一般ユーザのみを抽出するようuidが500番台を抽出。
      [root@hoge openldap]# grep :5[0-9][0-9] /etc/passwd > users-list.txt
      
      /migrate_passwd.pl を利用してLDIFファイルを作成。
      [root@hoge openldap]# /usr/share/openldap/migration/migrate_passwd.pl users-list.txt > users.ldif
      
      ldapaddコマンドでLDIFファイルの内容を登録します。
      
      # ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f user.ldif 
      Enter LDAP Password:
      adding new entry "uid=hoge01,ou=People,dc=example,dc=com"
      
      adding new entry "uid=hoge02,ou=People,dc=example,dc=com"
      
      
    • /etc/groupのグループをLDAPへ登録する
    • /etc/groupから一般グループのみを抽出するようgidが500番台を抽出。
      [root@hoge openldap]# grep :5[0-9][0-9] /etc/group > groups-list.txt
      
      /migrate_passwd.pl を利用してLDIFファイルを作成。
      [root@hoge openldap]# /usr/share/openldap/migration/migrate_group.pl groups-list.txt > groups.ldif
      
      ldapaddコマンドでLDIFファイルの内容を登録します。
      
      # ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f user.ldif 
      Enter LDAP Password:
      adding new entry "cn=hoge01,ou=Group,dc=example,dc=com"
      
      adding new entry "cn=hoge02,ou=Group,dc=example,dc=com"
      
      adding new entry "cn=hoge03,ou=Group,dc=example,dc=com"
      
      adding new entry "cn=hoge04,ou=Group,dc=example,dc=com"
      
      

smbldap-toolsを利用して登録を行う。

基本データ(base.ldif)を登録した後に、smbldap-toolsを利用してユーザ・グループおよび管理者情報の登録を行う。
事前にsambaが正しく設定されているものとして下記にコマンドを実行する。

基本データ(base.ldif)の登録
[root@hoge ldif]# ldapadd -x -D "cn=Manager,dc=horisawa,dc=info" -W -f base.ldif
Enter LDAP Password: 
adding new entry "dc=horisawa,dc=info"

adding new entry "cn=Manager,dc=example,dc=com"

adding new entry "ou=Users,dc=example,dc=com"

adding new entry "ou=Groups,dc=example,dc=com"

adding new entry "ou=Computers,dc=example,dc=com"

[root@hoge ldif]# 

グループ(groups.ldif)の登録
[root@hoge ldif]# ldapadd -x -D "cn=Manager,dc=horisawa,dc=info" -W -f groups.ldif

ユーザー(users.ldif)の登録
[root@hoge ldif]# ldapadd -x -D "cn=Manager,dc=horisawa,dc=info" -W -f users.ldif
smbldap-toolsでデータを登録する。
[root@hoge ~]# smbldap-populate -a Administrator -b Guest
Populating LDAP directory for domain EXAMPLE (S-1-5-21-2725434548-1602857623-2035637331)
(using builtin directory structure)

entry dc=example,dc=com already exist. 
entry ou=Users,dc=example,dc=com already exist. 
entry ou=Groups,dc=example,dc=com already exist. 
entry ou=Computers,dc=example,dc=com already exist. 
adding new entry: ou=Idmap,dc=example,dc=com
adding new entry: uid=Administrator,ou=Users,dc=example,dc=com
adding new entry: uid=Guest,ou=Users,dc=example,dc=com
adding new entry: cn=Domain Admins,ou=Groups,dc=example,dc=com
adding new entry: cn=Domain Users,ou=Groups,dc=example,dc=com
adding new entry: cn=Domain Guests,ou=Groups,dc=example,dc=com
adding new entry: cn=Domain Computers,ou=Groups,dc=example,dc=com
adding new entry: cn=Administrators,ou=Groups,dc=example,dc=com
adding new entry: cn=Account Operators,ou=Groups,dc=example,dc=com
adding new entry: cn=Print Operators,ou=Groups,dc=example,dc=com
adding new entry: cn=Backup Operators,ou=Groups,dc=example,dc=com
adding new entry: cn=Replicators,ou=Groups,dc=example,dc=com
adding new entry: sambaDomainName=example,dc=example,dc=com

Please provide a password for the domain Administrator: 
Changing UNIX and samba passwords for Administrator
New password: 
Retype new password: 
[root@hoge ~]# 

初期データ投入がうまくいったら、ドメイン管理者アカウント(Administrator)のパスワードを設定する。PDCマシン上でrootになり、以下を1度だけ実行すればよい。

[root@hoge ~]# smbldap-passwd Administrator
Changing UNIX and samba passwords for Administrator
New password: 
Retype new password: 
[root@hoge ~]# 

一般ユーザーを追加する。

[root@hoge samba]# smbldap-passwd testuser
Changing UNIX password for testuser
New password: 
Retype new password: 
[root@hoge samba]# 

SASL認証設定ファイル編集

smbldap-useraddで追加したユーザがSMTP-Authが行えるようにする

# vi /etc/sysconfig/saslauthd
MECH=shadow
↓
MECH=pam
確認事項およびエラー等の注意事項

ログを確認したら下記のようにエラーが発生していた。(/var/log/samba/log.smbd)

[2012/04/26 18:41:59.611756,  2] lib/smbldap.c:1018(smbldap_open_connection)
  smbldap_open_connection: connection opened
[2012/04/26 18:41:59.611978,  0] passdb/secrets.c:350(fetch_ldap_pw)
  fetch_ldap_pw: neither ldap secret retrieved!
[2012/04/26 18:41:59.612175,  0] lib/smbldap.c:1180(smbldap_connect_system)
  ldap_connect_system: Failed to retrieve password from secrets.tdb
[2012/04/26 18:41:59.612359,  1] lib/smbldap.c:1409(another_ldap_try)
  Connection to LDAP server failed for the 5 try!
[root@ora02 samba]# 

というエラーが出されていました.secrets.tdb はそれぞれのローカルマシンで作成されるもので,そこに,LDAP のパスワードを登録しないと LDAP サーバにて認証が通りません.そこで,secrets.tdb に LDAP の管理者パスワードを登録する必要があります.次のコマンドを実行します.

[root@hoge ~]# smbpasswd -W
Setting stored password for "cn=Administrator,ou=Users,dc=example,dc=com" in secrets.tdb
New SMB password:        (LDAPの管理用パスワードを入力)
Retype new SMB password: (LDAPの管理用パスワードをもう一度入力)
[root@hoge ~]# 
今回の設定で関連するファイルは下記の通りです。
・/etc/openldap/slapd.conf (ldapの基本設定)
・/etc/openldap/ldif/base.ldif (作成した基本情報)
・/etc/samba/smb.conf (sambaの基本設定)
・/etc/smbldap-tools/smbldap.conf (変換を行うための基本情報が設定)
・/etc/smbldap-tools/smbldap_bind.conf (masterDNとmasterPwを設定)

2012年2月21日火曜日

OpenLDAPと暗号化通信

SMTPやPOP3プロトコルでは平文パスワードがネットワーク上を流れるますが,LDAPでも同じです。tcpdumpなどで通信をキャプチャしてみると,パスワード文字列を簡単に取得することができてしまいます。

アカウント情報(UNIXアカウント)をOPENLDAPで管理する場合、実際のパスワード情報はLDAPサーバ上のuserPassword属性中に暗号化された状態で格納されていますが,ネットワーク上のトラフィックをキャプチャしてみると,平文のパスワードを取得することができてしまう。

信頼されたネットワーク内のみで運用するのであれば話は別ですが,盗聴の危険性を考慮した場合,ネットワーク経路の暗号化の検討が必要になります。

暗号化の種類

データを暗号化させるためには,いくつかの方法が考えられますが,これはSMTP/POP3/IMAPなどの基本的なプロトコルにおける考え方と同様です。

ひとつ目の方法はSSL/TLSにより,トラフィック全体を暗号化させることです。この場合SSLを使用しますので,LDAPサーバ上にサーバ鍵,証明書,CA情報などを設置しておく必要があります。トラフィックをSSLでカプセリングすることで,パスワード情報だけではなく接続の最初から最後までの全情報を暗号化させることができることが最大のメリットです。また,暗号化だけではなく信頼された接続先に安全に接続できる,という意味も持ちます。

2012年2月6日月曜日

dovecotインストール

LDAPを設定する機会にあわせて、dovecot-2.0.17-1をインストールする。いつもは、POP3をインストールするが、昨今の Thin client化の波やオフィスや出先の(別の端末からメール確認)を考えてIMAPである dovecot-2.0.16-1をインストールすることにした。パッケージのインストールには、unixlife.repo にお世話になりました。

LDAP + DOVECOT2

dovecotの概要
Dovecotは、デフォルトでPOP3とIMAPが動作するように設定されていますが、Courie-IMAPと同様にPOP3sとIMAPsもサポートされています。

今回は、dovecotをIMAP4とPOP3をクライアントが選択できるように設定します。

# 2.0.16: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.18-274.18.1.el5xen i686 CentOS release 5.7 (Final) 
auth_anonymous_username = anonymous
auth_cache_negative_ttl = 1 hours
auth_cache_size = 0
auth_cache_ttl = 1 hours
auth_debug = no
auth_debug_passwords = no
auth_default_realm = 
auth_failure_delay = 2 secs
auth_first_valid_uid = 500
auth_gssapi_hostname = 
auth_krb5_keytab = 
auth_last_valid_uid = 0
auth_master_user_separator = 
auth_mechanisms = plain
auth_realms = 
auth_socket_path = auth-userdb
auth_ssl_require_client_cert = no
auth_ssl_username_from_cert = no
auth_use_winbind = no
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
auth_username_format = 
auth_username_translation = 
auth_verbose = no
auth_verbose_passwords = no
auth_winbind_helper_path = /usr/bin/ntlm_auth
auth_worker_max_count = 30
base_dir = /var/run/dovecot
config_cache_size = 1 M
debug_log_path = 
default_client_limit = 1000
default_idle_kill = 60
default_internal_user = dovecot
default_login_user = dovenull
default_process_limit = 100
default_vsz_limit = 256 M
deliver_log_format = msgid=%m: %$
dict_db_config = 
director_doveadm_port = 0
director_mail_servers = 
director_servers = 
director_user_expire = 15 mins
disable_plaintext_auth = yes
dotlock_use_excl = yes<
doveadm_allowed_commands = 
doveadm_password = 
doveadm_proxy_port = 0
doveadm_socket_path = doveadm-server
doveadm_worker_count = 0
first_valid_gid = 1
first_valid_uid = 500
hostname = 
imap_capability = 
imap_client_workarounds = 
imap_id_log = 
imap_id_send = 
imap_idle_notify_interval = 2 mins
imap_logout_format = bytes=%i/%o
imap_max_line_length = 64 k
import_environment = TZ
info_log_path = 
last_valid_gid = 0
last_valid_uid = 0
lda_mailbox_autocreate = no
lda_mailbox_autosubscribe = no
lda_original_recipient_header = 
libexec_dir = /usr/libexec/dovecot
listen = *, ::
lmtp_proxy = no
lmtp_save_to_detail_mailbox = no
lock_method = fcntl
log_path = syslog
log_timestamp = "%b %d %H:%M:%S "
login_access_sockets = 
login_greeting = Dovecot ready.
login_log_format = %$: %s
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c
login_trusted_networks = 
mail_access_groups = 
mail_attachment_dir = 
mail_attachment_fs = sis posix
mail_attachment_hash = %{sha1}
mail_attachment_min_size = 128 k
mail_cache_fields = flags
mail_cache_min_mail_count = 0
mail_chroot = 
mail_debug = no
mail_fsync = optimized
mail_full_filesystem_access = no
mail_gid = 
mail_home = 
mail_location = 
mail_log_prefix = "%s(%u): "
mail_max_keyword_length = 50
mail_max_lock_timeout = 0
mail_max_userip_connections = 10
mail_never_cache_fields = imap.envelope
mail_nfs_index = no
mail_nfs_storage = no
mail_plugin_dir = /usr/lib/dovecot
mail_plugins = 
mail_privileged_group = 
mail_save_crlf = no
mail_temp_dir = /tmp
mail_uid = 
mailbox_idle_check_interval = 30 secs
mailbox_list_index_disable = no
maildir_copy_with_hardlinks = yes
maildir_stat_dirs = no
maildir_very_dirty_syncs = no
managesieve_client_workarounds = 
managesieve_implementation_string = Dovecot Pigeonhole
managesieve_logout_format = bytes=%i/%o
managesieve_max_compile_errors = 5
managesieve_max_line_length = 65536
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave
master_user_separator = 
mbox_dirty_syncs = yes
mbox_dotlock_change_timeout = 2 mins
mbox_lazy_writes = yes
mbox_lock_timeout = 5 mins
mbox_min_index_size = 0
mbox_read_locks = fcntl
mbox_very_dirty_syncs = no
mbox_write_locks = fcntl
mdbox_preallocate_space = no
mdbox_rotate_interval = 0
mdbox_rotate_size = 2 M
mmap_disable = no
passdb {
  args = 
  deny = no
  driver = pam
  master = no
  pass = no
}
plugin {
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
}
pop3_client_workarounds = 
pop3_enable_last = no
pop3_fast_size_lookups = no
pop3_lock_session = no
pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
pop3_no_flag_updates = no
pop3_reuse_xuidl = no
pop3_save_uidl = no
pop3_uidl_format = %08Xu%08Xv
postmaster_address = 
protocols = imap pop3 lmtp
quota_full_tempfail = no
recipient_delimiter = +
rejection_reason = Your message to <%t> was automatically rejected:%n%r
rejection_subject = Rejected: %s
sendmail_path = /usr/sbin/sendmail
service anvil {
  chroot = empty
  client_limit = 0
  drop_priv_before_exec = no
  executable = anvil
  extra_groups = 
  group = 
  idle_kill = 4294967295 secs
  privileged_group = 
  process_limit = 1
  process_min_avail = 1
  protocol = 
  service_count = 0
  type = anvil
  unix_listener anvil-auth-penalty {
    group = 
    mode = 0600
    user = 
  }
  unix_listener anvil {
    group = 
    mode = 0600
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service auth-worker {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = auth -w
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 1
  type = 
  unix_listener auth-worker {
    group = 
    mode = 0600
    user = $default_internal_user
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service auth {
  chroot = 
  client_limit = 4096
  drop_priv_before_exec = no
  executable = auth
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener auth-client {
    group = 
    mode = 0600
    user = 
  }
  unix_listener auth-login {
    group = 
    mode = 0600
    user = $default_internal_user
  }
  unix_listener auth-master {
    group = 
    mode = 0600
    user = 
  }
  unix_listener auth-userdb {
    group = 
    mode = 0600
    user = 
  }
  unix_listener login/login {
    group = 
    mode = 0666
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service config {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = config
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = config
  unix_listener config {
    group = 
    mode = 0600
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service dict {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = dict
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener dict {
    group = 
    mode = 0600
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service director {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = director
  extra_groups = 
  fifo_listener login/proxy-notify {
    group = 
    mode = 00
    user = 
  }
  group = 
  idle_kill = 4294967295 secs
  inet_listener {
    address = 
    port = 0
    ssl = no
  }
  privileged_group = 
  process_limit = 1
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener director-admin {
    group = 
    mode = 0600
    user = 
  }
  unix_listener director-userdb {
    group = 
    mode = 0600
    user = 
  }
  unix_listener login/director {
    group = 
    mode = 00
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service dns_client {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = dns-client
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener dns-client {
    group = 
    mode = 0666
    user = 
  }
  unix_listener login/dns-client {
    group = 
    mode = 0666
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service doveadm {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = doveadm-server
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 1
  type = 
  unix_listener doveadm-server {
    group = 
    mode = 0600
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service imap-login {
  chroot = login
  client_limit = 0
  drop_priv_before_exec = no
  executable = imap-login
  extra_groups = 
  group = 
  idle_kill = 0
  inet_listener imap {
    address = 
    port = 143
    ssl = no
  }
  inet_listener imaps {
    address = 
    port = 993
    ssl = yes
  }
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = imap
  service_count = 1
  type = login
  user = $default_login_user
  vsz_limit = 18446744073709551615 B
}
service imap {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = imap
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1024
  process_min_avail = 0
  protocol = imap
  service_count = 1
  type = 
  unix_listener login/imap {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service ipc {
  chroot = empty
  client_limit = 0
  drop_priv_before_exec = no
  executable = ipc
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener ipc {
    group = 
    mode = 0600
    user = 
  }
  unix_listener login/ipc-proxy {
    group = 
    mode = 0600
    user = $default_login_user
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service lmtp {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = lmtp
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = lmtp
  service_count = 0
  type = 
  unix_listener lmtp {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service log {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = log
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = log
  user = 
  vsz_limit = 18446744073709551615 B
}
service managesieve-login {
  chroot = login
  client_limit = 0
  drop_priv_before_exec = no
  executable = managesieve-login
  extra_groups = 
  group = 
  idle_kill = 0
  inet_listener sieve {
    address = 
    port = 4190
    ssl = no
  }
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = sieve
  service_count = 1
  type = login
  user = $default_login_user
  vsz_limit = 64 M
}
service managesieve {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = managesieve
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = sieve
  service_count = 1
  type = 
  unix_listener login/sieve {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service pop3-login {
  chroot = login
  client_limit = 0
  drop_priv_before_exec = no
  executable = pop3-login
  extra_groups = 
  group = 
  idle_kill = 0
  inet_listener pop3 {
    address = 
    port = 110
    ssl = no
  }
  inet_listener pop3s {
    address = 
    port = 995
    ssl = yes
  }
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = pop3
  service_count = 1
  type = login
  user = $default_login_user
  vsz_limit = 18446744073709551615 B
}
service pop3 {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = pop3
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1024
  process_min_avail = 0
  protocol = pop3
  service_count = 1
  type = 
  unix_listener login/pop3 {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service ssl-params {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = ssl-params
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = startup
  unix_listener login/ssl-params {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
shutdown_clients = yes
ssl = yes
ssl_ca = 
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_cert_username_field = commonName
ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL
ssl_key = </etc/pki/dovecot/private/dovecot.pem
ssl_key_password = 
ssl_parameters_regenerate = 168
ssl_verify_client_cert = no
submission_host = 
syslog_facility = mail
userdb {
  args = 
  driver = passwd
}
valid_chroot_dirs = 
verbose_auth = no
verbose_proctitle = no
verbose_ssl = no
version_ignore = no
設定内容もほぼ標準で問題ないようだ。


■dovecotの設定内容の確認

  • doveconf -a (同じ dovecot -a )
    設定内容を表示する。(コメントが除去されてすべての設定内容が表示される。)
  • doveconf -n
    標準設定以外の設定項目を出力する。
他にもオプションはあるが、manコマンドで確認して下さい。

2012年2月5日日曜日

postfix インストール

設定方法については、「OSSでLinuxサーバ構築」さんや「Stray Penguin」さんを参照させて頂いております。「OSSでLinuxサーバ構築」さん「Stray Penguin」さんありがとうございます。

[root@ora02 ~]# yum install postfix
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: rsync.atworks.co.jp
 * extras: rsync.atworks.co.jp
 * rpmforge: fr2.rpmfind.net
 * updates: rsync.atworks.co.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package postfix.i386 2:2.3.3-2.3.el5_6 set to be updated
--> Processing Dependency: cyrus-sasl >= 2.1.10 for package: postfix
--> Running transaction check
---> Package cyrus-sasl.i386 0:2.1.22-5.el5_4.3 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package            Arch         Version                     Repository    Size
================================================================================
Installing:
 postfix            i386         2:2.3.3-2.3.el5_6           base         3.5 M
Installing for dependencies:
 cyrus-sasl         i386         2.1.22-5.el5_4.3            base         1.2 M

Transaction Summary
================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)

Total download size: 4.7 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): cyrus-sasl-2.1.22-5.el5_4.3.i386.rpm              | 1.2 MB     00:00     
(2/2): postfix-2.3.3-2.3.el5_6.i386.rpm                  | 3.5 MB     00:00     
--------------------------------------------------------------------------------
Total                                           4.4 MB/s | 4.7 MB     00:01     
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : cyrus-sasl                                               1/2 
  Installing     : postfix                                                  2/2 

Installed:
  postfix.i386 2:2.3.3-2.3.el5_6                                                

Dependency Installed:
  cyrus-sasl.i386 0:2.1.22-5.el5_4.3                                            

Complete!
[root@ora02 ~]# 
【postfixユーザー】
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

【postfixグループ】
postdrop:x:90:
postfix:x:89:

正規表現によるメールフィルタリングの制御に PCRE があると高度なフィルタリングが可能。
デフォルトでインストールされていると思いますが、コンパイルオプションでunicode-propertiesが有効になっていないということあるかもしれないので、確認をする。

[root@ora02 ~]# pcretest -C
PCRE version 6.6 06-Feb-2006
Compiled with
  UTF-8 support
  Unicode properties support   ← これでOK! NGの時 → No Unicode properties support
  Newline character is LF
  Internal link size = 2
  POSIX malloc threshold = 10
  Default match limit = 10000000
  Default recursion depth limit = 10000000
  Match recursion uses stack
[root@ora02 ~]# 

基本設定

■ main.cfの編集
・設定ファイル/etc/postfix/main.cfの編集
# vi /etc/postfix/main.cf

# ホスト名
myhostname =  mail.oss-d.net

# ドメイン名
mydomain = oss-d.net
 
# @以降のドメイン名
myorigin = $mydomain

# メールを受け取るネットワークインタフェースのアドレス範囲
inet_interfaces = all

# メールの最終目的地とみなす範囲の指定
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# 信頼できるクライアントのネットワーク
mynetworks =  192.168.11.0/24, 127.0.0.0/8

# リレーを許可するドメインを指定
relay_domains = $mydestination

# メールBOXの形式
home_mailbox = Maildir/

■ SMTP-AUTH対応(SASL認証)

■ main.cfの編集
・設定ファイル /etc/postfix/main.cf を編集(設定を追記する)
# SASLによるSMTP認証を使用
smtpd_sasl_auth_enable = yes

# 使用可能な認証メカニズムの設定
# noanonymous : 匿名接続を拒否。
# noplaintext : PLAIN認証を拒否(Outlook ExpressはPLAIN認証のみ対応)
#smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_security_options = noanonymous

# 認証時のTLSの利用(TLSを強制する場合はyesに変更)
#smtpd_tls_auth_only = yes

#ローカル認証 realm を設定
smtpd_sasl_local_domain = $myhostname

#メールの送信可能なユーザ定義
# mynetworks sasl認証された は許可。それ以外は拒否
smtpd_recipient_restrictions =
 permit_mynetworks
 permit_auth_destination
 permit_sasl_authenticated
 reject

# Outlook LOGIN 認証を利用するための設定
broken_sasl_auth_clients = yes
■ SASLの設定
1. 「/usr/lib/sasl2/smtpd.conf」を下記の通り設定します。
pwcheck_method: saslauthd
mech_list: login plain 
2. 「/etc/sysconfig/saslauthd」を下記の通り設定します。ユーザ情報はPAM経由でUNIXアカウントを利用します。
MECH=pam
3. SASLの自動起動設定
# chkconfig saslauthd on
4. SASLの起動
# /etc/init.d/saslauthd start
  または
# service saslauthd start

■ SMTP-AUTH対応(LDAP認証)

SMTP-AUTHの認証をLDAPで行うように設定します。
■ SASLの設定
1. 「/usr/lib/sasl2/smtpd.conf」を下記の通り設定します。
# vi /usr/lib/sasl2/smtpd.conf

pwcheck_method: saslauthd
mech_list: login plain 
2. 「/etc/sysconfig/saslauthd」を下記の通り設定します。
# vi /etc/sysconfig/saslauthd
MECH=ldap
3. SASLがLDAPのユーザ情報を使用するよう「/etc/saslauthd.conf」を作成する。
# vi /etc/saslauthd.conf
ldap_servers: ldap://localhost 
ldap_search_base: ou=Users,dc=hoge,dc=com 
ldap_filter: uid=%u
4. SASLの自動起動設定
# chkconfig saslauthd on
5. SASLの起動
# /etc/init.d/saslauthd restart
-------------------------

SMTP-TSL対応

■ 秘密鍵と証明書の作成
秘密鍵「localhost.key」と証明書「localhost.crt」を作成します。


今回 sendmail でなく postfix をインストールする理由

Sendmailはメールアカウントの認証をホストのログインアカウントの流用で行っており、Postfixがサポートしているような仮想メールアカウントの機能を備えていないため、メールアカウントをLDAP参照にするのはpam_ldap等を使用してホストのログインアカウントをldap参照とし、これを流用するという方法による間接的な対応となります。今回はLDAPによるユーザー認証を目的としているので Postfix で行うことにします。


中途半端な記述になってしまいましたが、後日追記します...

2012年1月29日日曜日

LDAPオブジェクトの識別名

オブジェクトの識別名は常に使うのだが、ついつい語彙(意味)を正確に覚えていないので明記する。
■LDAP サービスで使用される代表的な属性
属性名 意味(タイプ)
dc ドメイン名の要素(Domain Component)
o 会社名、組織名(Organization)
ou 部署名(Organization Unit)
uid ユーザー ID(UserID)
cn 氏名(Common Name)
sn 姓(Surname)
givenName
mail メールアドレス

■認証サーバーを構築する場合に使用される属性
属性名 意味(タイプ)
shadowLastChange 1970/01/01 から最後にパスワードを変更した日までの日数
shadowMax ユーザーに新しいパスワードを保持させる日数
shadowMin ユーザーが同じパスワードを使用できる日数
shadowWarning が近づいたことを、何日前からユーザーに通知するかを指定
loginshell ログインシェル
uidNumber ユーザー ID
gidNumber グループ ID
homeDirectory ユーザーのホームディレクトリ
userPassword ユーザーのパスワード