Servei d’arxius en xarxa (samba, kerberos, acl, quota)

Objectiu:

Amb aquest tutorial el que es cerca és la possibilitat de disposar d’un servidor que executi el servei samba per a compartir arxius amb la resta de màquines de la xarxa. Les característiques que volem que tingui aquest servei són:

  • compartició d’arxius amb el protocol smb/cifs (samba)
  • autenticació via kerberos sota un Active Directory de Microsoft (kerberos)
  • possibilitat d’assignar permisos d’accés més enllà de usuari, grup i altres (acl)
  • possibilitat d’assignar quotes d’usuari (quota)

Per què samba, kerberos, acl i quota?

Samba és un dels paquets més utilitzats avui dia quan es tracta de compartit dades en xarxa entre clients Windows i servidors Linux. Si els clients no fossin Windows aleshores podríem cercar d’altres opcions com ara NFS, per exemple.

L’autenticació kerberos permet crear un entorn de SSO (Single Sign-On) que els usuaris aprecien molt i integrar-ho amb el directori actiu ja disponible en la nostra xarxa. L’ús de quotes es necessari per a un bon ús dels recursos compartits. Finalment, l’ús d’acl ens permet assignar permisos als arxius i carpetes basant-nos en els usuaris i grups ja existents en l’Active Directory d’una manera més flexible que els permisos per defecte de Linux.

Per a realitzar aquest tutorial es suposarà que es disposa dels següents serveis a la xarxa:

  • un servidor amb Active Directory
  • un servidor amb Debian Etch 4.0r3 o bé un Ubuntu Server 7.04, podeu seguir exemples d’instal·lació dels mateixos en aquests enllaços: Debian i Ubuntu.


Obtenció del software necessari:

La instal·lació és trivial i la podem aconseguir amb una sola comanda:

$ apt-get install krb5-user samba winbind acl quota

Unir el servidor al directori actiu:

El primer que farem es configurar el sistema per a afegir-lo a l’Active Directory com a host del nostre domini. Per fer això necessitem modificar l’arxiu /etc/krb5.conf. Aquest arxiu permet un munt d’opcions, aquí mostrem només la base necessària per complir el nostre objectiu.

$ cat /etc/krb5.conf
[libdefaults]
    default_realm = DOMINI.LOCAL

[realms]
    DOMINI.LOCAL = {
        kdc = ip_servidor_AD
        admin_server = ip_servidor_AD
    }

[domain_realm]
    .domini.local = DOMINI.LOCAL
    domini.local = DOMINI.LOCAL

[logging]
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmin.log
    default = FILE:/var/log/krb5lib.log

NOTA IMPORTANT: En aquest cas les majúscules i minúscules són importants.

A continuació preparem l’arxiu de configuració de samba per a que treballi amb Active Directory. De nou, només es mostra el que és estrictament necessari per a una configuració bàsica.

$ cat /etc/samba/smb.conf
[global]
    workgroup = DOMINI
    realm = DOMINI.LOCAL
    password server = ip_servidor_AD
    server string = %h
    security = ads
    encrypt passwords = yes
    domain master = no
    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

    log file = /var/log/samba/log.%m
    max log size = 1000
    syslog = 0

    idmap uid = 10000-20000
    idmap gid = 10000-20000

    winbind separator = +
    winbind enum users = yes
    winbind enum groups = yes
    winbind use default domain = yes

    client use spnego = yes
    nt acl support = yes

En aquesta configuració de samba encara no hem definit cap compartició d’arxius, ho farem més endavant.

A continuació informem al sistema operatiu que les dades d’usuari i grup les cerqui també utilitzant winbind. Això ho fem modificant l’arxiu /etc/nsswitch.conf:

$ cat /etc/nsswitch.conf
passwd:         compat winbind
group:          compat winbind
shadow:         compat

hosts:          files dns winbind
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Amb la configuració actual ja podem unir la màquina al directori actiu:

$ net ads join -U administrador@DOMINI.LOCAL

Entrarem la contrasenya de l’usuari i la màquina s’unirà al domini. Pot passar que la màquina es queixi de que els rellotges no estan sincronitzats, per a que la comanda anterior funcioni correctament és necessari que la diferència entre les hores de les dues màquines no sigui superior als 5 minuts. Si utilitzem ntp en totes les màquines de la nostra xarxa això no hauria de ser cap problema.

Reiniciem els serveis corresponents:

$ /etc/init.d/winbind restart
$ /etc/init.d/samba restart

ACL i quota:

Per a que funcioni correctament les acl i la quota sobre un sistema de fitxers és necessari muntar la partició o el disc indicant aquestes opcions. En el nostre cas el que farem és utilitzar una partició diferent i la muntarem en el moment d’arrencada amb les opcions corresponents activades. Això ho fem modificant l’arxiu /etc/fstab:

$ cat /etc/fstab
/dev/hda1 /      ext3 errors=remount-ro        0 1
proc      /proc  proc rw,nodev,nosuid,noexec   0 0
/dev/hda2 none   swap sw                       0 0
/dev/hda3 /dades ext3 defaults,acl,usrquota    0 0

La partició que utilitzem aquí és /dev/hda3 i només utilitzarem quotes sobre usuari. Si es vol utilitzar quotes de grup també s’hauria d’afegir grpquota.

