LinuxユーザアカウントをLDAPで統合管理する(ノウハウ)
前回(LDAPサーバを利用した社内サーバ管理(第2回))は、Webシステムの開発サーバで統合認証を行うために開発サーバのLDAPの設定を扱いました。
今回はLinuxログイン認証をサーバ毎に制御する方法や、運用時の簡単な管理スクリプト等を紹介したいと思います。
Linuxログイン認証をサーバ毎に制御する方法
まず、Linuxログイン認証をサーバ毎に制御する方法について紹介します。
私の場合はldap.confのpam_filterを使って実現しています。
たとえば、開発サーバAのldap.confのpam_filterを以下のように設定します。
pam_filter &(host=servera)(objectclass=posixAccount)
これは、host属性がserveraという文字列でかつ、objectclass属性がpostfixAcountであるノードのみを認証対象とするという設定となります。
その上で、認証対象としたいユーザのldifにhost属性を追加します。
たとえば、以前に登録サンプルとして利用したnishinosonoアカウントであれば
uid=nishinosono,ou=Users,dc=example,dc=comのldifを次のようにします。
dn: uid=nishinosono,ou=Users,dc=example,dc=com
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
cn: nishinosono
uid: nishinosono
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/nishinosono
gecos: nishinosono
host: servera
host: serverb
loginShell: /bin/zsh
userPassword: yyyyyyyyyyyyyy
ここでは、host: serveraとhost: serverbを設定しています。このようにhostを複数設定することもできますので、
一人のユーザに複数サーバへのアクセス権を設定することが可能です。
運用時の簡単な管理スクリプト
今のところ、LDAPのDB変更には簡単なスクリプトを記述して対応しています。
ひとつはldifを初期生成するスクリプトです。あとはldapへのコマンドの発行を簡単にするスクリプトを書いてあります。
スクリプトの使い方は簡単で
./genldif.sh [ユーザ名] [uid] [パスワード] [ユーザ説明] > [ユーザ名].ldif
のようにコマンドを実行し「ユーザ.ldif」にそのユーザのldifを生成することができます。
内容はいたって簡単で、
#!/bin/bash
if [ $# -ne 4 ]; then
echo "./genldif.sh [user] [uid] [password] [detail]"
exit
fi
USER=$1
GROUP=$1
P_UID=$2
P_GID=$2
DETAIL=$4
PASSWD=`slappasswd -h {SSHA} -s $3`
echo dn: uid=$USER,ou=Users,dc=example,dc=com
echo objectClass: account
echo objectClass: posixAccount
echo objectClass: top
echo objectClass: shadowAccount
echo cn: $USER
echo uid: $USER
echo uidNumber: $P_UID
echo gidNumber: $P_GID
echo homeDirectory: /home/$USER
echo loginShell: /bin/bash
echo gecos: $DETAIL
echo userPassword: $PASSWD
echo ""
echo dn: cn=$GROUP,ou=Groups,dc=example,dc=com
echo gidNumber: $P_GID
echo userPassword:: e01ENX14
echo memberUid: $USER
echo objectClass: posixGroup
echo objectClass: top
echo cn: $USER
のようなシェルスクリプトとなっています。
追加と変更はそれぞれ
./ldapadd.sh [ユーザ名].ldif
./ldapmod.sh [ユーザ名].ldif
というコマンドを用意しています。
ldapadd.shは
#!/bin/sh
ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f $1
のように、ldapmod.shは
#!/bin/sh
ldapmodify -x -D "cn=Manager,dc=example,dc=com" -W -f $1
のようになっています。
管理ツール
LDAPのちょっとした項目の修正にはツールを使うこともできます。
Windowsであれば、無償で利用できるLDAPAdminが使いやすいです。
ログイン画面と、DNツリーの表示例を示しておきます。

