Ldap a Samba

Tak Samba bohužel není jen brazilský tanec, ale i něco jiného. Takový pěkný program, který umožňuje sdílení souborů mezi Linuxem a Windows, nebo taky například proměnit linuxový server v PDC pro Windows stanice. A co to má společného s Ldapem? Někam přece musím cpát údaje o uživatelích.

Když začínám něco tvořit pod Linuxem, tak je mi Google velým pomocníkem. Nejinak tomu bylo i se Sambou. Najít návod jak mountovat Windows shares, nebo jak vytvořit svůj vlastní není problém. Sehnat návod, jak vytvořit pomocí Samby PDC už je trochu problém. Sehnat návod jak vytvořit PDC s podporou uživatelů v LDAPu už je velký problém. Přesto jsem jich několik našel. Například tento na http://www.unav.es/cti/ldap-smb/smb-ldap-3-howto.html. Bohužel všechny návody v této oblasti se omezují na změť neokomentovaných příkazů a konfiguráků, ve které není poznat co je skutečně důležité od toho, co autor používá kvůli nějáké úplně jiné ptákovině. Když pak něco nefunguje, a vy nevíte co s tím, protože pořádně nerozumíte konfiguraci, tak je to celkem blbé. (Proto se pokusím popsat jak rozběhat Sambu s LDAPem, tak aby jste veděli co konfigurujete.) Nepokusím, protože to ještě neumím.