Muntem la unitat:

$ mkdir /home/samba
$ umount /dev/hda3
$ mount /dev/hda3 /home/samba

Ja ho tenim preparat, anem a gestionar-ho.

Afegir comparticions d’arxius:

El primer que farem és crear unitats d’arxius a compartir amb samba. Això ho fem afegint les següents dades a l’arxiu /etc/smb.conf. Les possibilitats en aquest cas varien molt depenent dels requeriments, es recomana llegir la documentació.

$ man smb.conf

Carpetes d’usuari:

En el pas anterior hem muntat la partició en /home/samba. Això pot ser útil a l’hora de fer còpies de seguretat i demés. Penjarem les carpetes d’usuari d’aquesta “arrel”.

Per exemple, crearem dos carpetes d’usuari, usuari1 i usuari2:

$ mkdir -pv /home/samba/usuari1
$ mkdir -pv /home/samba/usuari2
$ chown usuari1 /home/samba/usuari1
$ chown usuari2 /home/samba/usuari2

Afegim la configuració a smb.conf:

[homes]
    comment = Carpetes privades dels usuaris
    path = /home/samba/%S
    browseable = no
    writable = yes
    create mask = 0700
    directory mask = 0700
    inherit permissions = yes

Recarreguem samba:

$ /etc/init.d/samba reload

A partir d’aquest moment els usuaris del domini AD usuari1 i usuari2 ja es poden connectar al recurs de xarxa

\ip_servidor_samba

i veure només la seva carpeta on hi tindran permisos totals.

Carpeta pública:

Un altre cas interessant és una carpeta on tothom pot escriure i esborra per compartir arxius momentàniament. Això ho podem configurar així a smb.conf:

[public]
    path = /home/samba/public
    read only = no
    public = yes
    create mask = 0774
    directory mask = 0775
    valid users = @"Usuarios del dominio"

Creem la carpeta:

$ mkdir /home/samba/public

Recarreguem samba:

$ /etc/init.d/samba reload

A partir d’aquest moment tots els usuaris del domini AD ja es poden connectar al recurs de xarxa

\ip_servidor_sambapublic

on hi tindran permisos totals.

Carpeta amb permisos especials:

Aquí és on utilitzarem l’acl que hem configurat. Suposem que tenim dos grups al directori actiu, grup1 i grup2. Volem que en una carpeta, el grup1 pugui escriure, el grup2 pugui llegir i la resta no pugui fer res.

Creem la carpeta:

$ mkdir /home/samba/especial

Comandes bàsiques de gestió dels acl:

  • Afegir un usuari a l’acl d’un arxiu:
    $ setfacl -m u:usuari1:rwx /home/samba/especial
  • Treure un usuari de l’acl d’un arxiu:
    $ setfacl -x u:usuari1 /home/samba/especial
  • Afegir un grup a l’acl d’un arxiu:
    $ setfacl -m g:grup1:rwx /home/samba/especial
  • Treure un grup de l’acl d’un arxiu:
    $ setfacl -x g:grup1 /home/samba/especial
  • Treure tots els atributs acl d’un arxiu:
    $ setfacl -b /home/samba/especial

En el nostre cas fariem:

$ chmod 0700 /home/samba/especial
$ setfacl -m g:grup1:rwx /home/samba/especial
$ setfacl -m g:grup2:r-x /home/samba/especial

Per comprovar els permisos fem:

$ getfacl /home/samba/especial
# file: /home/samba/especial
# owner: root
# group: root
user::rwx
group::---
group:grup1:rwx
group:grup2:r-x
mask::rwx
other::---

Afegim la configuració a smb.conf:

[especial]
    comment = Carpeta amb permisos especials
    path = /home/samba/especial
    browseable = yes
    writable = yes
    create mask = 0700
    directory mask = 0750
    inherit permissions =yes
    inherit acls = yes

Recarreguem samba:

$ /etc/init.d/samba reload

A partir d’aquest moment els usuaris del grup1 i del grup2 del domini AD ja es poden connectar al recurs de xarxa

\ip_servidor_sambaespecial

on hi tindran els permisos seleccionats.

Quotes:

Només ens queda configurar les quotes d’usuari en aquesta partició.

Per activar les quotes fem:

$ quotacheck -auv
$ quotaon -a

S’ha creat l’arxiu aquota.user a l’arrel de la partició /dev/hda3 i les quotes per a usuari estan activades.

Per editar la quota d’un usuari fem:

$ edquota -u usuari1

S’ha de modificar el valor hard dels blocks tenint en compte que 1Mb = 1000. Per exemple, una quota de 10Mb per a l’usuari1 seria així:

Disk quotas for user usuari1 (uid 10001):

Filesystem blocks soft hard inodes soft hard
/dev/hda3 20 0 10000 4 0 0

Per veure el que està utilitzant un usuari:

$ quota -u usuari1

Per veure un resum de les dades de quota:

$ repquota -au

Conclusió:

Amb aquestes configuracions, tot i que molt bàsiques (sempre es recomana llegir la documentació de les comandes), disposem d’un servidor de fitxers complet i controlat. Per a més informació podeu consultar:

$ man smb.conf
$ man acl
$ man quota
...