Samba (3) - Administrácia

Samba (3) - Administrácia
17.08.2009 01:50 | Články | Erik Mocný
V predošlej časti sme si ukázali tlačové služby Samby. V tej dnešnej sa zameriame na manuálnu editáciu konfiguračného súboru /etc/samba/smb.conf a ukážeme si ako integrovať náš Samba server s Active Directory (AD).

Keďže tento další diel vychádza po dosť dlhej prestávke od poslednej časti, za čo sa ospravedlňujem, rozhodol som sa pridať do článku začlenenie Samba servera do AD domény. Zmenil som aj distribúciu, z Gentoo som prešiel na Arch, takže niektoré veci ako cesty k súborom a pod. sa môžu líšiť.

Konfigurácia smb.conf

Konfiguračný súbor pre Sambu sa nachádza globálne v adresári /etc. Tento súbor je rozdelený do sekcií uzavretých v hranatých zátvorkách []. Komentáre sa začínajú znakom #, prípadne ;.

Jednoduché nazdieľanie adresárov (/etc/samba/smb.conf)

  [global]
   workgroup = WORKGROUP

   server string = Hole Samba Server :P

   security = share 

   hosts allow = 192.168.1. 192.168.2. 127. 192.167.2. >> povolené počítače

   load printers = yes >> načítanie ovládačov tlačiarne

   only guest = yes >> globálne sú povolení hostia

   log file = /var/log/samba/%m.log >> umiestnenie log súboru, %m zabezpečí samostatný súbor pre každý počítač, ktorý sa na vás pripojí

   max log size = 2500 >> veľkosť log súboru udaná v KB

  [homes]
   comment = Homes
   browseable = yes
   writable = no

  [films]
   public = yes >> synonymum pre voľbu "guest ok", zabezpečí prezeranie adr. bez hesla
   create mask = 0766 >> nastavenie masky
   writable = no >> zápis do adresára je zakázaný
   path = /home/dr34m/films >> cesta k adresáru

  [music]
   public = yes
   create mask = 0766
   writable = no
   path = /home/dr34m/music
 

Tento príklad je na ukážku jednoduchého nazdieľania adresárov, ktoré sa dá takisto nastaviť grafickým klikátkom v oboch najznámenjších prostrediach KDE aj Gnome, no tým sa tu zaoberať nebudem. Tiež opis všetkých nastavení by bol na príliš dlhý článok :). Doporučujem si preto prejsť manuálovú stránku smb.conf, kde by ste sa po podrobnom prebádani mali dopracovať k tomu, čo potrebujete.

Arch Linux ako člen Active Directory

Čo tým získame?

  • Užívatelia Windows AD a užívatelia Archu budú rovnako akceptovaný serverom
  • Užívatelia Windows AD budú môcť používať Samba shares rovnako ako Windows shares

Požiadavky

  • Windows Active Directory
  • Byť Windows administrátor
  • Mať root oprávnenia

Jediná vec, ktorú je potrebné na Windowse nastaviť je zakázať Digital Sign Communication (Always) v skupinovej politike AD.

Inštalácia

Na Archu potrebujeme mať nainštalované nasledujúce balíky:

  • samba
  • heimdal
  • ntp
  • pam_krb5.so

Prvé tri si nainštalujeme jednoducho príkazom:

pacman -S samba ntp heimdal

Knižnicu pam_krb5 je potrebné doinštalovať ručne alebo z AUR (Arch User Repository). Nájdete ju na stránke http://www.css-security.com/. Stačí ju niekam rozbaliť a z daného adresára vykonať ako root príkaz:

./install.sh

Následne sa knižnica nainštaluje do adresára /lib/security/cssi/.

Konfigurácia

Je nutné skontrolovať súbor /etc/hosts. Ak máte dual-boot systém je potrebné mať nastavený rozdielny hostname a netbios name na linuxe.

V tomto príklade vyzerá /etc/hosts nasledovne:

127.0.0.1 MASINA.EXAMPLE.COM MASINA
192.167.2.50 ADAM.EXAMPLE.COM ADA
192.167.2.51 EVA.EXAMPLE.COM EVA

Štart Samby a Winbindd

