Para evitar que otros usuarios accedan a nuestros ficheros GNU/Linux al igual que otros sistemas UNIX utiliza permisos y cada usuario puede acceder unica y exclusivamente a aquellos ficheros para los cuales tiene concedido acceso.
Dado que en los sistemas UNIX todo son ficheros es importante el conocer bien el mecanismo que otorga privilegios para el acceso a los ficheros.
Los permisos de los ficheros se almacenan utilizando un entero de doce bits y se dividen en ternas:
La terna más significativa se utiliza para especificar unos permisos especiales que son los SUID, SGID y el Sticky Bit.
La siguiente terna se utiliza para especificar los permisos del propietario del fichero.
La siguiente terna se utiliza para especificar los permisos del grupo del propietario del fichero.
La terna menos significativa se utiliza para especificar los permisos del resto de usuarios, es decir de aquellos usuarios que no estan en el grupo del usuario que posee el fichero.
Podemos utilizar ls -l para ver los permisos de un fichero:
[pcm@sal]$
ls -l admlinux.xml
-rw-r--r-- 1 jose users 1,8K 2007-04-08 18:38 admlinux.xml
[pcm@sal]$
La primera columna nos da los permisos. El primer carácter nos indica el tipo de fichero que es:
- indica un fichero normal.
d indica un directorio.
c indica un dispositivo carácter (monitor, impresora).
s indica un socket.
b indica un dispositivo de bloques (discos).
l indica un enlace.
Los siguientes tres carácteres indican los permisos que tiene el propietario del fichero.
Los siguientes tres carácteres indican los permisos que tiene el grupo del propietario del fichero.
Los siguientes tres carácteres indican los permisos que tienen el resto de usuarios.
Los permisos típicos que nos podemos encontrar son:
Lectura denotado como "r".
Fichero: Podemos leer el contenido del fichero.
Directorio: Podemos leer el contenido del directorio (mediante ls por ejemplo).
Escritura denotado como "w".
Fichero: Podemos modificar el contenido del fichero.
Directorio: Podemos modificar el contenido del directorio. Podemos crear y borrar ficheros dentro del directorio.
Ejecución denotado como "x".
Fichero: Podemos ejecutar el fichero.
Directorio: Podemos entrar al directorio (mediante cd por ejemplo).
Sólo el root y el propietario del fichero podrán cambiar los permisos de los ficheros.
Para hacerlo se utiliza el comando chmod.
chmod sólo actua sobre ficheros. Si queremos que actue de forma recursiva sobre todos los directorios tendremos que utilizar el flag -R.
Para cambiar permisos de forma intuitiva utilizaremos "u" para hacer referencia a los permisos del usuario, "g" para hacer referencia a los permisos del grupo y "o" para hacer referencia a los permisos del resto de usuarios.
Además utilizaremos "=" para establecer unos permisos en concreto, "+" para añadir permisos a los ya existentes y "-" para quitar permisos:
[jose@sal]$
ls -l evms.xml
-rw-r--r-x 1 jose jose 70992 2007-04-09 00:21 evms.xml
[jose@sal]$
chmod u=rwx,g+w,o-x evms.xml
[jose@sal]$
ls -l evms.xml
-rwxrw-r-- 1 jose jose 70992 2007-04-09 00:21 evms.xml
[jose@sal]$
Si utilizamos el flag -v nos informa del resultado.
El método anterior es muy intuitivo, pero engorroso. Es posible utilizar notación octal para establecer los permisos. Al principio cuesta acostumbrarse, pero al poco tiempo es más intuitivo que el método anterior.
Se utiliza notación octal porque con tres digitos en binario se pueden representar ocho números diferentes.
Para poner los permisos en octal se pone a uno el permiso a establecer y a cero el que no se quiere conceder:
Para establecer estos permisos en octal:
[root@sal]#
chmod 754 admlinux.xml
[root@sal]#
Cuando creamos un fichero se crea con unos permisos por defecto. Estos permisos están especificados por el umask:
[root@sal]#
umask
0022
[root@sal]#
umask -S
u=rwx,g=rx,o=rx
[root@sal]#
Para determinar la máscara a utilizar se hace al contrario que con los permisos, es decir se pone a uno los permisos que se quieren quitar:
Para establecer la máscara:
[root@sal]#
umask 026
[root@sal]#
umask -S
0026
[root@sal]#