Wydrukuj tę dokumentację Pokaż jako slajdy
Spis Treści
Instalacja oraz konfiguracja phpldapadmin
Z wyklorzystaniem własnego repozytroium skryptów należy zainstalować oprogramowanie phpldapadmin:
pkg install -y net/phpldapadmin
config.php
Zainstalowany plik konfiguracyjny jest nieco uboższy od docelowego, którego używam. Poniżej całość, aby łatwiej uruchamiać nową instancję:
$config->custom->debug['level'] = 0;
$config->custom->debug['file'] = '/tmp/pla_debug.log';
$config->custom->session['blowfish'] = '__jakis_ciag_losowy__';
$config->custom->appearance['language'] = 'auto';
$config->custom->jpeg['tmpdir'] = "/var/tmp/pla"; // Example for Unix systems
$config->custom->password['no_random_crypt_salt'] = false;
$config->custom->session['timelimit'] = 300;
$config->custom->appearance['stylesheet'] = 'style.css';
$config->custom->appearance['tree'] = "AJAXTree";
/* Just show your custom templates. */
$config->custom->appearance['custom_templates_only'] = false;
/* Disable the default template. */
$config->custom->appearance['disable_default_template'] = false;
/* Hide the warnings for invalid objectClasses/attributes in templates. */
$config->custom->appearance['hide_template_warning'] = true;
$servers = new Datastore();
$servers->newServer('ldap_pla');
$servers->setValue('server','name','Firma');
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=firma,dc=local'));
$servers->setValue('login','auth_type','session');
$servers->setValue('login','bind_id','');
$servers->setValue('login','bind_pass','');
$servers->setValue('server','tls',false);
// $servers->setValue('server','sasl_auth',false);
$servers->setValue('appearance','password_hash_custom','ssha');
$servers->setValue('login','attr','uid');
$servers->setValue('login','fallback_dn',true);
// $servers->setValue('login','class',null);
$servers->setValue('server','read_only',false);
$servers->setValue('appearance','show_create',true);
$servers->setValue('auto_number','enable',true);
$servers->setValue('auto_number','mechanism','search');
$servers->setValue('auto_number','search_base',null);
$servers->setValue('auto_number','min',array('uidNumber'=>1000,'gidNumber'=>500));
$servers->setValue('auto_number','dn',null);
$servers->setValue('auto_number','pass',null);
$servers->setValue('login','anon_bind',false);
$servers->setValue('custom','pages_prefix','custom_');
$servers->setValue('unique','attrs',array());
$servers->setValue('unique','dn',null);
$servers->setValue('unique','pass',null);
$servers->setValue('server','visible',true);
$servers->setValue('login','timeout',30);
$servers->setValue('server','branch_rename',false);
$servers->setValue('server','custom_sys_attrs',array('passwordExpirationTime','passwordAllowChangeTime'));
$servers->setValue('server','custom_attrs',array('nsRoleDN','nsRole','nsAccountLock'));
// $servers->setValue('force_may','attrs',array('uidNumber','gidNumber','sambaSID'));
$friendly_attrs = array();
$friendly_attrs['facsimileTelephoneNumber'] = 'Fax';
$friendly_attrs['telephoneNumber'] = 'Phone';
$friendly_attrs['uid'] = 'User Name';
$q=0;
$queries = array();
$queries[$q]['name'] = 'User List';
$queries[$q]['base'] = 'dc=firma,dc=local';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(objectClass=posixAccount)(uid=*))';
$queries[$q]['attributes'] = 'cn, uid, homeDirectory, telephonenumber, jpegphoto';
$q++;
$queries[$q]['name'] = 'Samba Users';
$queries[$q]['base'] = 'dc=example,dc=com';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(|(objectClass=sambaAccount)(objectClass=sambaSamAccount))(objectClass=posixAccount)(!(uid=*$)))';
$queries[$q]['attributes'] = 'uid, smbHome, uidNumber';
$q++;
$queries[$q]['name'] = 'Samba Computers';
$queries[$q]['base'] = 'dc=firma,dc=local';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(objectClass=sambaAccount)(uid=*$))';
$queries[$q]['attributes'] = 'uid, homeDirectory';
Własne template-y do PLA
Możliwe jest dodanie własnych wzorców do PLA w celu tworzenia nowych wpisów. Najlepiej skopiować istniejący wzorzec jako custom_wzorzec. W ten sposób najprościej zrobić wzorzec dla ownCloud:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE template SYSTEM "../template.dtd">
<template>
<askcontainer>1</askcontainer>
<description>New User ownCloud Account</description>
<icon>ldap-user.png</icon>
<invalid>0</invalid>
<rdn>cn</rdn>
<!--<regexp>^ou=People,o=.*,</regexp>-->
<title>ownCloud User Account</title>
<visible>1</visible>
<objectClasses>
<objectClass id="inetOrgPerson"></objectClass>
<objectClass id="posixAccount"></objectClass>
<objectClass id="ownCloud"></objectClass>
</objectClasses>
<attributes>
<attribute id="givenName">
<display>First name</display>
<icon>ldap-uid.png</icon>
<onchange>=autoFill(cn;%sn% %givenName%)</onchange>
<onchange>=autoFill(displayName;%sn% %givenName%)</onchange>
<onchange>=autoFill(uid;%givenName|0-1/l%%sn/l%)</onchange>
<order>1</order>
<page>1</page>
</attribute>
<attribute id="sn">
<display>Last name</display>
<onchange>=autoFill(cn;%sn% %givenName%)</onchange>
<onchange>=autoFill(displayName;%sn% %givenName%)</onchange>
<onchange>=autoFill(uid;%givenName|0-1/l%%sn/l%)</onchange>
<!-- <onchange>=autoFill(homeDirectory;/home/users/%uid|0-1/l%/%uid%)</onchange> -->
<order>2</order>
<page>1</page>
</attribute>
<attribute id="cn">
<display>Common Name</display>
<order>3</order>
<page>1</page>
</attribute>
<attribute id="uid">
<display>User ID</display>
<onchange>=autoFill(homeDirectory;/home/users/%uid%)</onchange>
<order>4</order>
<page>1</page>
<spacer>1</spacer>
</attribute>
<attribute id="homeDirectory">
<display>Home directory</display>
<!-- <onchange>=autoFill(homeDirectory;/home/users/%gidNumber|0-0/T%/%uid|3-%)</onchange> -->
<order>8</order>
<page>1</page>
</attribute>
<attribute id="uidNumber">
<display>UID Number</display>
<icon>terminal.png</icon>
<order>6</order>
<page>1</page>
<readonly>1</readonly>
<value>=php.GetNextNumber(/;uidNumber)</value>
</attribute>
<attribute id="gidNumber">
<display>GID Number</display>
<!-- <onchange>=autoFill(homeDirectory;/home/users/%gidNumber|0-0/T%/%uid|3-%)</onchange> -->
<order>7</order>
<page>1</page>
<value><![CDATA[=php.PickList(/;(&(objectClass=posixGroup));gidNumber;%cn%;;;;cn)]]></value>
</attribute>
<attribute id="loginShell">
<display>Login shell</display>
<order>9</order>
<page>1</page>
<!-- <value><![CDATA[=php.PickList(/;(&(objectClass=posixAccount));loginShell;%loginShell%;;;;loginShell)]]></value> -->
<type>select</type>
<value id="/bin/sh">Bash</value>
<value id="/bin/csh">C Shell</value>
<value id="/bin/tsh">Turbo C Shell</value>
</attribute>
<attribute id="userPassword">
<display>Password</display>
<!-- <helper>
<display>Encryption</display>
<id>enc</id>
<value>=php.PasswordEncryptionTypes()</value>
</helper> -->
<icon>lock.png</icon>
<order>5</order>
<page>1</page>
<post>=php.PasswordEncrypt(%enc%;%userPassword%)</post>
<spacer>1</spacer>
<verify>1</verify>
</attribute>
<attribute id="displayName">
<display>Display Name</display>
<order>10</order>
<page>1</page>
</attribute>
<attribute id="mail">
<display>Email Address</display>
<order>11</order>
<page>1</page>
</attribute>
<attribute id="ownCloudQuota">
<display>ownCloud Quota</display>
<order>12</order>
<page>1</page>
</attribute>
</attributes>
</template>
Wzorce do tworzenia obiektów znajdują się w repozytorium skryptów
Wzorce do edycji wpisów
Obecnie nie ma wzorców do edycji obiektów poza domyślnym. W katalogu /usr/local/www/phpldapadmin/templates/modification są dwa wzorce (pliki XML), ale mają ustawioną flagę:
<visible>0</visible>
Zatem nie działa guzik Przełącz szablon podczas edycji wpisów.
Konfiguracja w apache
Konfiguracja w apache2.x jest umieszczona w repozytorium skryptów. Trzeba tylko dodać alias dla danego hosta wirtualnego:
Alias /pla/ /usr/local/www/phpldapadmin/
Obsługa poprzez PHP7.1.x
Jeśli chodzi o obsługę PHP7 w PLA, to jedynym problemem jest wykorzystanie mcrypt. Jeżeli nie ma w systemie, to wszystko działa poprawnie. Jeżeli jest zainstalowane w systemie, to trzeba zakomentować kilkanaście linijek w pliku lib/functions.php:
--- /usr/local/www/phpldapadmin/lib/functions.php.orig 2017-11-07 00:23:45.000000000 +0100
+++ /usr/local/www/phpldapadmin/lib/functions.php 2017-11-14 23:53:42.029822000 +0100
@@ -745,15 +745,15 @@ function blowfish_encrypt($data,$secret=
if (! trim($secret))
return $data;
- if (function_exists('mcrypt_module_open') && ! empty($data)) {
- $td = mcrypt_module_open(MCRYPT_BLOWFISH,'',MCRYPT_MODE_ECB,'');
- $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_DEV_URANDOM);
- mcrypt_generic_init($td,substr($secret,0,mcrypt_enc_get_key_size($td)),$iv);
- $encrypted_data = base64_encode(mcrypt_generic($td,$data));
- mcrypt_generic_deinit($td);
-
- return $encrypted_data;
- }
+## if (function_exists('mcrypt_module_open') && ! empty($data)) {
+## $td = mcrypt_module_open(MCRYPT_BLOWFISH,'',MCRYPT_MODE_ECB,'');
+## $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_DEV_URANDOM);
+## mcrypt_generic_init($td,substr($secret,0,mcrypt_enc_get_key_size($td)),$iv);
+## $encrypted_data = base64_encode(mcrypt_generic($td,$data));
+## mcrypt_generic_deinit($td);
+##
+## return $encrypted_data;
+## }
if (file_exists(LIBDIR.'blowfish.php'))
require_once LIBDIR.'blowfish.php';
@@ -801,15 +801,15 @@ function blowfish_decrypt($encdata,$secr
if (! trim($secret))
return $encdata;
- if (function_exists('mcrypt_module_open') && ! empty($encdata)) {
- $td = mcrypt_module_open(MCRYPT_BLOWFISH,'',MCRYPT_MODE_ECB,'');
- $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_DEV_URANDOM);
- mcrypt_generic_init($td,substr($secret,0,mcrypt_enc_get_key_size($td)),$iv);
- $decrypted_data = trim(mdecrypt_generic($td,base64_decode($encdata)));
- mcrypt_generic_deinit($td);
-
- return $decrypted_data;
- }
+## if (function_exists('mcrypt_module_open') && ! empty($encdata)) {
+## $td = mcrypt_module_open(MCRYPT_BLOWFISH,'',MCRYPT_MODE_ECB,'');
+## $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_DEV_URANDOM);
+## mcrypt_generic_init($td,substr($secret,0,mcrypt_enc_get_key_size($td)),$iv);
+## $decrypted_data = trim(mdecrypt_generic($td,base64_decode($encdata)));
+## mcrypt_generic_deinit($td);
+##
+## return $decrypted_data;
+## }
if (file_exists(LIBDIR.'blowfish.php'))
require_once LIBDIR.'blowfish.php';
I wszystko działa poprawnie.
Źródła w sieci internet
(c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.

Gdy trzeba dołączyć inną (pod)stronę https://moinmo.in/HelpOnMacros/Include https://moinmo.in/HelpOnParsers
Nieprawidłowe argumenty "pagename, heading, level, from="regex", to="regex", sort=ascending|descending, items=n, skipitems=n, titlesonly, editlink"!