2012. május 25., péntek

Samba tartományvezérlő Ubuntu 12.04-en LDAP backend-del - második rész

A múltkor telepítettük a samba sémát az OpenLDAP-szerverünkbe, azaz az LDAP immár kész a Samba adatainak fogadására. Ma maga a tartományvezérlő következik.
(You can read this post in English too.)

Első feladatunk az, hogy a telepítéskor feltett kérdések prioritását alacsonyra vesszük:
sudo dpkg-reconfigure debconf
Eztán telepítjük a Samba csomagot:
sudo apt-get install samba
Közben válaszolgatunk:
  • Workgroup/Domain Name: ITTHON2012
  • Use password encryption? Yes
  • Módosítod az smb.conf-ot, hogy a WINS beállításokat a DHCP-n keresztül érje el? Nem
  • Hogyan induljon a Samba? démonok
  • Létrehozod a samba jelszóadatbázist (/var/lib/samba/passdb.tdb)? Igen
A telepítés vége felé ilyet látunk:
Importing account for nobody...ok
Importing account for a...ok
Importing account for helyiuser...ok
Importing account for bela...ok
Ha a helyi felhasználókra nincs szükség a Samba-ban, akkor így lehet ezt a pár sort semmissé tenni:
sudo smbpasswd -x helyiuser

A következő nagy feladat az /etc/samba/smb.conf fájl rendberakása:
[global]
   workgroup = ITTHON2012
   server string = %h PDC
   dns proxy = no

   log level = 2
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d

   security = user
   encrypt passwords = true

   passdb backend = ldapsam:ldap://localhost
   ldap suffix = dc=itthon,dc=cucc
   ldap admin dn = cn=admin,dc=itthon,dc=cucc
   ldap machine suffix = ou=Computers
   ldap user suffix = ou=People
   ldap group suffix = ou=Groups
   ldap idmap suffix = ou=Idmap
   ldap ssl = no

   ldap passwd sync = yes

   domain logons = yes

   add machine script = /usr/sbin/smbldap-useradd -w '%u'
   add user script = /usr/sbin/smbldap-useradd -m '%u'

[netlogon]
   comment = Network Logon Service
   path = /export/samba/netlogon
   guest ok = yes
   read only = yes

[megosztas]
   comment = megosztas
   read only = no
   locking = no
   path = /tmp
   guest ok = yes

Természetesen szó nincs arról, hogy ez így teljesen jó. Hiszen a domain logons = yes paraméter vándorló profilokat feltételez, de sehol nincsenek azok a megosztások, ahol a profilok helye van. Nincsenek homeshare-ek sem. Nyomtatás a kanyarban nincs. De egyelőre ez nem is baj. Tapasztalatom szerint ezek a problémák lényegesen kisebbek, mint az a kettő, amit most meg akarunk oldani.
  • Az egyik a munkaállomások felvétele a tartományba
  • A másik a felhasználók jelszóváltoztatása Windows-ból
A következő paranccsal ellenőrizhetjük, hogy minden oké-e az smb.conf fájllal:
sudo testparm
Az elején lesz egy ilyen, de le van sajnálva:
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Elkészítjük a hivatkozott könyvtárat:
sudo mkdir -p /export/samba/netlogon
Majd újraindítjuk a Sambát:
sudo service smbd restart
sudo service nmbd restart
A /var/log/samba/log.smbd állományban szaporodni kezdenek az ilyen bejegyzések: Connection to LDAP server failed for the 4 try! Na akkor állj!
sudo service smbd stop
sudo service nmbd stop
Na ja. Nem mondtuk meg a Samba-nak, hogy mi az a jelszó, amivel az LDAP-hoz csatlakozhat. Akkor mondjuk meg neki!
sudo smbpasswd -W
Setting stored password for "cn=admin,dc=itthon,dc=cucc" in secrets.tdb
Látható, hogy a jelszó valójában az smb.conf-ban megadott LDAP-user jelszava lesz, és az is, hogy ez a Samba3 alapértelmezett secrets.tdb fájljába kerül. Mehet tovább a buli:
sudo service smbd start
sudo service nmbd start
Ha elindultak a szervereink, akkor telepítünk egy segédprogramot:
sudo apt-get install smbclient
Kiadunk egy parancsot (vastaggal szedve), és a jelszónál csak Entert nyomunk. A kimenet jó esetben ehhez hasonló:
smbclient -L localhost
Enter a's password: 
Anonymous login successful
Domain=[ITTHON2012] OS=[Unix] Server=[Samba 3.6.3]

    Sharename       Type      Comment
    ---------       ----      -------
    netlogon        Disk      Network Logon Service
    megosztas       Disk      megosztas
    IPC$            IPC       IPC Service (UBUSERVER)
