Esettanulmány: Samba+LDAP+ddwrt

A Unix/Linux szerverek üzemeltetése wikiből

Készítette: Radócz Dániel

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 és a DD-WRT -vel való használatot.

Tartalomjegyzék

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
[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
[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)
[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
    • 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)

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
  • használat előtt konfigurálni kell: a configure.pl szkript bekéri a szükséges adatokat (amiket az smb.conf fájlban is meg kellett adni) és beállítja a konfigurációs fájljait (smbldap.conf és smbldap_bind.conf)
  • ha bármilyen eltérés is van az smb.conf és az smbldap.conf fájlban lévő paraméterek között, a szkriptek nem hajtódnak végre
  • az smb.conf-beállításai a szkriptek meghívásához:
add user script = /usr/local/smbldap-useradd -m "%u"
rename user script = /usr/local/sbin/smbldap-usermod -N "%u"
delete user script = /usr/local/sbin/smbldap-userdel "%u"
add group script = /usr/local/sbin/smbldap-groupadd -p "%g"
delete group script = /usr/local/sbin/smbldap-groupdel "%g"
add user to group script = /usr/local/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/local/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/local/sbin/smbldap-usermod -g "%g" "%u"
add machine script = /usr/local/sbin/smbldap-useradd -w "%u"

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

7 Dokumentációk

  • rendkivül jól és érthetően dokumentált (ritkaság)
  • Official Samba 3.2.x HOWTO [2]
  • SWAT beépitett leirásai is jól használhatóak konfigurálás közben
  • Samba wiki [3]

Személyes eszközök