Předpokládám, že Sambu umíte alespoň trochu nakonfigurovat. (Tedy alespoň tak aby se servr tvářil, jako počítač ve workgroupu. Pokud si navíc přečtete můj minulý blogpost, bude následující text dávat větší smysl.

První věc kterou je potřeba udělat, je připravit náš LDAP server na to, že budu obsahovat účty uživatelů Samby. Ty se trochu liší od běžných linuxových účtů. Obsahuje například takové věci jako SambaSID, heslo ve formátu takovém aby ho Windows schroupaly, a jiné informace. Proto je potřeba přidat mezi schémátka ldap servru, takové které definuje atributy účtů Samby. Teď je potřeba zjistit, kterou verzi Samby používáte. Konkrétně verze 3, používá jiná schémátka než verze předchozí. Stáhnout se dá ze stránek Samby. Nahraje se do složky s ostatními schémátky a restartuje se ldap server. Nyní už náš ldap servr zná Samba accounty, což se projeví například tím, že nám přibudou nabídky v phpldapadminu.

Teď zpátky k Sambě. Jistě si říkáte, kam Samba cpe informace o svých účtech, když nepoužívá ldap. Cpe je do souboru kdesi v /etc. To nás, ale nemusí vůbec zajímat. Následující výpis je konfigurační soubor Samby. Doporučuji přečíst komentáře ať víte co děláte.


[global]
#teď se jedná o doménu, takž jméno domény
workgroup = avc
#jmeno servru
netbios name = fat.avc
#popisek servru, doporucuji "Server v Kuchyni"
server string = FAT.avc Testing PDC
#tak ted zacina to zajimave. Tady sambe sdeluji, ze chci aby pouzivale ldap
passdb backend = ldapsam:ldap://fat.sh.cvut.cz/
#definuji vrsek stromu
ldap suffix = ou=accounts,dc=avc
#definuji, kam samba cpe jednotlive veci, zajimave je, ze stejne vzdy hleda
#od ldap suffix nadefinovaneho vrsku stromu
ldap group suffix = ou=smbgroups
ldap machine suffix = ou=Computers
ldap user suffix = ou=users
#binduj se jako
ldap admin dn = "cn=admin,dc=avc"

ldap passwd sync = no

#aby smazani v sambe nesmazalo celej ldap entry, pokud uzivatele mate jenom
#kvuli sambe tak dejte klidne yes. Nevim ale jestli to fakt funguje
ldap delete dn = no

username map =/etc/samba/smbusers

#nejak jsem nespozoroval, ze by to k necemu bylo
add user script = /usr/sbin/useradd -m %u
delete user script = /usr/sbin/userdel -r %u
add group script = /usr/sbin/groupadd %g
delete group script = /usr/sbin/groupdel %g
add user to group script = /usr/sbin/groupmod -A %u %g
delete user from group script = /usr/sbin/groupmod -R %u %g
add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody %u

# Note: The following specifies the default logon script.
# Per user logon scripts can be specified in the user account using pdbedit
logon script = scripts\logon.bat

# Zde se nastavi, kde budou mit uzivatele svoje cestovni profily. Uz se pouziva
# cesta ve stylu windows. Jinak %N je jmeno servru \Profiles je share profiles
# na servru. A %U je jmeno uzivatele. Do logon drive je pismeno domovskeho
# adresare a logon home je cesta k nemu
logon path = \\%N\Profiles\%U
logon drive = H:
logon home = \\%N\%U

#nastaveni samby jako PDC.
domain logons = Yes
os level = 65
preferred master = Yes
domain master = Yes

#nemam tuseni
idmap uid = 15000-20000
idmap gid = 15000-20000

#tak tady se tvorej ty shary na ktry jsem napriklad uz drive odkazoval
#predpokladam ze polozky jsou jasne. Jinak homes asi neni uplne nutne
#ale profiles je, protoze tam se definuje kde budou profily.
#netlogon je nejspise interni yaleyitost windows
#tuhle sekci nicmene doporucuju obslehnout tak jakje, protoze
#se uplne stejne vyskytuje v 90% navodu.
[homes]
comment = Home Directories
valid users = %S
read only = No
browseable = No

[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
admin users = root
guest ok = Yes
browseable = No

[Profiles]
comment = Roaming Profile Share
path = /home/samba/profiles
read only = No
profile acls = Yes

Teď přichází asi nejhorší část. Tou je přidání uživatelů a zařazení pracovních stanic do domény. Nejdříve zaneseme do LDAPu položku sambaDomainName. Ta má dva důležité atributy, ato její jméno a sambaSID. SID je jednoznačné identifikační číslo vaší domény. Samba už nějaké určitě vytvořila. Zjistí se pomocí příkazu net getlocalsid. Tohle číslo opravdu nemůžete nikde obšlehnout, ale musíte si ho opravdu zjistit. Tuto položku jsem umístil do vršku stromu samby a funguje to. Další položka, bez které samba nebude fungovat je účet s uid=0, tedy root. Já vytvořil nového uživatele root s uid 0 a umístil ho na místo, kde ho samba vidí, ale kde ho nevidí linux. V mém případě tady do kořene samby. Jako SID nastavím SID domény a k tomu si vymyslím nějaké pěkné číslo. O SIDech je napsáno ve výše odkazovaném how-to. Já je moc nepochopil. Používám na to phpldapadmin, který automaticky tvoří samba i linux účet. Stejně tak je možno vytvořit i ostatní uživatele. Buď úplně odznova, a nebo tím že stávajícím přidáme objectClass: sambaSamAccount. Tak ještě je potřeba sambě sdělit kde má heslo k ldap databázi. To se zařídí příkazem smbpasswd -w heslo.

Před chvílí jsem zjistil, že dokonce funguje i smbpasswd -a username. Username musí existovat v ldapu, ale nemusí se jednat o sambaSamAccount.

Zbýva ještě přidat pracovní stanice. To se proved kliknutím sem tam, někam . Potom se objeví logovací okénko, kam zadáte jméno někoho z domény a odpovídající heslo. Já tohle provádím jako root (ten Sambí). Pak se ws restartuje, a pokud je vše v pořádku, tak se můžete zalogovat jako uživatel. Vytvoří se vám profil, (zkopírováním profilu Default User) a můžete pracovat. Teda nemůžete, protože je potřeba ještě ws sdělit, že na ní opravdu můžete a to tím, že jí zařadíte uživatele do patřičné lokální skupiny (třeba PowerUsers). Na to je třeba spustit user manager na ws jako Administrator, přidat uživatele do skupiny, prohledat doménu, … Však vy to naklikáte. Jo a abych nezapoměl, furt s tim něco nefunguje. Občas se nepřipojí home jednotka. Dál je třeba aby uživatel byl ve skupině Administrator, pokud není tak to sice funguje ale hodně podivně. Možná je to ale tím, že se přihlašuji přes RemoteDesktop.

zdroj: https://www.abclinuxu.cz/blog/na_kaficko/2006/6/ldap-a-samba
2006