x

Bab utama

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. Panduan permulaan pantas - LimeSurvey 3.0+
  3. Pemasangan - LimeSurvey CE
  4. Cara mereka bentuk tinjauan yang baik (panduan)
  5. Bermula
  6. Mentadbir LimeSurvey
  7. Tinjauan - pengenalan
  8. Tetapan tinjauan
  9. Menu tinjauan
  10. Struktur tinjauan
  11. Soalan - pengenalan
  12. Kumpulan soalan - pengenalan
  13. Tinjauan - pengurusan
  14. Pilihan bar alat tinjauan
  15. Tinjauan berbilang bahasa
  16. Enjin ExpressionScript - Panduan mula pantas
  17. Ciri tidak dikategorikan dan ciri lanjutan
  18. Soalan Lazim Umum
  19. Penyelesaian Masalah
  20. Penyelesaian sementara
  21. Lesen
  22. Tukar log versi
  23. Pemalam
 Actions

Tetapan LDAP

From LimeSurvey Manual

Halaman ini mungkin telah diterjemahkan oleh mesin dan mungkin mengandungi ralat. Papar teks asal bahasa Inggeris · Perbaiki terjemahan ini
This page is a translated version of the page LDAP settings and the translation is 100% complete.
  Perhatian : Ciri ini membolehkan pentadbir tinjauan LimeSurvey untuk mengimport peserta melalui LDAP. Jika anda memerlukan Pengesahan LDAP untuk pentadbir, sila rujuk pemalam AuthLDAP.


Umum

Anda perlu mengaktifkan sokongan LDAP dalam config.php dan mengkonfigurasi parameter LDAP dalam config/ldap.php untuk menggunakan fungsi ini.

  Untuk dapat menggunakan LDAP, anda perlu memastikan modul LDAP telah dipasang dalam PHP anda. Sila rujuk dokumentasi modul PHP LDAP untuk cara memasang sambungan ini.


Mengaktifkan LDAP dalam config.php

  • $enableLdap: jika anda ingin menggunakan fungsi LDAP dalam LimeSurvey, anda mesti menetapkan parameter ini kepada true (secara lalai ia ditetapkan kepada false):
'config'=>array(
		'debug'=>0,
		'debugsql'=>0,
		'enableLdap'=>true,
	)

Menentukan pelayan LDAP

Pertama, tentukan pilihan sambungan pelayan LDAP dalam "application/config/ldap.php". Bagi setiap pelayan, pilihan berikut tersedia:

  • $serverId: Integer yang mengenal pasti pelayan LDAP ini. Ia digunakan dalam takrifan pertanyaan untuk mengikat pelayan kepada pertanyaan tertentu;
  • $ldap_server[$serverId]['server']: Alamat IP atau nama DNS pelayan LDAP. Jika anda menggunakan sambungan selamat SSL (LDAPs atau LDAP+Start-TLS), nama ini mesti sepadan dengan CN Sijil pelayan (atau SubjectAlternativeName);
  • $ldap_server[$serverId]['port']: Port TCP yang didengari oleh pelayan LDAP. Biasanya ia ialah 389 untuk LDAP dan LDAP+Start-TLS, dan 636 untuk LDAPs;
  • $ldap_server[$serverId]['protoversion']: Boleh jadi 'ldapv2' atau 'ldapv3' bergantung pada protokol yang disokong oleh pelayan anda. 'ldapv3' ialah protokol pilihan. Namun, jika anda ingin menggunakan sambungan yang disulitkan, ambil perhatian bahawa LDAPs disokong dalam mod 'ldapv2' manakala Start-TLS ialah kaedah penyulitan untuk 'ldapv3';
  • $ldap_server[$serverId]['encrypt']: Menentukan kaedah penyulitan yang digunakan. 'ldaps' disokong untuk pelayan 'ldapv2', 'start-tls' untuk pelayan 'ldapv3'. Kata kunci 'none' digunakan untuk komunikasi LDAP teks biasa;
    • Jangan lupa bahawa untuk penyulitan 'ldaps' atau 'start-tls', pelayan web mesti dapat menyemak sijil pelayan LDAP. Oleh itu, anda perlu menentukan Certificate Authority anda dalam pustaka openldap anda (biasanya ini dilakukan dalam fail /etc/openldap/ldap.conf di bawah linux).
  • $ldap_server[$serverId]['referrals']: Ini ialah parameter boolean yang menentukan sama ada rujukan (referrals) perlu diikuti atau tidak (gunakan false untuk ActiveDirectory);
  • $ldap_server[$serverId]['encoding']: Ini ialah parameter pilihan yang memberikan pengekodan yang digunakan oleh direktori LDAP untuk menyimpan rentetan. Biasanya anda tidak perlu menetapkan parameter ini kerana pengekodan lalai yang diandaikan, 'utf-8', ialah pengekodan standard untuk direktori LDAP. Namun, jika anda menggunakan Active Directory dan menghadapi masalah mengimport rentetan beraksen, cuba tetapkan parameter ini kepada pengekodan yang digunakan di kawasan anda (contohnya 'cp850' untuk Eropah Barat). Anda boleh merujuk senarai drop-down "Set karakter untuk fail" dalam antara muka Import Token from CSV file untuk mendapatkan senarai penuh pengekodan yang disokong.

