■Linux SSHログイン認証をOpenLDAPで一元管理
LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで実現するための流れを、下記のパートに分けて記載していきます。- (1) OpenLDAPのインストールと起動
- (2) LDIFによるLDAPサーバへのデータ登録
- (3) LDAP登録ユーザでのSSHログイン認証とパスワード変更 <<本編
■本編の概要
アプリ系サーバにLDAP認証モジュール(nss-pam-ldapd)を追加してLDAPサーバに接続します。 idコマンドでLDAPに登録したユーザを確認できるものの、ログインすることができません。 認証クライアントモジュールをsssdからnslcdに変更にすることで、SSHログインできるようになります。 homeDirectoryもLDAPサーバからNFSマウントする方式にした方が一元管理レベル感が高まります。 ここまで出来ればLDAPユーザのパスワードをアプリ系サーバから変更したいところですが、 またしてもエラーに出くわします。slapd.confをさらに修正することでLDAPサーバ上の パスワードも変更できるようなります。こちらの手順もまとめます。
OS: CentOS 6.5 (64-bit) openldap: 2.4.23 nss-pam-ldapd: 0.7.5 LDAPサーバホスト名: ty-ldap01 アプリ系サーバホスト名: ty-app01,ty-app02
■アプリ系サーバにnss-pam-ldapdのインストール
[root@ty-app01 ~]# yum install nss-pam-ldapd.x86_64 (中略) ============================================================================ Package Arch Version Repository Size ============================================================================ Installing: nss-pam-ldapd x86_64 0.7.5-18.2.el6_4 base 152 k Installing for dependencies: nscd x86_64 2.12-1.132.el6 base 219 k pam_ldap x86_64 185-11.el6 base 88 k Transaction Summary ============================================================================ Install 3 Package(s) (以下略)
■authconfig-tuiによるクライアント側認証モジュール設定
authconfig-tuiのGUIの表示が崩れないように言語を英語に変更しておきます。
[root@ty-app01 ~]# LANG=C; authconfig-tui
↑Use LDAP にチェック。あとはデフォルトのまま。
↑ServerとBaseDNを設定。
[root@ty-app01 ~]# LANG=C; authconfig-tui nslcd を起動中: [ OK ] [root@ty-app01 ~]#※sssdが自動起動される場合があります。
sssdの認証処理はTLSまたはLDAPSプロトコルが必須となり設定が複雑なので今回はnslcdを利用します。
## LANGを元に戻す
[root@ty-app01 ~]# LANG=ja_JP.UTF-8## authconfig-tuiによりldap.confが修正されたことを確認
[root@ty-app01 ~]# grep -v "#\|^$" /etc/openldap/ldap.conf TLS_CACERTDIR /etc/openldap/cacerts URI ldap://ty-ldap01/ BASE dc=open_ldap,dc=com [root@ty-app01 ~]### LDAPサーバ上のユーザ確認
[root@ty-app01 ~]# grep user1001 /etc/passwd [root@ty-app01 ~]# id user1001 uid=1001(user1001) gid=1000(LDAP team1000) 所属グループ=1000(LDAP team1000) [root@ty-app01 ~]#
■ホームディレクトリ準備
[root@ty-app01 ~]# mount -t nfs ty-ldap01:/home /home [root@ty-app01 ~]# mkdir -m 700 /home/user1001; chown user1001: /home/user1001 [root@ty-app01 ~]# mkdir -m 700 /home/user1002; chown user1002: /home/user1002 [root@ty-app01 ~]# mkdir -m 700 /home/user2001; chown user2001: /home/user2001 [root@ty-app01 ~]# mkdir -m 700 /home/user2002; chown user2002: /home/user2002
■OpenLDAPサーバ上のユーザにスイッチ
[root@ty-app01 ~]# su - user1001 -bash-4.1$ su - user1002 パスワード: su: パスワードが違います -bash-4.1$rootユーザからのスイッチはパスワードを聞かれないので可能ですが、
user1001 → user1002のスイッチ時に正しいパスワードを入力しても認証されません・・・。(T-T)
■認証クライアントモジュールの修正
[root@ty-app01 ~]# cd /etc/pam.d/ [root@ty-app01 pam.d]# ll | grep auth-ac lrwxrwxrwx. 1 root root 19 3月 21 15:35 2014 fingerprint-auth -> fingerprint-auth-ac -rw-r--r--. 1 root root 659 3月 21 15:35 2014 fingerprint-auth-ac lrwxrwxrwx. 1 root root 16 3月 21 15:35 2014 password-auth -> password-auth-ac -rw-r--r--. 1 root root 896 3月 21 15:35 2014 password-auth-ac lrwxrwxrwx. 1 root root 17 3月 21 15:35 2014 smartcard-auth -> smartcard-auth-ac -rw-r--r--. 1 root root 711 3月 21 15:35 2014 smartcard-auth-ac lrwxrwxrwx. 1 root root 14 3月 21 15:35 2014 system-auth -> system-auth-ac -rw-r--r--. 1 root root 937 3月 21 15:35 2014 system-auth-ac [root@ty-app01 pam.d]### system-auth-acを修正
[root@ty-app01 pam.d]# cp -p system-auth-ac system-auth-ac.20140321 [root@ty-app01 pam.d]# vi system-auth-ac [root@ty-app01 pam.d]# diff system-auth-ac system-auth-ac.20140321 7d6 < auth sufficient pam_ldap.so use_first_pass 15d13 < account [default=bad success=ok user_unknown=ignore] pam_ldap.so 19d16 < password sufficient pam_ldap.so use_authtok 23d19 < session optional pam_ldap.so [root@ty-app01 pam.d]#⇒適所に上記4レコードを追加。
※[pam_sss]になっている場合は[pam_ldap]に変更。
## OpenLDAPサーバ上のユーザにスイッチ
[root@ty-app01 pam.d]# /etc/init.d/nslcd restart nslcd を停止中: [ OK ] nslcd を起動中: [ OK ] [root@ty-app01 pam.d]# su - user1001 -bash-4.1$ su - user1002 パスワード: -bash-4.1$ id uid=1002(user1002) gid=1000(LDAP team1000) 所属グループ=1000(LDAP team1000) -bash-4.1$成功!! (^o^)
## OpenLDAPサーバ上のユーザのパスワード変更
-bash-4.1$ passwd ユーザー user1002 のパスワードを変更。 Enter login(LDAP) password: 新しいパスワード: 新しいパスワードを再入力してください: LDAP password information update failed: Insufficient access passwd: 認証トークン操作エラー -bash-4.1$認証されるようになったが、パスワードの変更は失敗する・・・。(T-T)
■LDAPサーバ側でパスワード変更権限追加設定
※LDAPサーバ側の設定です!!
[root@ty-ldap01 ~]# vi /etc/openldap/slapd.conf [root@ty-ldap01 ~]# grep -A 20 "EVERYTHING" /etc/openldap/slapd.conf # rootdn can always read and write EVERYTHING! # change own password ---- from ---- access to attrs=userPassword by self write by dn="cn=Manager,dc=open_ldap,dc=com" write by anonymous auth by * none access to * by self write by * read # change own password ----- to ----- # enable on-the-fly configuration (cn=config) database config access to * by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none # enable server status monitoring (cn=monitor) database monitor [root@ty-ldap01 ~]#※ # change own password のくだりを追加する場所が大事です。
## 設定反映
[root@ty-ldap01 ~]# change_slapd.sh config file testing succeeded slapd を停止中: [ OK ] slapd を起動中: [ OK ] [root@ty-ldap01 ~]#※change_slapd.shは (1) OpenLDAPのインストールと起動 で作成したスクリプトです。
■OpenLDAPサーバ上のユーザのパスワード変更
[root@ty-app01 ~]# su - user1001 -bash-4.1$ passwd ユーザー user1001 のパスワードを変更。 Enter login(LDAP) password: 新しいパスワード: 新しいパスワードを再入力してください: LDAP password information changed for user1001 passwd: 全ての認証トークンが正しく更新できました。 -bash-4.1$成功!! (^o^)
## 念のため確認
[root@ty-app01 ~]# ldapsearch -x -h ty-ldap01 -D "cn=Manager,dc=open_ldap,dc=com" -w secret | grep -n userPassword 58:userPassword:: e2NyeXB0fSQxJEJTZGhaSm1hJEF0cjE1d3dGa1pLN1FNeHFOeVA5MC8= 67:userPassword:: e1NTSEF9dTFpWXlVbllKdGQ0dTMyTE4zRnZwRkVjMzR5Q1ZvRTU= 80:userPassword:: e1NTSEF9dTFpWXlVbllKdGQ0dTMyTE4zRnZwRkVjMzR5Q1ZvRTU= 93:userPassword:: e1NTSEF9dTFpWXlVbllKdGQ0dTMyTE4zRnZwRkVjMzR5Q1ZvRTU= [root@ty-app01 ~]#user1001のパスワードのエンコード文字列だけ変更となっています。
## パスワードのエンコード方式の確認
[root@ty-app01 ~]# echo "e2NyeXB0fSQxJEJTZGhaSm1hJEF0cjE1d3dGa1pLN1FNeHFOeVA5MC8=" | base64 -d {crypt}$1$BSdhZJma$Atr15wwFkZK7QMxqNyP90/[root@ty-app01 ~]#SSHAではなく、cryptでエンコードされているようです。
## うまくいかない場合
下記ファイルの設定も見直してください。
/etc/pam.d/password-auth-ac
/etc/nsswitch.conf
Before << (2) LDIFによるLDAPサーバへのデータ登録 Next >> (4) OpenLDAPのログ出力設定
0 件のコメント:
コメントを投稿