Anonymous login successful
Domain=[ITTHON2012] OS=[Unix] Server=[Samba 3.6.3]

    Server               Comment
    ---------            -------
    UBUSERVER            ubuserver PDC

    Workgroup            Master
    ---------            -------
    ITTHON2012           UBUSERVER

A Master megjelenésére lehet, hogy várni kell, mert ha mostanában indult újra a Samba, akkor lehet, hogy még nem nyerte meg a választást a főtallózó szerepéért.
Ezen a ponton kiadunk egy parancsot, aminek mennie kell. Ha hibaüzenetet kapunk, az baj.
sudo net getlocalsid

Na, akkor a Samba szerverprogram rendben, de még túl üres az LDAP-címtár ahhoz, hogy használatba lehessen venni.

Az első dolgunk, hogy csináljuk végig a szerveren azt, ami ennek a cikknek az "Átmegyünk a kliensre" részén van. Az URI lehet ldapi:///, ha az LDAP-szerver és a Samba tartományvbezérlő azonos. A cél az, hogy a getent passwd és a getent group parancs megmutassa az LDAP-ban tárolt felhasználókat, illetve csoportokat. Ha kész van, akkor jöjjünk vissza ide, és folytassuk.
A következő parancsok közül az első az, amelyik telepíti azt az smbldap-tools csomagot, amelyet majd két dologra használunk:

  • feltöltjük vele az LDAP-címtárat a Samba használatához szükséges alapbejegyzésekkel
  • az smb.conf fájlban add machine script és add user script néven van két bejegyzés, amelyek ennek a csomagnak a fájljaira vonatkoznak
A második parancs a helyére másolja azt a fájlt, amelyik az smbldap-tools és az LDAP közötti kapcsolathoz szükséges felhasználónevet és jelszót tartalmazza. A harmadikkal megoldjuk, hogy a fájlt ne olvashassa akárki.

sudo apt-get install smbldap-tools
sudo cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.conf
sudo chmod 600 /etc/smbldap-tools/smbldap_bind.conf
Lássuk, mi kerül az /etc/smbldap-tools/smbldap_bind.conf fájlba:
slaveDN="cn=admin,dc=itthon,dc=cucc"
slavePw="titok"
masterDN="cn=admin,dc=itthon,dc=cucc"
masterPw="titok"
Aztán a helyére teszünk egy olyan fájlt is, amelyikben az smbldap-tools nem titkos alapbeállításai vannak (régebben ezt a fájlt egy configure.pl -lel volt szokás létrehozni, sok HOWTO hivatkozik rá. Számomra úgy tűnik, hogy ez kimaradt a Precise Pangolin-ból, és, ha lehetek őszinte, a fenének se hiányzik. A config fájl jól dokumentált, elég az.):
sudo sh -c "zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf"
Az smbldap.conf tartalma (mindent állíthatsz ilyenre, az elejére (SID) pedig a sudo net getlocalsid parancs kimenete kerül) (ja, és a TLS/SSL használatához szükséges cafile/clientcert/clientkey fájlokat benne hagytam, de egyelőre se TLS, se SSL nincs):
slaveLDAP="localhost"
slavePort="389"
masterLDAP="localhost"
masterPort="389"
ldapTLS="0"
ldapSSL="0"
verify="require"
cafile="/etc/smbldap-tools/ca.pem"
clientcert="/etc/smbldap-tools/smbldap-tools.example.com.pem"
clientkey="/etc/smbldap-tools/smbldap-tools.example.com.key"
suffix="dc=itthon,dc=cucc"
usersdn="ou=People,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
scope="sub"
# If set to "exop", use LDAPv3 Password Modify (RFC 3062) extended operation.
password_hash="SSHA"
password_crypt_salt_format="%s"
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
shadowAccount="1"
defaultMaxPasswordAge="100"
userSmbHome="\\UBUSERVER\%U"
userProfile="\\UBUSERVER\profiles\%U"
userHomeDrive="S:"
userScript="logon.cmd"
Na, ha ezzel megvagyunk, akkor lehetne kiadni a sudo smbldap-populate parancsot, ami feltölti az LDAP-ot a Samba használatához szükséges bejegyzésekkel. Ne tedd, mert az első felhasználó az 1000-es UID-értéket kapja majd, és az meg már foglalt: ha minden igaz, épp azzal vagy bejelentkezve (man id). Helyette inkább:
sudo smbldap-populate -u 5000 -g 5000
Menet közben látsz ilyet: Use of qw(...) as parentheses is deprecated at /usr/share/perl5/smbldap_tools.pm line 1423, <DATA> line 522. Most ne zavarjon, mindjárt elbánunk vele. Előbb-utóbb ide jutunk:
Please provide a password for the domain root:
Use of qw(...) as parentheses is deprecated at /usr/share/perl5/smbldap_tools.pm line 1423, <DATA> line 522.
Changing UNIX and samba passwords for root
New password:
Add meg az LDAP-admin jelszavát (titok). Az smbldap-tools felveszi a root-ot is a samba-felhasználók közé, atyaisten jogkörrel, de mi a büdös életben nem fogjuk használni:)

