Control
de accesos tradicional o estandard.
u: usuario propietario de la cuenta
g: resto de usuarios de su grupo
o: resto de usuarios de otros grupos
-rw-r----- 1 pedro inf 6 9 Sep 16:54 datos
drwxr-x--x 2 pedro inf 24 9 Sep 16:55 dire
-rw-r----- 1 pedro inf 7908 9 Sep 16:55 passwd.man
El significado de los distintos campos en el fichero datos es el siguiente:
- |
Tipo del fichero; en este caso un fichero regular |
-rw-r----- |
Bits de modo asociados al fichero |
1 |
Número de enlaces al fichero |
pedro |
Nombre del propietario del fichero |
inf |
Grupo del fichero |
6 |
Tamaño del fichero en bytes |
9 Sep 16:54 |
Fecha y hora de última modificación |
datos |
Nombre del fichero |
Estos bits se distribuyen en 3 grupos de 3 bits y definen los permisos de acceso al objeto para las tres clases de usuarios diferenciados (u, g y o).
rwx |
r-x |
--- |
| |
| |
| |
propietario |
grupo |
otros |
r: permiso de lectura
w: permiso de escritura
x: permiso de ejecución
Ejemplo
-rwxr-x--- 1 pedro inf 7 9 Sep 17:02 datosPermisos en el caso de ficheros
- El permiso de lectura (r) significa que se puede abrir el fichero con la llamada open() en modo de lectura y leer su contenido con read().
- El permiso de escritura (w) significa que se puede sobreescribir el contenido del fichero, modificándolo o añadiendo información.
- El permiso de ejecución (x) tan solo tiene sentido con ficheros ejecutables o guiones del shell. Los ficheros se ejecutarán como una orden al shell o mediante alguna de las llamadas del tipo exec().
Permisos en el caso de directorios
- El permiso de lectura (r) significa que se puede listar el contenido del directorio con la orden ls, o usar las llamadas opendir() y readdir() sobre el mismo.
- El permiso de escritura (w) significa que se pueden añadir, renombrar o borrar entradas en el directorio.
- El permiso de ejecución (x) en el caso de directorios se denomina permiso de búsqueda. Se usa para permitir listar toda la información sobre los ficheros que contiene, entrar al directorio con cd o abrir los ficheros que contiene (si se tiene permiso de lectura sobre los mismos).
La orden chmod
Modo simbólico
En modo simbólico es posible otorgar o denegar cualquier permiso individual sobre los ficheros y directorios. Su formato general es el siguiente:
Ejemplo
En este caso ejecutamos la orden sin opciones y cada parte significa lo siguiente
go |
Son las clases sobre las que se aplica la orden, es decir, los grupos de usuarios cuyos bits van a modificarse. En este caso se modifican los bits del grupo (g) y de otros (o). |
- |
Indica la acción a realizar. En este caso denegar un permiso |
w |
Indica el permiso a conceder o denegar |
datos texto |
Son los ficheros cuyos permisos se modifican |
En resumen, la orden anterior elimina el permiso de escritura sobre los ficheros datos y texto para todos los usuarios salvo su propietario.
chmod opción clase acción permiso lista-de-ficheros
chmod [OPCIONES] [ugoa] [+-=] [rwxstXugo] ficheros
Detallemos algo más el significado de cada valor:
Valores de clase
u: modifica los permisos del usuario (del propietario).
g: modifica los permisos del grupo.
o: modifica los permisos de otros.
a: modifica los permisos de todos los usuarios.
Como hemos visto en el ejemplo anterior, puede indicarse más de un valor de clase a la vez.
Valores de acción
+: Añade (otorga) el permiso o permisos indicados.
-: Elimina (deniega) el permiso o permisos indicados.
=: Reemplaza el valor actual por los indicados
Valores de permiso
r: permiso de lectura
w: permiso de escritura
x: permiso de ejecución
s t X u g o: permisos especiales, alguno de los cuales explicaremos más adelante.
Opciones
Consultar la página de manual en cada sistema,
Ejemplos
% chmod a-x fichero
Elimina el permiso de ejecución para todos los usuarios
% chmod ug=rw fichero
Hace que el propietario y su grupo tengan permiso de lectura y escritura sobre el fichero. Al no asignarse explícitamente, no tendremos permiso de ejecución.
% chmod go+r fichero
Añade permiso de lectura del fichero a los usuarios no propietarios del mismo
Ejemplo
% chmod ug+r, o= ficheros
Añade permiso de lectura al propietario y a su grupo, y anula todos los permisos al resto de usuarios.
Modo numérico.
La orden chmod puede también utilizarse en modo numérico o absoluto, donde los permisos se representan mediante un número octal. Su formato general es el siguiente:
chmod opciones modo ficheros
Los tres dígitos restantes se corresponden con los permisos de cada grupo de usuarios (u g o), es decir, con cada grupo de 3 bits.
rwx |
r-x |
r-- |
| |
| |
| |
dígito 1 |
dígito 2 |
digito 3 |
La relación entre cada trío de bits (rwx) y cada dígito octal [0..7] se establece de la siguiente forma. Si el permiso está activo, el bit correspondiente del número octal vale 1, mientras que si el permiso está inactivo (-) el bit vale 0.
rwx |
r-x |
r-- |
| |
| |
| |
111 |
101 |
100 |
Una vez tenemos los 3 números en forma binaria podemos usar su valor en octal
rwx |
r-x |
1-- |
| |
| |
| |
7 |
5 |
4 |
Así pues, el número octal 754 representa los permiso rwxr-xr--.
Una vez conocemos la relación entre la representación mediante caracteres y la numérica, podemos ver algún ejemplo de su uso
Ejemplos
% chmod 644 datos
% ls -l datos
-rw-r--r-- 1 pedro inf 7 9 Sep 17:02 datos
% chmod 750 datos
% ls -l datos
-rwxr-x--- 1 pedro inf 7 9 Sep 17:02 datos
La orden umask
% umask
026
Podemos ver que, dado que el bit más significativo es 0, este se ha obviado en la salida.
Supongamos que los ficheros se crean por defecto con los permisos 0666 y que la mascara vale 0026:
octal |
binario |
||||
0666 |
000 |
110 |
110 |
110 |
modo de creación por defecto |
0026 |
000 |
000 |
010 |
110 |
mascara |
(0026) |
111 |
111 |
101 |
001 |
complemento a uno de la mascara |
0640 |
000 |
110 |
100 |
000 |
|
Otra forma de explicar su funcionamiento es diciendo que los bits del modo de creación se pasan sobre los de la máscara (sin complementar), cuando encuentran un 1 se conmuta su valor y cuando encuentran un 0 se mantiene.
Para fijar un valor dado a la mascara se le pasa este como argumento a la orden umask
% umask 022
% umask
022
Normalmente en el fichero .login, .profile o /etc/profile aparece una línea donde se fija el valor de la mascara.
Permisos especiales. Programas SUID y SGID
% ll /usr/bin
-r-sr-xr-x 1 root bin 65536 12 Jun 1995 /usr/bin/login
% ll /bin/mail
-r-sr-sr-x 2 root mail 36864 12 Jun 1995 /bin/mail
La orden chmod y el permiso "s"
% chmod u+s datos
% ll datos
-rwsr-x--- 1 pedro inf 7 9 Sep 17:02 datos
% chmod g+s datos
% ll datos
-rwsr-s--- 1 pedro inf 7 9 Sep 17:02 datos
Así, la orden: % chmod 4700 datos convierte el fichero en SUID mientras la orden: % chmod 6750 datos lo convierte en SGID y SUID.
% chmod 6744 datos
% ll datos
-rwsr-Sr-- 1 pedro inf 10 10 Sep 10:53 datos
Problemas de seguridad con SUID
% cp /bin/sh /tmp/supersh
% chmod 4755 /tmp/supersh