En Unix y Unix-como sistemas operativos , chmod es el comando y la llamada al sistema utilizado para cambiar los permisos de acceso de sistema de archivos objetos ( archivos y directorios ) a veces conocido como modos . También se utiliza para cambiar los indicadores de modo especial, como los indicadores setuid y setgid y un bit "pegajoso" . La solicitud es filtrada por umask . El nombre es una abreviatura de modo de cambio . [1] Se muestran cuandoenumerar archivos en formato largo.
Autor (es) original (es) | Laboratorios AT&T Bell |
---|---|
Desarrollador (es) | Varios desarrolladores comerciales y de código abierto |
Versión inicial | 3 de noviembre de 1971 |
Sistema operativo | Unix , similar a Unix , Plan 9 , Inferno , IBM i |
Plataforma | Multiplataforma |
Tipo | Mando |
Licencia | coreutils : GPLv3 |
En la estructura de estadísticas , el tipo de archivo y los permisos (el modo ) se almacenan juntos en un st_mode
campo de bits , que tiene un tamaño de al menos 12 bits (3 bits para especificar el tipo entre los siete posibles tipos de archivos ; 9 bits para permisos) . POSIX define el diseño de los permisos como mínimo de 9 bits, pero el resto no está definido. [2]
Historia
A El comando chmod apareció por primera vez en AT&T Unix versión 1.
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 incluido en GNU coreutils fue escrito por David MacKenzie y Jim Meyering. [4]
La El comando chmod también se ha trasladado al sistema operativo IBM i . [5]
Preliminares
Los sistemas similares a Unix implementan tres permisos específicos que se aplican a cada clase:
- El permiso de lectura se indica
r
y tiene un valor numérico4
.- Cuando se establece para un directorio, el permiso de lectura puede otorgar el derecho a leer los nombres de los archivos en el directorio (dependiendo de la implementación). No se permite el acceso a la información sobre los archivos.
- Cuando se establece para un archivo, el permiso de lectura otorga el derecho a leer el archivo y sus atributos.
- El permiso de ejecución se denota
x
y tiene valor1
.- Cuando se establece para un directorio, el permiso de ejecución otorga la capacidad de búsqueda : otorga la capacidad de acceder al contenido del archivo y la metainformación si se conoce su nombre, pero no enumera el contenido de los archivos dentro del directorio, a menos que también se establezca lectura .
- Cuando se establece para un archivo, el permiso de ejecución otorga la capacidad de ejecutar el archivo. Este permiso debe establecerse para programas ejecutables y scripts invocados desde un símbolo del sistema.
- El permiso de escritura se indica mediante un
w
valor numérico2
.- Cuando se establece para un directorio, el permiso de escritura otorga la capacidad de modificar entradas en el directorio, lo que incluye la creación, eliminación y cambio de nombre de archivos. La ejecución también debe establecerse.
- Cuando se establece para un archivo, el permiso de escritura otorga el derecho a modificar el archivo. Programas que "modifican" el archivo creando un nuevo archivo y al guardarlo, eliminan la versión anterior y cambian el nombre de la nueva. Fallará sin permiso de escritura en el directorio.
Cuando no se establece un permiso, se deniega el acceso correspondiente.
Los permisos en sistemas similares a Unix no se heredan. Los archivos creados dentro de un directorio no tienen necesariamente los mismos permisos que ese directorio.
Los permisos en sistemas similares a Unix se administran en tres ámbitos o clases distintos. Estos ámbitos se conocen como usuario (indicado por u
), grupo (indicado por g
) y otros (indicados por o
). Los archivos y directorios son propiedad de un usuario que define la clase de usuario del archivo . Los archivos y directorios tienen un atributo de grupo y cualquier usuario que sea miembro de ese grupo tiene los derechos definidos por los indicadores de grupo. A los usuarios que no son el propietario ni un miembro del grupo del archivo o directorio se les otorgan derechos basados en las o
banderas. El propietario del archivo tendrá los permisos otorgados a la clase de usuario independientemente de los derechos otorgados a la clase de grupo u otras clases, que pueden ser más restrictivos que los derechos otorgados a los miembros del grupo u otros .
Sintaxis del comando
A lo largo de esta sección, u Ser se refiere al propietario del archivo, como un recordatorio de que la forma simbólica de los usos de comando " U ".
chmod [options] mode[,mode] file1 [file2 ...]
[6]
Las opciones implementadas generalmente incluyen:
-R
Recursivo, es decir, incluir objetos en subdirectorios.-v
detallado, muestra los objetos cambiados (los objetos sin cambios no se muestran).
Si se especifica un enlace simbólico , el objeto de destino se ve afectado. Por lo general, no se utilizan los modos de archivo directamente asociados con los enlaces simbólicos.
Para ver el modo de archivo, se pueden usar los comandos ls
o stat
:
$ ls -l findPhoneNumbers.sh -rwxr-xr-- 1 dgerman staff 823 16 de diciembre 15:03 findPhoneNumbers.sh $ stat -c% a findPhoneNumbers.sh 754
El r
, w
y x
especifican el acceso de lectura, escritura y ejecución. El primer personaje del ls display denota el tipo de objeto; un guión representa un archivo sin formato. El usuario puede leer, escribir y ejecutar este script dgerman ; leído y ejecutado por miembros de la grupo de personal ; y solo lo leerán otros usuarios.
Modos octales
Las partes principales del permisos chmod :
Por ejemplo: drwxrwx---
Los caracteres a la derecha de la "d" definen los permisos para cada clase :
- los tres caracteres de la izquierda
rwx
, definen los permisos para la clase de usuario (es decir, el propietario del archivo). - los tres caracteres del medio
rwx
, definen los permisos para la clase de grupo (es decir, el grupo que posee el archivo) - los últimos tres caracteres,
---
definen los permisos para la clase Otros . En este ejemplo, los usuarios que no son el propietario 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.
Permisos numéricos
La El formato numérico chmod acepta hasta cuatro dígitos octales. Los tres dígitos de la derecha definen los permisos para el usuario del archivo, el grupo y otros. El dígito inicial opcional, cuando se dan 4 dígitos, especifica el especial setuid , setgid y banderas adhesivas . 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 puede realizar esa acción, mientras que un 0 significa que no está permitida.
# | Suma | rwx | Permiso |
---|---|---|---|
7 | 4 (r) + 2 (w) + 1 (x) | rwx | leer, escribir y ejecutar |
6 | 4 (r) + 2 (w) | rw- | Lee y escribe |
5 | 4 (r) + 1 (x) | r-x | leer y ejecutar |
4 | 4 (r) | r-- | solo lectura |
3 | 2 (ancho) + 1 (x) | -wx | escribir y ejecutar |
2 | 2 (w) | -w- | escribir solamente |
1 | 1 (x) | --x | ejecutar solo |
0 | 0 | --- | ninguno |
Por ejemplo, 754
permitiría:
- "leer" (4), "escribir" (2) y "ejecutar" (1) para la clase de usuario , es decir, 7 (4 + 2 + 1).
- "leer" (4) y "ejecutar" (1) para la clase de grupo , es decir, 5 (4 + 1).
- Solo "leer" (4) para la clase Otros .
Un código numérico que permite la ejecución si y sólo si es impar (es decir 1
, 3
, 5
, o 7
). Mientras que un código numérico permite "leer" si y sólo si es mayor o igual a 4
, esto significa 4
, 5
, 6
, o 7
).
Para determinar si se permite "escribir", reste 1 del valor numérico si es impar (y no restar nada si es par); entonces se permite "escribir" si y solo si este número resultante es 2
o 6
. Por ejemplo:
- Si el valor era
6
(respectivamente,2
) entonces (reste nada y) concluya que la escritura está permitida. - Si el valor numérico es
7
(respectivamente,3
) entonces reste 1 para obtener6
(respectivamente,2
) y concluir que la escritura está permitida. - Si el valor era
4
(respectivamente,0
) entonces (reste nada y) concluya que la escritura no está permitida. - Si el valor era
5
(respectivamente,1
) entonces reste 1 para obtener4
(respectivamente,0
) y concluir que una vez más, la escritura no está permitida.
Ejemplo numérico
Cambiar los permisos para permitir a los miembros del grupo de programadores para actualizar un archivo:
$ ls -l sharedFile -rw-r - r-- 1 jsmith programadores 57 3 de julio 10:13 sharedFile $ chmod 664 sharedFile $ ls -l sharedFile -rw-rw-r-- 1 jsmith programadores 57 julio 3 10:13 sharedFile
Desde el setuid , setgid y los bits adhesivos no están especificados, esto es equivalente a:
$ chmod 0664 sharedFile
Modos simbólicos
La El comando chmod también acepta una notación simbólica más fina, [7] que permite modificar modos específicos mientras deja intactos otros modos. El modo simbólico se compone de tres componentes, que se combinan para formar una sola cadena de texto:
$ chmod [ referencias ] [ operador ] [ modos ] archivo ...
Las clases de usuarios se utilizan para distinguir a quién se aplican los permisos. Si no se especifican clases, se implica "todas". Las clases están representadas por una o más de las siguientes letras:
Referencia | Clase | Descripción |
---|---|---|
tu | usuario | propietario del archivo |
gramo | grupo | miembros del grupo del archivo |
o | otros | usuarios que no son ni el propietario del archivo ni miembros del grupo del archivo |
a | todas | los tres de los anteriores, igual que ugo |
La El programa chmod usa un operador para especificar cómo se deben ajustar los modos de un archivo. Se aceptan los siguientes operadores:
Operador | Descripción |
---|---|
+ | agrega los modos especificados a las clases especificadas |
- | elimina los modos especificados de las clases especificadas |
= | los modos especificados deben ser los modos exactos para las clases especificadas |
Los modos indican qué permisos se otorgarán o eliminarán de las clases especificadas. Hay tres modos básicos que corresponden a los permisos básicos:
Modo | Nombre | Descripción |
---|---|---|
r | leer | r ead un archivo o mostrar el contenido de un directorio |
w | escribir | w rito a un archivo o directorio |
X | ejecutar | e x ecuar un archivo o recurrir a un árbol de directorios |
X | ejecución especial | que no es un permiso en sí mismo, sino que puede usarse en lugar de x . Aplica permisos de ejecución a directorios independientemente de sus permisos actuales y aplica permisos de ejecución a un archivo que ya tiene al menos un bit de permiso de ejecución ya establecido (ya sea Usuario , Grupo u Otros ). Solo es realmente útil cuando se usa con + y generalmente en combinación con la -R bandera para dar acceso a Grupo u Otros a un gran árbol de directorios sin configurar el permiso de ejecución en archivos normales (como archivos de texto), lo que normalmente sucedería si solo usara chmod -R a+rx . , mientras con X puedes hacer en su chmod -R a+rX . lugar |
s | setuid / gid | detalles en la sección Modos especiales |
t | pegajoso | detalles en la sección Modos especiales |
Se pueden especificar varios cambios separando varios modos simbólicos con comas (sin espacios). Si no se especifica un usuario, chmod
verificará la umask y el efecto será como si se especificara " a ", excepto que los bits que se establecen en la umask no se ven afectados. [8]
Ejemplos simbólicos
- Agregar permiso de escritura ( w ) a la del Grupo ( g ) modos de acceso de un directorio, permitiendo a los usuarios del mismo grupo agregar archivos:
$ ls -ld shared_dir # muestra los modos de acceso antes de chmod drwxr-xr-x 2 jsmitt northregion 96 8 de abril 12:53 shared_dir$ chmod g + w shared_dir$ ls -ld shared_dir # muestra los modos de acceso después de chmod drwxrwxr-x 2 nfinny eastregion 96 8 de abril 12:53 shared_dir
- Eliminar permisos de escritura ( w ) para todas las clases ( a ), evitando que nadie escriba en el archivo:
$ ls -l ourBestReferenceFile -rw-rw-r-- 2 tmiller northregion 96 8 de abril 12:53 ourBestReferenceFile$ chmod aw ourBestReferenceFile$ ls -l ourBestReferenceFile -r - r - r-- 2 ebowman northregion 96 8 de abril 12:53 ourBestReferenceFile
- Establecer los permisos para el u Ser y el Grupo ( ug ) para leer y ejecutar ( rx ) solo (sin permiso de escritura) en referenceLib , evitando que nadie agregue archivos.
$ 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 dhinkle northregion 96 8 de abril 12:53 referenceLib
- Agregue los permisos de lectura y escritura a las clases de usuario y grupo de un archivo o directorio llamado muestra :
$ chmod ug + rw muestra$ ls -ld sample drw-rw ---- 2 rsanchez budget 96 Dec 8 12:53 sample
- Cambie los permisos para que el usuario y el grupo solo lean y ejecuten (sin permiso de escritura) en muestra .
$ # Permisos de archivo de muestra antes del comando $ ls -ld sample drw-rw ---- 2 oschultz warehouse 96 Dec 8 12:53 NY_DBs$ chmod ug = rx muestra$ ls -ld sample dr-xr-x --- 2 almacenamiento aolensky 96 8 de diciembre 12:53 NJ_DBs
Modos especiales
La El comando chmod también es capaz de cambiar los permisos adicionales o modos especiales de un archivo o directorio. Los modos simbólicos usan ' s 'para representar los modos setuid y setgid , y' t 'para representar el modo pegajoso . Los modos solo se aplican a las clases apropiadas, independientemente de si se especifican otras clases o no.
La mayoría de los sistemas operativos admiten la especificación de modos especiales utilizando modos octales, pero algunos no. En estos sistemas, solo se pueden utilizar los modos simbólicos.
Ejemplos de línea de comando
Mando | Explicación |
---|---|
chmod a+r publicComments.txt | agrega el permiso de lectura para todas las clases (es decir, u Ser , Grupo y Otros ) |
chmod a-x publicComments.txt | elimina el permiso de ejecución para todas las clases |
chmod a+rx viewer.sh | agrega permisos de lectura y ejecución para todas las clases |
chmod u=rw,g=r,o= internalPlan.txt | juegos de lectura y escritura para el permiso u Ser , conjuntos leen por grupo , y niega el acceso de los Otros |
chmod -R u+w,go-w docs | agrega permiso de escritura a los documentos del directorio y todo su contenido (es decir, R ecursivamente) para el propietario, y elimina el permiso de escritura para el grupo y otros |
chmod ug=rw groupAgreements.txt | conjuntos de permisos de lectura y escritura para u Ser y Grupo |
chmod 664 global.txt | conjuntos de permisos de lectura y escritura para u Ser y Grupo , y proporciona leen a otros . |
chmod 744 myCV.txt | conjuntos de leer, escribir y ejecutar permisos para u Ser , y se pone el permiso de lectura para el Grupo y Otros |
chmod 1755 findReslts.sh | establece sticky bit, establece permisos de lectura, escritura y ejecución para el propietario, y establece permisos de lectura y ejecución para grupos y otros (esto sugiere que el script se retenga en la memoria) |
chmod 4755 setCtrls.sh | conjuntos UID , conjuntos de leer, escribir y ejecutar permisos para u Ser , y conjuntos de leer y ejecutar permisos para Grupo y Otros |
chmod 2755 setCtrls.sh | establece GID , conjuntos de leer, escribir y ejecutar permisos para u Ser , y conjuntos de leer y ejecutar permisos para el Grupo y Otros |
chmod -R u+rwX,g-rwx,o-rx personalStuff | R ecursively (es decir, en todos los archivos y directorios en personalStuff ) añade leer, escribir, y permisos de ejecución especiales para u Ser , elimina leer, escribir, y los permisos de ejecución de grupo , y elimina permisos de lectura y ejecución para Otros |
chmod -R a-x+X publicDocs | R ecursivamente (es decir, en todos los archivos y directorios en publicDocs ) elimina el permiso de ejecución para todas las clases y agrega un permiso de ejecución especial para todas las clases |
Llamada al sistema
El estándar POSIX define el siguiente prototipo de función : [9]
int chmod (const char * ruta, modo_t);
El parámetro de modo es un campo de bits compuesto por varios indicadores:
Bandera | Valor octal | Propósito |
---|---|---|
S_ISUID | 04000 | Establecer ID de usuario en ejecución |
S_ISGID | 02000 | Establecer ID de grupo en ejecución |
S_ISVTX | 01000 | Poco pegajoso |
S_IRUSR, S_IREAD | 00400 | Leer por u ser |
S_IWUSR, S_IWRITE | 00200 | Escribir por u ser |
S_IXUSR, S_IEXEC | 00100 | Ejecutar / buscar por u Ser |
S_IRGRP | 00040 | Leer por grupo |
S_IWGRP | 00020 | Escribir por grupo |
S_IXGRP | 00010 | Ejecutar / buscar por grupo |
S_IROTH | 00004 | Leer por otros |
S_IWOTH | 00002 | Escribir por otros |
S_IXOTH | 00001 | Ejecutar / buscar por otros |
Ver también
- Permisos del sistema de archivos
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 similares a Unixchgrp
, el comando utilizado para cambiar el grupo de un archivo o directorio en sistemas similares a Unixcacls
, un comando utilizado en Windows NT y sus derivados para modificar las listas de control de acceso asociadas con un archivo o directorioattrib
umask
, restringe el modo (permisos) en la creación de archivos o directorios en sistemas similares a Unix- Identificador de usuario
- Identificador de grupo
- Lista de comandos de Unix
Referencias
- ^ "Tutorial de chmod" . catcode.com .
- ^ "" . The Open Group Base Especificaciones Edición 6 . El grupo abierto. 21 de julio de 2019.
- ^ "Gestión del sistema AIX 5.3" . Centro de conocimiento de IBM . IBM . Consultado el 30 de agosto de 2015 .
- ^ "chmod (1): cambiar los bits del modo de archivo - página del manual de Linux" . linux.die.net .
- ^ IBM . "IBM System i Versión 7.2 Programación Qshell" (PDF) . Consultado el 5 de septiembre de 2020 .
- ^ "Página de manual de chmod con ejemplos y calculadora - Linux - SS64.com" . ss64.com .
- ^ "Referencia de comandos de AIX 5.5" . Centro de conocimiento de IBM . IBM . Consultado el 30 de agosto de 2015 .
- ^ "Permisos enmascarados con umask, chmod, 777 permisos octales" . enseñanza.idallen.com .
- ^ "función chmod" . Especificaciones básicas de Open Group, edición 7, edición 2013 . El grupo abierto . Consultado el 30 de agosto de 2015 .
enlaces externos
- : cambiar modos de archivo - Manual de comandos generales de FreeBSD
- - Manual del programador de Plan 9 , Volumen 1
- - Manual de comandos generales de Inferno
- chmod- página de manual de GNU coreutils .
- Manual de "Configuración de permisos" de GNU
- CHMOD-Win 3.0 - Convertidor ACL ↔ CHMOD gratuito de Windows.
- Tutorial para principiantes con ejemplo "en vivo" en línea