Seterusnya, anda perlu menentukan pengesahan yang diperlukan untuk mendapat akses kepada direktori. Jika akses 'anonymous' dibenarkan, JANGAN tetapkan dua parameter berikut, jika tidak, tetapkan sewajarnya:

  • $ldap_server[$serverId]['binddn']: DN pengguna 'LDAP' yang dibenarkan membaca direktori;
  • $ldap_server[$serverId]['bindpw']: Kata laluan untuk pengguna LDAP di atas.

Jika anda perlu menentukan pelayan LDAP lain, tambah baris berikut untuk menokok serverID dan tentukan parameter baharu:

  • $serverId++.

Menentukan pertanyaan dalam config/ldap.php

Awas: apabila nama atribut ldap diperlukan dalam salah satu parameter ini, gunakan nama huruf kecil sahaja: contohnya displayname dan BUKAN displayName.

Sila rujuk fail config/ldap.php kerana ia mengandungi contoh konfigurasi.

Pertanyaan mudah

Mari mulakan dengan pertanyaan mudah. Pertanyaan ini hanya menapis entri LDAP berdasarkan atribut dan lokasinya sendiri. Ia biasanya mencukupi untuk membuat pertanyaan ke ActiveDirectory.

  • $query_id: ialah id pertanyaan LDAP;
  • $ldap_queries[$query_id]['ldapServerId']: Mengikat pertanyaan kepada pelayan tertentu;
  • $ldap_queries[$query_id]['name']: Rentetan yang menerangkan pertanyaan. Ia akan dipaparkan dalam GUI;
  • $ldap_queries[$query_id]['userbase']: DN akar yang digunakan untuk carian pengguna;
  • $ldap_queries[$query_id]['userfilter']: Ia ialah penapis yang digunakan untuk memilih entri pengguna yang berpotensi. Ia mesti diapit dengan tanda kurungan;
  • $ldap_queries[$query_id]['userscope']: skop carian LDAP untuk pengguna ('base', 'one' atau 'sub');
  • $ldap_queries[$query_id]['firstname_attr']: Atribut Ldap yang akan dipetakan kepada medan Firstname bagi entri token;
  • $ldap_queries[$query_id]['lastname_attr']: Atribut Ldap yang akan dipetakan kepada medan Lastname bagi entri token;
  • $ldap_queries[$query_id]['email_attr']: Atribut Ldap yang akan dipetakan kepada medan alamat e-mel bagi entri token.

Secara pilihan, anda boleh mendapatkan lebih banyak maklumat daripada direktori:

  • $ldap_queries[$query_id]['token_attr']: Atribut Ldap yang akan dipetakan kepada kod token;
  • $ldap_queries[$query_id]['language']: Atribut Ldap yang akan dipetakan kepada kod bahasa pengguna;
  • $ldap_queries[$query_id]['attr1']: Atribut Ldap yang akan dipetakan kepada medan attribute_1;
  • $ldap_queries[$query_id]['attr2']: Atribut Ldap yang akan dipetakan kepada medan attribute_2.

Pertanyaan Kumpulan Gabungan dengan ahli DN

Sekarang mari kita lihat cara menentukan pertanyaan yang lebih kompleks.

Pertanyaan berikut menggunakan carian LDAP pertama yang meninjau kumpulan LDAP. Kumpulan LDAP ialah entri LDAP yang mengandungi rujukan kepada entri pengguna dalam bentuk:

  • id pengguna (contohnya posixGroups) ==> Lihat bahagian seterusnya
  • Atau DN pengguna (contohnya groupofnames dan groupofuniquenames) ==> lihat di bawah

