Samba Server: Korak za korakom <author>Ying Zhang, prevedel: Damir Horvat, <htmlurl name="damir@x-si.org" url="mailto:damir@x-si.org"> <date>19. september 1999 <abstract> Prevod skripta "Samba Server, Step-by-Step Guide" avtorja Yinga Zhanga </abstract> <toc> <sect>Zahvala <p> Hvala vsem, ki so me tako ali drugače spodbujali pri uporabi Linuxa in Sambe ter mi pomagali z nasveti in odgovori na moja ne vedno bistra vprašanja. <p> Hvala Ying Zhangu za njegov skript Samba Server, Step-by-Step Guide. <p> Hvala tudi celotni skupini razvijalcev Sambe za dobro opravljeno delo! <sect>Predstavitev <p> Ta dokument vas bo popeljal po nastavitvah Sambe v vašem linuxovskem stroju. Ob koncu dokumenta boste imeli: <itemize> <item>nastavljen strežnik Samba v vašem linuxovskem stroju za skupno rabo, <item>nastavljene odjemalce Windows 95/98 za dostop do linuxovskega stroja. </itemize> Ta dokument (HOW-TO) ni nadomestek za odlično dokumentacijo, priloženo distribuciji Sambe. Pomagal naj bi k hitri in delujoči nastavitvi Sambe. Preberite si tudi izvirno dokumentacijo Sambe! <sect1>Pravno stališče <p> Ne jamčim za točnost in pravilnost informacij, ki jih predstavljam v tem dokumentu. V nobenem smislu nisem povezan s skupino, ki razvija Sambo, in tu v bistvu opisujem le tisto, kar sem naredil za to, da bi strežnik Samba deloval v mojem linuxovskem stroju. Ne valite krivde mene, če se vam karkoli sfiži. Vsega se lotevate na lastno odgovornost! <p> Če pa imate kakšno vprašanje, komentar ali predlog, mi pišite na <htmlurl name="damir@x-si.org" url="mailto:damir@x-si.org">. Po najboljših močeh se bom potrudil in vam odgovoril, ali vas vsaj napotil k boljšim virom pomoči. <p> Dokument je preveden z dovoljenjem avtorja. <sect1>Ozadje <p> Moje domače krajevno omrežje sestavljajo trije računalniki, en linuxovski stroj in dva z Windows 98. Linuxovski stroj opravlja cel kup procesov, eden od njih je tudi strežba datotek mojima računalnikoma Win98 prek strežnika Samba. <p> Za lažje razumevanje sem vse tri stroje poimenoval. Linuxovski stroj je Homer, stroja z Win98 pa sta Lisa in Bart. Vsi trije sestavljajo delovno skupino Simpsons. Homerjev naslov IP je 192.168.0.1, Bartov 192.168.0.2, Lisin pa 192.168.0.3. <p> Delovne dokumente, domače naloge in druge osebne dokumente bom shranjeval v imeniku za skupno rabo (shared directory) z imenom data. Ta imenik bo dostopen z obeh strojev z Win 98 (mapiran kot disk M:). <p> Rad bi imel tudi imenik za skupno rabo, do katerega bi imel dostop vsakdo; to bo imenik public. Ta bo dostopen z obeh strojev z Win98 in tudi vsakomur, ki bo imel račun (account) v Homerju. <p> Nazadnje pa še tole: Homer bo tudi primarni strežnik WINS za moje krajevno omrežje, tako da ni treba imeti datoteke <file>lmhosts</file> v Lisi in Bartu. <sect>Zahteve <p> Pri snovanju tega dokumenta predpostavljam, da premorete: <itemize> <item>osnovno znanje, kaj Samba je in zakaj jo želite imeti, <item>delujoče omrežje TCP/IP, <item>delujoč linuxovski stroj, v katerega boste namestili Sambo, <item>potrebne pakete za kompajliranje linuxovskih programov, <item>delujoče stroje z Windows 95/98, pripravljene za povezovanje, <item>in da nimate že nameščene Sambe; če jo imate, jo zaustavite in odstranite. </itemize> <sect1>Nastavitveni načrt <p> Zdaj morate narediti načrt, kako boste nastavili Sambo. Opisal vam bom svojega; morda bo kaj prišlo v poštev tudi pri vas. <p> Homer ima nameščen RedHat Linux 5.1 s kernelom 2.2.3, zato bom opisal namestitev Sambe za RedHat (z RPM). Če uporabljate drugo distribucijo Linuxa, verjetno ne boste mogli dobesedno slediti temu, kar delam jaz! <p> V Barta in Liso je nameščen Windows 98. Ne bo velikih razlik, če imate Windows 95. Če imate nameščen Windows NT, bodo koraki malce drugačni, vendar gre za isto osnovo. <p> Ker imam v omrežju samo tri računalnike, me varnost čisto nič ne skrbi. Uporabljal bom stopnjo varnosti "share level" v Sambi. V resnici uporabljam en račun v obeh, Lisi in Bartu, in TweakUI za samodejno prijavo. <sect1>Kako do Sambe <p> Med pisanjem tega dokumenta je 2.0.3 zadnja stabilna različica Sambe. Potrebovali boste izvirno kodo, datoteka je samba-2.0.3.tar.gz, ki jo dobite na domači strani Sambe, <url url="http://www.samba.org/">. <sect>Namestitev Sambe <p> Najprej razširite izvirno kodo Sambe. Predpostavljam, da ste jo prenesli v imenik <file>/tmp</file>, in naredite naslednje (ni še treba, da ste root): <p> <tscreen><verb> $ tar -zxvf samba-2.0.3.tar.gz </verb></tscreen> <p> Če je vse potekalo v redu in niste dobili sporočil o napakah, bi morali imeti razširjene datoteke v imeniku <file>samba-2.0.3</file>. S Sambo dobite kup paketnih skriptov. Najzanimivejši so tisti, ki naredijo pakete RPM za nas. Pa naredimo tako (zdaj morate biti root): <p> <tscreen><verb> $ su # cd samba-2.0.3/packaging/RedHat # sh makerpms.sh </verb></tscreen> <p> Nekaj časa bo trajalo, preden se naredijo paketi RPM. Če je šlo kaj narobe, bo treba, uh!, pač prebrati dokumentacijo Sambe. Če je šlo vse kot po maslu, sta se naredili naslednji datoteki: <itemize> <item>/usr/src/redhat/RPMS/i386/samba-2.0.3-19990228.i386.rpm <item>/usr/src/redhat/RPMS/i386/samba-2.0.3-19990228.src.rpm </itemize> <p> Super, ne? No, pa namestimo Sambo: <tscreen><verb> # rpm -Uvh /usr/src/redhat/RPMS/i386/samba-2.0.3-19990228.i386.rpm </verb></tscreen> <p> Ali bi sploh lahko bilo še enostavneje? Zdaj bomo naredili novega uporabnika in novo skupino, nato pa nov imenik. Priredili bomo nekaj datotek uporabi "Samba Web Administration Tool - SWAT". <sect>Ustvarjanje <p> Hmm, tudi kakega boljšega naslova bi se lahko domislil, vendar bomo tu ustvarjali (naredili) uporabniške račune, imenike, skupine in datoteke. <sect1>Nov uporabnik in skupina <p> Ker bomo uporabljali stopnjo varnosti "share level", moramo narediti gostiteljski račun (guest account). Ta uporabnik bo smbuser in bo pripadal skupini smb. <p> Vse datoteke, ki jih Bart in Lisa pišeta v imenika za skupno rabo, data in public, bodo v lasti smbuserja in bodo sodile v skupino smb. <p> Če imate Linuxconf, uporabite to za umazano delo. Drugače pa uporabite ukaza useradd in groupadd za ustvarjanje novih računov. <enum> <item>Naredite skupino smb. <item>Naredite uporabnika smbuser, domači imenik naj bo v /home/public. </enum> Preprečite prijavo za račun smbuser, ker se dejansko nihče ne bo prijavljal pod tem imenom. <sect1>Imenik <file>pub</file> <p> Zdaj naj bi že imeli imenik <file>/home/public</file>. Bil naj bi v lasti smbuserja in pripadal skupini smb. Ker bodo vse datoteke v tem imeniku vedno pripadale skupini smb, bomo tako nastavili SGID. Vsak bo imel možnost brati in pisati v ta imenik, zato bodo dovoljenja nastavljena tako: <p> <tscreen><verb> # chown smbuser:smb /home/public # chmod 2777 /home/public </verb></tscreen> <p> Vsaka datoteka, ki je narejena v imeniku <tt>/home/public</tt>, pripada skupini smb, ne glede na to, kdo jo naredi. <sect1>Imenik <file>data</file> <p> Moj data imenik je v <file>/home/samba/data</file>. Ta imenik bo dostopen samo določenim ljudem, tistim, ki pripadajo skupini smb. To naredimo takole: <p> <tscreen><verb> # mkdir /home/samba # chown smbuser:smb /home/samba # chmod 2770 /home/samba # mkdir /home/samba/data # chown smbuser:smb /home/samba/data # chmod 2770 /home/samba/data </verb></tscreen> <p> Tudi na te imenike sem nastavil SGID tako, da vse, kar se naredi v teh Imenikih, pripada skupini smb. <p> Ker hočem tudi jaz imeti dostop do teh imenikov, se dodam v skupino smb. To lahko naredim z ukazom Linixconf ali pa ročno spremenim datoteko <file>/etc/group</file>. <sect1>Pregled datoteke <file>hosts</file> <p> Imeli naj bi datoteko <file>/etc/hosts</file>, ki mapira imena gostiteljev (host names) v naslove IP. Moja je videti takole: <p> <tscreen><verb> # /etc/hosts 127.0.0.1 localhost localhost.localdomain 192.168.0.1 homer 192.168.0.2 bart 192.168.0.3 lisa </verb></tscreen> <sect1>Ustvarjanje datoteke lmhosts <p> Datoteka lmhosts mapira imena gostiteljev (host names) ali naslove IP LanManagerju imena računalnikov. Normalno bi verjetno radi imeli enaka imena za LanManager in imena gostiteljev: <tscreen><verb> # /etc/lmhosts localhost homer bart bart lisa lisa </verb></tscreen> <p> Malo smešno je videti, ampak tisto na levi je ime gostitelja, tisto na desni pa ime LanManagerja. <sect>Uporaba SWAT <p> Za uporabo SWAT moramo preveriti datoteke <file>/etc/services</file> in <file>/etc/inetd.conf</file>. Po izvirnih nastavitvah SWAT deluje na vratih 901. To sicer lahko spremenimo, vendar pustimo zaenkrat tako. <p> Poglejmo datoteko <file>/etc/services</file>, ali je v njej naslednja vrstica: <p> <tscreen><verb> swat 901/tcp #Add swat service used via inetd </verb></tscreen> Če je, dobro. Če je ni, jo dodajte na konec datoteke. <p> Potem preverimo datoteko /etc/inetd.conf, ali je v njej vrstica: <tscreen><verb> swat stream tcp nowait.400 root /usr/sbin/swat swat </verb></tscreen> <sect1>Varovanje SWAT <p> Če vas varovanje SWAT ne zanima, lahko preskočite to poglavje. Sam se počutim veliko bolje, če mi "TCP wrappers" ščitijo SWAT. Spremenim prejšnjo vrstico takole: <p> <tscreen><verb> swat stream tcp nowait.400 root /usr/sbin/tcpd /usr/sbin/swat </verb></tscreen> <p> Če ne veste, kaj so "TCP wrappers", si preberite strani man: <tscreen><verb> # man hosts.allow </verb></tscreen> <p> Vaš <file>/etc/hosts.deny</file> naj ima vrstico, ki pravi <tt>ALL:ALL</tt>. Dodajmo še to v vašo datoteko <file>/etc/hosts.allow</file>: <p> <tscreen><verb> # swat: 127.0.0.1 192.168.0. </verb></tscreen> <p> To dovoljuje Homerju, Lisi in Bartu dostop do SWAT. <sect1>Poganjanje SWAT <p> Najprej še enkrat zaženimo datoteko inetd: <tscreen><verb> # killall -HUP inetd </verb></tscreen> <p> Zdaj pojdite s svojim najljubšim internetnim brskalnikom na naslov: <tt>http://192.168.0.1:901</tt>. Če je vse v redu, bi morali vnesti uporabniško ime in geslo. Za uporabniško ime vnesite root, za geslo pa svoje root geslo. <sect1>Nastavitev Sambe <p> SWAT zdaj deluje. Preskusite vse gumbe in se spoznajte s njim. SWAT ustvari <file>/etc/smb.conf</file> za vas. Zdaj bomo malo pogoljufali. Namesto da bi šli skupaj čez vse vrstice datoteke <file>/etc/smb.conf</file>, vam bom napisal svojo (imeni računalnika in delovne skupine sta spremenjeni, da zaščitim svojo sistemsko identifikacijo). <p> Oglejte si to in preprosto prekopirajte v svojo datoteko <file>/etc/smb.conf</file>. Ne pozabite je prirediti svojemu sistemu: <p> <tscreen><verb> # Samba config file created usin SWAT # from bart (192.168.0.2) # Date: 1999/02/02 18:27:26 #Global parametes workgroup = SIMPSONS server string = Samba SMB Server interfaces = 192.168.0.1/24 127.0.0.1/24 bind interfaces only = Yes security = SHARE log file = /var/log/samba/log. %m max log size = 50 read bmpx = No time server = Yes socket options = TCP_NODELAY os level = 65 preferred master = Yes dns proxy = No wins support = Yes guest account = smbuser hide dot files = No [public] comment = Public path = /home/public read only = No create mask = 0664 directory mask = 0775 guest ok = Yes [data] comment = Data path = /home/samba/data read only = No create mask = 0660 directory mask = 0770 guest ok = Yes </verb></tscreen> <sect>Zagon Sambe <p> Sambo lahko zaženete na dva načina: uporabite SWAT ali z ukazom v konzoli. Če bi radi uporabili SWAT, pojdite na stran STATUS in kliknite start SMBD in NMBD. Če je bila Samba že zagnana, pritisnite stop in še enkrat start, da boste videli nastavitveno datoteko. <p> Za zagon Sambe z ukazom v konzoli: <tscreen><verb> # /etc/rc.d/init.d/smb stop # /etc/rc.d/init.d/smb start </verb></tscreen> <p> Če niste opazili nobenih napak, potem vse deluje. No, pa jo preskusimo. <sect1>Preskušanje Sambe <p> Poglejmo, kaj sploh deluje: <tscreen><verb> # smbclient -L localhost </verb></tscreen> <p> Morda vpraša za geslo. Če vpraša, pritisnite Enter, in videti bi morali nekaj podobnega: <tscreen><verb> Domain=[SIMPSONS] OS=[Unix] Server=[Samba 2.0.3] Sharename Type Comment --------- ---- ------- public Disk Public data Disk Data IPC$ IPC IPC Service (Samba SMB Server) Server Comment ----- ------- HOMER Samba SMB server Workgroup Master --------- ------ SIMPSONS HOMER </verb></tscreen> <p> Vse v redu? Super! Zdaj nam preostaneta le še stroja z Windows. <sect>Nastavitev sistema Windows <p> Ker strežnik Samba deluje v Homerju, je zdaj čas, da se posvetimo tudi Bartu in Lisi. Ta del je veliko lažji. Najprej se prepričajmo, ali so omrežne komponente pravilno nameščene in v <em>Nastavitve/Nadzorna plošča/Sistem/Upravitelj naprav</em> ni nobenih konfliktov. <p> Pazite, da so v <em>Omrežnih nastavitvah/zavihek Osebna izkaznica</em> navedena pravilna imena računalnika in delovne skupine. Za naš zgled: Bart naj bi imel ime računalnika Bart in delovno skupino Simpsons. Enako velja za Liso. <p> Nadziranje dostopa naj bo na ravni skupne rabe. Pri lastnostih pa odkljukajmo Wins server za Homerja. <p> Da bi spremembe začele veljati, je treba znova zagnati računalnik. Ko se naloži Windows, bi morali v <em>Omrežni soseščini</em> videti tudi Samba Server. <p> V naslednjem poglavju si bomo ogledali, kako zaščititi Sambo pred zunanjimi napadi. <sect>Varovanje Sambe <p> Vsakič, ko dodaste servis, je vaš stroj bolj izpostavljen vlomilcem. Tu bomo obravnavali zaščito strežnika Samba. <sect1>S Sambo <p> V nastavitveni datoteki Sambe <file>/etc/smb.conf</file> lahko povemo, katerim vratom naj prisluškuje: <p> <tscreen><verb> interfaces = 192.168.0.1/24 127.0.0.1/24 bind interfaces only = Yes </verb></tscreen> <p> Tu seveda navedite svoje naslove IP. Ker sem nezaupljiv, bom dodal še eno plast varovanja, filtriranje vrat. <sect1>Filtriranje vrat <p> SMB uporablja vrata 137-139. Da bi bil varen, blokiram TCP in UDP vrata 137-139. Če uporabljate različico 2.0 kernela, boste verjetno uporabljali program <tt>ipfwadm</tt>. Z jedrom 2.1 in 2.2 uporabljajte <tt>ipchains</tt>. <sect2>Uporaba ipfwadm <p> Dodajte naslednje vrstice v datoteko /etc/rc.local: <tscreen><verb> ipfwadm -I -P tcp -a deny -S any/0 137:139 -W eth0 ipfwadm -I -P udp -a deny -S any/0 137:139 -W eth0 ipfwadm -O -P tcp -a deny -S any/0 137:139 -W eth0 ipfwadm -O -P udp -a deny -S any/0 137:139 -W eth0 </verb></tscreen> <sect2>Uporaba ipchains <p> Dodajte naslednje vrstice v datoteko <file>/etc/rc.local</file>: <tscreen><verb> ipchains -A input -p tcp -j DENY --destination port 137:139 -i eth0 ipchains -A input -p ucp -j DENY --destination port 137:139 -i eth0 ipchains -A output -p tcp -j DENY --destination port 137:139 -i eth0 ipchains -A output -p ucp -j DENY --destination port 137:139 -i eth0 </verb></tscreen> <sect>Konec <p> S tem končujem mini postopni vodič po namestitvi strežnika Samba. Ta dokument nikakor ni nadomestek za izvirno dokumentacijo! Če potrebujete več informacij, pojdite na naslov <url url="http://www.samba.org/"> in preberite njihovo dokumentacijo. <p> Upam, da se vam bo zdel ta dokument uporaben. </article>