Lightweight | Directory | Access | Protocol |
---|---|---|---|
lehký | adresář | přístup | protokol |
lehký protokol pro přístup k adresáři | |||
protokol pro přístup k lehkému adresáři | |||
protokol pro lehký přístup k adresáři |
# vrchol stromu dn: o=mojefirma objectClass: top objectClass: organization o: mojefirma dn: ou=Uzivatele,o=mojefirma objectClass: organizationalUnit description: Uzivatele v MeFirme ou: Uzivatele dn: uid=pelikan,ou=Uzivatele,o=mojefirma objectclass: inetOrgPerson objectclass: organizationalPerson objectclass: person objectclass: posixAccount objectclass: shadowAccount uid: pelikan cn: Martin sn: Pelikan loginshell: /bin/false uidnumber: 1000 gidnumber: 100 homedirectory: /home/pelikan userpassword: {CRYPT}$salt$osoleny_hash dn: ou=Skupiny,o=mojefirma objectClass: organizationalUnit description: {0}Vic atributu k 1 typu. description: {1}Usporadani treba takto. description: {2}Nebo jak chcete. ou: Skupiny dn: cn=admini_IS,ou=Skupiny,o=mojefirma objectClass: top objectClass: posixGroup cn: admini_IS gidNumber: 1000 memberUid: pelikan memberUid: novakova |
# vrchol stromu dn: o=mojefirma objectClass: top objectClass: organization o: mojefirma dn: ou=admini_IS,o=mojefirma objectClass: organizationalUnit description: admini inf. systemu ou: admini_IS dn: uid=pelikan,ou=admini_IS,o=mojefirma objectclass: inetOrgPerson objectclass: organizationalPerson objectclass: person objectclass: posixAccount objectclass: shadowAccount uid: pelikan cn: Martin sn: Pelikan loginshell: /bin/false uidnumber: 1000 gidnumber: 100 homedirectory: /home/pelikan userpassword: {CRYPT}$salt$osoleny_hash |
...ne, není to lightweight protocol...
Spíš lightweight directory pinned down by heavyweight policy.
# pkg_add -iv openldap-client # ldapsearch query výstup # ldapsearch -WxD binddn query výstup2
require_once("ldap.php"); $l = new ldap_connection(server, port); $l->bind(dn, pass); $l->search("ou=Skupiny, o=firma", "cn=*"); $g = new ldap_group(); foreach ($l->result as $i) { $g->read_properties($i); echo ($g); }
# pkg_add -iv openldap-server openldap-client
# emerge -av openldap pam_ldap nss_ldap
# yum install {openldap,openldap-servers,pam_ldap,nss-pam-ldapd} ### XXX spravit
# vi /etc/openldap/slapd.conf
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
...
access to attrs=userpassword by self write by anonymous auth
access to dn.sub="ou=Uzivatele,o=potazmo" by * read
...
database hdb
suffix "o=prvni-koren"
rootdn "cn=admin, o=prvni-koren"
rootpw v_produkcnim_systemu_semka_dejte_vystup_slappasswd(8)
directory "/var/openldap/prvni-koren/"
index drink, secretary ...
...
database hdb
suffix "dc=druhy,dc=koren"
rootdn "cn=admin, dc=druhy,dc=koren"
rootpw v_produkcnim_systemu_semka_dejte_vystup_slappasswd(8)
directory "/var/openldap/druhy-koren/"
index ...
...
$ ldapsearch -xWD "rootdn" -s base -b "" +skryté (proto to plus) hodnoty rootDSE.namingContexts odpovídají stromům, které daný stroj nabízí
# ftp http://teaching.storkhole.cz/ldap/01_strom.ldif # wget http://teaching.storkhole.cz/ldap/02_uzivatel.ldif # lynx http://teaching.storkhole.cz/ldap/03_zmena.ldif # curl http://teaching.storkhole.cz/ldap/04_skupina.ldif
# vi ~/.ldaprc ## podle ldap.conf(5)
# ldapadd -w HESLO_DO_ROOTDN -xD "cn=admin,dc=doména,dc=swi" -f 01_strom.ldif adding entry ... # ldapsearch -Wxb "dc=doména,dc=swi" (výsledky hledání == to, co jste právě naimportovali)
# ldapadd -Wxf 02_uzivatel.ldif adding entry ... # ldapsearch -Wxb "ou=Uzivatele,dc=doména,dc=swi" (výsledky hledání == nový uživatel)
# ldapmodify -Wxf 03_zmena.ldif modifying entry ... # ldapsearch -Wxb "ou=Uzivatele,dc=doména,dc=swi" (výsledky hledání == nový uživatel)
# ldapdelete -Wx "uid=test,ou=Uzivatele,dc=doména,dc=swi"
Chcete-li zadat hodnotu v Unicode nebo začínající dvojtečkou nebo mezerou, zadejte ji jako "typ:: hodnota-v-base64":
$ echo "cn:: `echo -n ' zacinam mezerou' | openssl enc -base64`" cn:: IHphY2luYW0gbWV6ZXJvdQ== $ echo "Cg==" | openssl enc -d -base64 $
## s balíkem base64 $ echo "hodnota" | base64 | base64 -d hodnota base64: invalid input $ echo "Cg==" | base64 -d | hexdump base64: invalid input $ echo -n "Cg==" | base64 -d | hexdump 0000000 000a 0000001
Více informací samozřejmě v ldapadd(8), ldif(5).
Stejně jako přístupy k heslům si hlídejte jednoznačnost UID! TODO odkaz na moji fci
+ (prefixová notace vyhledávacího filtru, -s scope)
+ příklady proti AD?
+ TLS a dopravení certifikátů ke klientům (v podstatě se neliší od návodu k Postfixu)
# vi /etc/relayd.conf
relay ldapgw {
listen on 127.0.0.1 port 389
forward with ssl to real.server port 636
}
- používejte slapd -d \? ## každé číslo znamená trochu něco jiného
Máme databázi uživatelů. Zbývá dořešit zabezpečení (access to... + případně TLS + konfigurace klientů) a navázat na ni systémové databáze passwd, shadow, group, ...