Di sini kita membincangkan kumpulan yang mengandungi DN pengguna:

  • tentukan $query_id, $ldap_queries[$query_id]['ldapServerId'], $ldap_queries[$query_id]['name'] seperti yang dijelaskan di atas.

Kemudian tentukan parameter penapis kumpulan:

  • $ldap_queries[$query_id]['groupbase']: DN akar tempat anda ingin memulakan carian entri kumpulan;
  • $ldap_queries[$query_id]['groupfilter']: Penapis LDAP yang akan memilih entri kumpulan yang berpotensi;
  • $ldap_queries[$query_id]['groupscope']: Skop carian LDAP untuk kumpulan ('one', 'base' atau 'sub');
  • $ldap_queries[$query_id]['groupmemberattr']: Nama atribut LDAP dalam entri kumpulan yang akan mengandungi rujukan kepada entri pengguna;
  • $ldap_queries[$query_id]['groupmemberisdn']: TRUE.

Pada ketika ini, semuanya telah disediakan untuk membolehkan carian LDAP pertama menemui pengguna yang sepadan dengan kumpulan yang dipilih. Namun, anda boleh mengehadkan "calon pengguna" yang akan dipilih dengan menggunakan penapis lain pada mereka. Ini, tentu sahaja, adalah pilihan:

  • $ldap_queries[$query_id]['userbase']: DN asas untuk carian LDAP pengguna (hanya calon pengguna yang sepadan dengan asas ini akan dipilih);
  • $ldap_queries[$query_id]['userscope']: Skop untuk carian LDAP pengguna (hanya calon pengguna yang sepadan dengan userbase+scope akan dipilih);
  • $ldap_queries[$query_id]['userfilter']: Ia ialah penapis yang digunakan pada setiap entri calon pengguna (pada atributnya) untuk menambah satu lagi pemilihan.

Pertanyaan Kumpulan Gabungan dengan ahli UID

Sekarang mari kita lihat cara menentukan pertanyaan Kumpulan gabungan apabila ahli kumpulan ialah UID pengguna dan bukan DN Pengguna.

Seperti pertanyaan Kumpulan dengan ahli DN, pertanyaan ini menggunakan carian LDAP pertama yang mencari entri kumpulan LDAP dan mendapatkan ahlinya. Nilai ahli ini kemudian digunakan dalam penapis carian pengguna untuk mencari entri yang sepadan. Oleh itu, satu lagi parameter mesti dikonfigurasi untuk menentukan atribut pengguna dalam entri pengguna yang sepatutnya sepadan dengan UID ahli yang terdapat dalam kumpulan.

Mari kita semak parameter yang diperlukan:

  • tentukan $query_id, $ldap_queries[$query_id]['ldapServerId'], $ldap_queries[$query_id]['name'] seperti yang dijelaskan di atas

Kemudian tentukan parameter penapis kumpulan:

  • $ldap_queries[$query_id]['groupbase']: DN akar tempat anda ingin memulakan carian entri kumpulan;
  • $ldap_queries[$query_id]['groupfilter']: Penapis LDAP yang akan memilih entri kumpulan yang berpotensi;
  • $ldap_queries[$query_id]['groupscope']: Skop carian LDAP untuk kumpulan ('one', 'base' atau 'sub');
  • $ldap_queries[$query_id]['groupmemberattr']: Nama atribut LDAP dalam entri kumpulan yang akan mengandungi rujukan kepada entri pengguna;
  • $ldap_queries[$query_id]['groupmemberisdn']: FALSE;
  • $ldap_queries[$query_id]['useridattr']: nama atribut pengguna yang mesti sepadan dengan UID yang terdapat dalam ahli kumpulan.

Pada ketika ini semuanya telah disediakan untuk membolehkan carian LDAP pertama menemui UID pengguna yang sepadan dengan kumpulan yang dipilih dan penapis carian pengguna akan diisi secara automatik.

Namun, anda boleh mengehadkan 'calon pengguna' yang akan dipilih dengan melengkapkan penapis pengguna automatik yang dikira daripada UID ahli. Ini, tentu sahaja, adalah pilihan:

  • $ldap_queries[$query_id]['userbase']: DN asas untuk carian LDAP pengguna (hanya calon pengguna yang sepadan dengan asas ini akan dipilih);
  • $ldap_queries[$query_id]['userscope']: Skop untuk carian LDAP pengguna (hanya calon pengguna yang sepadan dengan userbase+scope akan dipilih);
  • $ldap_queries[$query_id]['userfilter']: Ia ialah penapis yang digunakan pada setiap entri calon pengguna (pada atributnya) untuk menambah satu lagi pemilihan.

