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 ...