V Archu je Samba a winbind implementovaná ako jediný skript /etc/rc.d/samba. Jeho nastavenie sa nachádza v /etc/conf.d/samba, kde by ste mali mať nasledovný riadok:

SAMBA_DAEMONS=(smbd nmbd winbindd)

Nastavenie Heimdal / Kerberos (/etc/krb5.conf)

Predpokladáme, že AD doména je example.com. Další predpoklad je, že AD doména je spravovaná dvoma doménovými kontrolermi, primárnym a sekundárnym, z ktorých prvý je adam (adam.example.com) a druhý eva (eva.example.com). IP adresy majú 192.167.2.50 (adam) a 192.167.2.51 (eva).

/etc/krb5.conf

[libdefaults]
        default_realm 	= 	EXAMPLE.COM
	clockskew 	= 	300
	ticket_lifetime	=	1d
	
[realms]
	EXAMPLE.COM = {
		kdc 	= 	192.167.2.50
		kdc 	= 	192.167.2.51
		default_domain = EXAMPLE.COM
	}
	
	
[domain_realm]
	.example.com 	= 	EXAMPLE.COM
	example.com	= 	EXAMPLE.COM
	example		= 	EXAMPLE.COM

[appdefaults]
	pam = {
	ticket_lifetime 	= 1d
	renew_lifetime 		= 1d
	forwardable 		= true
	proxiable 		= false
	retain_after_close 	= false
	minimum_uid 		= 0
	debug 			= false
	}

[logging]
	default 		= SYSLOG:NOTICE:DAEMON
	kdc 			= FILE:/var/log/kdc.log

O jednotlivých nastaveniach sa znova dočítate v manuálovej stránke krb5.conf ;).

Vo vnútri AD je dôležité, aby všetky počítače mali nastavený rovnaký systémový čas. Synchronizáciu uskutočníme príkazom:

/usr/bin/ntpdate adam.example.com

Teraz si môžeme vyžiadať query na tiket od doménového kontrolera AD nasl. príkazom (kapitálky sú dôležité!) :

# kinit ADMINISTRATOR@EXAMPLE.COM

Následne budete požiadaný zadať heslo.

Konfigurácia PAM

Na tomto mieste musíme zmeniť /etc/pam.d/login, aby nám posielalo requesty k AD kontrolerom. PAM si najprv kontroluje AD účty a ak žiaden nenájde kontroluje účty lokálne. Zahrnieme preto do autentifikačného procesu knižnicu pam_winbindd.so. Ešte pridáme pam_mkhomedir.so, čo nám zabezpečí automatické vytvorenie adresára /home/example/uzivatel, pri prihlásení sa AD užívateľa.

Príklad /etc/pam.d/login

#%PAM-1.0
auth     sufficient     pam_unix2.so
auth     required       pam_winbind.so use_first_pass use_authtok
auth     required       pam_securetty.so
auth     required       pam_nologin.so
auth     required       pam_mail.so
account  sufficient     pam_unix2.so
account  sufficient     pam_winbind.so use_first_pass use_authtok
password required       pam_pwcheck.so
password sufficient     pam_unix2.so
password sufficient     pam_winbind.so use_first_pass use_authtok
session  required       pam_mkhomedir.so skel=/etc/skel/ umask=0022
session  sufficient     pam_unix2.so
session  sufficient     pam_winbind.so use_first_pass use_authtok
session  required       pam_limits.so

Konfigurácia Samby

Jeden z viacerých možných konfigurácií smb.conf:

[global]
netbios name = hole
workgroup = EXAMPLE
realm = EXAMPLE
server string = hole linux
map to guest = Bad User
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind gid = 10000-20000
winbind use default domain = Yes
winbind separator =+
os level = 20

# Defaultný shell, kvôli tomu, že užívatelia AD nemajú nastavený žiaden
template shell = /bin/bash
 
encrypt passwords = yes
security = ads
password server = adam.example.com
preferred master = no
dns proxy = no
wins server = eve.example.com
wins proxy = no

admin users = @"NET+domain admins"
force group = "EXAMPLE+domain admins"
inherit acls = Yes
map acl inherit = Yes
acl group control = yes

load printers = no
debug level = 3
use sendfile = no
 
[homes]
comment = Homes
path =/home/%U
valid users = %S NET+%S
browseable = no
read only = no

