Vine4.xでOpenLDAPでlogin認証を行う。
Openldapをインストールするときは、認証関係を扱うので、不測の事態にそなえ、コンソールでrootでloginして作業するとよい
$ rpm -qa | grep openldap openldap-2.3.27-0vl2.4
# apt-get install openldap-clients # apt-get install openldap-servers
ドメイン名の各ゾーン名部分を"dc=○○"という形式で記述
今回はism.comというゾーン名にする
Openldapのパスワードを作成
# /usr/sbin/slappasswd -s ****** -h {MD5} {MD5}**********************==
# cd /etc/openldap
slapd.conf
####################################################################### # ldbm and/or bdb database definitions ####################################################################### database bdb ##suffix "dc=my-domain,dc=com" suffix "dc=ism,dc=com" <==ゾーン名を変更 ##rootdn "cn=Manager,dc=my-domain,dc=com" rootdn "cn=Manager,dc=ism,dc=com" <==ゾーン名を変更 # Cleartext passwords, especially for the rootdn, should # be avoided. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. # rootpw secret # rootpw {crypt}ijFYNcSNctBYg rootpw {MD5}**********************== <=先のパスワードを記述
以下を最終行へ追加
## Edit By JE2ISM access to attrs=userPassword by self write by dn="cn=Manager,dc=ism,dc=com" write by anonymous auth by * none access to * by dn="cn=Manager,dc=ism,dc=com" write by self write by * read
ldap.conf
#BASE dc=example, dc=com BASE dc=ism, dc=com ##BASE dc=example,dc=com BASE dc=ism, dc=com
NSSについて
いったんユーザが認証されてからも、多くのアプリケーションはユーザ情報へのアクセスを必要とします。この情報は伝統的にはテキストファイル (/etc/passwd, /etc/shadow, /etc/group) に入れられていますが、他のネームサービスによって供給することもできます。
新しいネームサービス (たとえば LDAP) が導入されるにつれ、このような情報取得の実装は、 (NIS や DNS のように) C ライブラリ内、または その新しいネームサービスを使いたいアプリケーション内の、 どちらでも可能となってしまいました。
いずれにしても、こういったことは、共通の汎用的なネームサービス API を使って、各テクノロジに基づく動作でサービスから情報を得る ライブラリ群にそれを要求することにすれば避けられます。
GNU C Library は Name Service Switch を実装して上記を解決しました。これは Sun C library に起源を持ち、共通の API を通して種々のネームサービスから情報を得られるようにする方法です。
NSS は共通の API と設定ファイル (/etc/nsswitch.conf) を使用します。この設定ファイル内で、サポートするデータベース毎に、そのサービスを提供するライブラリを指定します。
現在 NSS によってサポートされている データベースは
nss_ldap 共有ライブラリを使えば、LDAP を用いて上記の割り当てを実装することができます。ほんとうは上記すべての割り当てが実装できるのですけれども、ここでは shadow, passwd, group データベースの LDAP 実装にのみ焦点を合わせることにします。
/etc/ldap.conf
# The distinguished name of the search base. ##base dc=example,dc=com base dc=ism,dc=com
# /etc/rc.d/init.d/ldap start
ユーザ情報移行ツール設定ファイル編集
# cd /usr/share/openldap/migration/
migrate_common.ph
# Default base ##$DEFAULT_BASE = "dc=padl,dc=com"; $DEFAULT_BASE = "dc=ism,dc=com";
LDAPサーバー初期情報登録用ファイル新規作成
# cd # emacs base.ldif
base.ldifファイル
dn: dc=ism,dc=com objectClass: dcObject objectclass: organization o: ism Organization dc: ism dn: cn=manager, dc=ism,dc=com objectclass: organizationalRole cn:manager dn: ou=People,dc=ism,dc=com objectClass: organizationalUnit ou: People dn: ou=Group,dc=ism,dc=com objectClass: organizationalUnit ou: Group
# ldapadd -h localhost -x -D "cn=manager,dc=ism,dc=com" -W -f base.ldif Enter LDAP Password:***** adding new entry "dc=ism,dc=com" adding new entry "cn=manager, dc=ism,dc=com" adding new entry "ou=People,dc=ism,dc=com" adding new entry "ou=Group,dc=ism,dc=com"
ユーザパスワードの書き出し
grep ":5[0-9][0-9]" /etc/passwd > passwd.fil
passwd.fil
okada:x:500:501:Okada:/home/okada:/bin/bash
ユーザ情報LDAPサーバー登録用ファイル作成
# /usr/share/openldap/migration/migrate_passwd.pl passwd.fil dn: uid=okada,ou=People,dc=ism,dc=com uid: okada cn: Okada objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$1$**************************** <=shadowファイルのパスワ ードが入る。 shadowLastChange: 13798 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 500 gidNumber: 501 homeDirectory: /home/okada gecos: Okada
# /usr/share/openldap/migration/migrate_passwd.pl passwd.fil >passwd.ldfi
一般ユーザ情報をLDAPサーバーへ登録
# ldapadd -h localhost -x -D "cn=manager,dc=ism,dc=com" -W -f passwd.ldif Enter LDAP Password: adding new entry "uid=okada,ou=People,dc=ism,dc=com"
ユーザグループ情報抽出
grep ":5[0-9][0-9]" /etc/group > group.fil
group.fil
okada:x:501:
ユーザグループ情報LDAPサーバー登録用ファイル作成
# /usr/share/openldap/migration/migrate_group.pl group.fil dn: cn=okada,ou=Group,dc=ism,dc=com objectClass: posixGroup objectClass: top cn: okada userPassword: {crypt}x gidNumber: 501
# /usr/share/openldap/migration/migrate_group.pl group.fil > group.ldfi
般ユーザグループ情報をLDAPサーバーへ登録
# ldapadd -h localhost -x -D "cn=manager,dc=ism,dc=com" -W -f group.ldfi Enter LDAP Password: adding new entry "cn=okada,ou=Group,dc=ism,dc=com"
LDAP を使用とLDAP 認証を使用にチェックを入れる
# authconfig authconfig 4.6.1 - (c) 1999-2003 Red Hat, Inc., (c) 2002-2004 Project Vine. --------------------- 認証の設定 ---------------------- | | | ユーザー情報 認証 | | [ ] キャッシュ情報 [*] MD5 パスワードを使用 | | [ ] Hesiod を使用 [*] シャドウパスワードを使用 | | [*] LDAP を使用 [*] LDAP 認証を使用 | | [ ] NIS を使用 [ ] Kerberos 5 を使用 | | [ ] Winbind の使用 [ ] SMB 認証を使用 | | [ ] Winbind 認証を使用 | | | | ------------ ------ | | | 取り消し | | 次 | | | ------------ ------ | | | | | -------------------------------------------------------
次の画面でOK
authconfig 4.6.1 - (c) 1999-2003 Red Hat, Inc., (c) 2002-2004 Project Vine. ---------------------- LDAP設定 ----------------------- | | | [ ] TLSを使用 | | サーバ: 127.0.0.1_______________________________ | | ベース DN: dc=ism,dc=com___________________________ | | | | -------- ------ | | | 戻る | | OK | | | -------- ------ | | | | | -------------------------------------------------------
これで、/etc/passwdまたはopenldapのどちらかに登録されたユーザはログインできるようになる。
authconfigでLDAPが指定しているとldapが起動しない。ldapを起動してからauthconfigでLDAPを指定する必要があるようだ。またldapが起動されていない状況ではpasswdファイルにあるユーザもリモートからloginできない。
また、boot時openldapが起動しないことにより起動時system message busで起動が停止する
ldap起動時にauthconfigコマンドで、「LDAP を使用」と「LDAP 認証を使用」を一時停止し、ldapを起動して、起動後再び、「LDAP を使用」と「LDAP 認証を使用」をアクティブにする。また、合わせてldap終了時には、「LDAP を使用」と「LDAP 認証を使用」を停止する
/etc/rc.d/init/ldap
function stop() { # Stop daemons. ##Edit /usr/sbin/authconfig --kickstart --disableldap --disableldapauth <==追加 prog=`basename ${slapd}` echo -n $"Stopping $prog: " (略) [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ldap ##Edit /usr/sbin/authconfig --kickstart --enableldap --enableldapauth <==追加 return $RETVAL } function stop() { # Stop daemons. ##Edit /usr/sbin/authconfig --kickstart --disableldap --disableldapauth <==追加 prog=`basename ${slapd}` echo -n $"Stopping $prog: "
LDAPサーバーでユーザ認証できることを確認するため、LDAPサーバー上のみに存在するユーザで、Linuxにログインできることを確認するために新しいユーザを登録し、それをopenldapに登録しuserdelコマンドで/etc/passwdファイルからそのユーザを削除し、loginできるか確認する
# /usr/sbin/adduser je2ism # passwd je2ism Changing password for user je2ism. New password:****** Retype new password:******* passwd: all authentication tokens updated successfully.
# grep je2ism /etc/passwd > passwd.fil # /usr/share/openldap/migration/migrate_passwd.pl passwd.fil > passwd
.ldif
# ldapadd -h localhost -x -D "cn=manager,dc=ism,dc=com" -W -f passwd.ldif
Enter LDAP Password: adding new entry "uid=je2ism,ou=People,dc=ism,dc=com"
# grep je2ism /etc/group > group.fil # /usr/share/openldap/migration/migrate_group.pl group.fil > group.ldif # ldapadd -h localhost -x -D "cn=manager,dc=ism,dc=com" -W -f group.ldif Enter LDAP Password: adding new entry "cn=je2ism,ou=Group,dc=ism,dc=com"
/etc/passwdのje2ismを削除
# /usr/sbin/userdel je2ism
これで、je2ismでloginできたらOK
# ldapdelete -h localhost -x -D 'cn=manager,dc=ism,dc=com' - W "uid=je2ism,ou=people,dc=ism,dc=com" Enter LDAP Password:
# ldapdelete -h localhost -x -D 'cn=manager,dc=ism,dc=com' -W "cn=je2ism,ou=group,dc=ism,dc=com" Enter LDAP Password:
注)ldapに登録しpasswdファイルから削除した場合、新しいユーザを作成する場合、useraddコマンドではldapのuidは評価しなにので、重複する可能性があるので注意する。
uid=*もOK
# ldapsearch -x -b 'dc=ism,dc=com' uid=je2ism # extended LDIF # # LDAPv3 # base <dc=ism,dc=com> with scope subtree # filter: uid=je2ism # requesting: ALL # # je2ism, People, ism.com dn: uid=je2ism,ou=People,dc=ism,dc=com uid: je2ism cn: je2ism objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowLastChange: 13901 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 501 gidNumber: 502 homeDirectory: /home/je2ism # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
以下のソフトを確認し、インストールされていなときはインストール
$ rpm -qa | grep ldap openldap-2.3.27-0vl2.4 nss_ldap-251-0vl1 openldap-clients-2.3.27-0vl2.4
LDAP を使用とLDAP 認証を使用にチェックを入れる
# authconfig authconfig 4.6.1 - (c) 1999-2003 Red Hat, Inc., (c) 2002-2004 Project Vine. --------------------- 認証の設定 ---------------------- | | | ユーザー情報 認証 | | [ ] キャッシュ情報 [*] MD5 パスワードを使用 | | [ ] Hesiod を使用 [*] シャドウパスワードを使用 | | [*] LDAP を使用 [*] LDAP 認証を使用 | | [ ] NIS を使用 [ ] Kerberos 5 を使用 | | [ ] Winbind の使用 [ ] SMB 認証を使用 | | [ ] Winbind 認証を使用 | | | | ------------ ------ | | | 取り消し | | 次 | | | ------------ ------ | | | | | -------------------------------------------------------
次の画面でOK
authconfig 4.6.1 - (c) 1999-2003 Red Hat, Inc., (c) 2002-2004 Project Vine. ---------------------- LDAP設定 ----------------------- | | | [ ] TLSを使用 | | サーバ: 192.168.0.1_____________________________ | | ベース DN: dc=ism,dc=com___________________________ | | | | -------- ------ | | | 戻る | | OK | | | -------- ------ | | | | | -------------------------------------------------------
これで/etc/openldap/ldap.conf
HOST 192.168.0.1 BASE dc=ism,dc=com
を確認
以下のようにloginが確認できたらOK、homeディレクトリがないので以下のようなメッセージが出る
$ su je2ism パスワード(P): bash-2.05b$ cd bash: cd: /home/je2ism: そのようなファイルやディレクトリはありません