web-dev-qa-db-ja.com

OpenLDAPでACLを設定する方法

私はDebian Squeeze OpenLDAPを使用しています。 ACLはどこに設定できますか? ldapmodifyを使用してディレクティブへのアクセスを実行することはできませんか? Debianにはslapd.confファイルはなく、slapd.dフォルダを使用しています

8
chris

Debian Wiki から:

バージョン2.4.23-3以降、OpenLDAPの設定はデフォルトで/etc/ldap/slapd.dに変更されました。

したがって、OpenLDAPでは、 'cn = config'ツリーを使用して動的に構成できます。

cn = configにDNをリストすると、次のようになります。

Sudo ldapsearch  -Y EXTERNAL -H ldapi:/// -b cn=config dn
...
# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
...

Sudo ldapsearch  -Y EXTERNAL -H ldapi:/// -b cn=config 'olcDatabase={1}hdb'

# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=nodomain
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=nodomain" write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=nodomain
olcRootPW: {SSHA}_skip_
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq

属性olcAccessが必要です。

新しいACLルールをデータベースに追加しましょうdc = nodomain

Ldifファイルを作成する

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {3}to dn.base="cn=test,dc=nodomain" by * read

適用:

Sudo ldapmodify  -Y EXTERNAL -H ldapi:/// -f /tmp/test.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}hdb,cn=config"

ボイラ:

Sudo ldapsearch  -Y EXTERNAL -H ldapi:/// -b cn=config 'olcDatabase={1}hdb'
...
olcAccess: {3}to dn.base="cn=test,dc=nodomain" by * read
10
sOliver

手順は 別の質問で説明したパスワードの変更 の手順と非常に似ています。

2つの方法もあります。

1)設定ファイルの編集。バックエンドの設定ファイルを見つける必要があります。各ACLは、olcAccess属性の値として定義されます。 ACLの構文は「通常の」slapd.confファイルと同じですが、各ACLの先頭に、チェックするACLキュー内のACLの「位置」を定義する番号を挿入する必要があります。

ACLエントリの例は次のようになります。

olcAccess: {0}to * by anonymous write

2)2番目の方法:configデータベースを使用します。 configデータベースが有効になっている場合は、LDAPクライアントを使用してデータベースにバインドし、各バックエンドのolcAccess値を編集できます。

3
pbm

slapd.dの内容全体が実行時に連結されて、一種の疑似slapd.confファイルが生成されます(その説明は完全に正確ではありませんが、概念を理解しようとしています)。これはDebianでの一般的な慣行であり、個人的には多くの場合私はそれを非常に好みます。

aclという名前のslapd.d内に新しいファイルを作成し(または同様に、他のファイルに番号付きプレフィックスが含まれている場合は、番号付きプレフィックスを含めます)、ACLエントリをそこに配置して、slapdを再起動します。

これで十分です。*ただし、slapdのACL構造は、初心者には難しい場合があります。間違ったり意図しないことをしたりするのは簡単です。

*シーケンスの制限がない場合(slapdはよくわからないので、自分で決めてください)。

2
bahamat

私はこれが解決策であるとは言っていませんが、あなたの方法であなたを助けるかもしれません:-)

Serverfaultについても同様の質問をしました。

https://serverfault.com/questions/246252/openldap-rhel-6

答えは得られませんでした。結局、slapd.confを作成し、次のコマンドを使用してslapd dirに変換する必要がありました(これはRHELにあったことに注意してください)。

/etc/openldap/slapd.d/ディレクトリの内容を削除します。

rm -rf /etc/openldap/slapd.d/* 

カスタムslapd.confファイルを編集します。

Slaptestを実行して構成ファイルの有効性を確認し、設定を使用して新しいslapd.dディレクトリを作成します

slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d 

LDAPがうめき声を出さないように、新しいディレクトリの権限を設定します。

chown -R ldap:ldap /etc/openldap/slapd.d 

chmod -R 000 /etc/openldap/slapd.d 

chmod -R u+rwX /etc/openldap/slapd.d 

lDAPサーバーを起動します。

Slapd.confに変更を加えるたびにこれらのコマンドを実行する小さなスクリプトを作成しました

アンディよろしく

1
AndyM

好きなようにユーザーを作成します。

# vim ro_user_desc.ldif

dn: cn=ro_admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {SSHA}o3pSzVM3HXqUY6R2VHGJkJEWlwLOUH1N

userPasswordハッシュはslappasswd -s your_plaintext_passから取得できます。このユーザーを作成します。

# ldapadd -x -W -D "cn=admin,dc=example,dc=com" -f ro_user_desc.ldif

それに必要な役割を割り当てます。

# vim ro_access.ldif

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {3}to dn.base="dc=example,dc=com" by dn.exact="cn=ro_admin,dc=example,dc=com" read

上記で作成したユーザーに対して、ツリーフルツリーdc=example,dc=comへのリスト(読み取り専用)アクセスを有効にしました。 @ sOliver answer を使用してdn: olcDatabase={1}mdb,cn=configの正しいアドレスを見つけてください。ただし、HDBなどの場合のMDB OpenLdapベースのこの例は異なる場合があることに注意してください。

最後にそれを適用します:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f ro_access.ldif
0
ipeacocks