LDAP
(→Linux - prihlasovanie uzivatelov) |
(→Prerekvizita) |
||
Řádka 283: | Řádka 283: | ||
=== Prerekvizita === | === Prerekvizita === | ||
[[#Prerekvizita SSL]] | [[#Prerekvizita SSL]] | ||
+ | |||
+ | === NSS === | ||
= Seznam služeb a jejich správců, které LDAP používají = | = Seznam služeb a jejich správců, které LDAP používají = |
Verze z 8. 11. 2012, 13:50
LDAP je protokol pro získávání/zapisování informací v stromové struktuře. Dnes se používá zejména pro jednotné přihlašování uživatelů do více aplikací. LDAP na wikipedii
Klub Silicon Hill v rámci Informačního systému provozuje LDAP server, vůči kterým se můžou další aplikace ověřovat pomocí uživatelova hesla. Umožňujeme jak bind tak fastbind. Stávající implementace je pro všechny uživatele Read-only, veškeré změny uživatelských účtů je třeba dělat přes rozhraní informačního systému.
Obsah |
Informace o serveru
- Adresa: ldap.sh.cvut.cz
- Port: 636
- Používá SSL (ldaps://)
- Správce: Tomáš Srna
- Uživatelé v ou=People,dc=sh,dc=cvut,dc=cz
- Atribút uživateľského mena: uid
- Uživatel pro servery: cn=auth-user,ou=System,dc=sh,dc=cvut,dc=cz
- Heslo na vyžádání u správce
- Overenie cez userPassword, SSHA hash
- Vo výnimočných prípadoch možnosť NTLM overenia
Autentizačné módy
- FastBind - Bind priamo užívateľom, pod ktorým sa hlási náš klient
* uid={username},ou=People,dc=sh,dc=cvut,dc=cz * {password}
- Bind cez auth-user
* Horeuvedené údaje * Vhodné pre mnohonásobné overovanie užívateľov s použitím jediného spojenia.
Prerekvizita SSL
Dôležité! Na Linuxe pokiaľ sa používajú ldap knižnice z OS (používa ich OS samotný, PHP, ...), je potrebné pridať certifikát autority.
Postup je nasledovný:
- V /etc/ldap/ldap.conf pridáme riadok
TLS_CACERT /etc/ssl/certs/ldap.pem
- Do spomínaného súboru /etc/ssl/certs/ldap.pem vložíme certifikát autority AddTrust:
-----BEGIN CERTIFICATE----- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= -----END CERTIFICATE-----
Příklady použití / nastavení
LDAP Kontakty v Telefonu
iPhone Nastavení -> Pošta, Kontakty, Kalendáře -> Přidat účet -> Jiný -> "Přidat účet LDAP"
- Server: ldap.sh.cvut.cz
- Uživatel: uid=**tvůj username**,ou=People,dc=sh,dc=cvut,dc=cz
- Heslo: Tvé heslo do ISu
- Popis: ldap.sh.cvut.cz
- Použít SSL: Ano
- Kritéria hledání: dc=sh,dc=cvut,dc=cz
LDAP z příkazové řádky - ldapsearch
# Balíček aptitude install ldap-utils # ~ Fastbind (zepta se na heslo pro username) ldapsearch -h ldap.sh.cvut.cz -b "dc=sh,dc=cvut,dc=cz" -D "uid=username,ou=People,dc=sh,dc=cvut,dc=cz" -W uid=username # ~ Bind (se systémovým účtem) ldapsearch -h ldap.sh.cvut.cz -b "dc=sh,dc=cvut,dc=cz" -D "cn=auth-user,ou=System,dc=sh,dc=cvut,dc=cz" -w *heslo_auth_usera* uid=username
Zend_Auth_Adapter_Ldap
application.ini
ldap.is.host = ldap.sh.cvut.cz ldap.is.port = 636 ldap.is.useSsl = true ldap.is.useStartTls = true ldap.is.bindRequiresDn = true ldap.is.baseDn = "ou=People,dc=sh,dc=cvut,dc=cz" ldap.is.accountCanonicalForm = 2 ldap.is.username = "cn=auth-user,ou=System,dc=sh,dc=cvut,dc=cz" ldap.is.password = "********"
Přiklad přihlášení v kontextu Zend_Controller_Action, Více v dokumentaci
$auth=new Zend_Auth(); $username=$this->_getParam("username"); $password=$this->_getParam("password"); $bootstrap = $this->getInvokeArg('bootstrap'); $config=$bootstrap->getOptions(); $options = $config["ldap"]; $authAdapter=new Zend_Auth_Adapter_Ldap($options,$username,$password); $result=$auth->authenticate($authAdapter); if($result->isValid()) { $ldap=$authAdapter->getLdap(); $user = $ldap->getEntry("uid=".$username.",".$options["is"]["baseDn"]); echo "Uzivatel prihlasen"; print_r($user); } else { echo "Spatne jmeno nebo heslo"; }
Ruby - FastBind
require 'rubygems' require 'net/ldap' require 'io/console' puts "Username:" username = gets puts "Password:" password = STDIN.noecho(&:gets) ldap = Net::LDAP.new(:encryption => :simple_tls) ldap.host = "ldap.sh.cvut.cz" ldap.port = 636 ldap.base = "ou=People,dc=sh,dc=cvut,dc=cz" ldap.auth "uid=#{username.strip},"+ldap.base, password.strip if ldap.bind puts "authentication succeeded" p ldap.search( base: "ou=People,dc=sh,dc=cvut,dc=cz", filter: Net::LDAP::Filter.eq("uid", username.strip), attributes: %w[ givenName sn email SHservice ], return_result:true ).inspect else puts "authentication failed" end
PHP - bez frameworku
<?php $user = "tomassrna"; $pass = "..."; $ldapConn = ldap_connect("ldaps://ldap.sh.cvut.cz", 636); if($ldapConn) { $ldapBind = ldap_bind($ldapConn, "uid=".$user.",ou=People,dc=sh,dc=cvut,dc=cz", $pass); if($ldapBind) echo "SUCCESS\n"; else { echo "FAILED: "; echo ldap_error($ldapConn)."\n"; } }
Microsoft Visual C#
Tak toto bol tazky boj...
- Pridame reference System.DirectoryServices
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.DirectoryServices; using System.Collections; namespace LDAP { class Program { static void Main(string[] args) { Dictionary<string, string[]> attrs; if ((attrs = shLdap("tomassrna", "xxxxxx", new[] { "mail", "uid", "SHservice", "SHadmin" }, "(&(uid=tomassrna)(SHservice=net))")) != null) { Console.WriteLine("Auth success!"); // Priklad vypisu vsetkych atributov foreach(KeyValuePair<string, string[]> kv in attrs) { string k = kv.Key; foreach (string v in kv.Value) { Console.WriteLine(k + "=" + v); } } // Priklad ziskania single value Console.WriteLine("E-mail: " + attrs["mail"][0]); // Priklad ziskania multi value Console.WriteLine("Spravovane servery: "); foreach (string s in attrs["shadmin"]) { Console.WriteLine(s); } } else Console.WriteLine("Auth failed!"); Console.Read(); } static Dictionary<string, string[]> shLdap(string username, string password, string[] attrs, string filter = "") { try { DirectoryEntry de = new DirectoryEntry("LDAP://ldap.sh.cvut.cz:636/OU=People,DC=sh,DC=cvut,DC=cz", "uid=" + username + ",ou=People,dc=sh,dc=cvut,dc=cz", password, AuthenticationTypes.SecureSocketsLayer); DirectorySearcher ds = new DirectorySearcher(de); if (filter == "") ds.Filter = "(uid=" + username + ")"; else ds.Filter = filter; foreach (string attr in attrs) ds.PropertiesToLoad.Add(attr); SearchResult sr = ds.FindOne(); Dictionary<string, string[]> res = new Dictionary<string, string[]>(); foreach (string prop in sr.Properties.PropertyNames) { var ar = new List<string>(); foreach (object oval in sr.Properties[prop]) { string val = ""; if (oval is string) val = (string)oval; else if(oval is Byte[]) val = Encoding.UTF8.GetString((Byte[])oval, 0, ((Byte[])oval).Length); ar.Add(val); } res[prop] = (string[])ar.ToArray(); } return res; } catch (Exception) { return null; } } } }
Linux - prihlasovanie uzivatelov
Existuje niekolko sposobov, ako nakonfigurovat LDAP prihlasovanie na Linuxe. Niektore cesty su strastiplne, nechas u nich vsetky svoje nervy a potis krv. Podme si ukazat sposob, ktory je jednoduchy a funguje.
Hned na zaciatku by som podotkol, zegetent passwdnikdy nebude fungovat na zobrazenie vsetkych uzivatelov. Je to politika zabezpecenia SH LDAP, ktora hovori, ze pouzivany auth-user nema pravo vidiet vsetkych uzivatelov, moze len hladat a autentifikovat. To nam staci.
Pre debug pouzivaj
id tomassrna
Prerekvizita
NSS
Seznam služeb a jejich správců, které LDAP používají
- finance.sh Bronislav Robenek
- imap.sh Radim Roška
- zimbra.sh Radim Roška
- msdnaa.sh Michal Naiman
- git.sh Tomáš Srna
- news.sh Dominik Mališ
- shell.sh Václav Mach
- siliconhill.cz Dominik Mališ