Help us understand the problem. What is going on with this article?

LDAPクラインアントからLDAPサーバへログインしよう

はじめに

この記事ではOpenLDAPをつかって、LDAPクライアントからLDAPサーバへログインしてみます。  

「LDAPってなんだ?」「ディレクトリサービスってなんだ?」という方は、下記のWebページを参考にしてみてください。

動作環境

この記事ではLDAPサーバ、LDAPクライアントの仮想マシンをそれぞれ1台ずつ用意しました。LDAPサーバはCentOS7、LDAPクライアントはCentOS6にしました。

OpenLDAPのインストール

では、まずLDAPサーバ、LDAPクライアントに必要なパッケージをインストールしていきます。

LDAPサーバに必要なパッケージのインストール

# yum install openldap-servers
# yum install openldap-clients

LDAPクライアントに必要なパッケージのインストール

# yum install openldap-clients
# yum install nss-pam-ldapd
# yum install authconfig

OpenLDAPの設定

LDAPサーバの設定

LDAPサーバの設定ファイルは/etc/openldap/slapd.confです。
デフォルトでは下記の内容になります。今回はデフォルト設定のままで利用します。

/etc/openldap/slapd.conf
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args
database        bdb
suffix          "dc=example,dc=com"
rootdn          "cn=Manager,dc=example,dc=com"
rootpw          {SSHA}Tr3P3e11sQ6nEmMrgsvZzZ9EPyCWns7z
directory       /var/lib/ldap

LDAPサーバの起動

LDAPサーバを起動します。LDAPサーバのユニット名はslapd.serviceです。

$ systemctl start slapd.service

ユーザの追加

LDAPサーバにユーザを追加します。ホームディレクトリ以下にpasswd.ldifファイルを作成し、下記の内容を追加します。

passwd.ldif
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: example

dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: uid=ldapuser,ou=People,dc=example,dc=com
objectClass: account
objectClass: posixAccount
uid: ldapuser
cn: ldapuser
userPassword: ldapuser
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/ldapuser

下記のコマンドを実行し、ユーザを登録します。

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret -f passwd.ldif
adding new entry "dc=example,dc=com"

adding new entry "ou=People,dc=example,dc=com"

adding new entry "uid=ldapuser,ou=People,dc=example,dc=com"

ユーザがLDAPサーバに登録されたか確認します。

# ldapsearch -x
↓以下の内容が確認できればOKです。
# example.com
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: example

# People, example.com
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

# ldapuser, People, example.com
dn: uid=ldapuser,ou=People,dc=example,dc=com
objectClass: account
objectClass: posixAccount
uid: ldapuser
cn: ldapuser
userPassword:: bGRhcHVzZXI=
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/ldapuser

ldapwhoamiコマンドでも確認します。

# ldapwhoami -D "uid=ldapuser,ou=People,dc=example,dc=com" -W
Enter LDAP Password:
dn:uid=ldapuser,ou=People,dc=example,dc=com

firewalldの設定

LDAPクライアントからのldap接続を許可します。

# firewall-cmd --add-service=ldap --zone=public --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: ssh dhcpv6-client ldap
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

LDAPクライアントの設定

LDAPクライアントの/etc/hostsファイルに、LDAPサーバのホスト名とIPアドレスを追加します。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.16 centos7-openldap

次はauthconfig-tuiコマンドでLDAPクライアントの接続先を設定します。

# authconfig-tui
ldap://centos7-openldap/
 dc=example,dc=com

ldap.confファイルの確認

設定できたら、/etc/openldap/ldap.confファイルで設定内容を確認してみましょう。

URI ldap://centos7-openldap/
BASE dc=example,dc=com

nsswitch.confファイルの確認

/etc/nsswitch.confファイルにldapがあるか確認します。

/etc/nsswitch.conf
passwd:     files sss ldap
shadow:     files sss ldap
group:      files sss ldap

system-authファイルの確認

/etc/pam.d/system-authファイルにpam_ldap.soがあるか確認します。

/etc/pam.d/system-auth
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so

password-authファイルの確認

/etc/pam.d/password-authファイルにpam_ldap.soがあるか確認します。

/etc/pam.d/password-auth
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok


password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so

LDAPクライアントからLDAPサーバへ接続する

ldapsearchコマンドでLDAPクライアントからLDAPサーバのユーザアカウントを取得できるか確認します。

# ldapsearch -x -LLL -D "uid=ldapuser,ou=People,dc=example,dc=com" -W -b "ou=People,dc=example,dc=com"
Enter LDAP Password:
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: uid=ldapuser,ou=People,dc=example,dc=com
objectClass: account
objectClass: posixAccount
uid: ldapuser
cn: ldapuser
userPassword:: bGRhcHVzZXI=
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/ldapuser

dn: uid=posix,ou=People,dc=example,dc=com
objectClass: account
objectClass: posixAccount
uid: posix
cn: posix
userPassword:: cG9zaXg=
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/posix

sshコマンドでLDAPクライアントからLDAPサーバへログインします。
ldapuserのホームディレクトリがないといわれますが、ログインはできました。

# ssh ldapuser@centos7-openldap
ldapuser@centos7-openldap's password:
Last login: Sun May  6 15:33:38 2018 from 192.168.0.17
Could not chdir to home directory /home/ldapuser: No such file or directory
-bash-4.2$

参考資料

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away