Bagaimana dengan Active Directory?

Active Directory (AD) ialah registri Microsoft yang boleh dikueri menggunakan protokol LDAP.

Oleh itu, kandungannya boleh digunakan untuk kueri token LimeSurvey, tetapi ini memerlukan pengetahuan tentang cara AD disusun.

  • Asas akar LDAP ialah dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1

==> Sebagai contoh, jika syarikat anda memiliki domain DNS 'my-company.com' dan domain Windows anda ialah 'employees', maka asas akar anda ialah dc=employees,dc=my-company,dc=com

  • Pengguna dan kumpulan pengguna disimpan di bawah cn=Users,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 (sila ambil perhatian bahawa ini bukan ou=users);
  • Kumpulan Active Directory:
    • Objek kumpulan mengandungi DN ahli dalam atribut 'member' mereka;
    • Keahlian kumpulan juga disimpan dalam atribut memberOf bagi setiap entri pengguna. Atribut ini mengandungi DN kumpulan yang dimiliki oleh pengguna;
    • sesetengah kumpulan terdapat dalam CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1:
      • Sebagai contoh: cn=Administrator,CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1;

Dalam sesetengah kes, mengkueri Active Directory tidaklah semudah itu, jadi berikut ialah contoh konfigurasi untuk mendapatkan sedikit maklumat daripada Active Directory:

//Connection to the active directory Server:
$serverId=0;
$ldap_server[$serverId]['server'] = "10.10.10.10";
$ldap_server[$serverId]['port'] = "389";
$ldap_server[$serverId]['protoversion'] = "ldapv2";
$ldap_server[$serverId]['encrypt'] = "none"; // Most AD LDAP servers will not have encryption set by default
$ldap_server[$serverId]['referrals'] = false;
$ldap_server[$serverId]['binddn'] = "domain\\user";
$ldap_server[$serverId]['bindpw'] = "userpassword";
//$ldap_server[$serverId]['binddn'] = "CN=user,OU=user_group,DC=xxx,DC=yyy"; this one will not work with active directory, that´s why you need to use "domain\\user"
//Here is a sample query for getting all active users of an active directory:
$query_id=0;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'Staff with an enabled account';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))';
//AD has no "account is enabled" attribute, so the filter excludes accounts that have the "disabled" flag (bit 2) set in userAccountControl
$ldap_queries[$query_id]['userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Leave empty for Auto Token generation by phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr2'] = '';
//You can also filter on group membership through the memberOf attribute of the user. Here is a sample query for getting all active users that are member of the group "samplegroup" in active directory:
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'All members of samplegroup';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(memberOf=CN=samplegroup,OU=Group Global,OU=USER_GROUP,DC=xxx,DC=yyy)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))';
$ldap_queries[$query_id]['userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Leave empty for Auto Token generation by phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr2'] = '';

Contoh kueri pengguna yang lain:

$ldap_queries[$query_id]['userfilter'] = '(&(objectCategory=Person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'; // AD doesn't recognise enabled accounts in the normal way, so instead, we check users are not disabled
  • Pertimbangkan untuk menambah (mail=*) pada penapis pengguna anda untuk melangkau pengguna yang tiada alamat e-mel.

Contoh kueri kumpulan:

$ldap_queries[$query_id]['groupfilter'] = '(&(objectClass=group)(cn=Domain Admins))'; // AD doesn't use the standard attribute name for groups, so use this example instead.

Mencipta satu kueri bagi setiap kumpulan Active Directory secara automatik

Jika anda menyimpan kumpulan untuk peserta tinjauan anda dalam satu unit organisasi (OU), anda tidak perlu menulis kueri untuk setiap kumpulan. Kod berikut menyenaraikan semua kumpulan dalam OU tersebut dan mencipta satu kueri bagi setiap kumpulan. Kueri tersebut merangkumi semua ahli kumpulan yang aktif, termasuk ahli kumpulan bersarang.

