Copy Link
Add to Bookmark
Report

1x08 Samba Lin & Win dance

eZine's profile picture
Published in 
phearless
 · 14 Jan 2024

                                 
...................
...::: phearless zine #1 :::...

......................>---[ Samba: Lin & Win dance ]---<......................

..........................>---[ by EArthquake ]---<...........................
ugsearthquake[at]gmail[dot]com

Ovaj tekst sam zamislio na foru pitanja i odgovori na pitanja. Nadam se da
ce da odgovara. Za demonstraciju koristicu dva racunara pod imenima gondolin,
koji ce imati ulogu linux servera, i comp1,koji ce imati ulogu klijenta.
Oba ce biti u earth.ea domenu. Imace adrese 10.0.0.1 za server i 10.0.0.2
za klijent.

---< 1. Sta je uopste Samba?

Da bi omogucili Windows masini da vidi Linux masinu putem npr. Network
Neighbourhood-a ili Windows Explorer-a mora da postoji server koji ce
omoguciti integraciju Linux sistema u Windows okruzenje i zavarati isti
da je rec o istom operativnom sistemu. Upravo to Samba i radi.

---< 2. Zasto je to tako?

Jednostavno Windows koristi drugaciji nacin komuniciranja izmedju
umrezenih racunara od drugih operativnih sistema. Windows za komunikaciju
koristi SMB (Server Message Block) protokol.


---< 3. Sta mi treba?

Pa naravno Samba.Ja u ovom slucaju koristim paket koji se dobija uz
Slackware 10.0, a to je samba-3.0.4. Za sve one koji instaliraju sambu iz
source-a postupak je sledeci:
1.ekstraktovanje arhive sa source-om
2.pokretanje ./configure skripte iz dir-a u kome je ekstraktovan source
3.pokretanje komande 'make' (bez navodnika) za kompajliranje source-a
4.pokretanje komande 'make install' (bez navodnika) sa root
privilegijama.
5.To bi trebalo da je to osim ako niste dobili neku gresku pri
primenjivanju rethodnih postupaka. U tom slucaju bacite se na
otklanjanje gresaka (./configure skripta bi trebalo da ispise
u cemu su greske, verovatno nedostatak nekih datoteka).

Kada se kompajlira samba, ona se smesta u /usr/local/samba folder (da,
da, Windows cini svoje). Salu na stanu, ali dok god se ovade instalira,
ona nije dostupna Linuxu. Lek za to je ili da se rucno iskopiraju fajlovi
u odgovarajuce foldere (npr. iz /usr/local/samba/bin u /bin itd.), ili da
se preko ./configure komande naznaci gde da se instalira
(npr. ./configure --bindir=/bin itd.).

---< 4. Dobro, instlirao sam Sambu, sta dalje ?

Sledi naravno konfiguracija. Glavni fajl celog Samba sistema je
konfiguracioni fajl smb.conf. On ima veoma prostu sintaksu. Naime na levoj
strani se nalazi parametar a na desnoj (iza znaka = odvojeno space-om)
vrednost npr. os level = 60
U samom smb.conf fajlu postoji vise delova od kojih je jedan glavni i
to [global] deo.On se odnosi na sve ostao. Ostali delovi smb.conf fajla su
zasebni npr. [homes] deo u kom se nalaze definicije za taj share. Dakle
ostale sekcije predstavljaju definicije za share-ove. Dakle smb.conf fajl
moze da sadrzi npr. earthquake share koji bi bio definisan na sledeci nacin :

[earthquake]
comment = EArthquake`s Share
path = /home/earthquake/shared/
writable = no

Moze sadrzati i jos niz definicija koje dalje odredjuju pojedini
share. Komplikovaniji deo konfiguracije jeste konfigurisanje samog
[global] dela da odgovara vasim potrebama. Ukratko cu opisati vaznije
parametre smb.conf fajla:


Base options:

dos charset - Oznacava kojim charsetom samba treba da komunicira sa
DOS klijentima (Moja preporuka CP850 ali koji god da stavite Samba ce
se vratiti na ASCII ako nije dostupan)

unix charset - Oznacava koji charset koristi samba server
(Moja preporuka UTF-8(default)

display charset - Oznacava koji charset samba koristi za ispisivanje poruka
(Moja preporuka ASCII)

workgroup - Oznacava workgroup vaseg racunara koji ce se javljati kada
klijent izvrsi upit za to. (Ja sam uvek koristio vrednost workgroup)

netbios name - Oznacava NetBIOS ime po kom se naziva samba on takodje
treba da bude isti kao i ime tog kompjutera u domenu (dakle ako vam je
ime u domenu server onda i netbios name server)

netbios aliases - Omogucava da se server pojavljuje sa vise imena
(Ja licno nisam nasao neku primenu ovoga)


server string - Komentar servera koji se pojavljuje uz ime racunara pri
logovanju na isti (Npr. EArthquake`s Samba Server )

