SAMBA 3.0.2 PDC + (open)ldap backend

Filip Jirsák Filip.Jirsak na gymnacel.cz
Středa Únor 25 10:34:25 CET 2004


Zdravím,

>težko tu bojuju s oživením %subj. Neco mi chodí ale porád se to chová
>záhadne.
>Mám konfigurovaný nss_ldap (podle všeho funkcní), nemám ale pam.
>Z konfigurace jsem po neúspeších s automatickým pridáním úctu stroje vyradil
>i "add machine script" a úcty zakládám "rucne", tedy pomocí smbldap-add*
>skriptu.
>  
>
V tom PAM může být problém. Samba totiž přes LDAP zjišťuje údaje 
specifické pro Windows (cestu k profilu apod., Windowsovské hashe 
hesla), zjišťuje přes něj i převody mezi user name a SID, ale uživatel s 
daným UID musí existovat i v Linuxu (myslím že UID ze jména se zjišťuje 
už voláním klasických knihovních funkcí.) - Samba pro danou session 
vystupuje pod uživatelovým UID, takže na vše pak platí klasická Unixová 
práva. Nejlépe to zajistí právě PAM. Alespoň já to tak mám :-), a 
nenapadá mne jiný rozumný způsob, jak to zajistit. Teď z hlavy nevím, 
jakou roli v tom hraje nss_ldap - zda dokáže PAM zastoupit.

>Ted se mi po mnoha pokusech podarilo (ani nevím proc najednou) pripojit XP
>do domény (alespon mi to XP rekli). Po restartu se ale už nemužu do domény
>
Jestli máte k dispozici NT nebo 2000, doporučuji zkoušet na nich, XP 
jsou vybíravější a je s nimi vždy více problémů.

>prihlásit stejným (ntadmin) úctem, kterým jsem jsem pripojení k doméne
>dosáhl. Když se prihlásím jako lokální uživatel, mužu pod tímto doménovým
>adminem otevrít na SAMBe share. V logu smbd (level=2) se mi pri pokusu o
>prihlášení objevuje:
>
>init_sam_from_ldap: Entry found for user: ntadmin
>[2004/02/24 21:35:46, 1] auth/auth_util.c:make_server_info_sam(821)
>User ntadmin in passdb, but getpwnam() fails!
>[2004/02/24 21:35:46, 0] auth/auth_sam.c:check_sam_security(221)
>check_sam_security: make_server_info_sam() failed with
>'NT_STATUS_NO_SUCH_USER'
>[2004/02/24 21:35:46, 2] auth/auth.c:check_ntlm_password(312)
>check_ntlm_password: Authentication for user [ntadmin] -> [ntadmin]
>FAILED with error NT_STATUS_NO_SUCH_USER
>[2004/02/24 21:36:20, 2] smbd/server.c:exit_server(558)
>  
>
Tohle znamená, že Samba nenašla daného uživatele. Což může znamenat 
ledacos, ale pokud existuje příslušná položka v LDAP, pak buď nemá 
všechny potřebné údaje, nebo k nim nemá přístup i Linuxová část (tj. PAM).

>V logu slapd zase nacházím, že se tam hledá SID s RID=501, což je "Guest".
>Takový úcet jsem nemám a nikde jsem nezaregistroval jeho potrebu (pri
>pokusech s tdb jsem se bez nej obešel).
>  
>
Asi nějaká feature Windows, když se nelze přihlásit, zkouší alespoň 
hosta? Nevím, hádám :-)

>Podle me je problém v mém nepochopení správy úctu na ldap serveru - jak
>spolu na jejich obhospodarování spolupracuje smbd a nss_ldap.
>Nemáte nekdo nejakou kucharku popisující jaké úcty a s jakými parametry je
>nutno založit ?
>  
>
Už jsem to napsal výše.  Nejlepší kuchařka, co znám, je Samba Howto na 
www.samba.org. Jsou tam i well-known účty, které je vhodné vytvořit 
(jsou tam i příslušné ldiffy pro LDAP). Ale tyhle účty nejsou pro běh 
nezbytné. Doporučuji Howto ve volných časech pročítat, pokaždé mi něco 
docvakne a pochopím snad lépe, jak to funguje.
Jinak doporučuji  k četbě také zdrojáky Samby, pro mne je také vždy 
největší problém to, aby spolu správně spolupracovaly část zjišťující 
Windowsovské informace a část zjišťují ci ty Linuxové (protože to mám v 
jedné položce LDAP stromu), a občas záleží na pořadí vytvoření atd. - a 
to se nejlépe zjistí ve zdrojáku.

