CentOS 6.5のLinuxユーザ・グループをLDAPで一元管理
目次
構成
サーバ構成
OSバージョン
CentOS 6.5 x86_64
パッケージ一覧
portreserve-0.0.4-9.el6.x86_64.rpm ・・・openldap-serversが依存
openldap-servers-2.4.23-32.el6_4.1.x86_64.rpm ・・・OpenLDAPサーバ本体
openldap-clients-2.4.23-32.el6_4.1.x86_64.rpm ・・・ldapsearch等のコマンドを提供
MigrationTools.tgz ・・・LDAP移行ツール
クライアント構成
OSバージョン
CentOS 6.5 x86_64
ソフトウェア一覧
openldap-clients-2.4.23-32.el6_4.1.x86_64.rpm ・・・ldapsearch等のコマンドを提供
pam_ldap-185-11.el6.x86_64.rpm ・・・LDAP用PAMモジュール
nscd-2.12-1.132.el6.x86_64.rpm ・・・nss-pam-ldapdが依存
nss-pam-ldapd-0.7.5-18.2.el6_4.x86_64.rpm ・・・LDAP用nsswitchモジュール
環境構築
インストール
OpenLDAPのCentOS 6.5へのインストールと初期設定に従ってインストールを行った状態で 以下の設定を行ってください。
設定
ユーザアカウント登録用のオブジェクト作成
まずはユーザアカウントを登録するためのオブジェクトを作成します。 アカウント登録のために作成するLDIF(LDAP Data Interchange Format)ファイルは /tmp/ldap_work ディレクトリに格納することにします。 viエディタで以下の通りファイルを新規に作成します。
# cd /tmp/ # mkdir ldap_work # cd ldap_work/ # vi base.ldif
dn: dc=ranonet,dc=net objectClass: dcObject objectClass: organization dc: ranonet o: ranonet dn: cn=Manager,dc=ranonet,dc=net objectClass: organizationalRole cn: Manager dn: ou=People,dc=ranonet,dc=net objectClass: organizationalUnit ou: People dn: ou=Group,dc=ranonet,dc=net objectClass: organizationalUnit ou: Group
作成したLDIFファイルを使用してオブジェクトを作成します。
# ldapadd -f base.ldif -x -D "cn=Manager,dc=ranonet,dc=net" -W
Enter LDAP Password: ←パスワードを入力(表示されない)
adding new entry "dc=ranonet,dc=net"
adding new entry "cn=Manager,dc=ranonet,dc=net"
adding new entry "ou=People,dc=ranonet,dc=net"
adding new entry "ou=Group,dc=ranonet,dc=net"
LDAP移行ツールの設定
アカウント登録のLDIFファイルはゼロから作成しても良いのですが、 移行ツールを使用することでLinuxの登録情報から生成することができます。 始めはこの方が簡単なので移行ツールを利用します。 CentOS 5.8ではOpenLDAPをインストールすると移行ツールもインストールされていましたが、 CentOS 6.5ではインストールされなくなったようなので、事前にインストールした上で 移行ツールの設定を行います。 LDAP移行ツールは /usr/share/openldap/ ディレクトリ配下に配置することにします。
# cd /usr/share/ # mkdir openldap # cd openldap/ # wget http://www.padl.com/download/MigrationTools.tgz --2014-09-25 12:52:43-- http://www.padl.com/download/MigrationTools.tgz www.padl.com をDNSに問いあわせています... 216.154.215.154 www.padl.com|216.154.215.154|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 21284 (21K) [application/x-gzip] `MigrationTools.tgz' に保存中 100%[==========================================================>] 21,284 34.2K/s 時間 0.6s 2014-09-25 12:52:44 (34.2 KB/s) - `MigrationTools.tgz' へ保存完了 [21284/21284] # tar zxvf MigrationTools.tgz MigrationTools-47/ MigrationTools-47/ads/ MigrationTools-47/ads/migrate_passwd_ads.pl MigrationTools-47/ads/migrate_all_online_ads.sh MigrationTools-47/ads/migrate_group_ads.pl MigrationTools-47/ads/migrate_all_nis_online_ads.sh MigrationTools-47/ads/migrate_base.pl MigrationTools-47/ads/migrate_common.ph MigrationTools-47/MigrationTools.spec MigrationTools-47/migrate_netgroup_byhost.pl MigrationTools-47/migrate_all_nis_offline.sh MigrationTools-47/Make.rules MigrationTools-47/migrate_aliases.pl MigrationTools-47/README MigrationTools-47/migrate_rpc.pl MigrationTools-47/migrate_all_offline.sh MigrationTools-47/migrate_group.pl MigrationTools-47/migrate_all_nisplus_offline.sh MigrationTools-47/migrate_all_netinfo_online.sh MigrationTools-47/migrate_protocols.pl MigrationTools-47/migrate_hosts.pl MigrationTools-47/CVSVersionInfo.txt MigrationTools-47/migrate_automount.pl MigrationTools-47/migrate_services.pl MigrationTools-47/migrate_netgroup.pl MigrationTools-47/migrate_profile.pl MigrationTools-47/migrate_base.pl MigrationTools-47/migrate_all_nisplus_online.sh MigrationTools-47/migrate_common.ph MigrationTools-47/migrate_all_nis_online.sh MigrationTools-47/migrate_all_online.sh MigrationTools-47/migrate_passwd.pl MigrationTools-47/migrate_networks.pl MigrationTools-47/migrate_fstab.pl MigrationTools-47/migrate_slapd_conf.pl MigrationTools-47/migrate_netgroup_byuser.pl MigrationTools-47/migrate_all_netinfo_offline.sh # cd MigrationTools-47/ # vi migrate_common.ph
※以下、該当箇所のみ変更※ # Default DNS domain $DEFAULT_MAIL_DOMAIN = "padl.com"; # Default base $DEFAULT_BASE = "dc=padl,dc=com"; ↓変更 # Default DNS domain $DEFAULT_MAIL_DOMAIN = "ranonet.net"; # Default base $DEFAULT_BASE = "dc=ranonet,dc=net";
Linuxユーザ・グループの作成
LDAP移行ツールでLDIFファイルを生成するために、Linux上に移行対象となるグループとユーザを作成します。 ユーザにはパスワードも設定します。 まずはグループを作成します。作成するグループは admin と user とします。
# groupadd -g 10001 admin # groupadd -g 10002 user # tail -n 2 /etc/group admin:x:10001: ←追加されたことを確認 user:x:10002: ←追加されたことを確認
続いてユーザを作成します。作成するユーザは user1(adminグループ所属) と user2(userグループ所属) とします。
# useradd -u 10001 -g admin user1 # useradd -u 10002 -g user user2 # tail -n 2 /etc/passwd user1:x:10001:10001::/home/user1:/bin/bash ←追加されたことを確認 user2:x:10002:10002::/home/user2:/bin/bash ←追加されたことを確認
作成したユーザにパスワードを設定します。
# passwd user1 ユーザー user1 のパスワードを変更。 新しいパスワード: ←パスワードを入力 新しいパスワードを再入力してください: ←パスワードを再入力 passwd: 全ての認証トークンが正しく更新できました。 # passwd user2 ユーザー user2 のパスワードを変更。 新しいパスワード: ←パスワードを入力 新しいパスワードを再入力してください: ←パスワードを再入力 passwd: 全ての認証トークンが正しく更新できました。
アカウント登録用LDIFファイルの作成
追加したユーザとグループの設定ファイルから必要な行だけを切り出します。 これをLDAP移行ツールに入力してLDIFファイルを生成します。
# cd /tmp/ldap_work/ # tail -n 2 /etc/group > group # cat group admin:x:10001: user:x:10002: # tail -n 2 /etc/passwd > passwd # cat passwd user1:x:10001:10001::/home/user1:/bin/bash user2:x:10002:10002::/home/user2:/bin/bash
生成したファイルは以下の通りです。これをLDAP移行ツールに入力します。
admin:x:10001: user:x:10002:
user1:x:10001:10001::/home/user1:/bin/bash user2:x:10002:10002::/home/user2:/bin/bash
上記で作成したユーザとグループの定義ファイルをLDAP移行ツールに入力し、LDIFファイルを生成します。
# cd /usr/share/openldap/MigrationTools-47/ # ./migrate_group.pl /tmp/ldap_work/group > /tmp/ldap_work/group.ldif # ./migrate_passwd.pl /tmp/ldap_work/passwd > /tmp/ldap_work/passwd.ldif
生成されたLDIFファイルの中身は以下の通りです。 移行ツールを使わずに、始めからこのファイルを作成しても良いです。
dn: cn=admin,ou=Group,dc=ranonet,dc=net objectClass: posixGroup objectClass: top cn: admin userPassword: {crypt}x gidNumber: 10001 dn: cn=user,ou=Group,dc=ranonet,dc=net objectClass: posixGroup objectClass: top cn: user userPassword: {crypt}x gidNumber: 10002
dn: uid=user1,ou=People,dc=ranonet,dc=net uid: user1 cn: user1 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$6$AwQeHvy5$.lEy3.AnPOo0jBA45a9mxtF3f6iIh8b7G4fALtSSLeWgttt9LAWxWKFNgUVhVlxPhR9TIiwhpGJvBkedpRe55/ shadowLastChange: 16338 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 10001 gidNumber: 10001 homeDirectory: /home/user1 dn: uid=user2,ou=People,dc=ranonet,dc=net uid: user2 cn: user2 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$6$A.CkCo/b$wfery4ZMRQzV0JU..axVsX9vQDWewraXILBsch5DG01hZ4RwvbloRaoE3fyT2tTGhI6VqvLkGtgF4/jHm/GJT/ shadowLastChange: 16338 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 10002 gidNumber: 10002 homeDirectory: /home/user2
Linuxユーザ・グループの削除
必要なLDIFファイルが作成できたので、グループとユーザは削除します。
# userdel -r user1 # userdel -r user2 # tail -n 2 /etc/passwd postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash ldap:x:55:55:LDAP User:/var/lib/ldap:/sbin/nologin ←user1とuser2は表示されない # groupdel admin # groupdel user # tail -n 2 /etc/group postgres:x:26: ldap:x:55: ←adminとuserは表示されない
アカウントをLDAPへ登録
生成したLDIFファイルを利用してLDAPにLinuxアカウントを登録します。
# cd /tmp/ldap_work/ # ldapadd -f passwd.ldif -x -D "cn=Manager,dc=ranonet,dc=net" -W Enter LDAP Password: ←パスワードを入力 adding new entry "uid=user1,ou=People,dc=ranonet,dc=net" adding new entry "uid=user2,ou=People,dc=ranonet,dc=net" # ldapadd -f group.ldif -x -D "cn=Manager,dc=ranonet,dc=net" -W Enter LDAP Password: ←パスワードを入力 adding new entry "cn=admin,ou=Group,dc=ranonet,dc=net" adding new entry "cn=user,ou=Group,dc=ranonet,dc=net"
設定ファイル
/etc/group
/etc/passwd
/etc/openldap/ldap.conf ・・・自動で編集される
/tmp/ldap_work/base.ldif
/tmp/ldap_work/group
/tmp/ldap_work/group.ldif
/tmp/ldap_work/passwd
/tmp/ldap_work/passwd.ldif
クライアント設定
インストール
LDAPを操作(検索、追加、削除など)するためのコマンドラインユーティリティ
(クライアント)のパッケージと、PAMモジュールでLDAPを利用するためのパッケージをインストールします。
DVDドライブにCentOS 6.5のDVD-ROMをセットし、以下のコマンドを実行します。
# mount /dev/cdrom /media/cdrom # cd /media/cdrom/Packages/ # rpm -ihv openldap-clients-2.4.23-32.el6_4.1.x86_64.rpm 準備中... ########################################### [100%] 1:openldap-clients ########################################### [100%] # rpm -ihv pam_ldap-185-11.el6.x86_64.rpm 準備中... ########################################### [100%] 1:pam_ldap ########################################### [100%] # rpm -ihv nscd-2.12-1.132.el6.x86_64.rpm 準備中... ########################################### [100%] 1:nscd ########################################### [100%] # rpm -ihv nss-pam-ldapd-0.7.5-18.2.el6_4.x86_64.rpm 準備中... ########################################### [100%] 1:nss-pam-ldapd ########################################### [100%] # cd / # umount /media/cdrom
設定
LDAPクライアントの設定
ログインする際にLinuxユーザとグループに関する情報は /etc/passwd と /etc/group だけでなく LDAPサーバへも問い合わせるように変更します。 ローカルのpasswdファイルとgroupファイルを優先し、そこに記述されていない情報をLDAPサーバに 確認するようにします。設定には認証設定ツールが提供されているので、これを利用することで LDAPやNSSなど必要な設定を一通り書き換えてくれます。
# authconfig-tui
authconfig-tui - (c) 1999-2005 Red Hat, Inc. lqqqqqqqqqqqqqqqqqqqu 認証の設定 tqqqqqqqqqqqqqqqqqqqqk x x x ユーザー情報 認証 x x [ ] キャッシュ情報 [ ] MD5 パスワードを使用 x x [*] LDAP を使用 [*] シャドウパスワードを使用 x x [ ] NIS を使用 [*] LDAP 認証を使用 x x [ ] IPAv2 の使用 [ ] Kerberos 5 を使用 x x [ ] Winbind を使用 [*] 指紋読み取りを使用 x x [ ] Winbind 認証を使用 x x [*] ローカル認証は十分です x x x x lqqqqqqqqqqk lqqqqk x x x 取り消し x x 次 x x x mqqqqqqqqqqj mqqqqj x x x x x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj <Tab>/<Alt-Tab> 項目間の移動 | <Space> 選択 | <F12> 次の画面
authconfig-tui - (c) 1999-2005 Red Hat, Inc. lqqqqqqqqqqqqqqqqqqqqu LDAP 設定 tqqqqqqqqqqqqqqqqqqqqk x x x [ ] TLS を使用 x x サーバー: ldap://192.168.0.106/___________________ x x ベース DN: dc=ranonet,dc=net_______________________ x x x x lqqqqqqk lqqqqk x x x 戻る x x OK x x x mqqqqqqj mqqqqj x x x x x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj <Tab>/<Alt-Tab> 項目間の移動 | <Space> 選択 | <F12> 次の画面
nslcd を起動中: [ OK ]
nss-pam-ldapd パッケージインストール後に nslcd デーモンを起動していない場合、 上記のタイミングで自動起動されます。設定としては始めから自動起動される設定に なっているため、今後手動で起動する必要はありません。
ユーザのホームディレクトリの自動作成設定
LDAPに登録されている情報に基づいてLinuxへログインしようとすると、 ログイン先の/homeディレクトリに該当ユーザのホームディレクトリが 存在しないという警告が出力されてしまいます。 確かにLDAPに登録した情報にはホームディレクトリに関する情報がありますが、 LDAPを参照するクライアントにはホームディレクトリを作成していません。 ログイン自体はできるのですが、何かと不便ですので、ログイン時に自動で ホームディレクトリを作成するように設定します。 viエディタでPAMの設定ファイルを編集します。
# cd /etc/pam.d/ # vi system-auth-ac
※ファイルの末尾に追記※ (前略) session required pam_unix.so session optional pam_ldap.so session optional pam_mkhomedir.so skel=/etc/skel umask=022 ←追記
# vi password-auth
※ファイルの末尾に追記※ (前略) session required pam_unix.so session optional pam_ldap.so session optional pam_mkhomedir.so skel=/etc/skel umask=022 ←追記
動作テスト
『クライアント設定』で設定したLinux上でsshコマンドを実行し、ループバックでログインします。 その際にLDAPサーバに登録した user1 を指定してログインします。 クライアント設定したLinux上には user1 は存在していません。 正しく設定されていれば、LDAPサーバの情報を参照し、user1でログインできるはずです。 ログインできれば成功です。
# ssh user1@localhost user1@localhost's password: ←パスワードを入力(表示されない) Creating directory '/home/user1'. ←user1用のホームディレクトリが自動作成された Last login: Thu Sep 25 13:44:45 2014 from 192.168.0.101 $ ls -l /home/ 合計 4 drwxr-xr-x 4 user1 admin 4096 9月 25 13:52 2014 user1 ←確かに作成されている
user2のホームディレクトリは作成されていませんが、同様に初めてログインする際に自動で作成されます。 ホームディレクトリはログオフしても削除されず、次回ログインする際に再利用されます。