Na, akkor a qw-s probléma. A fenti fájlban keressük meg a hibásnak jelzett sort, és a
for my $sig_name qw(ALRM INT HUP QUIT TERM TSTP TTIN TTOU) {
sor helyett adjuk meg ezt (a két vastag(?) zárójel az új):
for my $sig_name (qw(ALRM INT HUP QUIT TERM TSTP TTIN TTOU)) {
Felvesszük az első samba-felhasználónkat (suser1):
sudo smbldap-useradd -a -m -P suser1
Rögtön kapunk is a pofánkba:
Failed to execute: /usr/sbin/smbldap-passwd.cmd: Nincs ilyen fájl vagy könyvtár at /usr/sbin/smbldap-useradd line 668.
Na, akkor szüntessük meg suser1-et:
sudo smbldap-userdel suser1
sudo rm -r /home/suser1/
Hozzuk rendbe a bajt:
sudo ln -s /usr/sbin/smbldap-passwd /usr/sbin/smbldap-passwd.cmd
Aztán készítsük el ismét suser1-et:
sudo smbldap-useradd -a -m -P suser1
Jelentkezzünk be vele először egy Linux kliensen. Ha password aged-et kapunk, akkor itt a teendő. Ha nincs ilyen baj, mehetünk tovább, csináljunk suser1-ből Samba Domain Admin-t. (Tudom, hogy épp 'Administrator' lesz belőle, de akkor is így jó.)
sudo smbldap-groupmod -m 'suser1' 'Administrators'
Ha most belépünk egy Windows-ra (először XP-n szeretem kipróbálni, de Windows 7-en is megy a dolog némi módosítás után), akkor
  • suser1-gyel fel tudjuk venni a gépet az ITTHON2012 tartományba,
  • majd be tudunk jelentkezni (lesz persze panasz, hogy nincs meg a központi profil, de egyelőre nem érdekel bennünket),
  • és tudunk jelszót változtatni.
Pár dolog kimaradt még. Először is meg kell oldanunk azt, hogy a Samba-nak szükséges attribútumok indexelve legyenek az LDAP-ban. A másik, fogósabb probléma a következő:

  • ha Sambában (Windows-ban) változtatunk jelszót, akkor arról értesül a Linux is, ugyanis az smb.conf fájl ldap passwd sync = yes beállítása miatt a Samba az LDAP-ban nem csak a sambaNTPassword jellemzőt frissíti, hanem a Linux (Unix) jelszót is az userPassword jellemzőben.
  • ha viszont Linux kliensen változtatunk jelszót, mondjuk a passwd paranccsal, akkor az nem megy át a Samba felé: csak az userPassword frissül, a sambaNTPassword nem.
Ezen is segíteni fogunk.

  
Irodalom:
zless /usr/share/doc/smbldap-tools/README.Debian.gz
http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1014660.html

4 megjegyzés:

Máté Molnár írta...

Nagy köszönet a leírásokért! Ezek alapján sikerült végre összelőnöm az ldap-ot és a samba-t Squeezen, persze ott is volt pár qw-s problémához hasonló buktató, meg pár dolgot (pl nsswitch.conf) máshogy kellett beállítani, de végre működik. Köszönöm!

RKC írta...

Sajnos nekem nem sikerült. Egy debian wheezym van és egy windows7 kliensem. Megcsináltam az ldap hitelesítést és a sémafájlok hozzáadását is, de azt írja, hogy "A megadott számítógépfiók nem található. Lépjen kapcsolatba egy rendszergazdával annak ellenőrzésére, hogy a fiók a tartományban van-e. Ha a fiókot eltávolították a tartományból, indítsa újra a számítógépet, és csatlakoztassa újra a tartományhoz"
Valami ötlet ?
A regeditbe is átírtam a 2 értéket, amit windows7ben kell

raerek írta...

Létrejön az ou=Computers,dc=domain,dc=hu konténer? Abban létrejön a számítógép nevének megfelelő bejegyzés? Nézz szét az LDAP-fában Apache Directory Studio-val.

RKC írta...

sikerült másik leírás alapján, sajnos már nincs meg az a snapshot( mert virtuális gépen csináltam) amely alapján csináltam, szerintem a számítógépet nem vettem fel a sambába így utólag visszaolvasva. Az ldap-ot egy webminnel, a phpldapadmin-nal kezeltem és ott láttam, hogy a Computersnél létrehozta azt a számítógép(nev)et amellyel próbálkoztam belépni.