Samba

De Cacauet Wiki
Salta a la navegació Salta a la cerca

Samba és la implementació del protocol SMB (també conegut com a CIFS i creat per IBM i Microsoft) per gestió de directori i recursos compartits.

És una peça clau per integrar recursos Windows i Linux en la mateixa xarxa.

S'ha implementat com a enginyeria inversa de la implementació en Windows.



Introducció

Referències:

Acrònims varis:

  • DC: Domain Controller
    • PDC: Primary DC
    • BDC: Backup DC
  • NetBIOS
    • MB: Master Browser
      • LMB: Local MB
      • DMB: Domain MB
  • Usuari guest (sense pass)
  • Daemons:
    • smbd (servidor de recursos compartits)
    • nmbd (servidor de noms NetBIOS)

Protocol pensat per autoexploració i autonegociació de master/slave. Produeix molts broadcast i omple la xarxa de paquets (pot arribar a provocar molt problemes). Un correcte ajustament del servidor NetBIOS redueix dràsticament aquest problema.

Funcionalitats

Samba serveix per substituir algunes funcionalitats d'un Active Directory (per suposat, no totes elles). Les més importants son:

  • Netlogon: comptes d'usuari centralitzats
  • Shares: carpetes de xarxa
  • Impressores

Configuració

El principal arxiu de configuració és /etc/samba/smbd.conf.

En general, cada secció marcada amb claudàtors correspon a un share (carpeta compartida). Per exemple:

[documents]
    path = /home/enric/documents    ; carpeta a compartir
    guest ok = no                   ; si admetem usuari convidat
    valid users = enric             ; usuaris vàlids (amb @ seria un grup)
    read only = no                  ; es pot escriure
    browseable = yes                ; el servidor mostra la carpeta com a disponible quan visualitzem \\MAQUINA

Hi ha, però, les excepcions següents com a seccions de configuració global:

  • [global]
  • [homes]
  • [netlogon]
  • [printers]
  • [print$]
  • [profiles]


Quick Reference

Paquets a instal·lar:

# apt-get install samba smbclient samba-doc smbldap-tools

Arxius de conf:

/etc/samba/smbd.conf