[data]  
comment = Data
valid users = %S net+%S
path = /data
read only = no
browseable = yes
 
[Back-up]
comment = Backup filer
path = /backup
read only = no
browseable = yes
valid users = @"NET+Domain Admins"

Je na mieste spomenúť, že Samba používa databázu PDC pre autentifikačné požiadavky. K tomuto účelu slúži winbindd, ktorý je súčasťou balíku Samby. Winbind mapuje UID a GID našej AD pre linuxový stroj. Využíva volania RPC, PAM a tiež Name Service Switch (NSS), čím povoľuje Windows AD, užívateľský prístup a udeľuje im oprávnenia na linuxovom stroji. Dobrá vec na winbindd je to, že nemusíme definovať mapovanie samého seba, stačí mu vyčleniť rozsah UID a GID, tak ako sme to urobili v našom smb.conf. V tomto kroku si zahrnieme Winbindd do NSS volaní, aby nám všetko fungovalo tak ako má.

/etc/nsswitch.conf

passwd:            files winbind
shadow:            files winbind
group:             files winbind

Štart a testovanie služieb

Ako prvé si naštartujeme Sambu, no predtým je vhodné spustiť príkaz testparm pod rootom, aby nám skontroloval nastavenie smb.conf:

/etc/rc.d/samba start

Skontrolujeme si aj to, či je winbind schopný vykonať query (dotaz) na AD. Nasledujúci príkaz by mal vrátiť zoznam užívateľov AD:

wbinfo -u

prípadne skupín v AD:

wbinfo -g

Testovanie prihlásenia

Predpokladáme, že sa nachádzate v konzole, X-ká sú vypnuté. Otvoríme si nové sedenie a pokúsime sa prihlásiť s AD účtom. Uvedené sú 2 príklady prihlásenia užívateľa jozo:

jozo
EXAMPLE+jozo

Oba spôsoby by mali fungovať bez problémov. Mal by nám vzniknúť nový adresár /home/example/jozo. Teraz sa prihlásime do iného sedenia, no nie s AD účtom ale tým linuxovým. Skúste sa prihlásiť ako root a nechajte si toto rootovské sedenie otvorené.

Testovanie Samba príkazov

Týmito príkazmi si otestujeme či naša Samba pracuje správne s AD:

net ads info
net ads lookup
net ads status

Mali by sme získať výpis informácií o AD.

V tomto momente sa náš Arch chystá stať členom AD domény! Potrebujete k tomu administrátorský účet, v tomto príklade s typickým menom Administrátor :)

# net ads join -U Administrator
Administrator's password: xxxxx
Using short domain name -- EXAMPLE
Joined 'MASINA' to realm 'EXAMPLE.COM'

Ak nám všetko funguje, tak, ako má, jediné, čo ostáva je reštartovať náš server a modliť sa, aby to fungovalo aj po ňom :).

Na záver článku

Dúfam, že clánok nie je príliš chaotický na pochopenie, mnoho vecí som mohol podrobnejšie rozpísať a pod., ale to už nechám na samoštúdium. Cieľom bolo uviesť jeden z príkladov nastavenia Samby ako člena AD domény. V tejto chvíli zatiaľ neviem povedať, či bude aj ďalšie pokračovanie tohto seriálu, resp. ak áno, čo všetko mám doň zahrnúť. Potreboval by som nejakú odozvu od vás užívateľov, preto ak chcete ďalší diel, napíšte to do komentárov a kľudne tam pripíšte aj to, čo by ste chceli, aby ďalši diel obsahoval. Takže vyjadrite prosím svoj názor! ;)

Pokračovať v seriáli? Ak zvolíte áno, pripíšte do komentárov, čo chcete v ďalšom dieli.

