miércoles, 29 de septiembre de 2010

Gestión de permisos en GNU/Linux


El sub-sistema de archivos de Linux es muy estable, eficiente y poderoso. Combina tres componentes para implementarlo: 1) que permisos otorgar o quitar, 2) a cuáles usuarios, y 3) sobre cuáles archivos.
Esta gestión se puede llevar a cabo, ya sea con una GUI (Graphical User Interface), si es que contamos con una instalación que tenga algún tipo de escritorio como ser gnome, kde, lxde, etc; o bien en el ambiente de servidores desde la CLI (Command Line Interface).
Esta última forma lleva una etapa de aprendizaje, pero termina siendo mas provechosa para el administrador del sistema.
La siguiente es una explicación detallada del comando 'chmod':

CHMOD

En este documento nos referimos a la asignación de permisos en servidores unix (unix, linux, freebsd, todos ellos pertenecientes a la familia unix, y con diferencia los mas difundidos en la red). La asignación de permisos se hace mediante el comando CHMOD. Por eso, cuando al leer las instrucciones de instalación de cualquier aplicación web te encuentres con la misteriosa frase "chmod 666 tal_archivo.htm" tener en consideración que nos están diciendo los permisos que ese archivo necesita.
El sistema operativo UNIX está diseñado para ser multiusuario. Por ello UNIX permite tres niveles de acceso a los archivos, para tres categorías diferentes de usuarios:
Owner (propietario) La persona que el sistema reconoce como dueño del archivo.
Group (grupo): Conjunto de usuarios con permisos similares. Muy usado en entornos de trabajo, es de escasa aplicación en páginas web.
Other (otros): Cualquier otra persona.
Es un error asociar el concepto de usuario a una persona real. Se trata de una abstracción, que se refiere no a personas sino a categorias. Por ejemplo, si nosotros creamos un script, somos efectivamente sus autores y propietarios; pero ese script esta destinado a la red. Nosotros, y el resto de personas, accederan al archivo no a traves de nuestra maquina local sino por internet. Es frecuente en los servidores la creación de usuarios genéricos (root, www, www-user etc). En definitiva no olvides que cuando asignas permisos a un script, el owner puede ser cualquiera que visite la página, lo cual será necesario si como es normal se trata de scripts que se administran via web.

Tipos de permiso de acceso:
Read (lectura): Permiso para ver el archivo o directorio, sin hacer cambios.
Write (escritura): Permiso de escritura: puede escribir el archivo, y por tanto, cambiarlo.
Execute (ejecución): El archivo o directorio puede ser ejecutado. Se usa para directorios con scripts, formularios, etc ...
Y tratándose de directorios:
read listar los archivos de un directorio
write añadir nuevos archivos al directorio
execute acceder a los archivos del directorio
Como conozco los permisos de un archivo ?
Si tenemos acceso ftp al servidor, tecleamos el comando ls -l y vemos algo asi:
-rw-r--r-- 1 irvnet irvnet 1272 Sep 28 07:31 index.php

El primer carácter indica si nos encontramos ante un directorio o un fichero: d significa directorio, - significa fichero, l significa link
Permisos del Owner
Permisos del Group
Permisos de los Otros
Nombre usuario
Nombre grupo
Tamaño
Fecha
Nombre del archivo

Advierte que tenemos TRES categorias de usuarios ("user," "group," y "other") y para categoria pueden asignarse TRES tipos de permisos: "r," "w," y "x".
Fijando permisos
La orden chmod puede usarse con letras o numeros. La forma mas corriente es expresar los permisos numericamente. Seguro que lo has visto por ahi, chmod 777 etc ...
Para comprender el significado tienes que tener en cuenta que convencionalmente 4 significa permiso de lectura. 2 permiso de escritura y 1 permiso de ejecución. Sumando estos valores vemos que un archivo puede tener los siguientes permisos (por cada tipo de usuario):
4= lectura
2= escritura
1= ejecución
6 (4+2)= lectura y escritura
5 (4+1)= lectura y ejecución
3 (2+1)= escritura y ejecución
7 (4+2+1)= lectura, escritura y ejecución
Todo ello para los tres tipos de usuario.
Asi, un chmod file 777 significa que owner, group y others tienen permiso de lectura, escritura y ejecución. chmod 766 significa que el owner tiene permiso de lectura, escritura y ejecución, y el group y others permiso de lectura y escritura. Chmod 744 significa que el owner tiene permisos de lectura, escritura y ejecución, y group y others unicamente permisos de lectura.
Como ves, son tres digitos, de izquierda a derecha designan los permisos del owner, group y others.
Vemos a continuación su equivalente en letras:
0  =  ---  =  sin acceso
1  =  --x  =  ejecución
2  =  -w-  =  escritura
3  =  -wx  =  escritura y ejecución
4  =  r--  =  lectura
5  =  r-x  =  lectura y ejecución
6  =  rw-  =  lectura y escritura
7  =  rwx  =  lectura, escritura y ejecución
Asi, en el ejemplo de antes:
rw-r--r--
significa que el owner tiene permisos de lectura y escritura (rw-); el group permisos de lectura unicamente (r--) y other, permiso de lectura (r--). ¿como seria el equivamente numerico? sería chmod 644.
La sintaxis para usar chmod con texto:
chmod [ugo][+-][rwx] [nombre_archivo]
Donde [u=user, g=group y o=other]; [+/- activa o desactiva los atributos siguientes] [r=read, w=write, x=execute]
Por ejemplo, chmod go+r index.php significa que asignamos permisos de lectura para group y others en index.php
De esta forma solo cambiamos los atributos que especificamos, pero no alteramos otros compatibles que pudieran estar asignados anteriormente) por ejemplo, no modifica la atribucion anterior a group de un permiso de ejecución).
Si queremos fijar de nuevo todos los permisos, la sintaxis sería:
chmod go=r index.php donde asignamos a group y other permiso de lectura sobre index.php y eliminamos cualquier otro permiso para ambos.
Tener en cuenta asimismo que puedes usar comodines:
chmod 644 *.html etc ...

No hay comentarios: