| OpenLDAPでログインアカウント管理 |
openldapが正常に動作するように
http://unix-study.com/unix/install/openldap/
のように構築を終わらせている状態にします。
【今回の構造】
/dc=testdom,dc=jp
|-- cn=Manager,dc=testdom,dc=jp
|-- ou=accounts,dc=testdom,dc=jp
| |--uid=abe,ou=accounts,dc=testdom,dc=jp
| |--uid=xxxxx,ou=accounts,dc=testdom,dc=jp
| |--・・・
|
`-- ou=accounts,dc=testdom,dc=jp
|--cn=test,ou=groups,dc=testdom,dc=jp
|--cn=xxxxx,ou=groups,dc=testdom,dc=jp
`--・・・
というツリー構造にします。
uid=abe,ou=accounts,dc=testdom,dc=jp
がアカウントの個々のエントリーとなります。
【準備】
# vi /etc/openldap/slapd.conf
| include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/extension.schema allow bind_v2 schemacheck off pidfile /var/run/slapd.pid argsfile /var/run/slapd.args access to attrs=userPassword by self write by dn="cn=Manager,dc=testdom,dc=jp" write by anonymous auth by * none access to * by dn="cn=Manager,dc=testdom,dc=jp" write by self write by * read database bdb suffix "dc=testdom,dc=jp" rootdn "cn=Manager,dc=testdom,dc=jp" rootpw secret directory /var/lib/ldap index objectClass eq,pres index cn,sn,givenName,mail eq,pres,sub index uid eq,pres,sub |
【登録】
トップツリーの作成をしていない場合は
●トップツリーの作成
# ldapadd -x -D "cn=Manager,dc=testdom,dc=jp" -w secret -f top.ldif
| # Organization For Example Corporation dn: dc=testdom,dc=jp objectClass: dcObject objectClass: organization dc: testdom o: testdom description: testdom test # Organizational Role for Directory Manager dn: cn=Manager,dc=testdom,dc=jp objectClass: organizationalRole cn:Manager description: Direcotry Manager |
●グループツリーの作成
# ldapadd -x -D "cn=manager,dc=testdom,dc=jp" -w secret -f groups.ldif
| dn: ou=groups,dc=testdom,dc=jp ou: groups objectclass: organizationalUnit |
●アカウントツリーの作成
# ldapadd -x -D "cn=manager,dc=testdom,dc=jp" -w secret -f accou.ldif
| # acconts Oganization Unit dn: ou=accounts,dc=testdom,dc=jp ou: accounts objectclass: organizationalUnit |
●グループエントリー追加
# ldapadd -xD "cn=manager,dc=testdom,dc=jp" -w secret -f testgroup.ldif
| dn: cn=test,ou=groups,dc=testdom,dc=jp objectClass: posixGroup cn: test gidNumber: 10000 |
●アカウントエントリー追加
# ldapadd -xvD "cn=manager,dc=testdom,dc=jp" -w secret -f test.ldif
| dn: uid=test,ou=accounts,dc=testdom,dc=jp objectclass: account objectclass: shadowAccount uid: test cn: test uidNumber: 1000 gidNumber: 1000 homeDirectory: /home/test userPassword: {MD5}CY9rzUYh03PK3k6DJie09g== loginShell: /bin/sh gecos: test description: test account |
※userPasswordは
# slappasswd -h {MD5} -s test
のようにして発行。
【確認】
# ldapsearch -xvD "cn=manager,dc=testdom,dc=jp" -w secret uid=test
のようにして検索してうまく表示されるかどうか確認しておきます。
【認証をLDAPへ切り替え】
ldapの登録は完了したので認証をldapを用いて行えるように
サーバの認証機能をldap可能にします。
●RHELでの設定
# system-config-authentication
![]() |
ユーザ情報参タブでLDAPを追加します。
ls -lなどしたときにどのユーザ所有しているかをldapを用いて
表示したりするようにします。
認証タブでもLDAPを使います。
ここではシステムの認証機構としてpamが使われていますが
それらをldapを用いて認証するように設定します。
これらの設定は以下のファイルの内容を書き換えます。
・/etc/nsswitch.conf
| passwd: files ldap shadow: files ldap group: files ldap protocols: files ldap services: files ldap netgroup: files ldap automount: files ldap |
・/etc/ldap.conf
| host 127.0.0.1 base dc=testdom,dc=jp ssl no tls_cacertdir /etc/openldap/cacerts pam_password md5 |
・/etc/pam.d/system-auth
|
auth sufficient /lib/security/$ISA/pam_ldap.so use_first_pass |
書き換えられた部分を抜粋しています。
system-config-authenticationに関してはRHELのリファレンスガイドを
参照にするともっと詳しく書かれています。
| requisite | このモジュールを通る際に失敗した場合、即座に失敗します。 |
| required | このモジュールを通る際失敗した場合、このタイプは失敗します。 失敗後も、後続のモジュールの処理を継続。 |
| sufficient | このモジュールを通る際に成功した場合、以後の評価を行わず終了します。 評価する以前の経過の結果が成功であれば、このタイプは成功します。 失敗した場合、成否には影響をあたえず後続の評価を続行。 ただし、このモジュールがこのタイプで唯一であれば、このタイプは失敗で終了する。 |
| optional | このモジュールがこのタイプの成否に影響をあたえるのは、このモジュールがこのタイプで唯一のものであるときだけです。 |
これらは全てnssldapパッケージがインストールされているので設定だけで可能になります。
nss_ldapパッケージで
/lib/libnss_ldap-2.3.4.so
/lib/security/pam_ldap.so
/usr/lib/libnss_ldap.so
のライブラリが提供されています。
設定ファイルは
/etc/ldap.conf
になっています。
●Solarisでの設定
・pam_ldap
http://www.padl.com/OSS/pam_ldap.html
・nss_ldap
http://www.padl.com/OSS/nss_ldap.html
からダウンロードしてきましょう。
※Solaris8以降では標準で入っています。
/usr/lib/securityと/etc/ldap.conf
SUNWcslパッケージに含まれています。
pkgchk -v SUNWcslなどで確認できます。
/etc/nsswitch.conf
| passwd: files ldap shadow: files ldap group: files ldap |
/etc/ldap.conf
| host 127.0.0.1 base dc=testdom,dc=jp ssl no tls_cacertdir /etc/openldap/cacerts pam_password md5 |
/etc/pam.conf
| loging auth sufficiant pam_ldap.so rlogin auth sufficient pam_ldap.so dtlogin auth sufficien pam_ldap.so other auth sufficient pam_ldap.so login account sufficient pam_ldap.so dtlogin account sufficient pam_ldap.so other account sufficient pam_ldap.so other password sufficient pam_ldap.so |
以上でOpenLDAPを使ってログインアカウントの認証は可能になります。。
このままではpasswdとshadowをldapに入れ替えただけになってしまいます。
NISと入れ替えてしまう場合はオートマウントもldapを使って
マウントさせないと意味がありません。
そこでNISの変わりにldapを使う場合でautofsもldapで
マウントできるようにする設定は
http://www.tom.sfc.keio.ac.jp/~torry/ldap/ldap.html#doc8_657
こちらのサイトなんかを頼りにして設定すれば構築可能です。
ただスキーマですがRHELを使っている場合は
/etc/openldap/schema/redhat/autofs.schema
を使えばできるでしょう。
またRHELでは他のネームサービスからldapへの移行スクリプトも
/usr/shareopenldap/migration配下に用意されています。
Script Existing nameservice LDAP online =================================================================== migrate_all_online.sh /etc flat files YES migrate_all_offline.sh /etc flat files NO migrate_all_netinfo_online.sh NetInfo YES migrate_all_netinfo_offline.sh NetInfo NO migrate_all_nis_online.sh Sun NIS/YP YES migrate_all_nis_offline.sh Sun NIS/YP NO migrate_all_nisplus_online.sh Sun NIS+ YES migrate_all_nisplus_offline.sh Sun NIS+ NO (The online scripts use ldapadd; the offline scripts use ldif2ldbm.)
ということらしい。
solarisでのautomountdのldap化もおそらくできるはずです。
automountdのライブラリのリンクをみると
# ldd /usr/sbin/automount
libnsl.so.1 => /usr/lib/libnsl.so.1
libsldap.so.1 => /usr/lib/libsldap.so.1
libdl.so.1 => /usr/lib/libdl.so.1
libc.so.1 => /usr/lib/libc.so.1
libmp.so.2 => /usr/lib/libmp.so.2
sldaputil.so.5 => /usr/lib/sldaputil.so.5
libdoor.so.1 => /usr/lib/libdoor.so.1
librt.so.1 => /usr/lib/librt.so.1
libsocket.so.1 => /usr/lib/libsocket.so.1
libmd5.so.1 => /usr/lib/libmd5.so.1
libaio.so.1 => /usr/lib/libaio.so.1
/usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1
/usr/platform/SUNW,Ultra-5_10/lib/libmd5_psr.so.1
libsldap.so.1にリンクされているので方法はあると思いますが
実際にやっていないのでauto_masterを前述のサイトのように設定して
動くかどうかは分かりません。
solarisでldapするときはopenldapよりSunJava Directory serverを使うほうが
色々と面倒が起きません。