x

Ana bölümler

  1. LimeSurvey Cloud ve LimeSurvey CE karşılaştırması
  2. Hızlı başlangıç kılavuzu - LimeSurvey 3.0+
  3. Kurulum - LimeSurvey CE
  4. İyi bir anket nasıl tasarlanır (kılavuz)
  5. Başlarken
  6. LimeSurvey'i Yönetme
  7. Anketler - giriş
  8. Anket ayarları
  9. Anket menüsü
  10. Anket yapısı
  11. Sorular - giriş
  12. Soru grupları - giriş
  13. Anketler - yönetim
  14. Anket araç çubuğu seçenekleri
  15. Çok dilli anket
  16. ExpressionScript Motoru - Hızlı başlangıç kılavuzu
  17. Kategorize edilmemiş ve gelişmiş özellikler
  18. Genel SSS
  19. Sorun giderme
  20. Geçici çözümler
  21. Lisans
  22. Sürüm değişiklik günlüğü
  23. Eklentiler
 Actions

LDAP ayarları

From LimeSurvey Manual

Bu sayfa makine çevirisiyle çevrilmiş olabilir ve hatalar içerebilir. İngilizce orijinali göster · Bu çeviriyi iyileştir
This page is a translated version of the page LDAP settings and the translation is 100% complete.
  Dikkat : Bu özellik, LimeSurvey anket yöneticilerinin LDAP aracılığıyla katılımcıları içe aktarmasına olanak tanır. Yöneticiler için LDAP kimlik doğrulaması gerekiyorsa lütfen AuthLDAP eklentisine bakın.


Genel

Bu işlevi kullanabilmek için config.php dosyasında LDAP desteğini etkinleştirmeniz ve config/ldap.php dosyasında LDAP parametrelerini yapılandırmanız gerekir.

  LDAP'ı kullanabilmek için LDAP modülünün PHP'nize kurulu olduğunu kontrol etmeniz gerekir. Bu uzantının nasıl kurulacağı için lütfen PHP LDAP modülü belgelerine bakın.


config.php dosyasında LDAP'ı etkinleştirme

  • $enableLdap: LimeSurvey'de LDAP işlevlerini kullanmak istiyorsanız bu parametreyi true olarak ayarlamanız gerekir (varsayılan olarak false değerindedir):
'config'=>array(
		'debug'=>0,
		'debugsql'=>0,
		'enableLdap'=>true,
	)

LDAP sunucularını tanımlama

