■Linux SSHログイン認証をOpenLDAPで一元管理
LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで実現するための流れを、下記のパートに分けて記載していきます。- (1) OpenLDAPのインストールと起動
- (2) LDIFによるLDAPサーバへのデータ登録 <<本編
- (3) LDAP登録ユーザでのSSHログイン認証とパスワード変更
■本編の概要
LinuxのOSユーザは最低1つのグループに属しているので、それを踏襲したDIT(Directory Information Tree)を LDAP上に定義して、ユーザを登録する手順をまとめます。 LDAPサーバへデータを登録するにはLDIFファイルの利用が便利です。 登録したユーザの削除やパスワード変更、一連作業時によくあるエラーのメッセージもまとめてみます。
OS: CentOS 6.5 (64-bit) openldap: 2.4.23 nss-pam-ldapd: 0.7.5 LDAPサーバホスト名: ty-ldap01 アプリ系サーバホスト名: ty-app01,ty-app02
■DIT(Directory Information Tree)概念図
●dc=open_ldap,dc=com │ ├---●ou=Group │ │ │ ├---●cn=team1000 │ └---●cn=team2000 │ └---●ou=People │ ├---●uid=user1001 ├---●uid=user1002 ├---●uid=user2001 └---●uid=user2002
■オブジェクトクラスの確認
OSユーザに必要な属性をカバーする適当なオブジェクトクラスとして'posixAccount'を使用する。
スキーマに定義されている内容を確認する。
[root@ty-ldap01 ~]# grep -n -A 4 posixAccount /etc/openldap/schema/*.schema /etc/openldap/schema/nis.schema:161:objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' /etc/openldap/schema/nis.schema-162- DESC 'Abstraction of an account with POSIX attributes' /etc/openldap/schema/nis.schema-163- SUP top AUXILIARY /etc/openldap/schema/nis.schema-164- MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory ) /etc/openldap/schema/nis.schema-165- MAY ( userPassword $ loginShell $ gecos $ description ) ) [root@ty-ldap01 ~]#⇒homeDirectory が必須属性になっていることに注意!!
■LDIFファイル準備
## base.ldif
[root@ty-ldap01 ldif]# cat base.ldif dn: dc=open_ldap,dc=com objectClass: dcObject objectClass: organization dc: open_ldap o: OpenLDAP Corporation dn: cn=Manager,dc=open_ldap,dc=com objectclass: organizationalRole cn: Manager dn: ou=Group,dc=open_ldap,dc=com objectClass: organizationalUnit ou: Group dn: ou=People,dc=open_ldap,dc=com objectClass: organizationalUnit ou: People [root@ty-ldap01 ldif]### group.ldif
[root@ty-ldap01 ldif]# cat group.ldif dn: cn=team1000,ou=group,dc=open_ldap,dc=com objectClass: posixGroup objectClass: top cn: LDAP team1000 gidNumber: 1000 dn: cn=team2000,ou=group,dc=open_ldap,dc=com objectClass: posixGroup objectClass: top cn: LDAP team2000 gidNumber: 2000 [root@ty-ldap01 ldif]### people.ldif
[root@ty-ldap01 ldif]# cat people.ldif dn: uid=user1001,ou=People,dc=open_ldap,dc=com uid: user1001 cn: LDAP user1001 objectClass: account objectClass: posixAccount objectClass: top userPassword: {SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5 loginShell: /bin/bash uidNumber: 1001 gidNumber: 1000 homeDirectory: /home/user1001 dn: uid=user1002,ou=People,dc=open_ldap,dc=com uid: user1002 cn: LDAP user1002 objectClass: account objectClass: posixAccount objectClass: top userPassword: {SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5 loginShell: /bin/bash uidNumber: 1002 gidNumber: 1000 homeDirectory: /home/user1002 dn: uid=user2001,ou=People,dc=open_ldap,dc=com uid: user2001 cn: LDAP user2001 objectClass: account objectClass: posixAccount objectClass: top userPassword: {SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5 loginShell: /bin/bash uidNumber: 2001 gidNumber: 2000 homeDirectory: /home/user2001 dn: uid=user2002,ou=People,dc=open_ldap,dc=com uid: user2002 cn: LDAP user2002 objectClass: account objectClass: posixAccount objectClass: top userPassword: {SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5 loginShell: /bin/bash uidNumber: 2002 gidNumber: 2000 homeDirectory: /home/user2002 [root@ty-ldap01 ldif]#※userPasswordには (1) OpenLDAPのインストールと起動 で作成した各ユーザ(共通)のエンコードされたパスワード文字列を指定。
■データ登録
## base.ldif 登録
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f ./base.ldif adding new entry "dc=open_ldap,dc=com" adding new entry "cn=Manager,dc=open_ldap,dc=com" adding new entry "ou=Group,dc=open_ldap,dc=com" adding new entry "ou=People,dc=open_ldap,dc=com" [root@ty-ldap01 ldif]### group.ldif 登録
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f ./group.ldif adding new entry "cn=team1000,ou=group,dc=open_ldap,dc=com" adding new entry "cn=team2000,ou=group,dc=open_ldap,dc=com" [root@ty-ldap01 ldif]### people.ldif 登録
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f ./people.ldif adding new entry "uid=user1001,ou=People,dc=open_ldap,dc=com" adding new entry "uid=user1002,ou=People,dc=open_ldap,dc=com" adding new entry "uid=user2001,ou=People,dc=open_ldap,dc=com" adding new entry "uid=user2002,ou=People,dc=open_ldap,dc=com" [root@ty-ldap01 ldif]#★LDIFに'homeDirectory'の記載を忘れたときのエラー
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f people-nohome.ldif adding new entry "uid=user2003,ou=People,dc=open_ldap,dc=com" ldap_add: Object class violation (65) additional info: object class 'posixAccount' requires attribute 'homeDirectory' [root@ty-ldap01 ldif]#★ユーザを重複登録したときのエラー
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f people-dual.ldif adding new entry "uid=user2001,ou=People,dc=open_ldap,dc=com" ldap_add: Already exists (68) [root@ty-ldap01 ldif]#
■ldap.confの修正
[root@ty-ldap01 ~]# cp -p /etc/openldap/ldap.conf /etc/openldap/ldap.conf.org [root@ty-ldap01 ~]# vi /etc/openldap/ldap.conf [root@ty-ldap01 ~]# grep -v "#\|^$" /etc/openldap/ldap.conf TLS_CACERTDIR /etc/openldap/certs URI ldap://127.0.0.1/ BASE dc=open_ldap,dc=com [root@ty-ldap01 ~]#※上記の修正を怠ると、ldapsearchコマンドでエントリがヒットしない場合がある。
■登録した情報を確認
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -D "cn=Manager,dc=open_ldap,dc=com" -w secret | grep -n dn: 10:dn: dc=open_ldap,dc=com 17:dn: cn=Manager,dc=open_ldap,dc=com 22:dn: ou=Group,dc=open_ldap,dc=com 27:dn: ou=People,dc=open_ldap,dc=com 32:dn: cn=team1000,ou=group,dc=open_ldap,dc=com 40:dn: cn=team2000,ou=group,dc=open_ldap,dc=com 48:dn: uid=user1001,ou=People,dc=open_ldap,dc=com 61:dn: uid=user1002,ou=People,dc=open_ldap,dc=com 74:dn: uid=user2001,ou=People,dc=open_ldap,dc=com 87:dn: uid=user2002,ou=People,dc=open_ldap,dc=com [root@ty-ldap01 ~]#
■特定ユーザのパスワード変更
[root@ty-ldap01 ~]# ldappasswd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -s himitsu "uid=user1001,ou=People,dc=open_ldap,dc=com"パスワードをプロンプトから入力する場合は[-s naisyo] → [-S]にする。
## パスワードが変更されたかの確認
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -b "uid=user1001,ou=People,dc=open_ldap,dc=com" -LLL dn: uid=user1001,ou=People,dc=open_ldap,dc=com uid: user1001 cn: LDAP user1001 objectClass: account objectClass: posixAccount objectClass: top loginShell: /bin/bash uidNumber: 1001 gidNumber: 1000 homeDirectory: /home/user1001 userPassword:: e1NTSEF9WC9RTTFzVzhTSEpIYTdURUN1TENsRVpWMEhwbHIyVHQ= [root@ty-ldap01 ~]### パスワードはbase64でエンコードされているのでデコード
[root@ty-ldap01 ~]# echo "e1NTSEF9WC9RTTFzVzhTSEpIYTdURUN1TENsRVpWMEhwbHIyVHQ=" | base64 -d {SSHA}X/QM1sW8SHJHa7TECuLClEZV0Hplr2Tt[root@ty-ldap01 ~]#⇒people.ldifに設定したパスワードは「{SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5」だったので確かに変更されているようです。
■特定ユーザエントリを削除
[root@ty-ldap01 ~]# ldapdelete -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret "uid=user2002,ou=People,dc=open_ldap,dc=com" [root@ty-ldap01 ~]# ldapsearch -x -h localhost -b "dc=open_ldap,dc=com" | grep -n "dn: uid" 48:dn: uid=user1001,ou=People,dc=open_ldap,dc=com 61:dn: uid=user1002,ou=People,dc=open_ldap,dc=com 74:dn: uid=user2001,ou=People,dc=open_ldap,dc=com [root@ty-ldap01 ~]#
■登録したデータを全削除する場合
[root@ty-ldap01 ~]# rm -rf /var/lib/ldap/* [root@ty-ldap01 ~]# cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG [root@ty-ldap01 ~]# /etc/init.d/slapd restart slapd を停止中: [ OK ] slapd を起動中: [ OK ] [root@ty-ldap01 ~]#※以降の作業のために、全削除後もう一度ldifファイルでデータを登録しておきます。
■ホームディレクトリをNFSで公開
[root@ty-ldap01 ~]# vi /etc/exports [root@ty-ldap01 ~]# cat /etc/exports /home *(rw,sync,no_root_squash) [root@ty-ldap01 ~]# exportfs -a [root@ty-ldap01 ~]# /etc/init.d/nfs start NFS サービスを起動中: [ OK ] NFS クォータを起動中: [ OK ] NFS mountd を起動中: [ OK ] NFS デーモンを起動中: [ OK ] RPC idmapd を起動中: [ OK ] [root@ty-ldap01 ~]### NFS自動起動設定
[root@ty-ldap01 ~]# chkconfig nfs on; chkconfig --list nfs nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@ty-ldap01 ~]#
LDIFによるLDAPサーバへのデータ登録の手順は以上で終了です。
次回はいよいよアプリ系サーバからOpenLDAP上に登録したユーザでSSHログインを行います。
Before << (1) OpenLDAPのインストールと起動
Next >> (3) LDAP登録ユーザでのSSHログイン認証とパスワード変更
0 件のコメント:
コメントを投稿