bind interfaces only - Ako je vrednost yes na nmbd utice tako sto on
proverava odakle stizu paketi i propusta ih ili odbija u skladu s parametrom
interfaces, a na smbd da se vezuje na one zahteve koji odgovaraju na parametar
interfaces(Ako zelite da izbegnete probleme stavite vrednost no ovde)



Security options:


security - Odredjuje nivo obezbedjenja.Moguci parametri su share user
server (Preporucujem user jer ce zadovoljiti sve potrebe korisnika)

auth methods - Oznacava metode kojima Samba identifikuje korisnika koji
pokusava da se uloguje. To radi redom po parametrima. Npr. ako je podeseno
'guest sam winbind' prvo ce pokusati da se identifikuje kao guset a
zatim kao sam i konacno winbind.U praksi ce samo jedna metoda biti
uspesna u identifikaciji. (Defauld podesavanja ce biti dovoljna u vecini
slucajeva,znaci 'guest sam winbind' )

encrypt passwords - Samo ime kaze. Kontrola enkripcije sifara.
NT platforme zahtevaju enkriptovane sifre.

passdb backend - Oznacava gde i kako Samba zapisuje sifre. Najcesce opcije
su smbpasswd, tdbsam i ldapsam. Sve koriste razlicite nacine ali ce obicnom
korisniku biti dovoljan samo smbpasswd.

allow trusted domains - Oznacava da li samba moze svoe resurse da deli van
svog domena.

hosts equiv - Odredjuje fajl u kom se nalaze adrese racunara i
korisnika kojima samba nece traziti sifru pri login-u.

min passwd length - Minimalna duzina sifre.

null passwords - Omogucava ili sprecava koriscenje praznih (null) sifara.

password server - Omogucava proveru sifara na udaljenom serveru.

smb passwd file - Odredjuje putanju do fajla u kom se nalaze sifre.

private dir - Putanja private direktorijuma.

root directory - Putanja do root direktorijuma. Postavite vrednost
razlicitu od / da bi zabranili pristup visim direktorijumima.

unix password sync - Sinhronizacija samba sifara sa UNIX siframa.

restrict anonymous - Dozvola ili zabrana anonymous konekcija.
Ima tri vrednosti (0,1,2). Vrednost 2 zabranjuje bilo kakve anonymous
konekcije sa serverom, a vrednost 1 je beskorisna. Vrednost 0 omogucava
anonymous konekcije definisane u Windows registru.

guest account - Oznacava ime guest naloga koji ima dozvole za one delove
koji imaju parametar guest ok

invalid users - Oznacava korisnike kojima je zabranjen pristup.

valid users - Oznacava korisnike koji mogu da se uloguju.Ako je parametar
prazan onda svi korisnici mogu da se uloguju.

admin users - Oznacava korisnike koji imaju root prava.

read list - Lista korisnika koji imaju samo dozvolu citanja.

write list - Lista korisnika koji imaju potpune dozvole za pisanje iako je
read only parametar podesen.

printer admin - Lista korisnika koji mogu da rade bilo sta sa stampacem.

hosts allow - Lista adresa racunara kojima je dozvoljen pristup.
Dakle samo ce racunari u ovoj listi moci da pristupaju resursima.
Ako je lista prazna sve adrese imaju pristup.

hosts deny - Lista adresa racunara koji nemaju dozvolu za pristup.

preload modules - U slucaju da koristite dodatne module
(za MySQL bazu sa siframa npr.) bilo bi pametno da ih ovde navedete
radi brzeg rada servera.



Logging Options:



log file - Fajl u kome se loguju podaci Samba servera.

max log size - Maksimalna velicina loga.


Protocol Options:

smb ports - Portovi koje otvara Samba server.(Nepotrebno menjati)

name resolve order - Oznacava po kom pricipu i kojim redosledom Samba
treba da pretvara imena racunara u IP adrese.



Tuning Options:



socket options - Oznacava socket opcije koje server koristi u komunikaciji
sa kijentom. (Moja preporuka su opcije SO_KEEPALIVE,IPTOS_LOWDELAY i TCP_NODELAY)

max smbd processes - Oznacava koliko konekcija u jednom trenutku server moze
da ostvari. Potrebano za ogranicavanje broja konekcija ako server ne moze
da obezbei dovoljno resursa za procesiranje zahteva klijenata.

paranoid server security - Neke NT platforme dozvojavaju lose sifre za korisnike.
Ako je opcija ukljucena Samba ce samo logovati ovakve pokusaje.
(Preporucujem koriscenje ove opcije)

hostname lookups - Oznacava da li ce server koristiti same adrese racunara
ili ce koristiti po imenima(zauzima vise resursa). Korisno ako se koristi
opcija hosts deny i hosts allow.



Printing Options:



load printers - Oznacava da li ce se uopste stampac(i) koristiti pri
prijavljivanju korisnika.

printcap name - Oznacava koji interfejs ce server koristiti za stampanje.

cups options - Dodatne opcije ako koristite cups interfejs.

print command - Komanda (UNIX komanda) koja ce se koristiti za stampanje.



Filename Handling:



case sensitive - Oznacava da li server treba da obraca paznju na velika i
mala slova. Jedna od razlika izmedju Windows-a i UNIX-a je to sto prvi nije
osetljiv na mala i velika slova a drugi jeste.

preserve case - Da li da server prikazuje slova u menima fajlova onakvima
kakva jesu ili da ih menja.

hide dot files - Da li da server skriva fajlovae koji pocinju sa taskom
(skriveni fajlovi u UNIX-u)

hide unreadable - Skrivanje fajlova koji ne mogu da se citaju.

hide unwritable - Skrivanje fajlova po kojima ne moze da se pise.

veto files - Fajlovi koji se ne vide niti ima je moguce pristupiti.
Fajlovi u listi su odvojeni '/' znakom , takodje je dozvoljeno koriscenje
i wilcardova (* npr.) za dodatno definisanje veceg broja fajlova. Ne sme biti
upotrebljen znak za putanju do fajla u UNIX sistemima kao ni DOS oznake staza
vec samo definisanje fajlova(npr /*poverljivo*/*.pov*/ ce staviti sve fajlove
koji imaju rec poverljivo i/ili ekstenziju .pov na veto files listu)

delete veto files - Opcija koja odredjuje da li ce se ,u slucaju da Samba
pokusa da obrise direktorijum koji sadrzi veto fajlove i direktorijume,
uspeti u tome ili ne. no je parametar koji bi uglavnom bio potreban.

hide files - Oznacava koji fajlovi imaju DOS atribut hidden(njima se idalje
moze pristupati). Sintaksa za oznacavanje je ista kao i za veto fajlove.



Domain settings:



machine password timeout - Oznacava vreme posle kojeg Samba obnavlja
sectret.db bazu u kojoj se nalaze sifre ako se koristi tdbsam nacin.
Parametar oznacava vreme u sekundama.(Default vrednost je nedelju dana)



Logon options:



add user script - Skripta koju server koristi pri dodavanju korisnika.
(Npr /usr/sbin/useradd %u )

delete user script - Skripta koju server koristi pri uklanjanju korisnika.
(Npr. /usr/sbin/userdel %u )

add group script - Skripta koju server koristi za dodavanje grupa.
(Npr. /usr/sbin/groupadd %g )

delete group script - Skripta koju server koristi pri uklanjanju grupe.
(Npr. /usr/sbin/groupdel %g )

logon path - Odredjuje stazu u kojoj se cuvaju korisnicki dokumenti korisnika.
(Npr. \\%L\Profiles\%U )

domain logons - Ako je postavljen omogucava prijavljivanje sa iste workgrupe
ostalih masina. Za domenske mreze koristiti yes parametar.



Browse Options:



os level - Oznacava nivo operativnog sistema servera. On uvek treba da bude
veci od nivoa klijenta.

preferred master - Preporuka je da se koristi ova opcija ako se koristi
opcija domain master kako bi se osigurala ista.

domain master - Oznacava da li je sam server ustvari domen master.

local master - Omogucava da nmbd bude local master browser za lokalni subnet
(Moja preporuka je koristiti ovu opciju).



WINS Options:



wins server - Oznacava IP adresu ili ime racunara na kome se nalazi
WINS server koji bi nmbd trebalo da koristi.

wins support - Oznacava da li nmbd server terba da bude WINS server.
Nijedna druga masina u mrezi nebi trebalo da ima podrsku za WINS osim te.



Iz licnog iskustva savetujem koriscenje SWAT-a za konfigurisanje
smb.conf fajla.




---< 5. Kako se koristi SWAT?

Prvo proverite da li je pokrenut.Skenirajte otvorene portove na svom
racunaru komandom 'nmap localhost'.SWAT je na portu 901 i ako je on otvoren
onda je i SWAT pokrenut.Ako ne onda kao root skinite koment (#) ispred
linije u koja pocinje sa swat u /etc/inetd.conf fajlu i promenite mod
/rc.d/rc.inetd fajla u izvrsni kako bi se pokretao pi startovanju racunara.
To mozete uraditi na sledeci nacin:
kao root izvrsiti komandu 'chmod 777 /rc.d/rc.inetd'

Ako kojim slucajem u /etc/inetd.conf fajlu uopste nema linije za pokretanje
SWAT-a onda dodajte sledece u /etc/inetd.conf:

swat stream tcp nowait.400 root /usr/sbin/swat swat

Ovo govori da inetd (inace BSD super internet daemon) pokrece swat pri
startovanju. Ne zaboravite da promenite premisije /rc.d/rc.inetd fajla!
Sad kad ste sve ovo zavrsili restartujte racunar i ponovo skenirajte
portove. Ako i dalje nema 901 porta na listi nesto ste pogresili.

---< Napokon SWAT je pokrenut,kako da ga koristim?

SWAT se koristi preko bilo kog web browsera (Konqueror,Opera,Mozzila...)
kucajuci u adresse bar vasu IP adresu zatim : i port 901.Bice da konfigurisete
Sambu na svom racunaru tako da za IP adresu koristite 127.0.0.1 ili localohst.
Dakle u adress bar ukucate 'localhost:901' (bez navodnika naravno). Ako je sve
u redu tebalo bi da dobijete prozor koji zahteva username i password.
Tu koristite username i password vaseg root naloga. Voilla evo nas u SWAT-u.

SWAT ima nekoliko odeljaka i to: Home, Globals, Shares, Printers, Wizards,
Status, View i Passwords.
U delu Globals se postavljaju podesavanja smaog smb.conf fajla.
Postoje dve vrste pogleda. Basic i Advanced.Iako Advanced pocetniku moze
da izgleda zastrasujuce usustini je bolje koristiti ga za konfigurisanje
jer ima dosta korisnih opcija mada i onih koji bas nisu mnogo vazni.
Vazniji parametri su vec objasnjeni. U Shares delu se podesavaju postojeci
share-ovi i dodaju novi. U Printers dodatna podesavanja za stampace i
opcija za dodavanje novih.U Wizard delu postoje podesavanja za sam server.
Tu se bira ti servera i uloga WINS servera.Status i view deo mislim da
nije potrebno objasnjavati. Password deo sluzi za dodavanje i menjanje
korisnika i sifara korisnika koje server koristi.


Kada ste podesili smb.conf fajl tako da odgovara vasim potrebama nije
lose proveriti parametre komandom 'testparm'.


root@gondolin:/home/earthquake# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Loaded services file OK.
Server role: ROLE_DOProcessing section "[homes]"
Processing section "[printers]"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC
Press enter to see a dump of your service definitions

Ako testparm nije prijavio nijednu gresku znaci da je sa smb.onf fajlom
sve u redu.mozete komandom 'smbd restart' da restartujete samba server.
Naravno to nije sve.

---< Sta oznacavaju znaci tipa %U ili %i ?

Samba podrzava upotrebu varijabli u smb.conf fajlu koje se oznacavaju
upravo tako. Oznake za varijable su sledece:

%U - ime korisnika koji pristupa serveru
%D - ime domena koji trenutni korisnika koristi
%T - trenutno vreme
%I - IP adresa
%m - netbios ime masine
%h - ime masine na kojoj se nalazi server
%G - grupa u kojoj se nalazi korisnik %U
%H - home direktorijum korisnika %U

To bi bile vaznije varijable koje mogu da se koriste u smb.conf fajlu.


---< Postoji li jos neki fajl koji je potrebno konfigurisati?

Tu su jos dva fajla koja su potrebna i ona su veoma prosta. Oba se
nalaze u /etc/samba/. Prvi je lmhosts koji sluzi kao baza za NetBIOS
imena na mrezi. On treba da sadrzi sledece:

gondolin
comp1
Drugi je smbusers. On sadrzi UNIX imena korisnika koji su pandan Windows
imenima. Sluzi uglavnom kako bi se Administrator sa Windows-a ponasao
kao root sa UNIX-a i stoga sadrzi :

root = Administrator



---< 6. Samba radi , sta mi jos treba ?

Za postavljanje domenske mreze sa linux domen kontrolerom potreban je i
neki DNS i DHCP server. Ja koristim BIND kao DNS server.
Za rad DHCP servera potrebno je podesiti /etc/dhcpd.conf
fajl da odgovara vasim potrebama.
Najosnovinja podesavanja izgledaju otprilike ovako :

ddns-update-style ad-hoc ;
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.1;
option routers 10.0.0.1;
option domain-name-servers 10.0.0.1;
option domain-name "earth.ea";
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.1 10.0.0.20 ;
}

Mislim da nije potrebno objasnjavati detaljno sta je sta jer je to
jasno iz samih imena opcija. Takodje je potrebno napraviti i leases fajl
u /var/state/dhcp/
spod imenom dhcpd.leases (komanda " touch /var/state/dhcp/dhcpd.leases ").

---< Kako osigurati da se DHCP daemon pokrece svaki put?

Da bi se DHCP daemon pokretao pri startovanju sistema mora se dodati
/etc/rc.d/rc.local linija koja ce ga pokretati a to je "/usr/sbin/dhcpd eth0"
(bez navodnika naravno). eth0 ako je to mrezna karta na kojoj bi trebao da radi.



---< 7. A kako se konfigurise BIND ?

Kod razresavanja imena masina preko adresa i obratno ima nekoliko
kljucnih fajlova.Jedan od njih je /etc/host.conf koji oznacava kojom metodom
ce se razresavanje vrsiti. Sto se njega tice ima nekoliko opcija:

order - oznacava koje ce servise da koristi server pri razresavanju imena.
Opcije mogu biti bind (gde razresavanje ide preko bind servera) hosts
(gde razresavanje ide preko /etc/hosts fajla ) i nis (gde razresavanje ide
preko nis servera).Ovaj parametar moze da sadrzi jednu ili sve opcije i
izvrasava ih redom. Dakle ako se nalazi order bind, hosts, nis onda ce
se ici prvo preko bind-a pa zatim redom...

multi - moze biti on ili off i oznacava da li moze postojati vise
adresa u /etc/hosts fajlu




Drugi bitan fajl je /etc/resolve.conf. On je veoma prost fajl i trebalo bi
da sadrzi samo sledece :

search earth.ea
nameserver 127.0.0.1

Search parametar oznacava ime domena koji se pretrazuje, a nameserver
oznacava na kojoj se masini nalazi DNS server. Sadrzina ovog fajla nije
mnogo velika ali je veoma vazna i obezbedjuje prisutnost na mrezi.

Sledeci bitan fajl(jedan od najbitnijih) je naravno /etc/named.conf u kome
podesavamo parametre samog programa. Veoma je bitno pravilno namestanje
ovog fajla.On sadrzi dva dela. Prvi u kom su opcije i drugi u kom su
naznacene baze zona:

options {
directory "/var/named";
zone "earth.ea" {
type master;
file "earth.ea.hosts";
};
zone "0.0.10.in-addr.arpa" {
type master;
file "earth.ea.reverse";
};

Opcija directory oznacava u kom se direktorijumu nalaze zone. Opcija zone
oznacava ime domena i dalje opcije za njega. Ovde je tip master jer je to
glavni server. Dalje podesavanja za zone se sastoje iz imena baza sa zonama
koje se u ovom slucaju nalaze u /var/named. Zone mogu imati bilo koje ime.


Sledeci fajl je /etc/hosts koji sluzi kao podrska ako DNS ne radi.
On treba da sadrzi imena racunara u mrezi i njihove adrese.

Dakle vrlo prosto:
127.0.0.1 localhost
10.0.0.1 gondolin.earth.ea
10.0.0.2 comp1.earth.ea


Prelazimo na fajlove u /var/named. Prvo je potreban fajl za forward lookup
bazu za nasu zonu. Dakle /var/named/earth.ea.hosts treba da sadrzi sledece:

earth.ea IN SOA gondolin.earth.ea root@gondolin.earth.ea (
42
3H
15M
1M
1D )
IN NS gondolin.earth.ea
gondolin.earth.ea IN A 10.0.0.1
comp1.earth.ea IN A 10.0.0.2


Dalje je potreban reverse lookup fajl koji je reverse lookup baza za nasu
zonu. Recimo da je to /var/named/earth.ea.reverse koji treba da sadrzi:

earth.ea IN SOA gondolin.earth.ea root@gondolin.earth.ea(
42
3H
15M
1M
1D )
IN NS gondolin.earth.ea
1 IN PTR gondolin.earth.ea
2 IN PTR comp1.earth.ea

Sto se tice BIND-a to je to. Ostaje samo da se pokrene. Za startovanje BIND
Daemona pri podizanju sistema koristi se skripta rc.bind koja se nalazi u
/etc/rc.d/ direktorijumu.


---< 8. Nadam se da je to sve. A sta je sa korisnicima, kako dodajem korisnike?

Da bi se dodali korisnici u Samba server oni moraju da postoje i na
lokalnoj masini. Dakle da bi imali korisnika servera npr. earthquake prvo bi
morali da ga dodamo na lokalnu masinu komandom "adduser earthquake". Prativsi
uputstva dodali smo korisnika na masinu. Sada je potrebno dodati ga i na samba
server. Za dodavanje korisnika koristi se komanda smbpasswd.

---< 9. A podesavanje klijenta?

Sto se tice podesavanja klijenta tu nema mnogo price. Sve se svodi na
dodavanje Windows klijenta u domen. Sto se tice Windows-a moguznost rada u
domenskoj mrezi nemaju Win95 Win98 i WinXP Home Edition. Windows XP Profesional
pristupa domenu na sledeci nacin. Otvori se sistem menadzer (precica je
win-taster + pause ) i na kartici Computer name na dugle Change. U novootvorenom
prozoru Computer name changes kliknuti na radio dugme Member Of Domain i
upisati ime domena (u nasem slucaju earth.ea). Zatim dugme ok. Ako mreza
radi trebalo bi da se pojavi prozor za identifikaciju u koji se upisuju ime
korisnika i sifra (za ime korisnika pri ovome koristiti Administrator). Ako
je sve lepo podeseno (a sledeci uputstva tesko da nesto moze da podje naopako)
sada bi trebalo da imamo comp1 u domenu earth.ea. Naravno ranije bi morali
da namestimo ime windows racunara da bude comp1.

Time smo zavrsili podesavanje i pustanje u rad nase male domenske mreze.



---< 10. Rupe i zastita

Postoji jedna krajnje , po meni , glupa rupa u KDE Konqueror-u i
sambi. Naime ako bi korisinik pokusao da napravi simbolicki link ka nekom od
share-ova na samba serveru dobio bi fajl koji bi pored imena share-a imao i
ime korisnika i njegovu sifru. Znaci ime precice ka share-u bi bilo sledece :
smb://korisnik:sifra@server/staza/share
Sifra bi "naravno" bila u cistom tekstu citljiva za svakoga. Ova ranjivost
nije od strane sambe vec od strane KDE-a. Ranjive verzije su sve starije od
3.2.1. Iako na 3.3.0 verziji nije bilo uspesno eksploitanje ove rupe razvojni
tim kaze kako i u tom izdanju postoji ista greska kao i da je moguce da postoji
i u 3.4. U verziji Sambe koju ja koristim ima integer overflow greska u kodu koja
omogucava izvrsavanje komandi sa distance. Kako je uglavnom korisnik koji pokrece
sambu root korisnik (ili uglavnom ima visoka prava) ovo moze biti opasno.
Naime korisnik samba servera koji ima pristup bar jednom share-u moze poslati
niz specijalnih zahteva serveru. Kada se salje poruka serveru ona pored
zahteva za otvaranje nekog dokumenta sadrzi i sigurnosne deskriptore koji
sadrze podatke o kontroli pristupa koje treba server da prosledi fajlu.
Ranjivost se javlja u delu koda koji cuva opise za deskriptor.server.home.net
 /*
   * Even if the num_aces is zero, allocate memory as there's a difference
   * between a non-present DACL (allow all access) and a DACL with no ACE's
   * (allow no access).
   */

   if((psa->ace = (SEC_ACE *)prs_alloc_mem(ps,sizeof(psa->ace[0]) *
(psa->num_aces+1))) == NULL)
          return False;

Kada se posalje zahtev sa vise od 38347922 deskriptora dolazi do integer
overflow-a koji dovodi do alociranja manje memorije nego sto je zahtevano.
Descriptor ima velicinu od 112 ( sizeof(psa->ace[0]) ), ili 0x70 u hex.
Pa kada se to pomnozi sa vise od 38347922 dobija se npr.
0x70x(38347922+1)=4294967376, ili 0x100000050 u hex. Posto je za memoriju
odredjen 32-bitni integer ,a 0x100000050 definitivno ne moze da stane svi
brojevi koji ne mogu da stanu se izuzimaju. To bi bilo 0x50 jer 0x1000000
moze da se smesti.0x50 je 80 u decimalnom zapisu. Doci ce dakle do overflow-a
od najmanje 32 bajta, znajuci da je velicina deskriptora 112 bajta.

Uspesno izveden ovakav napad bi doveo do izvrsavanja zeljenog koda i do
dobijanja povlastica na serveru. Ipak neuspeli napad ce dovesti do rusenja
zahteva i do belezenja pokusaja napada.



Druga ranjivost postoji TRANSACT2_QFILEPATHINFO zahtevu koji izdaje
korisnik servera. Tacnije korinik moze da oznaci kolika ce biti velicina
rezultata zahteva sto omogucuje da korisnik oznaci da velicina bude 0
sto dovodi do unicode overflow-a. Moze se doci do potpune kontrole
malloc()/free() strukture i time do mogucnosti izvrsavanja koda
(na daljinu) ako se u imenima datoteka koriste unicode karakteri.


Takodje postoji DoS (Denial Of Service) radnjivost pri koriscenju
wildcard-ova u komandama.DoS se satoji iz toga da akos e smbd-u prosledi
komanda sa wildcard-om (* na primer) sam smbd koristi sve vise i vise
procesorske snage za svoj rad da bi resio problem.Jednostavno
iskoriscavanje od strane napadaca moze se sastojati samo u nekoliko
puta ponovljenom zahtevu dir******************z
moze dovesti do zagusenja serera i uposlenja procesora do 100 procenata.
Sama ranjivost se nalazi u ms_fnmatch() direktivi koja dovodi do sve veceg
i veceg ponavljanja pri izdavanju zahteva sa wildcard-om :

case '*':
    for (; *n; n++) {
        if (ms_fnmatch(p, n) == 0) return 0;
        }
        break;


Resenje za sve ove ranjivosti je prelazak na najnoviju verziju sambe koja
je u vreme kada ja ovo pisem cini mi se 3.0.9 .




Dodatak:



Neke manje skripte:

{C U T H E R E}

#! /bin/sh
#
# Kill and restart Samba
#
echo -n "Shutting down Samba: "
killproc -TERM /usr/sbin/nmbd
killproc -TERM /usr/sbin/smbd
echo
echo -n "Hit XMIT to delete logs and restart"
read
rm /var/log/samba/log.*
echo -n "Restarting Samba "
/usr/sbin/nmbd -D
/usr/sbin/smbd -D
echo " done"

{C U T H E R E}

Druga skripta koja geberise windows bat fajlove :

Napomena:Ova skripta je ripovana.
[Autor skripte: Francois-Xavier Le Bail. mailto:fx.LeBail@free.fr]

1) "/usr/local/samba/lib/netlogon/scripts" direktorijum mora da postoji
2) U smb.conf fajlu mora biti :

# Global parameters
[global]

logon script = scripts\%m.bat
time server = yes

[netlogon]
comment = netlogon share
path = /usr/local/samba/lib/netlogon
guest ok = no
writable = no
write list = admin
locking = no
root preexec = /usr/local/samba/bin/make_logon_script '%m' '%U' '%a' '%g' '%L'


3) Skripta koja se nalazi u /usr/local/samba/bin/make_logon_script :

{C U T H E R E}

#!/bin/sh
#
# parameters :
# %m (machine netbios name) %U (user) %a (architecture) %g (group) %L (server)
# $1 $2 $3 $4 $5
umask 022

SAMBA_DIR=/usr/local/samba

# if you need the errors messages
exec 2>>"$SAMBA_DIR/var/logon_script.err"
# if you prefer the errors messages by machine name, comment the preceding line
# and uncomment :
#exec 2>>"$SAMBA_DIR/var/logon_script.$1.err"

# if you need SHELL DEBUG, in the errors messages file, uncomment :
#set -x

#--------------------------- FUNCTIONS ----------------------------------------
# end of line in windows world : CR+NL
# echo -n "WINDOWS_COMMAND"; echo -e '\r'
# do the trick.
# use "write" to write in the logon script
write () { echo -n "$@"; echo -e '\r'; }

#--------------------------- VARIABLES ----------------------------------------
CLIENT_MACHINE="$1"
USER="$2"
SYSTEM_TYPE="$3"
GROUP="$4"
SERVER_NAME="$5"

SUFFIX=bat

#--------------------------- HEADER -------------------------------------------
SCRIPT="$SAMBA_DIR/lib/netlogon/scripts/$CLIENT_MACHINE.$SUFFIX"

# this redirection mean all the standard output go in the logon script
exec 1>"$SCRIPT"

# to hidden the script, (need "map hidden = yes", see in "man smb.conf")
chmod o+x "$SCRIPT"

#--------------------------- BODY ---------------------------------------------
write "@ECHO off"

write "ECHO."
write "ECHO Type : $SYSTEM_TYPE."
write "ECHO."
write "ECHO Computer : $CLIENT_MACHINE - User : $USER - Group : $GROUP."
write "ECHO."

# perhaps some tools used in the logon script are on the server
write "PATH %path%;\\\\$SERVER_NAME\parameters\bin"

# set the workstation time at the server time
write "NET TIME \\\\$SERVER_NAME /set /yes"

# perhaps you need non persistent connexion
write "NET USE /persistent:no"

# mount the home share
write "NET USE f: \\\\$SERVER_NAME\homes /yes"

# command depend on client machine
case "$CLIENT_MACHINE" in
pc1)
write "....."
write "....."
;;
pc2)
write "....."
;;
*)
# other PCs
write "....."
esac

# mount depend on user
if [ "$USER" = u1 ]; then
write "NET USE l: \\\\$SERVER_NAME\share1 /yes"
elif [ "$USER" = u2 ]; then
.....
else
# other users
write "....."
fi

# mount depend on group
write "NET USE x: \\\\$SERVER_NAME\\$GROUP /yes"

# command depend on system type
if [ "$SYSTEM_TYPE" = Win95 ]; then
.....
fi

if [ "$SYSTEM_TYPE" = WinNT ]; then
.....
fi

#--------------------------- IN OUR CLASSROOMS --------------------------------
# example : clients are named xxYYcZZ and printers xxYYpZZ
# xx: building prefix, YY: classroom number, ZZ: identifier numbers
# xxYY est the classroom
CLASSROOM=`expr "$CLIENT_MACHINE" : '\(....\)'`

# common share by classroom
write "NET USE f: \\\\$SERVER_NAME\\${CLASSROOM}common /yes"

# 2 networked laser printers in some classrom ? I need :
# computer 1 to half : printer_1, half+1 to max : printer_2
MACHINE_NUMBER=`expr "$CLIENT_MACHINE" : '.....\(..\)'`
PRINTER_PREFIX="${CLASSROOM}p"

# for the room with only one printer
LIMIT=99

case "$CLASSROOM" in
ka27)
# 14 computers
LIMIT=7;;
ka28)
# 12 computers
LIMIT=6;;
esac

if [ "$MACHINE_NUMBER" -le "$LIMIT" ]; then
PRINTER_NUMBER=01
else
PRINTER_NUMBER=02
fi

PRINTER="$PRINTER_PREFIX$PRINTER_NUMBER"

write "NET USE lpt1: \\\\$SERVER_NAME\\$PRINTER /yes"
write "ECHO The printer number $PRINTER_NUMBER is connected."
write "ECHO."

# perhaps you need to apply some registry keys
write "REGEDIT /s \\\\$SERVER_NAME\parameters\registry\my_entries.registry"

# admin has special commands
if [ "$USER" = admin ]; then
.....
# perhaps you want to change the password the next time, uncomment :
#if [ "$SYSTEM_TYPE" = WinNT ]; then
#write "NET USER admin my_new_passwd"
#fi
.....
fi

{C U T H E R E}

Odjava:


Eh ,nema boljeg osecaja kada se za nesto mnogo pomucis i onda steceno
znanje o tome podelis sa svetom. Ponavljam, nadam se da ce bar neko
imati korist od ovog teksta. Zelim da se zahvalim mom kolegi Vladi koji
mi je nesebicno pomagao u postavljanju mreze (ili sam ja njemu nesebicno
pomagao:) posebno za deo o BIND-u.

Greetz to all the riders on the net outhere.



← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT