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であることが必要  
);

とかで。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2022-03-19 (土) 00:30:47 (190d)