En los sistemas operativos Unix y similares , chmod es el comando y la llamada al sistema que se utilizan para cambiar los permisos de acceso y los indicadores de modo especial (los indicadores setuid , setgid y sticky ) de los objetos del sistema de archivos ( archivos y directorios ). En conjunto, originalmente se los denominaba modos [1] y el nombre chmod se eligió como una abreviatura de change mode [ 2 ] .
El comando chmod apareció por primera vez en la versión 1 de AT&T Unix , junto con la llamada al sistema chmod .
A medida que los sistemas crecieron en número y tipos de usuarios, se agregaron listas de control de acceso [3] a muchos sistemas de archivos además de estos modos más básicos para aumentar la flexibilidad.
La versión de chmod incluida en GNU coreutils fue escrita por David MacKenzie y Jim Meyering. [4] El comando está disponible como un paquete separado para Microsoft Windows como parte de la colección UnxUtils de puertos Win32 nativos de utilidades comunes de GNU Unix. [5] El comando chmod también ha sido portado al sistema operativo IBM i . [6]
A lo largo de esta sección, u ser se refiere al propietario del archivo, como recordatorio de que la forma simbólica del comando utiliza " u ", para evitar confusiones con "other".
Tenga en cuenta que sólo el usuario o el superusuario (root) puede cambiar los permisos de archivos.
chmod [options] mode[,mode] file1 [file2 ...]
[7]
Las opciones que normalmente se implementan incluyen:
-R
Recursivo, es decir, incluye objetos en subdirectorios.-v
verbose, muestra los objetos modificados (los objetos que no han cambiado no se muestran).Si se especifica un enlace simbólico , el objeto de destino se ve afectado. Los modos de archivo asociados directamente con los enlaces simbólicos no suelen utilizarse.
Para ver el modo de archivo, se pueden utilizar los comandos lso :stat
$ ls -l findPhoneNumbers.sh -rwxr-xr-- 1 dgerman staff 823 16 de diciembre 15:03 findPhoneNumbers.sh $ stat -c %a findPhoneNumbers.sh 754
Los r
caracteres , w
, y x
especifican el acceso de lectura, escritura y ejecución respectivamente. El primer carácter del indicador ls -l indica el tipo de objeto; un guión representa un archivo simple. El script findPhoneNumbers.sh puede ser leído, escrito y ejecutado por el usuario dgerman ; leído y ejecutado por miembros del grupo staff ; y solo leído por otros usuarios.
Las partes principales de los permisos chmod :
Por ejemplo:rwxr-x---
Cada grupo de tres caracteres define permisos para cada clase :
rwx
, definen permisos para la clase Usuario (es decir, el propietario del archivo).r-x
, definen permisos para la clase Grupo (es decir, el grupo propietario del archivo)---
, definen los permisos para la clase Otros . En este ejemplo, los usuarios que no son los propietarios del archivo y que no son miembros del Grupo (y, por lo tanto, están en la clase Otros ) no tienen permiso para acceder al archivo.El formato numérico chmod acepta hasta cuatro dígitos. Los tres dígitos más a la derecha definen los permisos para el usuario del archivo, el grupo y otros. El dígito inicial opcional, cuando se proporcionan 4 dígitos, especifica los indicadores especiales setuid , setgid y sticky . Cada dígito de los tres dígitos más a la derecha representa un valor binario, que controla los permisos de "lectura", "escritura" y "ejecución" respectivamente. Un valor de 1 significa que una clase tiene permitido realizar esa acción, mientras que un 0 significa que no está permitido.
Por ejemplo, 754
permitiría:
Un código numérico permite la ejecución si y solo si es impar (es decir 1
, 3
, 5
, o 7
). Un código numérico permite la "lectura" si y solo si es mayor o igual que 4
(es decir 4
, 5
, 6
, o 7
). Un código numérico permite la "escritura" si y solo si es 2
, 3
, 6
o 7
.
Cambiar permisos para permitir que los programadores actualicen un archivo:
$ ls -l Archivo -rw-r--r-- 1 jsmith programmers 57 3 jul 10:13 Archivo $ chmod 664 Archivo $ ls -l Archivo -rw-rw-r-- 1 jsmith programmers 57 3 jul 10:13 Archivo
Dado que los bits setuid , setgid y sticky no se especifican, esto es equivalente a:
$ chmod 0664 Archivo
El comando chmod también acepta una notación simbólica más detallada, [8] que permite modificar modos específicos sin modificar otros modos. El modo simbólico está compuesto por tres componentes que se combinan para formar una única cadena de texto:
$ chmod [ referencias ][ operador ][ modos ] archivo ...
Las clases de usuarios se utilizan para distinguir a quiénes se aplican los permisos. Si no se especifica ninguna clase, se implica "all". Las clases se representan con una o más de las siguientes letras:
El programa chmod utiliza un operador para especificar cómo se deben ajustar los modos de un archivo. Se aceptan los siguientes operadores:
Los modos indican qué permisos se concederán o se quitarán a las clases especificadas. Hay tres modos básicos que corresponden a los permisos básicos:
Se pueden especificar múltiples cambios separando varios modos simbólicos con comas (sin espacios). Si no se especifica un usuario, chmod
se comprobará la máscara de usuario y el efecto será como si se hubiera especificado " a ", excepto que los bits que están configurados en la máscara de usuario no se ven afectados. [9]
$ ls -ld dir # muestra los modos de acceso antes de chmod drwxr-xr-x 2 jsmitt northregion 96 8 abr 12:53 shared_dir $ chmod g+w dir $ ls -ld dir # muestra los modos de acceso después de chmod drwxrwxr-x 2 jsmitt northregion 96 8 abr 12:53 shared_dir
$ ls -l nuestroMejorArchivoDeReferencia -rw-rw-r-- 2 tmiller northregion 96 8 de abril 12:53 nuestroMejorArchivoDeReferencia $ chmod a-w nuestroMejorArchivoDeReferencia $ ls -l nuestroMejorArchivoDeReferencia -r--r--r-- 2 tmiller northregion 96 8 de abril 12:53 nuestroMejorArchivoDeReferencia
$ ls -ld referenceLib drwxr----- 2 ebowman northregion 96 8 de abril 12:53 referenceLib $ chmod ug = rx referenceLib $ ls -ld referenceLib dr-xr-x--- 2 ebowman northregion 96 8 de abril 12:53 referenceLib
$ chmod ug+rw sample $ ls -ld sample drw-rw---- 2 rsanchez presupuesto 96 8 dic 12:53 sample
$ chmod a-rwx sample $ ls -l sample ---------- 2 rswven planificación 96 8 de diciembre 12:53 sample
$ # Permisos de archivo de muestra antes del comando $ ls -ld sample drw-rw---- 2 oschultz warehousing 96 Dec 8 12:53 NY_DBs $ chmod ug = rx sample $ ls -ld sample dr-xr-x--- 2 oschultz warehousing 96 Dec 8 12:53 NJ_DBs
$ chmod u = rw,go = r muestra $ ls -ld muestra drw-r--r-- 2 oschultz warehousing 96 8 de diciembre 12:53 muestra
El comando chmod también es capaz de cambiar los permisos adicionales o los modos especiales de un archivo o directorio. Los modos simbólicos utilizan " s " para representar los modos setuid y setgid , y " t " para representar el modo sticky . Los modos solo se aplican a las clases apropiadas, independientemente de si se especifican o no otras clases.
La mayoría de los sistemas operativos admiten la especificación de modos especiales de forma numérica, en particular en octal, pero algunos no lo hacen. En estos sistemas, solo se pueden utilizar los modos simbólicos.
chattr
, el comando utilizado para cambiar los atributos de un archivo o directorio en sistemas Linuxchown
, el comando utilizado para cambiar el propietario de un archivo o directorio en sistemas tipo Unixchgrp
, el comando utilizado para cambiar el grupo de un archivo o directorio en sistemas tipo Unixcacls
, un comando utilizado en Windows NT y sus derivados para modificar las listas de control de acceso asociadas a un archivo o directorioattrib
umask
, restringe el modo (permisos) en la creación de archivos o directorios en sistemas tipo Unix