FLATzブログ

[Gentoo]の記事一覧

LDAPサーバを利用した社内サーバ管理(第3回)

2008年09月11日(木)09:12|amakata|FLATzブログ, Gentoo, 技術情報このエントリをdel.icio.usに追加このエントリをはてなブックマークに追加

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ツリーの表示例を示しておきます。

接続ダイアログの設定

接続ダイアログの設定


DNツリーの例

DNツリーの例

続きを読む


LDAPサーバを利用した社内サーバ管理(第2回)

2008年09月01日(月)09:22|amakata|FLATzブログ, Gentoo, 技術情報このエントリをdel.icio.usに追加このエントリをはてなブックマークに追加

LinuxユーザアカウントをLDAPで統合管理する。

前回(LDAPサーバを利用した社内サーバ管理(第1回))は、Webシステムの開発サーバで統合認証を行うためにざっとOpenLDAPサーバを導入する手順を見てきました。
今回はLDAPをLinuxのユーザアカウント認証に使う設定を紹介したいと思います。


今回もGentoo Linuxで説明していきたいと思います。
他のLinux系OSでも基本は変わりません。


nss_ldapとpam_ldapのインストール

まず、LinuxアカウントをLDAPで管理するためのライブラリを導入します。



dev1 ~ # emerge -uvD openldap
dev1 ~ # emerge -uvD nss_ldap
dev1 ~ # emerge -uvD pam_ldap


nss_ldapは、Linuxのファイルシステムなどに利用されるユーザ、グループをLDAPの情報から取得できるようにするパッケージです。
pam_ldapは、Linuxアカウントへのログイン認証など扱うPAM認証でLDAPを利用できるようにするパッケージです。


ldap.confの設定

まず、ldap.confの設定を行います。
ldap.confでは、どのLDAPサーバの情報で認証を行うのか、
どのような条件で認証を行うのか、認証情報をどの属性から取得するのかなどを定義することができます。



dev1 ~ # cat /etc/ldap.conf
host example.com # LDAPサーバのホスト名 or IP
base dc=example,dc=com # LDAPのベースDN
ldap_version 3
port 389
pam_filter objectclass=posixAccount # 認証に用いるLDAPのノードのクラスはposixAccountに制限する
pam_login_attribute uid # ログイン時のユーザ名はuid属性とする。
pam_member_attribute memberUid # グループのmemberUid属性(グループに複数持つことができる)
# に設定された名前をグループに所属するユーザとする。
pam_password exop
nss_base_passwd ou=Users,dc=flatz,dc=jp?sub # ユーザ(passwd)のDN
nss_base_shadow ou=Users,dc=flatz,dc=jp?sub # ユーザ(shadow)のDN
nss_base_group ou=Groups,dc=flatz,dc=jp?one # グループのDN
ssl no
nss_reconnect_tries 4
nss_reconnect_sleeptime 1
nss_reconnect_maxsleeptime 16
nss_reconnect_maxconntries 2


pam_filterには論理演算などを組み合わせた複雑な条件を書くことも可能ですが今回は簡単な条件としました。


pamの設定

次に/etc/pam.d/system-authを書き変えます。
system-authを書き変えると、system-authを利用している全てのPAM認証を扱うアプリケーションに影響があるので注意が必要です。
ここでは、通常のLinuxアカウントを追加するような感覚でLDAPを使うことを前提としているため、system-authを直接書きかえます。

dev1 ~ # cat /etc/pam.d/system-auth
auth required pam_env.so
auth sufficient pam_unix.so try_first_pass likeauth nullok
auth sufficient pam_ldap.so use_first_pass #LDAP用の記述
auth required pam_deny.so
 
account required pam_unix.so
account [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore authinfo_unavail=ignore] pam_ldap.so #LDAP用の記述
 
password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 try_first_pass retry=3
 
password sufficient pam_unix.so try_first_pass use_authtok nullok md5 shadow
password sufficient pam_ldap.so use_authok #LDAP用のの記述
password required pam_deny.so
 
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session required pam_limits.so
session required pam_env.so
session required pam_unix.so
session optional pam_ldap.so #LDAP用のの記述


基本的にはpam_unixモジュールでの従来の認証を行えるようにし、pam_ldapモジュールで、LDAPの情報でも認証が行えるように設定します。


ちょっと難しいのですが、

[default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore authinfo_unavail=ignore]

という記述のは、LDAPサーバが落ちている場合でもpam_unixによる認証は成功するために必要な設定です。
この設定がないと、LDAPサーバが落ちた場合に、サーバにログインすることができなくなります(泣


あと、



session required pam_mkhomedir.so skel=/etc/skel/ umask=0022


はオプションなのですが、ユーザ情報があって、/homeにディレクトリが作成されていない場合に
自動的にディレクトリを作成してくれるようになる設定です。あると新たなユーザを追加した場合に便利です。skelはフォルダのひな形のパス、umaskは作成するファイルの権限のマスクを定義しています。


nss_ldapの設定

次にnsswitchのcomaptという記述の隣にldapという単語を追加します。これにより、ファイルシステムなどでLDAPの情報を扱えるようになります。ここでcomaptは通常の/etc/passwd、/etc/groupなどを利用した認証方法です。この場合、comapt→ldapの順に情報が利用されます。



dev1 ~ # cat /etc/nsswitch.conf
passwd: compat ldap
shadow: compat ldap
group: compat ldap
....(省略)


あとは、これらの設定をそれぞれの開発サーバに設定していきます。


今回の設定では全てのサーバにLDAPに設定したアカウントでログインできますが、設定方法によってはサーバごとにアクセス権限を設定することも可能です。


次回

次回は、LDAPサーバを利用した社内サーバを管理する場合のちょっとしたノウハウを公開したいと思います。

続きを読む


Page 1 of 212»

このページの先頭へ