Active DirectoryとLinuxの認証を統合しよう【2017年版】

第5回 LDAPによる認証連携

この記事を読むのに必要な時間:およそ 5 分

第3回第4回は,pam_krb5による連携について紹介しました。今回からしばらくは,LDAPによる認証連携,認証統合について紹介します。

第2回で説明したように,Active Directory(AD)の認証は主としてKerberosによって行われています。一方,インターネット上を少し検索すれば,Active DirectoryをLDAPサーバと見立ててLDAP認証を行うための設定方法がいろいろ見つかると思います。 実はこれには幾つかの注意点や落とし穴があるのですが,それについて説明する上で,まずはオーソドックスな設定方法を紹介します。

今回は,IPアドレスが172.16.2.10で,WIN2K16DC-04というコンピュータ名のWindows Server 2016が稼働するDCが存在する,addom11.ad.localというADドメインでLinuxサーバの認証を行う場合を例に,設定例を示します。Linuxディストリビューションとしては,RHEL系の代表としてCentOS 7.3,Debian/Ubuntu系の代表としてUbuntu 16.04LTSを使っています。

なお,OpenLDAPなどのLinuxで動作する一般的なLDAPサーバではデフォルトで匿名アクセスが許可されていますが,ADのデフォルトでは許可されていません。そのため,以下の設定でも匿名アクセスは無効のままとし,ADアクセス用のユーザとして,Usersコンテナの直下に作成したフルネーム(CN)がLDAP Proxyというユーザを使用する際の設定例を示します。

パッケージのインストールと設定

各ディストリビューションで必要なパッケージの名称を表1に示します。まずは,これらのパッケージをインストールしてください。

表1 必要なパッケージ

CentOSnss_ldap
Ubuntulibnss-ldap

Ubuntuの場合,パッケージのインストール中にいくつかの設定を聞かれますが,これらは後から変更できるので,ここではすべてデフォルトのままで構いません。パッケージのインストールが完了したら,引き続き設定を行います。

CentOS 7.3における設定

CentOS 7.3では,次のようにauthconfigを実行することで必要なファイルが変更されます。

# authconfig --enableldap --enableldapauth --ldapserver=172.16.2.10 --ldapbasedn=DC=ADDOM11,DC=AD,DC=LOCAL --update

具体的には/etc/openldap/ldap.conf,/etc/nslcd.conf,/etc/pam.d/system-auth-ac,/etc/nsswitch.confといったファイルが更新されます。ただし,この設定はOpenLDAPなどの汎用のLDAPサーバを前提としたものですので,これだけではADで認証を行うことはできません。

前述したとおり,ADでは匿名アクセスがデフォルトで禁止されていますので,/etc/nslcd.confの以下の個所でbinddnおよびbindpwを設定して,ADに対する参照用のユーザとそのパスワードを明示的に指定する必要があります。

# The distinguished name of the search base.
base DC=ADDOM11,DC=AD,DC=LOCAL

# The distinguished name to bind to the server with.
# Optional: default is to bind anonymously.
#binddn cn=proxyuser,dc=example,dc=com
binddn cn=ldap proxy,cn=users,dc=addom11,dc=ad,dc=local ←ADを参照する際に用いるユーザのDN

# The credentials to bind with.
# Optional: default is no credentials.
# Note that if you set a bindpw you should check the permissions of this file.
#bindpw secret
bindpw (上記ユーザのパスワード)

なお,このパスワードはnslcd.confファイルに平文で書かれてしまいます。ファイル自体のパーミッションはデフォルトで600となっていますのでroot以外のユーザから見られることはありませんが,平文でパスワードを記載することに抵抗感のある方も多いでしょう。

さらに,ADに特化した設定を有効化するために,/etc/nslcd.confの以下の箇所のコメント(行頭の#)を削除して設定を有効にします。

# Mappings for Active Directory
pagesize 1000
referrals off
idle_timelimit 800
filter passwd (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
map    passwd uid              sAMAccountName
map    passwd homeDirectory    unixHomeDirectory
map    passwd gecos            displayName
filter shadow (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
map    shadow uid              sAMAccountName
map    shadow shadowLastChange pwdLastSet
filter group  (objectClass=group)

これでCentOSでの設定は完了です。

Ubuntu 16.04における設定

Ubuntuの場合はnslcdを使わないため,設定方法が若干異なります。まずは,nslcd.confの代わりに/etc/ldap.confファイルの以下の箇所を編集します。

……

# The distinguished name of the search base.
#base dc=example,dc=net
base dc=ADDOM11,dc=AD,dc=LOCAL

……

# Another way to specify your LDAP server is to provide an
#uri ldapi:///
uri ldap://172.16.2.10/ ←ADサーバのIPアドレスを指定

……

# The distinguished name to bind to the server with.
# Optional: default is to bind anonymously.
binddn cn=ldap proxy,cn=users,dc=ADDOM11,dc=AD,dc=LOCAL  ← LDAPサーバに検索を行うときに用いるユーザのDN

# The credentials to bind with.
# Optional: default is no credential.
bindpw (上記ユーザのパスワード)

……

# RFC 2307 (AD) mappings ←これ以下の行について,コメントを外す
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_attribute uid sAMAccountName
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute shadowLastChange pwdLastSet
nss_map_objectclass posixGroup group
nss_map_attribute uniqueMember member
pam_login_attribute sAMAccountName
pam_filter objectclass=User
pam_password ad

binddnやbindpwといったキーワードの意味はCentOSと同様です。⁠RFC 2307 (AD) ...」以下の設定は,ADとLDAPでの属性などのマッピングを行うためのものです。適切な設定がコメントアウトされた状態で記載されているので,単にコメントを外してください。

前述の通り,bindpwにはパスワードを平文で設定した上で,ldap.confのパーミッションは644など一般ユーザが読み取り可能にしておく必要があります。そのため,事実上このユーザのパスワードはサーバにログイン可能な全ユーザに公開されてしまいますので,留意してください。なお,rootbinddnを設定する必要はありません。

引き続き,/etc/nsswitch.confに以下のようにldapというキーワードを追加します。

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap
(以下略)

これでUbuntuでの設定は完了です。

著者プロフィール

髙橋基信(たかはし もとのぶ)

大学卒業後,株式会社NTTデータに入社。数年間UNIX上でのプログラム開発に携わった後,クライアント/サーバシステム全般に関する技術支援業務を行う部署に異動し現在に至る。「日本Sambaユーザ会」スタッフなどを務め,オープンソース,Microsoft双方のコミュニティ活動に関わるとともに,各種雑誌への記事執筆や,講演などの活動を行っている。2005年6月には「Sambaのすべて」を出版。

コメント

コメントの記入