OSS Fan ~OSSでLinuxサーバ構築~

作成日: 2014/09/25

OSSでLinuxサーバ構築

CentOS 6.5のLinuxユーザ・グループをLDAPで一元管理

トップページOSSでLinuxサーバ構築 > 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へのインストールと初期設定に従ってインストールを行った状態で 以下の設定を行ってください。

設定

(1) ユーザアカウント登録用のオブジェクト作成

 まずはユーザアカウントを登録するためのオブジェクトを作成します。 アカウント登録のために作成するLDIF(LDAP Data Interchange Format)ファイルは /tmp/ldap_work ディレクトリに格納することにします。 viエディタで以下の通りファイルを新規に作成します。

# cd /tmp/
# mkdir ldap_work
# cd ldap_work/
# vi base.ldif
ファイル名:/tmp/ldap_work/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"

(2) 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
ファイル名:/usr/share/openldap/MigrationTools-47/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";

(3) 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: 全ての認証トークンが正しく更新できました。

(4) アカウント登録用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移行ツールに入力します。

ファイル名:/tmp/ldap_work/group
admin:x:10001:
user:x:10002:
ファイル名:/tmp/ldap_work/passwd
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ファイルの中身は以下の通りです。 移行ツールを使わずに、始めからこのファイルを作成しても良いです。

ファイル名:/tmp/ldap_work/group.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

ファイル名:/tmp/ldap_work/passwd.ldif
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

(5) 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は表示されない

(6) アカウントを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

設定

(1) 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 デーモンを起動していない場合、 上記のタイミングで自動起動されます。設定としては始めから自動起動される設定に なっているため、今後手動で起動する必要はありません。

(2) ユーザのホームディレクトリの自動作成設定

 LDAPに登録されている情報に基づいてLinuxへログインしようとすると、 ログイン先の/homeディレクトリに該当ユーザのホームディレクトリが 存在しないという警告が出力されてしまいます。 確かにLDAPに登録した情報にはホームディレクトリに関する情報がありますが、 LDAPを参照するクライアントにはホームディレクトリを作成していません。 ログイン自体はできるのですが、何かと不便ですので、ログイン時に自動で ホームディレクトリを作成するように設定します。 viエディタでPAMの設定ファイルを編集します。

# cd /etc/pam.d/
# vi system-auth-ac
ファイル名:/etc/pam.d/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
ファイル名:/etc/pam.d/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のホームディレクトリは作成されていませんが、同様に初めてログインする際に自動で作成されます。 ホームディレクトリはログオフしても削除されず、次回ログインする際に再利用されます。

プロフィール

らのっち

損害保険会社のIT企画部に勤務するSEです。OSSを勉強中です。

<所属>
日本PostgreSQLユーザ会とくしまOSS普及協議会


第000414号