Chmod
De Wikipedia, la enciclopedia libre
chmod ("change mode", cambiar modo en idioma inglés) es una llamada al sistema y su comando asociado en el sistema operativo UNIX (estandarizados en POSIX y otros estándares) que permite cambiar los permisos de acceso de un archivo.
Tabla de contenidos |
[editar] Sinopsis
[editar] Llamada al sistema
Prototipo en lenguaje de programación C:
int chmod(const char *path, mode_t mode); int fchmod(int fd, mode_t mode);
mode es un número entero que especifica los permisos, como se detallará en el siguiente apartado.
[editar] Comando
chmod [-fv] [-R [-H | -L | -P]] modo archivo ... chmod [-fv] [-R [-H | -L | -P]] [-E] archivo ... chmod [-fv] [-R [-H | -L | -P]] [-C] archivo ...
[editar] Especificación de permisos
[editar] Permisos básicos
Existen tres permisos independientes, llamados permisos básicos, que pueden ser permitidos (estado 1) o denegados (estado 0) a un archivo y/o directorio
- r - lectura
- w - escritura
- x - ejecución
El significado de estos tres permisos se resume en la siguiente tabla:
Permiso | Archivo | Directorio |
---|---|---|
Lectura | Ver el contenido del archivo. | Ver el contenido del directorio, sin poder agregar, ni eliminar, ni visualizar sus archivos. |
Escritura | Modificar o eliminar el archivo. | Agregar o eliminar archivos del directorio. |
Ejecución | Ejecutar el archivo. | Acceder a los archivos del directorio. |
Usualmente se expresa estos permisos en un número entero de 3 bits, un bit a modo de bandera por cada permiso, con valor 1 ó 0 según el permiso esté concedido o denegado. De este modo existen 23 = 8 combinaciones posibles. Este número entero se expresa usualmente en base octal, base 8, para que exista un dígito diferente (del 0 al 7) por cada una de las 8 combinaciones posibles:
Número | Lectura (r) | Escritura (w) | Ejecución (x) |
---|---|---|---|
0 | |||
1 | |||
2 | |||
3 | |||
4 | |||
5 | |||
6 | |||
7 |
[editar] Clases de usuarios
Los permisos de sistemas UNIX se dividen en tres clases, conocidas como usuario, grupo y otros (con frecuencia abreviado UGO, por sus siglas en inglés, User, Group, Others). De hecho, los permisos en Unix son una forma simplificada de listas de control de acceso (ACLs).
En los sistemas de archivos Unix, cada archivo (y por lo tanto cada directorio, pues un directorio es un tipo de archivo) pertenece a un determinado usuario. Los permisos que el usuario propietario tiene sobre el archivo conforman la clase de usuario y solo se aplican a este usuario.
Un archivo también pertenece a un grupo de usuarios, lo que conforma la clase de grupo. Los permisos que se asignen a la clase de grupo se aplican únicamente a los miembros de ese grupo (que no sean el propietario del archivo).
El resto de los usuarios, es decir, los que no son el usuario propietario del archivo y no pertenecen al grupo de usuarios, conforman la clase otros o clase del resto.
Los permisos efectivos aplicados a un determinado usuario en relación a un archivo se determinan en un orden lógico de precedencia. Por ejemplo, el usuario propietario del archivo tendrá los permisos efectivos dados a la clase de usuario, sin importar los asignados a la clase de grupo o a la clase de otros.
Existen tres clases de usuarios, a los cuales se les puede asignar los permisos básicos anteriormente mencionados, de forma independiente:
- u – dueño: dueño del archivo o directorio
- g – grupo: grupo al que pertenece el archivo
- o – otros: todos los demás usuarios que no son el dueño ni del grupo
Como a cada uno de estos tipos de usuarios se le puede asignar 3 permisos independientes, se tiene permisos en total que pueden ser asignados o denegados de forma independiente. Como se ha dicho antes, la base 8 se utiliza habitualmente para que exista un dígito por cada combinación de permisos para un usuario.
Así, las posibles combinaciones en total se resumirían en números octales de tres dígitos del 000 al 777. Este número es el modo de permisos.
[editar] Permisos adicionales
Los sistemas UNIX emplean típicamente tres permisos o modos adicionales. Estos permisos especiales se asignan a archivos o directorios en conjunto, no a cada clase de forma separada (como sucedía con los permisos básicos).
- Permiso set user ID, setuid o SUID: cuando un archivo que tiene este permiso asignado se ejecuta, el proceso resultante asumirá la ID de usuario efectiva dada a la clase de usuario. El ejemplo típico es el cambio de una clave de usuario: ningún usuario debería poder modificar /etc/passwd/ directamente. La única forma de poder modificarlo debería ser a través del comando correspondiente, que necesariamente tendrá que tener asignado el setuid. Es decir, el comando /usr/bin/passwd ejecutado por un usuario se ejecutará como si lo hubiese invocado el superusuario, de manera de poder modificar /etc/passwd/.
- Permiso set group ID, setgid o SGID: cuando un archivo que tiene este permiso asignado se ejecuta, el proceso resultante asumirá la ID de grupo efectiva dada a la clase de grupo. Cuando el setgid le es asignado a un directorio, archivos nuevos y directorios creados debajo de ese directorio heredarán el grupo de ese directorio, a diferencia del comportamiento por defecto, que es usar el grupo primario del usuario efectivo al asignar el grupo de archivos nuevos y directorios.
- Permiso de sticky bit (o menos común, bit pegadizo): El comportamiento típico del sticky bit en archivos ejecutables fuerza al kernel a retener la imagen del proceso resultante luego de su terminación. Originalmente, esta era una característica para ahorrar memoria, pero hoy en día, los precios de las memorias han disminuído y exiten mejores técnicas para manejarlo, así que no se lo suele utilizar más para optimizaciones en archivos. En un directorio, por el contrario, el sticky bit previene que los usuarios renombren, muevan o borren los archivos que allí se encuentran, pertenecientes a usuarios otros que ellos mismos, incluso si tienen permiso de escritura en el directorio. Solo el propietario del directorio y el superusuario quedan exentos de esto.
Estos tres permisos (especificables de forma independiente), un bit por cada uno de ellos, permiten 8 combinaciones posibles que se expresan con un dígito en base 8 (del 0 al 7, uno por cada combinación posible) que se antepone al modo de permisos. Así, el modo se ampliaría ahora del 0000 al 7777.
[editar] Asignación de permisos en el comando chmod
Existen 2 formas o modos de asignar los permisos a los usuarios:
[editar] Modo octal
Expresando los permisos con números enteros en base 8 de la forma anteriormente mencionada.
Por ejemplo:
chmod 766 file.txt # brinda acceso total al dueño # y lectura y escritura a los demás chmod 770 file.txt # brinda acceso total al dueño y al grupo # y elimina todos los permisos a los demás usuarios chmod 635 file.txt # setea lectura y escritura al dueño, # escritura y ejecución al grupo, # y lectura y ejecución al resto
[editar] Modo caracter
Posee 3 modificadores que permiten realizar la tarea:
- + – añade un modo
- – – remueve un modo
- = – especifica un modo (sobreescribiendo el modo anterior)
Por ejemplo:
chmod u+w arch.txt # agrega permisos de escritura al dueño chmod –x arch.txt # elimina el permiso de ejecución a todos los usuarios
[editar] Véase también
Programas y comandos Unix de línea de comandos (more) | |||
Gestión de Ficheros: | cat | cd | chmod | chown | chgrp | cp | du | df | file | fsck | ln | ls | lsof | mkdir | mount | mv | pwd | rm | rmdir | split | touch | ||
Gestión de procesos: | at | chroot | crontab | exit | kill | killall | nice | pgrep | pidof | pkill | ps | sleep | time | top | wait | watch | ||
Gestión de Usuarios/Entorno: | env | finger | id | mesg | passwd | su | sudo | uname | uptime | w | wall | who | whoami | write | date | ||
Procesado de texto: | awk | cut | diff | ex | head | iconv | join | less | more | paste | sed | sort | tail | tr | uniq | wc | xargs | ||
Programación Shell: | echo | expr | printf | unset | Imprimiendo: | lp |
Gestión de redes: inetd | netstat | ping | rlogin | traceroute |
Búsqueda: find | grep | strings |
Miscelánea: banner | bc | cal | man | size | yes |