4.5.3 Permisos de acceso de archivos y directorios
Los permisos de acceso de los archivos y directorios se definen en forma
separada para las siguientes tres categor�as de usuario:
-
el usuario propietario del archivo (u),
-
los usuarios del grupo al que pertenece archivo (g) y
-
todos los otros usuarios (o).
Para un archivo, cada permiso permite:
-
leer (r): examinar el contenido del archivo,
-
escribir (w): modificar el archivo y
-
ejecutar (x): ejecutar el archivo como comando.
Para un directorio, cada permiso permite:
-
leer (r): listar el contenido del directorio,
-
escribir (w): a�adir o eliminar archivos del directorio y
-
ejecutar (x): acceder a los archivos del directorio.
El permiso de ejecuci�n de un directorio permite no s�lo la
lectura de sus archivos sino la posibilidad de ver los atributos de los mismos
tales como tama�o y fecha y hora de modificaci�n.
Para mostrar la informaci�n referente a los permisos de archivos y directorios
se utiliza el comando ls
. V�ase ls(1)
. Cuando se
invoca ls
con la opci�n -l, se muestra la siguiente
informaci�n :
-
el tipo de archivo (primer car�cter)
-
los permisos de acceso del archivo (los nueve caracteres, tres
para cada usuario, grupo y otros en ese orden)
-
el n�mero de enlaces duros del archivo
-
el nombre del usuario propietario del archivo
-
el nombre del grupo al que pertenece el archivo
-
el tama�o del archivo en caracteres (en bytes)
-
la fecha y hora del archivo (mtime)
-
el nombre del archivo.
Para cambiar el propietario de un archivo se utiliza chown
desde
la cuenta de superusuario. Para cambiar el grupo al que pertenece un archivo
se utiliza chgrp
desde la cuenta del propietario del archivo o
desde la cuenta de superusuario. Para cambiar los permisos de acceso de un
archivo o de un directorio se utiliza chmod
desde la cuenta del
propietario del mismo o desde la cuenta de root. Veamos la sintaxis b�sica
para manipular el archivo loquesea
:
# chown nuevo_usuario loquesea
# chgrp nuevo_grupo loquesea
# chmod [ugoa][+-=][rwx][,...] loquesea
V�ase chown(1)
, chgrp(1)
y chmod(1)
para
m�s detalles.
Por ejemplo, para que el usuario quiensea sea propietario de un
determinado directorio que sea compartido por el grupo loquesea,
ejecute los siguientes comandos desde la cuenta de superusuario:
# cd /determinada/ubicaci�n/
# chown -R quiensea:loquesea .
# chmod -R ug+rwX,o=rX .
Existen tres bits m�s para permisos especiales:
-
ID usuario (s o S en vez de la x del usuario),
-
ID grupo (s o S en vez de la x del grupo) y
-
bit adherente (t o T en vez de la x de otros).
Activando el ID usuario de un archivo ejecutable se permite a
un usuario ejecutarlo con el ID del propietario del archivo (por ejemplo, el
root). An�logamente, activando el ID grupo
de un archivo ejecutable se permite a un usuario ejecutarlo con el ID del grupo
del archivo (por ejemplo, el root). Puesto que estas
activaciones pueden implicar riesgos en la seguridad del sistema se requiere
proceder con cautela.
Activando el ID grupo de un directorio se habilita el esquema
de creaci�n de archivos del tipo BSD donde todos los archivos que se crean en
el directorio pertenecen al grupo del directorio.
Activando el bit adherente en un directorio, se evita que un
usuario que no es propietario de un archivo lo pueda eliminar del mismo. Para
asegurar el contenido de un archivo en directorios donde todo el mundo puede
escribir como en /tmp
no s�lo se debe desactivar el permiso de
escritura del archivo sino tambi�n activar el bit
adherente del directorio. Caso contrario, el archivo puede ser
borrado por un usuario que tenga permiso de escritura en el directorio, al
crear un nuevo archivo con el mismo nombre.
Veamos algunos ejemplos interesantes sobre permisos de archivos:
$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/pppd
crw-rw---- 1 root dip 108, 0 Jan 18 13:32 /dev/ppp
-rw-r--r-- 1 root root 1051 Jan 26 08:29 /etc/passwd
-rw-r----- 1 root shadow 746 Jan 26 08:29 /etc/shadow
-rwsr-xr-- 1 root dip 234504 Nov 24 03:58 /usr/sbin/pppd
$ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
drwxrwxrwt 4 root root 4096 Feb 9 16:35 /tmp
drwxrwsr-x 10 root staff 4096 Jan 18 13:31 /usr/local
drwxrwsr-x 3 root src 4096 Jan 19 08:36 /usr/src
drwxrwsr-x 2 root mail 4096 Feb 2 22:19 /var/mail
drwxrwxrwt 3 root root 4096 Jan 25 02:48 /var/tmp
Usando el comando chmod(1)
existe un modo alternativo de asignar
permisos a los archivos Este m�todo utiliza entre 3 y 4 n�meros escritos en
octal (base 8). Cada d�gito corresponde a:
-
primer d�gito opcional: suma de ID usuario (=4), ID
grupo (=2) y bit adherente (=1)
-
segundo d�gito: suma de los permisos de lectura (=4),
escritura (=2) y ejecuci�n (=1) del
usuario
-
tercer d�gito: �dem para grupo
-
cuarto d�gito: �dem para otros
Suena complicado pero en realidad es bastante sencillo. Si observa las
primeras columnas (2-10) de la salida del comando ls -l y lee sus
permisos en representaci�n binaria (base 2) (con "-" igual a
"0" y "rwx" igual a "1") le resultar� familiar
los permisos de archivo en representaci�n octal (base 8). [33] Por ejemplo pruebe:
$ touch loquesea loquefuera
$ chmod u=rw,go=r loquesea
$ chmod 644 loquefuera
$ ls -l loquesea loquefuera
-rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 loquesea
-rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 loquefuera
Se puede definir la m�scara de permisos predeterminada usando el comando
umask
que viene con el shell. V�ase builtins(7)
.