pukiwikiでldap認証を噛まそうと思った.

っでCentOS7で作ったLDAP(openldap)があってそれとの接続は上手く行ったものの group名 によるアクセス制限を課すには
memberOf」属性が必要なようで、作ったこのLDAPには完備されていなかった...

一応sambaでADを動かすとその中のLDAP機能には「memberOf」属性は用意されていて普通に使えた.
っていうことはwindows向けの代物なのかな?

なら「スキーマ拡張」すれば使えるのかなとひらめいたが、sambaスキーマを乗せても「memberOf」がなかった...

っでOpenLDAPにmemberOf属性を追加させてみた
参照先:
https://kifarunix.com/how-to-create-openldap-member-groups/
http://www.ceres.dti.ne.jp/~t-yamada/ldap/authentication_infrastructure_for_Linux_and_Redmine_by_multimastered-OpenLDAP.html

現状確認と機能追加

memberOfが有効になる機能が既に入っているかを確認します

[root@ldap-server ~]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b  cn=config | less

この結果で

 :
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
 :

とか含む内容があれば器はできているのですが、ないのなら組み込みます
いつものようにldifを用意して ldapadd で反映させます

[root@ldap-server ~]# vi add_memberof.ldif
dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModulePath: /usr/lib64/openldap
olcModuleLoad: memberof.la
 
[root@ldap-server ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f add_memberof.ldif
[root@ldap-server ~]# vi config_memberof.ldif
dn: olcOverlay=memberof,olcDatabase={2}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof 
olcMemberOfRefInt: TRUE
olcMemberOfDangling: ignore
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
 
[root@ldap-server ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f config_memberof.ldif

そうして再度確認をすると下記のような表記になる

[root@ldap-server ~]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b  cn=config | less
 :
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib64/openldap
olcModuleLoad: {0}memberof.la
 :
dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: {0}memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
 :

次に「refint.la」を組み込みます。この際、すでに「cn=module{0},cn=config」があるのでそこに反映させる。なので「modify」が使われます

[root@ldap-server ~]# vi add_refint.ldif
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: refint.la
 
[root@ldap-server ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f add_refint.ldif
また確認すると
 
#code(nonumber){{
[root@ldap-server ~]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b  cn=config | less
 :
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib64/openldap
olcModuleLoad: {0}memberof.la
olcModuleLoad: {1}refint.la
 :
(略
[root@ldap-server ~]#

となる。

これで下地の準備は完了. ldapを一旦再起動「systemctl restart slapd.service」

新しいグループを作ってそこにメンバーをアサインする

新しいグループ cryo を作ります。作る際に「member」としてユーザを指定します

[root@ldap-server ~]# vi cryo_group.ldif
dn: cn=cryo,ou=group,dc=sybyl,dc=local
objectClass: groupOfNames
cn: cryo
member: uid=foo,ou=people,dc=sybyl,dc=local
 
[root@ldap-server ~]# ldapadd -x -D cn=Manager,dc=sybyl,dc=local -W  -f cryo_group.ldif

この結果を確認してみます

[root@ldap-server ~]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b  dc=sybyl,dc=local | less
 :
dn: cn=cryo,ou=Group,dc=sybyl,dc=local
objectClass: groupOfNames
cn: cryo
member: uid=foo,ou=people,dc=sybyl,dc=local
 :
[root@ldap-server ~]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b  dc=sybyl,dc=local memberof | less
 :
dn: uid=foo,ou=People,dc=sybyl,dc=local
memberOf: cn=cryo,ou=group,dc=sybyl,dc=local
 :
[root@ldap-server ~]#

っとこれで「memberOf」が反映できた

pukiwikiに適用する

事前に「php-ldap」パッケージをインストールします
「pukiwiki.ini.php」にて

$auth_type = AUTH_TYPE_FORM;
 
$ldap_user_account = 1; // (0: Disabled, 1: Enabled)
$ldap_server = 'ldap://ldap-server:389';
$ldap_base_dn = 'dc=sybyl,dc=local';
$ldap_bind_dn = 'uid=$login,ou=people,dc=sybyl,dc=local';
 
$read_auth = 1;
$read_auth_pages = array(
    '##'=>'valid-user',        // すべてのページの閲覧には認証を通るのが必要
);
 
$edit_auth = 1;
$edit_auth_pages = array(
   '##'=>'ldap:cryo,admin',    // 全てのページの修正にはmemberOfのcryo所属かユーザadminであることが必要  
);

とかで。

最新の60件
2026-01-18 2026-01-17 2026-01-16 2026-01-12 2026-01-11 2026-01-10 2026-01-09 2026-01-08 2026-01-06 2026-01-04 2026-01-01 2025-12-31 2025-12-28 2025-12-27 2025-12-12 2025-12-11 2025-12-09 2025-12-08 2025-12-07 2025-12-05 2025-11-30 2025-11-27 2025-11-24 2025-11-23 2025-11-18 2025-11-16 2025-11-05 2025-11-03 2025-11-02 2025-10-30 2025-10-29 2025-10-28 2025-10-26 2025-10-25 2025-10-24 2025-10-22 2025-10-21 2025-10-17 2025-10-13 2025-10-11 2025-10-06 2025-10-05

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-03-19 (土) 00:30:47