私はDebian Squeeze OpenLDAPを使用しています。 ACLはどこに設定できますか? ldapmodify
を使用してディレクティブへのアクセスを実行することはできませんか? Debianにはslapd.conf
ファイルはなく、slapd.d
フォルダを使用しています
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
手順は 別の質問で説明したパスワードの変更 の手順と非常に似ています。
2つの方法もあります。
1)設定ファイルの編集。バックエンドの設定ファイルを見つける必要があります。各ACLは、olcAccess
属性の値として定義されます。 ACLの構文は「通常の」slapd.confファイルと同じですが、各ACLの先頭に、チェックするACLキュー内のACLの「位置」を定義する番号を挿入する必要があります。
ACLエントリの例は次のようになります。
olcAccess: {0}to * by anonymous write
2)2番目の方法:config
データベースを使用します。 config
データベースが有効になっている場合は、LDAPクライアントを使用してデータベースにバインドし、各バックエンドのolcAccess
値を編集できます。
slapd.d
の内容全体が実行時に連結されて、一種の疑似slapd.conf
ファイルが生成されます(その説明は完全に正確ではありませんが、概念を理解しようとしています)。これはDebianでの一般的な慣行であり、個人的には多くの場合私はそれを非常に好みます。
acl
という名前のslapd.d
内に新しいファイルを作成し(または同様に、他のファイルに番号付きプレフィックスが含まれている場合は、番号付きプレフィックスを含めます)、ACLエントリをそこに配置して、slapd
を再起動します。
これで十分です。*ただし、slapdのACL構造は、初心者には難しい場合があります。間違ったり意図しないことをしたりするのは簡単です。
*シーケンスの制限がない場合(slapdはよくわからないので、自分で決めてください)。
私はこれが解決策であるとは言っていませんが、あなたの方法であなたを助けるかもしれません:-)
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に変更を加えるたびにこれらのコマンドを実行する小さなスクリプトを作成しました
アンディよろしく
好きなようにユーザーを作成します。
# 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