103 %
3 %
    • Doménový raďič 09.09.2009 | 18:10
      Peter   Návštevník
      Ahoj - podľa mňa by bodol návod na komplet doménový radič (či ako sa to vlastne volá). Proste prihlasovanie sa napríklad na XP Professional priamo pomocou účtu na sambe, cestovné profily, ... Toto je podľa mňa najviac použitelná vec na sambe v malých firmách, ...
      • Re: Doménový raďič 02.11.2009 | 19:51
        ww   Návštevník
        Pekny serial ;)

        Ako spominal kolega vyssie, opisat nastavenie samby ako PDC by bolo fajn, u nas vo firme to hoci bezi, ale ktovie, mozno sa naucim nieco nove :)
        Pripadne potom plynule prejst na to, ako zviazat Sambu s LDAPom, (cize aj nejaky strucny uvod do LDAPu, co to je, (da sa to jest??), ako sa v tom vyhladava, co su schemy a pod... kedze je to celkom uzitocna a multifunkcna vec :) )
    • co ak nie som uplny admin AD? 06.03.2010 | 16:22
      siginigin   Návštevník
      zopar poznamok na ktore som zatial nenasiel odpoved:
      1. nemam admin prava na upravu politik domeny a podobnych admin veci, ale som v skupine,ktora moze zaradit a odobrat pc z/do domeny. maly problem pri prikaze net ads join je ze ucet pre pc si musim vytvorit predom cez konzolu na pdc. potom zaradenie funguje. horsie je to ked dam net ads leave. ten mi po odpojeni zmaze tento ucet, nechapem preco je to povolene, ked vytvaranie je zakazane, ale to je jedno. windows stroje vraj maju politikami zakazane aby pri odpajani z domeny zmazali aj svoj ucet. ako to teda urobim aj v linuxe?
      2. wbinfo -u obcas nevypise nic, prikaz sa spusti a neskonci, iba po ctrl c. pritom kinit mi pekne prideli ticket a aj pripojenie do domeny je uspesne.
      3. net ads join ma sice pripoji do domeny ale na konci napise ze zlyhal dns update, ale na win pocitadle sa po pripojeni aktualizuje aj dns, ked ho pripajam pod mojim uctom. ?
      4. po uprave pam konfigurakov sa musim prihlasovat 2x: zadam heslo, po enteri sa znova objavi promt zadaj heslo a po zadani hesla ma uz prihlasi ?
      5. asi mi chybaju zakladne informacie o tom ako to cele vlastne funguje: winbind je zaklad na spojenie s domenou a obsluhuje vsetky poziadavky s nou suvisiace. kerberos je protokol na komunikaciu s domenou (prihlasovanie, sifrovanie). samba zabezpecuje zdielanie, ale moze byt aj v roli pdb/bdc. je to nejako takto? no a este pam, to netusim aku ulohu v tejto scheme hra... :(

      ak sa to niekomu chcelo citat a vie odpoved na niektoru z otazok, budem mu VELMI vdacny za odpoved
    • Dobry clanok, ale ... 11.03.2010 | 16:20
      patko   Návštevník
      Super clanok, ale mal by som zopar otazok.
      - nakonfiguroval som a pripojil som samba server do domeny, testy dokazuju ze Samba pracuje s AD spravne ale ako pridam uzivatela ktory je v AD tak, aby tento uzivatel mohol citat, resp. zapisovat iba v jeho zdielanom adresari?
      napr. zdielanie adresara pre uzivatela
       [patko]  
      comment = Data pre Patka
      valid users = %S net+%S - tu by mal byt nejak zapisany login uzivatela z AD ktory moze k tomuto adresaru 
      pristupovat ale ako ma byt zapisany???
      path = home/samba/patko writeable = yes

      Uvedeny zapis by mal sposobit, ze k zdielanemu priestoru sa pripoji iba uzivatel ktory je zapisany v AD a jeho uzivatelske meno je patko - ako ho spravne v smb.conf zapisem?

      bolo by mozne vysvetlit tuto sekciu co znamena? Nejak mi nie je uplne jasna jej funkcia:
      admin users = @"NET+domain admins"
      force group = "EXAMPLE+domain admins"
      inherit acls = Yes
      map acl inherit = Yes
      acl group control = yes


      Dakujem.
    • SAMBA + backend PgSQL/MySQL 02.06.2011 | 17:39
      Martin   Návštevník
      Hodil by sa navod ako spojazdnit SAMBA server s backendom cez niektoru z najpouzivanejsich databaz na linuxe Postgres alebo MySQL.
    • RE: Samba (3) - Administrácia 28.08.2013 | 12:02
      Avatar homi   Návštevník
      Muzete na strankach uvadet odkazy na predchozi/nasledujici dily, dekuji.