Arxius de log (principal, n'hi ha molts més):

/var/log/samba/log.smbd

Inicialment disposem de l'usuari guest i sense contrasenya (mapejat en nobody).

Comandes Linux útils:

  • smbclient -L //maquina/ -U usuari
    $ smbclient -L //server/ -U guest -N
  • smbtree [-N] : per veure totes les màquines i els seus recursos (s'extreu de la BD local)
  • smbtree -D : mostra dominis disponibles
  • nmblookup <nom_netbios_maquina> (retorna IP)
  • nmblookup -A localhost
  • per buscar master browsers:
    $ nmblookup -M -
  • ...

Comandes Windows útils:

  • net use


Samba Server

Referència Samba com a PDC a Samba.org.

Partirem d'un Ubuntu Server LTS i anirem modificant la configuració del /etc/samba/smbd.conf (no l'esborreu sencer, anirem modificant i afegint parts).

Per activar la màquina com a samba server cal fer:

[global]
   workgroup = CACAUNET               ; nom WINS del domini
   server role = standalone server    ; podria ser domain controller tambe
   security = user                    ; alternatives: share (per recursos), domain (per fer de BDC)
   domain logons = yes                ; habilita autenticació de logons de clients
   os level = 34
   preferred master = yes
   domain master = yes                ; yes=PDC , no=BDC
   wins support = yes                 ; fa de serivdor WINS (resolució de noms NetBIOS)
   time server = yes
   passdb backend = tdbsam            ; despres hi posarem ldapsam! (de moment es BD interna)
   ; aquesta linia es per crear comptes de màquina. Caldrà crear el grup machines
   add machine script = sudo /usr/sbin/useradd -N -g machines -c Machine -d /var/lib/samba -s /bin/false %u

[netlogon]
   comment = Enricus Logon Service
   path = /etc/samba/netlogon         ; ULL! Cal crear la carpeta (o no funcionarà el logon)
   guest ok = no
   read only = yes

Cada màquina que afegim al domini requereix un compte de màquina que estarà dins el grup machines (tal i com hem configurat el add_machine_script del smbd.conf). Caldrà crear, doncs, el grup:

# addgroup machines

Per poder testejar correctament tots els canvis que farem, aconsello deshabilitar l'accés de convidat. Per tant, modifiquem /etc/samba/smbd.conf i busquem tots els guest ok i els posem a "no" (particularment en el netlogon):

guest ok = no


Comptes Samba i Unix

Els comptes de Samba estan lligats a Unix. És a dir, per poder tenir un usuari Samba cal necessàriament que hi hagi una entrada a /etc/passwd. Si volem, podem deshabilitar el compte Unix i mantenir el funcionament del client Samba.

La BBDD de contrasenyes Samba és independent de la de Unix. Per activar un compte Samba cal crear l'usuari i donar-li una contrasenya Samba:

# adduser lola
# smbpasswd -a lola

Si no ho fem, no podrem entrar com a l'usuari.

Sincronitzar passwords Samba i Unix

Si volem sincronitzar les contrasenyes dels comptes Unix --> Samba (oju, només en aquest sentit) cal instal·lar libpam-smbpass:

# apt-get install libpam-smbpass

I configurar (normalment ja ve per defecte):

[global]
  ...
  unix password sync = yes
  passwd program = /usr/bin/passwd %u
  passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
  pam password change = yes


Samba com a PDC

Per tal d'habilitar Samba com a servidor de domini per a clients Windows caldrà aplicar alguns ajustos.

Primer, mapejar el "Domain Admins" al grup de l'usuari principal de la nostra màquina. OJU: per sysadmin s'entén el 1r usuari de la màquina amb permisos de sudo, habitualment amb UID=1000 (en Windows és el Administrador amb UID=512). Aquest serà l'usuari que utilitzarem per donar d'alta les màquines Windows al domini.

# net groupmap add ntgroup="Domain Admins" unixgroup=sysadmin rid=512 type=d

I donar a aquest usuari una contrasenya Samba:

# smbpasswd -a sysadmin

Finalment, donar els privilegis adequats per tal que les màquines Windows s'hi afegeixin al domini "sin rechistar":

# net rpc rights grant -U sysadmin "EXAMPLE\Domain Admins" SeMachineAccountPrivilege \
  SePrintOperatorPrivilege SeAddUsersPrivilege SeDiskOperatorPrivilege \
  SeRemoteShutdownPrivilege


Samba com a client

...


Windows com a client de Samba

...


Samba + LDAP

Abans d'abordar aquesta secció cal:

  1. Muntar un Servidor LDAP amb encriptació TLS. Recomano crear un LDAP nou. En el procés de configuració podem perdre les dades existents, així que millor fer-ho a part des del principi. A més, els comptes de Samba son lleugerament diferents dels Posix.
  2. Incorporar el schema de Samba al nostre DIT de LDAP:
  3. Configurar Samba per utilitzar LDAP com a passdb backend.


En realitat el meollo està en canviar la BD del backend:

[global]
    #passdb backend = tdbsam
    passdb backend = ldapsam:"ldap:///"

Habitualment està en tdbsam que és un arxiu intern de Samba (ja hem vist que les contrasenyes son independents entre el sistema operatiu i Samba, tot i que es poden sincronitzar).

Caldrà, però, alguns ajustos extra segons el nostre domini:

# LDAP Settings
  passdb backend = ldapsam:"ldap:///"
  ldap suffix = dc=enric,dc=local
  ldap user suffix = ou=usuaris
  ldap group suffix = ou=grups
  ldap machine suffix = ou=maquines
  ldap idmap suffix = ou=Idmap
  ldap admin dn = cn=admin,dc=enric,dc=local
  ldap ssl = start tls
  ldap passwd sync = yes
...
  add machine script = sudo /usr/sbin/smbldap-useradd -t 0 -w "%u"


Troubleshooting

El més important (com sempre) és mirar el fitxer de log:

$ tail -f /var/log/samba/log.smbd

La comanda testparm també ens dona informació sobre si hi ha errors a smbd.conf:

$ testparm

PROBLEMA: pdb_init_ldapsam_common: Failed to retrieve LDAP password from secrets.tdb SOLUCIÓ: afegir la contrasenya d'admin LDAP a la conf (secrets.tdb) amb (raro que calgui posar-la en clear text):

# smbpasswd -w la_password

PROBLEMA: Failed to issue the StartTLS instruction: Connect error