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 に登録されているユーザが表示されれば良い。

再起動して、ログインできれば完了。

Tags of current page

,