dijous, 2 d’octubre del 2008

Permisos en carpetes Apache i Linux en general

A Linux, per omissió, els arxius es poden assegurar a nivell d'usuari, de grup i/o de tothom, podent especificar si es tenen drets per a la lectura, l'escriptura/creació i/o el pas pel directori o l'execucció d'un programa. També existeix l'sticky bit que serveix per a indicar que es propagui el grup del directori pare i per a que només els propietaris dels arxius puguin canviar el nom o esborrar els arxius que pengin.

Amb la comanda ls -la obtindrem la informació sobre permisos dels arxius i directoris.
ls -la
total 20
drwxr-s--- 5 alexcor1 www-pgmr 4096 2008-10-02 08:57 .
drwxr-xr-x 20 root root 4096 2008-09-23 23:59 ..
drwxr-xr-x 5 alexcor1 alexcor1 4096 2008-10-02 08:40 default
drwxr-s--- 15 alexcor1 www-pgmr 4096 2008-09-17 09:15 NetStudio
drwxr-s--- 5 alexcor1 www-pgmr 4096 2008-09-24 13:49 vhosts


La primera posició és per a indicar el tipus d'element:
d = directori (mkdir)
- = arxiu
l = enllaç simbòlic (ln -s)
s = Unix domain socket (socketpair)
p = named pipe (mkfifo)
c = character device file
b = block device file


Segueixen tres blocs de tres lletres, el primer bloc per a permisos d'usuari, el segon per a permisos de grup i el tercer per a la resta. Aquestes lletres poden ser:
r = Lectura
w = Escriptura
x = Execucció
s = Sticky
- = Cap


Per assignar els permisos emprarem la comanda chmod amb els paràmetres (ugoa)(+-=)(rwxs) sent u per a establir permisos d'usuari, g de grup, o per a la resta i a per a tots tres. + per afegir, - per a rebocar i = per a establir. Per a dir que el propietari te permisos de lectura i escruptura, el grup només de lectura i la resta cap, executarem:
chmod u=rw arxiu
chmod g=r arxiu
chmod o= arxiu

Es podria fer tot d'una tocada amb chmod i un codi numèric que és la representació octal de cada un dels tres permisos possibles. Però és molt més agradable i entenedor treballar amb les lletres.

Després del digit, trobem el nome de l'usuari propietari de l'arxiu i el grup al que està assignat.

En un entorn de programació web, el que farem serà crear un grup anomenat www-pgmr al que pertanyeran els programadors i l'usuari que executa l'Apache.
addgroup www-pgmr
adduser alexcor1 www-pgmr
adduser www-data www-pgmr

Nota: Si els grups no es propaguen en els usuaris connectats actualment, cal reiniciar el sistema amb
sudo shutdown -r now

Indicarem que la carpeta /var/www tingui el grup www-pgmr i que aquest grup es propagui en els arxius que crearem activant l'Sticky byte.
chgrp -R www-pgmr /var/www
chmod g+s /var/www


Cal executar umask 27 o canviar-ho enlloc de 22 a /etc/profile o a ~/.profile amb el codi dels permisos en octal (27 = 000010111) per a que els nous arxius que creem tinguin el grup no tingui permisos d'escriptura i la resta d'usuaris no tinguin cap dret sobre els nous arxius.

Així si creem una carpeta i un arxiu
mkdir test
echo "User-agent: *" > test/robots.txt

Observarem que tant la carpeta com l'arxiu, s'han creat amb els permisos que volem:
ls -la test/
total 12
drwxr-s--- 2 alexcor1 www-pgmr 4096 2008-10-02 09:42 .
drwxr-s--- 6 alexcor1 www-pgmr 4096 2008-10-02 09:39 ..
-rw-r----- 1 alexcor1 www-pgmr 14 2008-10-02 09:42 robots.txt


Si necessitem operacions més complexes, llavors haurem de muntar la partició amb acl i emprar la comanda setfacl.