Realmente nunca entendí cómo chmod
trabajado hasta hoy. Seguí un tutorial que me explicó mucho.
Por ejemplo, he leído que tienes tres grupos de permisos diferentes:
- propietario (
u
) - grupo (
g
) - todos (
o
)
Basado en estos tres grupos, ahora sé que:
- Si el archivo es propiedad del usuario, los permisos del usuario determinan el acceso.
- Si el grupo del archivo es el mismo que el grupo del usuario, el permiso del grupo determina el acceso.
- Si el usuario no es el propietario del archivo y no está en el grupo, se utiliza el otro permiso.
También me enteré de que tienes los siguientes permisos:
- leer (
r
) - escribir (
w
) - ejecutar (
x
)
Creé un directorio para probar mis conocimientos recién adquiridos:
mkdir test
Luego hice algunas pruebas:
chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---
Después de perder el tiempo durante un tiempo, creo que finalmente le cogí el truco a chmod
y la forma en que establece el permiso usando este comando.
Pero...
Todavía tengo algunas preguntas:
- ¿Qué significa el
d
en el soporte de inicio? - ¿Cuál es el nombre y el uso del espacio contenedor y qué otros valores puede contener?
- ¿Cómo puedo configurarlo y desactivarlo?
- ¿Cuál es el valor de esta
d
? ? (Como solo tienes 7=4+2+1 7=4+2+1 7=4+2+1) - ¿Por qué la gente a veces usa
0777
? en lugar de777
establecer sus permisos?
Pero como no debería hacer varias preguntas, intentaré hacerlas en una sola pregunta.
En el sistema basado en UNIX, como todas las distribuciones de Linux, con respecto a los permisos, ¿qué hace la primera parte (d
) y ¿cuál es el uso de esta parte de los permisos?
Respuesta aceptada:
Responderé a sus preguntas en tres partes:tipos de archivos, permisos y casos de uso para las diversas formas de chmod
.
Tipos de archivo
El primer carácter en ls -l
la salida representa el tipo de archivo; d
significa que es un directorio. No se puede configurar o desactivar, depende de cómo se creó el archivo. Puede encontrar la lista completa de tipos de archivos en la documentación de ls; aquellos con los que es probable que te encuentres son
-
:archivo "regular", creado con cualquier programa que pueda escribir un archivob
:bloque de archivos especiales, normalmente discos o dispositivos de partición, se puede crear conmknod
c
:archivo especial de caracteres, también se puede crear conmknod
(ver/dev
para ejemplos)d
:directorio, se puede crear conmkdir
l
:enlace simbólico, se puede crear conln -s
p
:tubería con nombre, se puede crear conmkfifo
s
:socket, se puede crear connc -U
D
:puerta, creada por algunos procesos de servidor en Solaris/openindiana.
Permisos
chmod 0777
se utiliza para establecer todos los permisos en un chmod
ejecución, en lugar de combinar cambios con u+
etc. Cada uno de los cuatro dígitos es un valor octal que representa un conjunto de permisos:
suid
,sgid
y "pegajoso" (ver más abajo)- permisos de usuario
- permisos de grupo
- "otros" permisos
El valor octal se calcula como la suma de los permisos:
- “leer” es 4
- “escribir” es 2
- “ejecutar” es 1
Para el primer dígito:
suid
es 4; binarios con este conjunto de bits se ejecutan como su usuario propietario (comúnmenteroot
)sgid
es 2; los archivos binarios con este conjunto de bits se ejecutan como su grupo propietario (esto se usó para juegos, por lo que se podían compartir puntajes altos, pero a menudo es un riesgo de seguridad cuando se combina con vulnerabilidades en los juegos), y los archivos creados en directorios con este conjunto de bits pertenecen al grupo propietario del directorio por defecto (esto es útil para crear carpetas compartidas)- “adhesivo” (o “eliminación restringida”) es 1; los archivos en directorios con este conjunto de bits solo pueden ser eliminados por su propietario, el propietario del directorio o
root
(ver/tmp
para ver un ejemplo común de esto).
Ver el chmod
página de manual para más detalles. Tenga en cuenta que en todo esto estoy ignorando otras funciones de seguridad que pueden alterar los permisos de los usuarios en los archivos (SELinux, archivos ACL...).
Los bits especiales se manejan de manera diferente según el tipo de archivo (archivo normal o directorio) y el sistema subyacente. (Esto se menciona en el chmod
manpage.) En el sistema que usé para probar esto (con coreutils
8.23 en un ext4
sistema de archivos, ejecutando Linux kernel 3.16.7-ckt2), el comportamiento es el siguiente. Para un archivo, los bits especiales siempre se borran a menos que se establezcan explícitamente, por lo que chmod 0777
es equivalente a chmod 777
, y ambos comandos borran los bits especiales y otorgan a todos permisos completos en el archivo. Para un directorio, los bits especiales nunca se borran por completo usando la forma numérica de cuatro dígitos, por lo que en efecto chmod 0777
también es equivalente a chmod 777
pero es engañoso ya que algunas de las partes especiales permanecerán como están. (Una versión anterior de esta respuesta se equivocó). Para borrar bits especiales en los directorios, debe usar u-s
, g-s
y/o o-t
explícitamente o especifique un valor numérico negativo, por lo que chmod -7000
borrará todos los bits especiales en un directorio.
En ls -l
salida, suid
, sgid
y "sticky" aparecen en lugar de x
entrada:suid
es s
o S
en lugar de la x
del usuario , sgid
es s
o S
en lugar de la x
del grupo , y "pegajoso" es t
o T
en lugar del x
de otros . Una letra minúscula indica que tanto el bit especial como el bit ejecutable están establecidos; una letra mayúscula indica que solo está configurado el bit especial.
Las diversas formas de chmod
Debido al comportamiento descrito anteriormente, usar los cuatro dígitos completos en chmod
puede ser confuso (al menos resulta que yo estaba confundido). Es útil cuando desea establecer bits especiales además de bits de permiso; de lo contrario, los bits se borran si está manipulando un archivo, se conservan si está manipulando un directorio. Entonces chmod 2750
asegura que obtendrá al menos sgid
y exactamente u=rwx,g=rx,o=
; pero chmod 0750
no borrará necesariamente los bits especiales.
Usar modos numéricos en lugar de comandos de texto ([ugo][=+-][rwxXst]
) es probablemente más un caso de costumbre y el objetivo de la orden. Una vez que esté acostumbrado a usar modos numéricos, a menudo es más fácil especificar el modo completo de esa manera; y es útil poder pensar en permisos usando modos numéricos, ya que muchos otros comandos pueden usarlos (install
, mknod
…).
Algunas variantes de texto pueden ser útiles:si simplemente quiere asegurarse de que cualquier persona pueda ejecutar un archivo, chmod a+x
hará eso, independientemente de cuáles sean los otros permisos. Del mismo modo, +X
agrega el permiso de ejecución solo si uno de los permisos de ejecución ya está establecido o si el archivo es un directorio; esto puede ser útil para restaurar permisos globalmente sin tener que usar archivos de casos especiales o directorios. Por lo tanto, chmod -R ug=rX,u+w,o=
es equivalente a aplicar chmod -R 750
a todos los directorios y archivos ejecutables y chmod -R 640
a todos los demás archivos.