Önce "application/config/ldap.php" dosyasında LDAP sunucusu bağlantı seçeneklerini tanımlayın. Her sunucu için aşağıdaki seçenekler kullanılabilir:

  • $serverId: Bu LDAP sunucusunu tanımlayan bir tamsayı. Sorgu tanımlarında bir sunucuyu belirli bir sorguya bağlamak için kullanılır;
  • $ldap_server[$serverId]['server']: LDAP sunucusunun IP adresi veya DNS adı. SSL ile güvenli bağlantılar (LDAPs veya LDAP+Start-TLS) kullanıyorsanız bu ad, sunucunun sertifika CN değeriyle (veya SubjectAlternativeName değeriyle) eşleşmelidir;
  • $ldap_server[$serverId]['port']: LDAP sunucusunun dinlediği TCP bağlantı noktası. Bu, LDAP ve LDAP+Start-TLS için genellikle 389, LDAPs için 636'dır;
  • $ldap_server[$serverId]['protoversion']: Sunucunuzun desteklediği protokole bağlı olarak 'ldapv2' veya 'ldapv3' olabilir. Tercih edilen protokol 'ldapv3'tür. Ancak şifreli bağlantılar kullanmak istiyorsanız LDAPs'in 'ldapv2' kipinde desteklendiğini, Start-TLS'nin ise 'ldapv3' için şifreleme yöntemi olduğunu unutmayın;
  • $ldap_server[$serverId]['encrypt']: Kullanılan şifreleme yöntemini belirler. 'ldaps', 'ldapv2' sunucuları için; 'start-tls' ise 'ldapv3' sunucuları için desteklenir. 'none' anahtar sözcüğü şifrelenmemiş LDAP iletişimi için kullanılır;
    • 'ldaps' veya 'start-tls' şifrelemesinde web sunucusunun LDAP sunucusunun sertifikasını doğrulayabilmesi gerektiğini unutmayın. Bu nedenle sertifika yetkilinizi openldap kitaplığınızda tanımlamanız gerekir (Linux'ta bu genellikle /etc/openldap/ldap.conf dosyasında yapılır).
  • $ldap_server[$serverId]['referrals']: Yönlendirmelerin (referrals) izlenip izlenmeyeceğini belirleyen mantıksal bir parametredir (ActiveDirectory için false kullanın);
  • $ldap_server[$serverId]['encoding']: LDAP dizininin dizeleri depolamak için kullandığı kodlamayı belirten isteğe bağlı bir parametredir. Varsayılan olarak varsayılan kodlama olan 'utf-8', LDAP dizinleri için standart kodlama olduğundan bu parametreyi genellikle ayarlamanız gerekmez. Ancak Active Directory kullanıyorsanız ve aksanlı dizeleri içe aktarırken sorun yaşıyorsanız bu parametreyi bölgenizde kullanılan kodlamaya ayarlamayı deneyin (örneğin Batı Avrupa için 'cp850'). Desteklenen kodlamaların tam listesi için CSV dosyasından kod içe aktarma arayüzündeki "Dosyanın karakter kümesi" açılan listesine bakabilirsiniz.

Sonra, dizine erişmek için hangi kimlik doğrulamasının gerektiğini tanımlamanız gerekir. 'Anonim' erişime izin veriliyorsa aşağıdaki iki parametreyi AYARLAMAYIN; aksi durumda bunları uygun şekilde ayarlayın:

  • $ldap_server[$serverId]['binddn']: Dizini okuma izni olan 'LDAP' kullanıcısının DN değeri;
  • $ldap_server[$serverId]['bindpw']: Yukarıdaki LDAP kullanıcısının parolası.

Başka LDAP sunucuları tanımlamanız gerekiyorsa serverID değerini artırmak için aşağıdaki satırı ekleyin ve yeni parametreleri tanımlayın:

  • $serverId++.

config/ldap.php dosyasında sorguları tanımlama

Dikkat: Bu parametrelerden birinde bir ldap öznitelik adı gerektiğinde yalnızca küçük harfli adlar kullanın: örneğin displayName DEĞİL, displayname.

Örnek yapılandırmalar içerdiğinden lütfen config/ldap.php dosyasına bakın.

Basit sorgular

Basit sorgularla başlayalım. Bu sorgular LDAP girdilerini yalnızca kendi öznitelikleri ve konumlarına göre süzer. ActiveDirectory'yi sorgulamak için genellikle yeterlidir.

  • $query_id: LDAP sorgusunun kimliğidir;
  • $ldap_queries[$query_id]['ldapServerId']: Sorguyu belirli bir sunucuya bağlar;
  • $ldap_queries[$query_id]['name']: Sorguyu açıklayan dize. Arayüzde görüntülenir;
  • $ldap_queries[$query_id]['userbase']: Kullanıcı aramaları için kullanılacak kök DN;
  • $ldap_queries[$query_id]['userfilter']: Olası kullanıcı girdilerini seçmek için kullanılan bir süzgeçtir. Parantez içine alınmalıdır;
  • $ldap_queries[$query_id]['userscope']: Kullanıcılar için LDAP aramasının kapsamı ('base', 'one' veya 'sub');
  • $ldap_queries[$query_id]['firstname_attr']: Kod girdisinin Ad alanıyla eşlenecek Ldap özniteliği;
  • $ldap_queries[$query_id]['lastname_attr']: Kod girdisinin Soyad alanıyla eşlenecek Ldap özniteliği;
  • $ldap_queries[$query_id]['email_attr']: Kod girdisinin e-posta adresi alanıyla eşlenecek Ldap özniteliği.

İsteğe bağlı olarak dizinden daha fazla bilgi alabilirsiniz:

  • $ldap_queries[$query_id]['token_attr']: Kod ile eşlenecek Ldap özniteliği;
  • $ldap_queries[$query_id]['language']: Kullanıcının dil koduyla eşlenecek Ldap özniteliği;
  • $ldap_queries[$query_id]['attr1']: attribute_1 alanıyla eşlenecek Ldap özniteliği;
  • $ldap_queries[$query_id]['attr2']: attribute_2 alanıyla eşlenecek Ldap özniteliği.

DN üyeli birleşik grup sorguları

Şimdi daha karmaşık bir sorgunun nasıl tanımlanacağını görelim.

Aşağıdaki sorgular, LDAP gruplarına bakan bir ilk LDAP araması kullanır. LDAP grubu, kullanıcı girdilerine şu biçimde başvurular içeren bir LDAP girdisidir:

  • kullanıcı kimlikleri (örneğin posixGroups böyledir) ==> Sonraki bölüme bakın
  • Veya kullanıcı DN değerleri (örneğin groupofnames ve groupofuniquenames böyledir) ==> aşağıya bakın

Burada kullanıcı DN değerleri içeren gruplarla ilgileniyoruz:

  • $query_id, $ldap_queries[$query_id]['ldapServerId'], $ldap_queries[$query_id]['name'] değerlerini yukarıda açıklandığı gibi tanımlayın.

Ardından grup süzgeci parametrelerini tanımlayın:

  • $ldap_queries[$query_id]['groupbase']: Grup girdilerini aramaya başlamak istediğiniz kök DN;
  • $ldap_queries[$query_id]['groupfilter']: Olası grup girdilerini seçecek LDAP süzgeci;
  • $ldap_queries[$query_id]['groupscope']: Gruplar için LDAP aramasının kapsamı ('one', 'base' veya 'sub');
  • $ldap_queries[$query_id]['groupmemberattr']: Grup girdisinde kullanıcı girdilerine başvuruları içerecek LDAP özniteliğinin adı;
  • $ldap_queries[$query_id]['groupmemberisdn']: TRUE.

Bu noktada, ilk LDAP aramasının seçilen gruplara karşılık gelen kullanıcıları bulması için her şey ayarlanmıştır. Ancak bu "kullanıcı adaylarına" başka bir süzgeç uygulayarak hangilerinin seçileceğini kısıtlayabilirsiniz. Bu elbette isteğe bağlıdır:

  • $ldap_queries[$query_id]['userbase']: Kullanıcı LDAP araması için temel DN (yalnızca bu temel DN ile eşleşen kullanıcı adayları seçilir);
  • $ldap_queries[$query_id]['userscope']: Kullanıcı LDAP araması için kapsam (yalnızca userbase+kapsam ile eşleşen kullanıcı adayları seçilir);
  • $ldap_queries[$query_id]['userfilter']: Başka bir seçim eklemek için her kullanıcı adayı girdisine (öznitelikleri üzerinden) uygulanan bir süzgeçtir.

UID üyeli birleşik grup sorguları

Şimdi grup üyeleri kullanıcı DN değerleri değil de kullanıcı UID değerleri olduğunda birleşik grup sorgusunun nasıl tanımlanacağını görelim.

DN üyeli grup sorgularında olduğu gibi bu sorgular da LDAP grup girdilerini arayan ve üyelerini alan bir ilk LDAP araması kullanır. Bu üye değerleri daha sonra karşılık gelen girdileri aramak için bir kullanıcı arama süzgecinde kullanılır. Bu nedenle, kullanıcının girdisinde gruplarda bulunan üye UID değeriyle eşleşmesi gereken kullanıcı özniteliğini tanımlamak için başka bir parametre daha yapılandırılmalıdır.

Gerekli parametreleri gözden geçirelim:

  • $query_id, $ldap_queries[$query_id]['ldapServerId'], $ldap_queries[$query_id]['name'] değerlerini yukarıda açıklandığı gibi tanımlayın

Ardından grup süzgeci parametrelerini tanımlayın:

  • $ldap_queries[$query_id]['groupbase']: Grup girdilerini aramaya başlamak istediğiniz kök DN;
  • $ldap_queries[$query_id]['groupfilter']: Olası grup girdilerini seçecek LDAP süzgeci;
  • $ldap_queries[$query_id]['groupscope']: Gruplar için LDAP aramasının kapsamı ('one', 'base' veya 'sub');
  • $ldap_queries[$query_id]['groupmemberattr']: Grup girdisinde kullanıcı girdilerine başvuruları içerecek LDAP özniteliğinin adı;
  • $ldap_queries[$query_id]['groupmemberisdn']: FALSE;
  • $ldap_queries[$query_id]['useridattr']: Grup üyelerinde bulunan UID ile eşleşmesi gereken kullanıcı özniteliğinin adı.

Bu noktada, ilk LDAP aramasının seçilen gruplara karşılık gelen kullanıcı UID değerlerini bulması için her şey ayarlanmıştır ve kullanıcı arama süzgeci otomatik olarak doldurulur.

Ancak üye UID değerlerinden hesaplanan otomatik kullanıcı süzgecini tamamlayarak bu 'kullanıcı adaylarından' hangilerinin seçileceğini kısıtlayabilirsiniz. Bu elbette isteğe bağlıdır:

  • $ldap_queries[$query_id]['userbase']: Kullanıcı LDAP araması için temel DN (yalnızca bu temel DN ile eşleşen kullanıcı adayları seçilir);
  • $ldap_queries[$query_id]['userscope']: Kullanıcı LDAP araması için kapsam (yalnızca userbase+kapsam ile eşleşen kullanıcı adayları seçilir);
  • $ldap_queries[$query_id]['userfilter']: Başka bir seçim eklemek için her kullanıcı adayı girdisine (öznitelikleri üzerinden) uygulanan bir süzgeçtir.

Active Directory ne olacak?

Active Directory (AD), LDAP protokolü kullanılarak sorgulanabilen bir Microsoft kayıt defteridir.

Bu nedenle içeriğini LimeSurvey kod sorguları için kullanmak mümkündür, ancak bu, AD'nin nasıl düzenlendiğine dair bilgi gerektirir.

  • LDAP kök tabanı dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 şeklindedir

==> Örneğin, şirketinizin DNS etki alanı 'my-company.com' ve Windows etki alanınız 'employees' ise kök tabanınız dc=employees,dc=my-company,dc=com olur

  • Kullanıcılar ve kullanıcı grupları cn=Users,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 altında saklanır (bunun ou=users olmadığına dikkat edin);
  • Active Directory Grupları:
    • Grup nesneleri, üyelerin DN değerlerini 'member' özniteliğinde içerir;
    • Grup üyelikleri ayrıca her kullanıcı girdisinin memberOf özniteliğinde saklanır. Bu öznitelik, kullanıcının ait olduğu grupların DN değerlerini içerir;
    • bazı gruplar CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 altındadır:
      • Örneğin: cn=Administrator,CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1;

Bazı durumlarda bir Active Directory'yi sorgulamak o kadar kolay değildir. Bu nedenle, bir Active Directory'den bazı bilgileri almak için örnek bir yapılandırma aşağıda verilmiştir:

//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'] = '';

Başka bir örnek kullanıcı sorgusu:

$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
  • E-posta adresi olmayan kullanıcıları atlamak için kullanıcı filtrelerinize (mail=*) eklemeyi düşünebilirsiniz.

Örnek grup sorgusu:

$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.

Her Active Directory grubu için otomatik olarak bir sorgu oluşturma

Anket katılımcılarınızın gruplarını tek bir organizasyon birimi (OU) içinde tutuyorsanız, her grup için ayrı bir sorgu yazmanız gerekmez. Aşağıdaki kod, o OU içindeki tüm grupları listeler ve her grup için bir sorgu oluşturur. Sorgu, iç içe geçmiş grupların üyeleri dahil, grubun etkin tüm üyelerini kapsar.

Kodu, sunucu ve sorgu tanımlarınızdan sonra ve //DO NOT CHANGE BELOW HERE satırından önce olacak şekilde config/ldap.php dosyasına ekleyin. Ardından en üstteki dört değişkeni ayarlayın:

  • $groupServerId: kullanılacak sunucunun $serverId değeri;
  • $groupContainer: grupları barındıran OU'nun DN değeri. Yalnızca doğrudan bu OU içindeki gruplar listelenir, alt OU'lardaki gruplar listelenmez;
  • $groupUserBase: grup üyelerinin aranacağı kök DN;
  • $groupNameAttr: GUI'de sorgu adı olarak kullanılan grup özniteliği (küçük harfle), örneğin 'info' ("Active Directory Users and Computers" içindeki "Notes" alanı) veya 'description'. Bir grubun bu özniteliğinde değer yoksa cn değeri kullanılır.
$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);
}

Akılda tutulması gerekenler:

  • Kod, "Katılımcılar şuradan içe aktarılsın LDAP" sayfası her açıldığında veya gönderildiğinde dizine bağlanır; böylece yeni gruplar yapılandırmayı değiştirmeden görünür. Bağlantı veya bind işlemi başarısız olursa sayfa yalnızca elle tanımladığınız sorguları gösterir.
  • 1.2.840.113556.1.4.1941 eşleştirme kuralı (LDAP_MATCHING_RULE_IN_CHAIN) iç içe geçmiş grupları çözümler. Yalnızca Active Directory'de bulunur, bu nedenle bu örnek diğer LDAP sunucularıyla çalışmaz. Bu sunucularda bunun yerine her grup için bir birleştirilmiş grup sorgusu kullanın.
  • $groupContainer içindeki alt OU'lardaki grupları da listelemek için ldap_list yerine ldap_search kullanın.
  • Birden fazla OU'daki grupları listelemek için kodu dört değişkenin farklı değerleriyle tekrarlayın.

Active Directory LDAP yapısı hakkında daha fazla bilgiyi Active Directory Architecture ve Active Directory Technical Specification sayfalarında bulabilirsiniz.