>Netušíte, za jakých okolností smbd volá add * scripty a zda (kdy) jsou
>potreba ?
>
Volá je v případě, kdy vytváříte účet (uživatele, počítače) pomocí 
Windowsovských nástrojů a funkcí (od verze 3.0.0 se postupně zlepšuje 
podpora nativních Windwosovských nástrojů, jako je UserManager(?) apod.) 
Pokud tedy účty nechcete vytvářet přes klikací programy, ale vytvoříte 
si je "předem" na Linuxu, tyhle skripty nepotřebujete(*). Ruční 
vytváření účtu ale znamená, že musíte vyplnit i požadované Windowsovské 
údaje - a to jsou minimálně oba hashe hesla (možná stačí jen ten 
novější, pokud nepoužívate DOSový LanManager, jako že asi ne, ale 
vygenerovat i ten druhý hash nic nestojí). Byla na to utilita mkntpwd 
(nebo tak nějak), kterou využívaly Perlovské skripty smbldap-add*. Tohle 
ale znám z 2.2, pod 3.0 jsem tyhle skripty zatím nezkoušel. Druhá 
varianta - s add * skripty - funguje tak, že uživatele zakládáte pomocí 
Windowsovských funkcí (NetUserAdd, nejčastěji skrze nějaký klikací 
program), tento skript vytvoří Unixovou část (která ani nemusí být v 
LDAP, může být třeba v /etc/passwd) a Samba v LDAP vytvoří Windowsovské 
položky.
(*)  Ale pozor na přidávání počítačů do domény. V NT a 2000 máte 2 
varianty - buď už účet existuje (s heslem shodným jako je název stanice, 
po přihlášení si ho stanice změní) - tyhle účty i s hesly umí 
vygenerovat smbldap-add skripty, nebo zadáte administrátorské jméno a 
heslo a vytvoříte účet nový. Ve Windows XP funguje jen druhý způsob - 
tzn. účty počítačů v doméně se musí znovu vytvořit. Samozřejmě můžete 
Linuxovou část vytvořit předem ručně, ale pozor: v Sambě 3.0.1 byla 
chyba (zda je opravena v 3.0.2 nevím), kdy se Samba snažila v LDAP 
stromu vytvořit vždy novou položku - tj. pokud máte strom LDAP dělaný 
tak, že Linuxové i Windowsovské informace jsou pod jednou položkou (to 
je asi nejrozumnější), nešlo přidávat  nové počítače, protože nová 
položka se vytvořila už při vytváření Unixového účtu (takže bylo nutné 
účet vytvořit třeba v /etc/passwd, pak přidat počítač do domény, čímž se 
vytvořila nová položka v LDAP, pak k této položce přidat Unixové údaje 
(posixAccount) z /etc/passwd a tam účet vymazat).

>Netušíte jak dosáhnout snesitelne objemných debug výstupu se slapd, kde by
>byly pro normálního smrtelníka videt požadavky klientu a výsledky (hlavne u
>search, jestli se neco našlo) - já mám ted level=4, objem není snesitelný
>ale zato tam není videt, jak search dopadl a musím si to zkoušet rucne.
>  
>
To by mě také zajímalo...

>Prikládám cást smb.conf:
>
>[global]
>ldap admin dn = cn=Manager,dc=mydomain,dc=cz
>  
>
Předpokládám, že Manager je rootdn LDAPu, to by nemělo být. Do LDAP 
stromu by se mělo přistupovat s nějakým jiným účtem, který má příslušná 
práva - to lze asi vyčíst z Howto, kde jsou atributy vyjmenované. Ale 
tady vlastní zkušeností neposloužím, můj Samba Manager zatím může v 
příslušném stromu dělat vše, ono vyzkoušet ta práva omezit na nutné 
minimum se špatně dělá za ostrého provozu (pokud nechcete neustále 
poslouchat "já s nemůžu přihlásit"...)

>ldap idmap suffix = ou=Idmaps
>
IDmap slouží k mapování ID mezi několika systémy, pokud máte jen jeden 
server, nemá asi žádný význam.

>ldap passwd sync = no
>  
>
Řekl bych, že je užitečné synchronizovat i hesla pro LDAP, můžete je pak 
použít pro autentizaci i jiných služeb (třeba právě PAM, nebo i FTP, 
HTTP, IMAP...)

S pozdravem
Filip Jirsák



Další informace o konferenci Linux