2007年11月26日

OpenDirectory で Debian系を認証

Debian系は認証設定のツール群が充実していない。結局は設定ファイルを直に編集するのが近道になる。Debian Policy Manualを見る限り、ローカルユーザとNISなりLDAPなり外部由来ユーザの区別が無い。。。何だが X っぽい。

Ubuntu 7.10 リリース記念なので、こいつの Server 版を、Leopard Server にぶら下げてみた。

参考 OpenDirectory で Feodra/CentOSを 認証

追加パッケージ

# apt-get install libnss-ldap libpam-ldap
# apt-get install libpam-krb5 krb5-user
# apt-get install libpam-cracklib
# apt-get install portmap nfs-common autofs-ldap

Kerberos 5 設定

/etc/krb5.conf

...
[libdefaults]
    default_realm = EXAMPLE.COM
...
[realms]
    HOME.MOIMOITEI.JP = {
        kdc = leopardserver.example.com:88
        admin_server = leopardserver.example.com:749
    }
...
[domain_realm]
    .example.com = EXAMPLE.COM
    example.com = EXAMPLE.COM
...

これでKerberos5関連のコマンドが有効に機能するので確認するついでに、host/nfsプリンシパルを作成しとく。

# kinit -p diradmin
Authenticating as principal diradmin with password.
Password for diradmin@EXAMPLE.COM:
kadmin:  addprinc -randkey host/ubuntu71s.example.com@EXAMPLE.COM
kadmin:  addprinc -randkey nfs/ubuntu71s.example.com@EXAMPLE.COM
kadmin:  ktadd host/ubuntu71s.example.com@EXAMPLE.COM
kadmin:  ktadd -e des-cbc-crc:normal nfs/ubuntu71s.example.com@EXAMPLE.COM
# klist -k -e
keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   3 host/ubuntu71s.example.com@EXAMPLE.COM (Triple DES cbc mode with HMAC/sha1)
   3 host/ubuntu71s.example.com@EXAMPLE.COM (ArcFour with HMAC/md5)
   3 host/ubuntu71s.example.com@EXAMPLE.COM (DES cbc mode with CRC-32)
   3 nfs/ubuntu71s.example.com@EXAMPLE.COM (DES cbc mode with CRC-32)

うまく行かない場合、ネットワーク設定や時間同期を見直す。

LDAP 設定

Debian/etch の libnss-ldap/libpam-ldapの設定ファイルは、別々になっているが、特に分ける必要がないので、シンボリックリンクを張っとく。

# ln -sf /etc/ldap.conf /etc/libnss-ldap.conf
# ln -sf /etc/ldap.conf /etc/pam_ldap.conf

ldap の設定では、ホスト名ではなくIPアドレスを直に設定する。 (XX.XX.XX.XXがleopardserverのアドレス)

/etc/ldap.conf

host XX.XX.XX.XX
uri ldap://XX.XX.XX.XX/
base dc=example,dc=com
ldap_version 3
port 389
#bind_policy [hard|soft]
bind_policy soft

#binddn cn=proxyuser,??,dc=example,dc=com
#bindpw secret
#rootbinddn ???

ssl no
#ssl [no|on|start_tls]
#tls_cacertfile /etc/openldap/cacert
#tls_cacertdir /etc/openldap/cacerts
#tls_checkpeer yes
#tls_ciphers [SSLv2|SSLv3|TLSv1]
#tls_cert mycert
#tls_key mykey

timelimit 60
bind_timelimit 60
idle_timelimit 300

####
scope one

nss_schema rfc2307
nss_base_passwd cn=users,?one
nss_base_shadow cn=users,?one
nss_base_group  cn=groups,?one
nss_base_hosts  cn=machines,?one

pam_password exop
#pam_filter objectclass=account
pam_login_attribute uid
pam_check_host_attr no
pam_check_service_attr no

NSSの設定

/etc/nsswitch.conf

passwd:         files ldap
group:          files ldap
shadow:         files ldap

hosts:          files dns
networks:       files

protocols:      files
services:       files
ethers:         files
rpc:            files

netgroup:       ldap

automount:  files ldap

これで Open Directory 上のユーザ情報が見えれば良し。

PAMの設定

pam の設定は管理者の数だけ書き方があるのだが、2点を留意して設定する。

  1. Linux-PAM の独自の制御フィールド構文を使わない。
  2. Debian 系の独自パッチにあまり依存しない。(特に、@include文ってなに?)

管理の簡便性のため、/etc/pam.d/common-* の設定ファイルは /etc/pam.d/system に纏めておく。

# echo "auth include system" > /etc/pam.d/common-auth
# echo "account include system" > /etc/pam.d/common-account
# echo "password include system" > /etc/pam.d/common-password
# echo "session include system" > /etc/pam.d/common-session

/etc/pam.d/system

#
# /etc/pam.d/system - authentication settings common to all services
#

# account
account sufficient  pam_unix.so
account sufficient  pam_krb5.so
account sufficient  pam_ldap.so
account required    pam_deny.so

# auth
auth    sufficient  pam_unix.so nullok_secure
auth    sufficient  pam_krb5.so use_first_pass
auth    sufficient  pam_ldap.so use_first_pass
auth    required    pam_deny.so

# password
password required   pam_cracklib.so retry=3 minlen=6 difok=3
password sufficient pam_unix.so use_authtok nullok md5
password sufficient pam_krb5.so use_authtok
password sufficient pam_ldap.so use_authtok
password required   pam_deny.so

# session
session required    pam_unix.so
session optional    pam_krb5.so
session optional    pam_ldap.so

ただし、他のサービスでのcommon-auth/common-account/common-password の取り込み位置がそれぞれのauth/account/passwordタスクエントリの最後になるように調節する必要がある。

autofs の設定

Debian etch / Ubuntu 7.10 は、まだautofs ver 4.x 系なので、rfc2307bisで定義されている automountMap/automountオブジェクトクラスは使えない。従って、nisMap/nisObject オブジェクトクラスのレコードを Open Directory 上に登録しておく必要がある。

/etc/default/autofs

...
LDAPURI=ldap://XX.XX.XX.XX
...
LDAPBASE="dc=example,dc=com"
...

追記

Open Directory の設定のまとめ 2008Q1

0 件のコメント: