Esettanulmány: Samba+LDAP+ddwrt
A Unix/Linux szerverek üzemeltetése wikiből
A lap korábbi változatát látod, amilyen Raddan (vitalap | szerkesztései) 2008. december 29., 00:50-kor történt szerkesztése után volt.
Mottó : "Opening windows to a wider world"
Az alábbi cikk a samba alapjait szeretné bemutatni, külön kiemelve az LDAP-al való együttműködést
Tartalomjegyzék[elrejtés] |
1 Áttekintés
- SMB
- Server Message Block
- fájl és nyomtatómegosztásra szolgáló protokoll, eredetileg az IBM tervezte, később a Microsoft fejlesztette tovább több bővítést is hozzáadva (pl. eredetileg SMB csak NetBIOS felett működött, de később hozzáadták a 445-ös portot a direkt TCP feletti működésre)
- CIFS
- Common Internet File System
- az SMB kiegészítése, többek közt nagyobb fájlméreteket támogat, symlink/hardlink -ek vannak
- A kettőt gyakran szinonimaként használják, ami nem teljesen igaz, de nagyon közel jár hozzá - kevés olyan gép van, amelyiken az alap SMB meg van valósítva, a CIFS viszont nincs (ha van ilyen egyáltalán)
- a protokollnak rengeteg megvalósítása van : értelemszerűen a Windowsok Fájl- és nyomtatómegosztása, de van beépített CIFS-szerver pl. Open Solarisban, Novell NetWare-ben is
2 Mi is ez?
- A SaMBa egy SMB/CIFS szolgáltatásokat megvalósitó kliens/szerver szoftver.
- alapvető célja egy olyan program fejlesztése, ami ingyenesen használható nem-windows rendszereken is
- open-source
- a Windows Fájl- és nyomtatómegosztással ellentétben megbízhatóan működik
- könnyen integrálható meglévő tartományokba
- konfigurációt az smb.conf fájl tárolja
- 2 fő részből áll
- smbd : az SMB/CIFS szolgáltatásokat valósítja meg
- nmbd : a NetBIOS szolgáltatásokat kezeli
3 Jelszókezelés
- Háromféle backend-et ismer, ezeket a passdb backend opcióval adhatjuk meg
- smbpasswd
- a titkositott jelszavakat tárolja LANMan és NTLM formátumban
- tárolja még az UID-t, meg 4 féle flag-et:
- U : "sima" felhasználó
- D : disabled, nem jelentkezhet be
- N : no password
- W : workstation trust account, akkor lenne értelme,ha PDC-ként konfiguráljuk a Samba-t
- X : a jelszó soha nem jár le
- minden usert fel kell venni (vagy egy felvett userhez map-olni) akit a szerveren akarunk hitelesiteni
- ezenkivül minden ide felvett usernek a \etv\passwd-ben is léteznie kell
- van lehetőség a kettö szinkronizálására
unix password sync = yes
- tdbsam
- az smbpasswd továbbfejlesztése
- indexelést használ
- ldapsam
- LDAP alapú hitelesitéshez
- opcionálisan LDAP URL-t is megadhatunk a helyéhez (alapból : ldapsam : ldap:\\localhost):
passdb backend = ldapsam : ldap:\\ldap.ceg.hu
- a titkositott jelszavak fogadását ki is lehet kapcsolni, ekkor figyelmen kivül hagy minden jelszó-fájlt.
[global] encrypt passwords = no
4 Hozzáférések kezelése
- hosts allow , hosts deny
- IP-cím/maszk formátumban
- ha a hosts allow opció átenged egy állomást, a hosts deny már nem tiltja le. Így ha pl. a hosts deny = 0.0.0.0/0 , akkor csak a hosts allow által megengedett állomások kapcsolódhatnak
- Security level : a legalapvetőbb beállitás, megadja a megosztásokhoz való hozzáférés menetét. 2.2 óta 5-féle létezik :
- Share-level
- nem használ user-neveket
- minden megosztásnak van egy jelszava ('null' is lehet), aminek ismeretében bárki hozzáférhet
- sőt,ha guest ok paraméter igaz, mindenki alapból megkapja a guest account-al definiált user jogait
- a jelszavakat a hozzájuk tartozó user-nevekkel adjuk meg, a példában rdan és bela felhasználók jelszavával lehet hozzáférni a megosztáshoz
- Share-level
[global] security = share [share1] username = rdan,bela
- ez a fajta megosztás semmiképp nem ajánlott, kivéve ha egyszerüen csak meg akarunk valamit osztani mindenféle szabályozás nélkül
- User-level
- a felhasználónak be kell jelentkeznie
- léteznie kell az smbpasswd fájlban
- vagy meg kell feleltetni egy ilyen user-nek (user mapping)
- ezeket a megfeleltetéseket külön fájlban kell tárolni, unix-user:nem unix-user formában
- User-level
[global] username map = /etc/samba/mappings
//a map-file tartalma root: administrator user1 : rdan
- valid users
- invalid users
- admin users
- write list
- read list
- map to guest : megadhatjuk, hogy bizonyos esetekben automatikusan guest account-hoz map-olja a felhasználót
- never
- bad username
- bad password
- bad uid
- 3.0 óta ez az alapbeállitás
- Server-level
- ugyanaz, mint az előző, csak itt másik SMB szerverre bizzuk a hitelesitést
- ezeket a password server opcióval lehet megadni (ez lehet NetBIOS-név vagy IP-cim is)
- Server-level
[global] security = server password server = 152.66.238.132 wiki
- a szerver nem hitelesiti magát - érzékeny a megszemélyesitésre.
- ha nem jár sikerrel akkor visszavált USER módba
- Domain-level
- a szerver NT-tartománytagként viselkedik, és a hitelesitést a PDC (vagy a BDC) végzi.
- csak NT domain-ekhez való, AD-hez ott az ADS mód (lejjebb) - ergo ma már nem sok értelme van
- Domain-level
- ADS-level
- Active Directory tagként müködik
- a szerveren konfigurálni kell a Kerberost, és be kell léptetni a tartományba
- viszont ettől még továbbra sem ő a DC
- allow trusted domains : elfogad-e más tartományból érkező kéréseket is (alapból igen)
- ADS-level
5 Samba és LDAP
Ahogy már említve is volt, a hitelesítést LDAP szerver is végezheti. Nagyszámú felhasználó esetén már kénytelenek leszünk egy címtárba integrálni a samba-t, most ennek a lépéseit mutatnám be. Több LDAP megvalósítás is létezik, a legelterjedtebb az OpenLDAP. Első lépésben ezt kell telepíteni (persze külön szerveren is lehet)
5.1 Samba beállításai
- password backend-nek ldapsam -ot kell beállítani
- meg kell adni az admin DN-t - az ő nevében történik a kapcsolatfelvétel az LDAP-szerverrel
- lehetőség van SSL használatára (ldap ssl)
- start tls : az LDAPv3 Start_TLS műveletét használja
- on : LDAPS használata
- off
- meg lehet adni utótagokat is, amiket a samba a hozzáadott tagok nevéhez fűz hozzá
- ldap user suffix
- ldap group suffix
- ldap machine suffix
- ldap suffix : ezt az utótagot még pluszban hozzáfűzi minden hozzáadott objektumhoz
- érdemes még timeout értéket is beállítani
- FONTOS! A végén smbpasswd -w "adminjelszó" parancsot kell kiadni, különben a Samba nem fogja tudni milyen jelszóval forduljon a szerverhez
Egy egyszerű LDAP-os konfiguráció :
[global] security = server password server = 152.66.238.132 passdb backend = ldapsam ldap ssl = start tls ldap timeout = 15 ldap admin dn = cn=admin,dc=ceg,dc=hu ldap machine suffix = ou=Computers ldap user suffix = ou=People ldap group suffix = ou=Groups ldap suffix = ou=ceg, ou=hu
5.2 OS beállításai
- a samba-nak mindig szüksége van uid/gid -ra, ezért minden Windows felhasználóhoz egy UNIX-fiókot kellene mapolni (ahogy az fentebb is említve volt). Nagyszámú felhasználó esetén ez járhatatlan, ezért célszerű a a unix-fiókokat is ldap-ba integrálni.
- ehhez be kell állítani,hogy az autentikáció (PAM) és a névfeloldás (NSS) a címtárból történjen
- PAM: pam_unix2 alapból támogatja LDAP címtár használatát, a szükséges paramétereket az ldap.conf fájl tartalmazza
#ldap.conf példakonfiguráció #ldap-szerver címe host your.nds.server your2.nds.server #az ág ahol a fiókok vannak base dc=my,dc=base #SSL használata a kapcsolathoz (no, on vagy start_tls) ssl on #NSS password, shadow és group lekérdezések LDAP-linkjei nss_base_shadow ou=user,dc=my,dc=base nss_base_passwd ou=user,dc=my,dc=base nss_base_group ou=groups,dc=my,dc=base
#pam_unix2.conf beállítása LDAP használatához auth: call_modules=ldap nullok account: call_modules=ldap
- NSS: a konfigurációc állományában (nsswitch.conf) a shadow, passwd ésgroup lekérdezésekhez hozzá kell adni az ldap -ot:
#nsswitch.conf példakonfiguráció passwd: files ldap group: files ldap shadow: files ldap hosts: files dns wins networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
5.3 smbldap-tools
- egy Perl-szkriptgyűjtemény, amivel LDAP-címtárakat lehet kezelni
- akkor lehet rá szükség, ha DC-t akarunk csinálni a samba-ból
6 Samba és DD-WRT
A DD-WRT egy hálózati eszközökre tervezett linux disztribúció. Ha van egy USB porttal rendelkező router-ünk, lehetőség nyílik egy hozzácsatlakoztatott tárhelyet Samba-szerverrel kezelni
- Előnyei
- a felhasználókat közvetlen a router szolgálja ki
- nem kell külön smb-szerver
- gazdaságos
- Hátrányai
- viszonylag sok konfigurálás kell
- sok felhasználó esetén lassú
- címtár használata körülményes (persze ha már annyi felhasználónk van, ami indokolttá teszi a címtár használatát, nem érdemes ezt a megoldást választani, mert túlterheli a routert)
6.1 Samba telepítése
- az Optware egy eredetileg Unslung NSLU2 Linksys firmware-hez készített csomagkezelő rendszer, a továbbfejlesztett verziói más rendszereket is támogatnak (pl. a ddwrt firmware-el rendelkező routereket is)
- rengeteg feltelepíthető csomag áll rendelkezésre, köztük a samba is (3.0) (érdemes megnézni a listát [1])
- samba-szerverhez ddwrt alatt először ezt kell telepíteni
#Optware telepítése wget http://pastebin.ca/raw/876251 -O - | tr -d ‘\r’ > /tmp/optware-install.sh sh /tmp/optware-install.sh #majd ezután a samba telepítése ipkg install samba
6.2 Startup-szkript
- a router minden újraindításakor:
- be kell tölteni az usb-drivereket
- fel kell mountolni a külső vinyó partícióit
- létre kell hozni a samba-felhasználókhoz tartozó UNIX-fiókokat - erre azért van szükség mert a ddwrt minden újraindításakor törli az össze felhasználót a root-on kívül. Ezenkívül alapból az adduser parancsot sem ismeri, ezt az ipkg install adduser paranccsal tudjuk letölteni
- ezekre szkriptet kell írni amit majd a ddwrt kezelőfelületén startup-szkriptnek állítunk be
#egy példa startup-szkript, csak elborzasztásra #forrás : http://victorhurdugaci.com/install-ddwrt-on-asus-wl500g-premium/ ( unset LD_PRELOAD export PATH=/bin:/usr/bin:/sbin:/usr/sbin export LD_LIBRARY_PATH=/lib:/usr/lib insmod /jffs/lib/modules/2.4.30/usbcore.o insmod /jffs/lib/modules/2.4.30/ehci-hcd.o insmod /jffs/lib/modules/2.4.30/scsi_mod.o insmod /jffs/lib/modules/2.4.30/usb-storage.o insmod /jffs/lib/modules/2.4.30/sd_mod.o insmod /jffs/lib/modules/2.4.30/jbd.o #Change the following line is using another filesystem or remove it if you don't have external drive insmod /jffs/lib/modules/2.4.30/ext3.o echo "Waiting for modules to initialize disk access..." sleep 20 export LD_LIBRARY_PATH=/jffs/lib:/jffs/usr/lib export PATH=/jffs/bin:/jffs/sbin:/jffs/usr/sbin:/jffs/usr/bin:/bin:/sbin echo "Mountint disk partitions..." export LD_LIBRARY_PATH=/lib:/usr/lib mount -t ext3 -o noatime /dev/discs/disc0/part1 /opt mount -t ext3 -o noatime /dev/discs/disc0/part2 /mmc # provide Optware search paths unset LD_LIBRARY_PATH export PATH=/opt/bin:/opt/sbin:/bin:/sbin:/usr/sbin:/usr/bin echo "Starting Optware programs..." if [ -d /opt/etc/init.d ]; then for f in /opt/etc/init.d/S* ; do [ -x $f ] && $f start done fi #hozzá kell adni a felhasználókat is adduser pelda1 adduser pelda2 ) > /tmp/optware.log 2>&1