LDAP で認証をまとめる
LDAP のサーバを用意して、クライアントになるマシンで認証をまとめる。 以下で LDAP のサーバの IP は 192.168.11.100 とする。
サーバ側
実際は、調べながら試行錯誤して行ったので、 以下の通りにやってもうまくいかないかもしれない。 Ubuntu 9.04 で行なった。
パッケージのインストール
apt-get install slapd ldap-utils
dpkg-reconfigure slapd
ここで、
- DNS domain name
- Organization name
- Administrator password
- Database backend to use
を指定する。パスワードは /etc/ldap.secret に記述されている。
SSL
このままだと、パスワードが平文でネットワーク上を流れて気持ち悪いので、SSLで暗号化する。
openssl genrsa -des3 -out server.key.secure 1024
openssl rsa -in server.key.secure -out server.key.insecure
openssl req -new -key server.key.insecure -out server.csr
openssl x509 -req -days 3650 -in server.csr -signkey server.key.insecure -out server.crt
mv server.key.insecure server.key
cp server.key /etc/ssl/private
cp server.crt /etc/ssl/certs
mkdir /etc/ssl/CA
mkdir /etc/ssl/newcerts
sh -c "echo '01' > /etc/ssl/CA/serial"
touch /etc/ssl/CA/index.txt
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
mv cakey.pem /etc/ssl/private/
mv cacert.pem /etc/ssl/certs/
apt-get install ssl-cert
adduser openldap ssl-cert
chgrp ssl-cert /etc/ssl/private/server.key
/etc/ssl/openssl.cnf
/etc/ssl/openssl.cnf を
dir = /etc/ssl/ # Where everything is kept
database = $dir/CA/index.txt # database index file.
certificate = $dir/certs/cacert.pem # The CA certificate
serial = $dir/CA/serial # The current serial number
private_key = $dir/private/cakey.pem# The private key
のようにして、次のコマンドを実行する。
openssl ca -in server.csr -config /etc/ssl/openssl.cnf
/etc/default/slapd
/etc/default/slapd の SLAPD_SERVICES を変更する。
SLAPD_SERVICES="ldaps:///"
設定
ldapmodify -x -D cn=admin,cn=config -W
を実行して、次のように入力する。
dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/server.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/server.key
ここで次のようにしてうまくいけばOK。
/etc/init.d/slapd restart
/etc/ldap.conf
/etc/ldap.conf を編集する。 uri を変更する。
uri ldaps://192.168.11.100/
ldapscripts
ldapscripts を使うと簡単にユーザやグループの管理ができる。
apt-get install ldapscripts
LDAP のパスワードを /etc/ldapscripts/ldapscripts.passwd にパスワードを記入して、
chmod 400 /etc/ldapscripts/ldapscripts.passwd
とする。
/etc/ldapscripts/ldapscripts.conf
いくつか変更する。
SERVER="ldaps://localhost"
BINDDN="cn=****dc=****,dc=****"
SUFFIX="dc=****,dc=****"
USHELL="/bin/bash"
登録
ユーザ、グループを登録するところを作成する。 次のような base.ldif ファイルを作る。
dn: ou=Users,dc=****,dc=****
objectClass: organizationalUnit
ou: Users
dn: ou=Groups,dc=****,dc=****
objectClass: organizationalUnit
ou: Groups
端末で
ldapadd -f base.ldif -x -D "cn=admin,dc=****,dc=****" -W
として登録する。パスワードは LDAP のパスワード。
グループの登録は
ldapaddgroup group_name
とする。ユーザの登録は
ldapadduser user_name group_name
とする。作成したユーザにパスワードを設定する。
ldapsetpasswd user_name
確認する。
getent passwd
getent group
として、ユーザやグループが登録されて入れば良い。
クライアント側
端末での作業
言語が日本語だと不具合が起こることがあるので、設定する前に
LANG=C
としておく。
インストール
apt-get install libnss-ldap
dpkg-reconfigure ldap-auth-config
「LDAP server Uniform Resource Identifier」「Distinguished name of the search base」 「LDAP account for root」などをサーバの設定に対応させて入力する。
auth-client-config -t nss -p lac_ldap
pam-auth-update
passwd
passwd コマンドで自分のパスワードを変更できるようにするには、/etc/pam.d/common-password の
password [success=1 user_unknown=ignore default=die] pam_ldap.so use_authtok try_first_pass
の部分の use_authtok を削除して
password [success=1 user_unknown=ignore default=die] pam_ldap.so try_first_pass
とする。
ホームディレクトリ自動作成
/etc/pam.d/common-auth に
session required /lib/security/$ISA/pam_mkhomedir.so skel=/etc/skel umask=0022
を追加する。
ldap ssl 設定
きちんとした証明書を使っていないので /etc/ldap/ldap.conf
TLS_REQCERT never
を追加する。
確認
getent passwd
で LDAP に登録されているユーザが表示されれば良い。
再起動して、ログインできれば完了。