Tambah kod tersebut pada config/ldap.php selepas definisi pelayan dan kueri anda, dan sebelum baris //DO NOT CHANGE BELOW HERE. Kemudian tetapkan empat pemboleh ubah di bahagian atas:

  • $groupServerId: $serverId bagi pelayan yang hendak digunakan;
  • $groupContainer: DN bagi OU yang menyimpan kumpulan. Hanya kumpulan yang terus berada dalam OU ini disenaraikan, bukan kumpulan dalam sub-OU;
  • $groupUserBase: DN akar yang di bawahnya ahli kumpulan dicari;
  • $groupNameAttr: atribut kumpulan (dalam huruf kecil) yang digunakan sebagai nama kueri dalam GUI, contohnya 'info' (medan "Notes" dalam "Active Directory Users and Computers") atau 'description'. Jika sesuatu kumpulan tidak mempunyai nilai dalam atribut ini, cn kumpulan tersebut akan digunakan.
$groupServerId  = 0;
$groupContainer = 'OU=Survey groups,DC=xxx,DC=yyy';
$groupUserBase  = 'DC=xxx,DC=yyy';
$groupNameAttr  = 'info';

$srv = $ldap_server[$groupServerId];
$ds = ldap_connect(($srv['encrypt'] == 'ldaps' ? 'ldaps://' : 'ldap://') . $srv['server'] . ':' . $srv['port']);
if ($ds) {
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $srv['protoversion'] == 'ldapv3' ? 3 : 2);
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
    // Never send the bind password if Start-TLS was requested but failed
    $secure = $srv['encrypt'] != 'start-tls' || @ldap_start_tls($ds);
    $bound = $secure && (empty($srv['binddn']) ? @ldap_bind($ds) : @ldap_bind($ds, $srv['binddn'], $srv['bindpw']));
    $result = $bound ? @ldap_list($ds, $groupContainer, '(objectCategory=group)', array('cn', $groupNameAttr)) : false;
    $groups = $result ? ldap_get_entries($ds, $result) : array('count' => 0);
    for ($i = 0; $i < $groups['count']; $i++) {
        $query_id++;
        $ldap_queries[$query_id]['ldapServerId'] = $groupServerId;
        $ldap_queries[$query_id]['name'] = isset($groups[$i][$groupNameAttr][0]) ? $groups[$i][$groupNameAttr][0] : $groups[$i]['cn'][0];
        $ldap_queries[$query_id]['userbase'] = $groupUserBase;
        // Enabled users with an email address that are members of the group, directly or through nested groups
        $ldap_queries[$query_id]['userfilter'] = '(&(objectCategory=person)(objectClass=user)(mail=*)'
            . '(!(userAccountControl:1.2.840.113556.1.4.803:=2))'
            . '(memberOf:1.2.840.113556.1.4.1941:=' . ldap_escape($groups[$i]['dn'], '', LDAP_ESCAPE_FILTER) . '))';
        $ldap_queries[$query_id]['userscope'] = 'sub';
        $ldap_queries[$query_id]['firstname_attr'] = 'givenname';
        $ldap_queries[$query_id]['lastname_attr'] = 'sn';
        $ldap_queries[$query_id]['email_attr'] = 'mail';
        $ldap_queries[$query_id]['token_attr'] = '';
        $ldap_queries[$query_id]['language'] = '';
        $ldap_queries[$query_id]['attr1'] = '';
        $ldap_queries[$query_id]['attr2'] = '';
    }
    ldap_unbind($ds);
}

Perkara yang perlu diingat:

  • Kod ini menyambung ke direktori setiap kali halaman "Import peserta dari LDAP" dibuka atau dihantar, jadi kumpulan baharu muncul tanpa perlu mengubah konfigurasi. Jika sambungan atau bind gagal, halaman hanya memaparkan kueri yang anda takrifkan secara manual.
  • Peraturan pemadanan 1.2.840.113556.1.4.1941 (LDAP_MATCHING_RULE_IN_CHAIN) menyelesaikan kumpulan bersarang. Peraturan ini hanya wujud dalam Active Directory, jadi contoh ini tidak berfungsi dengan pelayan LDAP lain. Pada pelayan tersebut, gunakan kueri kumpulan gabungan untuk setiap kumpulan sebagai ganti.
  • Untuk turut menyenaraikan kumpulan dalam sub-OU bagi $groupContainer, gantikan ldap_list dengan ldap_search.
  • Untuk menyenaraikan kumpulan daripada lebih daripada satu OU, ulang kod tersebut dengan nilai lain untuk keempat-empat pemboleh ubah.

Dapatkan maklumat lanjut tentang struktur LDAP Active Directory di Active Directory Architecture dan Active Directory Technical Specification.