手当たり次第に書くんだ

飽きっぽいのは本能

CentOS 8 389 Directory Server 構築 #3 BIND ユーザーとアクセス制御

目次に戻る

概要

389 Directory Serverの初期状態では、”cn=Directory Manager”以外のDNがアクセスできる情報はRoot DSEのみです(anyoneで許可されているため)。”cn=Directory Manager”は389 Directory Serverの設定情報(cn=config)を含み、全ての情報にアクセスできますが、LDAPクライアントには必要最低限の権限を与えるべきです。

前提条件

OS

CentOS Stream 8を使用します。

SELinux

有効です。無効にする場合はこちらを参照して下さい。

Firewalld

無効です。有効化する場合はこちらを参照して必要な許可設定をして下さい。

所感

LDAPクライアントとはLDAPサーバーに何らかの方法でBINDし、必要な認証情報を参照、または書き込みをします。このBINDする際に使用するDNがLDAPに対してどのような権限を持つかがLDAPのアクセス制御の基本です。ここまでがLDAPクライアントであり、その認証情報を使用してログインするのはLDAPサーバーではなくLDAPクライアントに対してログインします(ldapsearch等のLDAPコマンドは一旦除く)。

仮にLDAPクライアントがLinuxである場合、そのLinuxの管理者がOSとしてLDAPサーバーへのBIND設定を行います。これによりLDAPサーバーから必要な認証情報を参照できるようになる為、Linuxの管理者以外のユーザーはLDAPサーバーから取得した認証情報を使用してLinuxにログインできるようになります。Linuxは、ローカルユーザーを作成する場合でも管理者が作成しますが、この部分がLDAPに置き換わると考えると分かりやすいと思います。

設定

匿名BINDの無効化

デフォルトでは匿名BIND(Anonymous BIND)が有効になっています。匿名BINDは認証無しでLDAPの情報を参照できますが、これにはACIがanyoneで許可されている必要があります。不要なセキュリティリスクを排除するのであれば匿名BINDは無効化したほうが良いでしょう。場合によっては、LDAPクライアントの仕様により匿名BINDが必要なケースもありますので状況により判断します。

LDIF

匿名BINDは下記のLDIF(allow-anonymous-access.ldif)で設定します。

dn: cn=config
replace: nsslapd-allow-anonymous-access
nsslapd-allow-anonymous-access: off

上記は完全に匿名BINDを無効化しますが、適切な認証設定をしている場合でもRootDSEに関してのみ匿名BINDを試行するLDAPクライアントも存在します。匿名BINDを試行する後の挙動はLDAPクライアント側の挙動によるため省略しますが、値をrootdseとすることでRootDSEに関してのみ匿名BINDを許可する設定となります。

dn: cn=config
replace: nsslapd-allow-anonymous-access
nsslapd-allow-anonymous-access: rootdse

設定反映

ldapmodifyで反映します。

[root@centos ~]# ldapmodify -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -W -f allow-anonymous-access.ldif

設定確認

ldapsearchで確認します。もう少しスマートな方法があるかもしれませんが、とりあえずgrepしました。

[root@centos ~]# ldapsearch -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -W -b cn=config | grep nsslapd-allow-anonymous-access

BINDユーザーの作成

ここでは読み取り専用のユーザーと書き込みが可能な2つのDNを作成します。これらのDNのアクセス制御を行うACI属性は”dc=si1230,dc=com”に書きます(環境やアクセス制御設計に依存します)。尚、これらのDNはLinux認証の必要がない為、objectClassはpersonのみとしています。

LDIF

下記のLDIF(bindusers.ldif)でBINDユーザーを作成します。

dn: cn=readonly,dc=si1230,dc=com
objectClass: person
cn: readonly
sn: readonly
userPassword: password

dn: cn=writable,dc=si1230,dc=com
objectClass: person
cn: writable
sn: writable
userPassword: password

設定反映

ldapaddで反映します。

[root@centos ~]# ldapadd -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -W -f bindusers.ldif

設定確認

ldapsearchで確認します。

[root@centos ~]# ldapsearch -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -W -b dc=si1230,dc=com

アクセス制御

389 Directory ServerはACI属性を用いてアクセス制御を行います。ACI属性は下位ディレクトリに継承されます。ここではdc=si1230,dc=comに対してACI属性を設定し、cn=readonly,dc=si1230,dc=comにはread,search,compareの許可、cn=writable,dc=si1230,dc=comにはALLを許可します。

LDIF

下記のLDIF(aci.ldif)でACIを作成します。

dn: dc=si1230,dc=com
add: aci
aci: (targetattr=*)(version 3.0;acl"";allow(read,search,compare)(userdn="ldap:///cn=readonly,dc=si1230,dc=com");)
-
add: aci
aci: (targetattr=*)(version 3.0;acl"";allow(all)(userdn="ldap:///cn=writable,dc=si1230,dc=com");)

設定反映

ldapmodifyで反映します。

[root@centos ~]# ldapmodify -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -W -f aci.ldif

設定確認

ldapsearchで確認します。

[root@centos ~]# ldapsearch -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -W -b dc=si1230,dc=com

尚、ACI属性は下記のようにコマンドオプションを付与しなければ表示されません。もう少しスマートな方法があるのかもしれません。

[root@centos ~]# ldapsearch -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -W -b dc=si1230,dc=com -s base "(objectclass=*)" aci

本稿の続き(SSSDを使用したLinuxのLDAP認証)は下記のリンクから移動して下さい。

SSSDを使用したLinuxのLDAP認証

目次に戻る

CentOS 8 389 Directory Server 構築 #3 BIND ユーザーとアクセス制御

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る