Nunca entendí cómo funcionaba chmod
hasta hoy. Seguí un tutorial que me explicó una gran cosa.
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 en el grupo, se usa el otro permiso.
También aprendí que tienes los siguientes permisos:
- read (
r
) - escribir (
w
) - ejecutar ()
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 algún tiempo, creo que finalmente entendí chmod
y la forma en que establece el permiso con este comando.
Pero …
Todavía tengo algunas preguntas:
- ¿Qué el
d
en el soporte inicial? - ¿Cuál es el nombre y el uso del espacio contenedor y qué otros valores puede contener?
- ¿Cómo puedo configurarlo y desarmarlo?
- ¿Cuál es el valor de este
d
? (Como solo tiene 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1) - ¿Por qué las personas a veces usan
0777
en lugar de777
para establecer sus permisos?
Pero como no debería hacer varias preguntas, intentaré hacerlas en una pregunta.
En un sistema basado en UNIX, como todas las distribuciones de Linux, con respecto a los permisos, ¿qué significa la primera parte (d
) y cuál es el utilizar para esta parte de los permisos?
Comentarios
Responder
Responderé a sus preguntas en tres partes: tipos de archivo, permisos, y casos de uso para las diversas formas de chmod
.
Tipos de archivo
El primer carácter en ls -l
salida representa el tipo de archivo; d
significa que es un directorio. No se puede configurar ni desarmar, 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 probablemente se encontrará son
-
-
: archivo «regular», creado con cualquier programa que pueda escribir un archivo -
b
: se puede crear un archivo especial de bloque, por lo general, dispositivos de disco o partición, conmknod
-
c
: archivo especial de caracteres, también se puede crear conmknod
(consulte/dev
para ver ejemplos) -
d
: directorio, se puede crear conmkdir
-
l
: enlace simbólico, se puede crear conln -s
-
p
: canalización 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 usa para establecer todos los permisos en una 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 octal el valor 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; los binarios con este conjunto de bits se ejecutan como su usuario propietario (comúnmenteroot
) -
sgid
es 2; Los binarios con este conjunto de bits se ejecutan como su grupo propietario (esto se usó para juegos para que se pudieran compartir puntuaciones altas, 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 el grupo propietario del directorio por defecto (esto es útil para crear carpetas compartidas) - «pegajoso» (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
(consulte/tmp
para ver un ejemplo común de esto).
Consulte la chmod
página de manual para obtener más detalles. Tenga en cuenta que en todo esto estoy ignorando otras características de seguridad que pueden alterar los permisos de los usuarios sobre los archivos (SELinux, ACL de archivos …).
Los bits especiales se manejan de manera diferente según el tipo de archivo (regular archivo o directorio) y el sistema subyacente. (Esto se menciona en la página de manual de chmod
). 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 otorgue a todos los permisos completos sobre el archivo. Para un directorio, los bits especiales nunca se borran por completo utilizando 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 algunos de los bits especiales permanecerán como están. (Una versión anterior de esta respuesta se equivocó). Para borrar bits especiales en directorios, debe usar u-s
, g-s
y / o o-t
explícitamente o especificar un valor numérico negativo, por lo que chmod -7000
borrará todos los bits especiales de un directorio.
En la salida ls -l
, aparecen suid
, sgid
y «sticky» en lugar de x
entrada: suid
es s
o S
en lugar del x
del usuario, sgid
es s
o S
en lugar del x
del grupo, y» sticky «es t
o T
en lugar de 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 se establece el bit especial.
Las diversas formas de chmod
Debido al comportamiento descrito anteriormente, el uso de los cuatro dígitos completos en chmod
puede ser confuso (al menos resulta que estaba confundido). Es útil cuando desea establecer bits especiales además de bits de permiso; de lo contrario, los bits se borran si manipula un archivo y se conservan si manipula un directorio. Por lo tanto, chmod 2750
garantiza 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]
) probablemente sea más un caso de hábito y el objetivo del comando. 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 desea asegurarse de que cualquier persona pueda ejecutar un archivo, chmod a+x
lo hará, independientemente de lo que los otros permisos son. Del mismo modo, +X
agrega el permiso de ejecución solo si uno de los permisos de ejecución ya está establecido o el archivo es un directorio; esto puede ser útil para restaurar permisos globalmente sin tener que archivos de casos especiales versus 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.
Comentarios
- Aunque las otras respuestas fueron bastante buenas, realmente dedicaste un tiempo a responder esta pregunta. Gracias.
- Los directorios * BSD se comportan como si su
sgid
bit siempre estuviera configurado, independientemente de su valor real. En FreeBSD, el bitsuid
puede configurarse para actuar de manera análoga asgid
(es decir, los archivos y subdirectorios creados dentro tendrán el mismo propietario que el directorio ), siempre que el sistema de archivos subyacente lo admita y esté montado con la opciónsuiddir
. - »
+X
agrega el permiso de ejecución solo si uno de los permisos de ejecución ya está configurado o el archivo es un directorio » gracias you @ stephen-kitt faltando el » ya está configurado » ¡la documentación realmente me estaba desconcertando!
Respuesta
Entonces, los permisos en Linux son muy importantes. Intentaré hacer una breve explicación.
Para partes de un modo de archivo
Cada archivo Unix tiene un conjunto de permisos que determinan si puede leer, escribir o ejecutar el archivo. Al ejecutar ls -l se muestran los permisos. Aquí hay un ejemplo de tal visualización:
-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile
Adjunto una imagen de piezas de un modo de archivo:
El tipo puede ser diferente. Por ejemplo:
- d (directorio)
- c (dispositivo de caracteres)
- l (enlace simbólico)
- p (llamado pipe)
- s (socket)
- b (dispositivo de bloque)
- D (puerta, no es común en sistemas Linux, pero ha sido portado)
Si desea establecer algunos permisos para todos los directorios, puede usar el atributo R, por ejemplo:
chmod -R 777 /some/directory/
Para chmod 777 vs 0777
El comando chmod
normalmente espera la entrada para ser un número octal, el cero inicial se refiere al valor del triplete de bits pegajoso / sgid / suid. En C, sin embargo, haría una diferencia, ya que 777
se traduciría a 01411
(octal), estableciendo así el bit adhesivo (ver la chmod(2)
página de manual), leer los permisos para el propietario y el bit ejecutable para el grupo y otros (que es una combinación bastante extraña).
EDIT 1
Encontré otra imagen sobre los permisos de Linux y la adjuntaré para entender más fácilmente:
Comentarios
- Estás equivocado acerca del 777 vs 0777. Ambos son octales (el decimal no tiene sentido de todos modos en este caso), pero en forma de cuatro caracteres, el primer dígito establece los bits especiales (pegajoso & setuid).
- @orion Ocasionalmente es cierto, p.ej en un código similar a C,
chmod(777)
sería en realidad el equivalente a ejecutarchmod 1411
(es decir,chmod
comando con argumento1411
). - … que en el caso del syscall (o su envoltorio) y el binario que lleva el mismo nombre puede ser un poco confuso.
- Python Master Race resolvió este problema al revés al prohibir todos los » números » que comienzan con 0 , lo que obliga al usuario a ser explícito si quiere algo más que decimal, por ejemplo hex:
0x1FF
, binario:0b111111111
u octal:0o777
. PYTHON POWER - ¿Fuente de la imagen?
Respuesta
d
significa que es un directorio, si tiene un archivo, es -
y si es un enlace, encontrará un l
. No se puede configurar / desarmar.
Si usa 0777 como permisos, está otorgando control total (lectura + escritura + ejecución) a cada usuario / grupo del sistema. Es una forma perezosa de resolver problemas cuando tiene usuarios / grupos que «no pueden acceder a directorios / archivos.
Por ejemplo, si enumera el contenido de un directorio y obtiene esto:
-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so
preloadable_libintl.so es un archivo propiedad del usuario root y del grupo root. El propietario tiene acceso de lectura y escritura, el grupo solo tiene acceso de lectura y cualquier otro usuario tiene acceso de lectura. Esto se puede traducir como 644.
Si lo cambio a 777 se verá así:
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so
Respuesta
Después de obtener la respuesta a mi pregunta aquí e investigar un poco sobre el resultado, encontré un artículo que lo explica todo muy bien. Me gustaría compartir algunas partes de este artículo aquí para futuras referencias.
Permisos de visualización
Para usar chmod
para cambiar los permisos de un archivo o directorio, primero necesitará saber cuál es el el modo de acceso es. Puede ver el contenido de un directorio en la terminal cd
en ese directorio y luego usar:
$ ls -l
El modificador -l
es importante porque usar ls
sin él solo mostrará los nombres de los archivos o carpetas en el directorio.
A continuación se muestra un ejemplo del uso de ls -l
en mi directorio de inicio:
total 128 drwxr-xr-x 2 peter users 4096 Jul 5 21:03 Desktop drwxr-xr-x 6 peter users 4096 Jul 5 17:37 Documents drwxr-xr-x 2 peter users 4096 Jul 5 13:45 Downloads drwxr-xr-x 2 peter users 4096 Jun 24 03:36 Movies drwxr-xr-x 2 peter users 4096 Jun 24 03:38 Music drwxr-xr-x 2 peter users 4096 Jun 26 00:09 Pictures -rw-r--r-- 1 peter users 354 Jul 6 17:15 chmodtest
Qué significan las columnas
La primera columna es el tipo de cada archivo:
-
-
denota un archivo normal. -
d
denota un directorio, es decir, una carpeta que contiene otros archivos o carpetas. -
p
denota una tubería con nombre (también conocida como FIFO ). -
l
denota un enlace simbólico.
Las letras después de eso son los permisos, esta primera columna es lo que lo que más nos interesará. El segundo es cuántos enlaces hay en un archivo, podemos ignórelo con seguridad. La tercera columna tiene dos valores / nombres: el primero (en mi ejemplo «peter») es el nombre del usuario propietario del archivo. El segundo valor («usuarios» en el ejemplo) es el grupo al que pertenece el propietario (Leer más sobre grupos).
La siguiente columna es el tamaño del archivo o directorio en bytes y la información posterior son las fechas y horas en que se modificó por última vez el archivo o directorio y, por supuesto, el nombre del archivo o directorio.
Qué significan los permisos
Las primeras tres letras, después de la primera -
o d
, son los permisos que tiene el propietario. Las siguientes tres letras son permisos que se aplican al grupo. Las últimas tres letras son los permisos que se aplican a todos los demás.
Cada conjunto de tres letras se compone de r
w
y x
. r
siempre está en la primera posición, w
siempre está en la segunda posición y x
siempre está en la tercera posición. r
es el permiso de lectura, w
es el permiso de escritura y x
es el de ejecución permiso. Si hay un guión (-
) en el lugar de una de estas letras, significa que no se otorga el permiso, y si la letra está presente, se otorga.
Carpetas
En el caso de carpetas, los bits de modo se pueden interpretar de la siguiente manera:
-
r
(lectura) para la capacidad de leer la tabla de contenido del directorio dado, -
w
(escribir) significa la capacidad de escribir la tabla de contenido del directorio dado (crear nuevos archivos, carpetas; renombrar, eliminar archivos y carpetas existentes) si y solo si está configurado el bit de ejecución. De lo contrario, este permiso no tiene sentido. -
x
(ejecutar) significa la capacidad de ingresar al directorio dado con el comando cd y acceder a archivos, carpetas en ese directorio.
Cambiar permisos usando el comando chmod
chmod
es un comando en Linux y otros sistemas operativos similares a Unix. Le permite cambiar los permisos (o el modo de acceso) de un archivo o directorio.
Puede modificar los permisos de dos formas diferentes: – chmod
basado en texto – chmod
Método de texto
basado en números chmod
Para cambiar los permisos o el modo de acceso de un archivo, usamos el comando chmod en una terminal. A continuación se muestra la estructura general del comando:
chmod who=permissions filename
Dónde Quién es cualquiera de un rango de letras, y cada una significa a quién le va a dar el permiso . Son los siguientes:
u - The user that owns the file. g - The group the file belongs to. o - The other users i.e. everyone else. a - all of the above - use this instead of having to type ugo.
Los permisos son los mismos que ya se comentaron (r
, w
y x
).
El comando chmod nos permite agregar y restar permisos de un conjunto existente usando + o – en su lugar of =. Esto es diferente a los comandos anteriores, que esencialmente reescriben los permisos (es decir, para cambiar un permiso de r--
a rw-
, aún debe incluir r
y w
después de =
en el chmod
comando. Si te perdiste r
, quitaría el r
permiso ya que se están reescribiendo con =. Usin g + y – evite esto agregando o quitando del conjunto actual de permisos).
Método numérico
chmod
también puede establecer permisos usando números.
El uso de números es otro método que le permite editar los permisos para los tres propietarios, grupos y otros al mismo tiempo. Esta estructura básica del código es la siguiente:
chmod xxx file/directory
Donde xxx es un número de 3 dígitos donde cada dígito puede ser cualquier cosa del 1 al 7. Se aplica el primer dígito a los permisos del propietario, el segundo dígito se aplica a los permisos del grupo y el tercer dígito se aplica a los permisos de todos los demás.
En esta notación numérica, los valores r, w y x tienen su propio número valor:
r=4 w=2 x=1
Para obtener un número de tres dígitos, debe considerar qué permisos desea que tenga un propietario, grupo y usuario, y luego total sus valores hacia arriba. Por ejemplo, digamos que quería otorgar al propietario de un directorio permisos de lectura-escritura y ejecución, y quería agrupar y que todos los demás tuvieran permisos de lectura y ejecución. Se me ocurrirían valores numéricos así:
Owner: rwx = 4+2+1=7 Group: r-x = 4+0+1=5 (or just 4+1=5) Other: r-x = 4+0+1=5 (or just 4+1=5) Final number = 755 $ chmod 755 filename
Esto es equivalente a usar lo siguiente:
chmod u=rwx filename chmod go=rx filename
La mayoría de carpetas / directorios están configurados en 755 para permitir la lectura, escritura y ejecución al propietario, pero niegan la escritura a todos los demás, y los archivos son normalmente 644 para permitir la lectura y escritura para el propietario, pero solo lectura para todos los demás, consulte la última nota sobre la falta de permisos x con archivos no ejecutables; aquí es el mismo trato.
Comentarios
- Simplemente copiar texto de otro artículo es, al menos, grosero. Quizás también una violación de derechos de autor. Si no solo se ha copiado o si realmente usó partes pequeñas (respetuoso con los derechos de autor gracias al uso legítimo), al menos agregue un enlace al artículo que está citando / citando.
Respuesta
Para las preguntas d
Esto le indica el tipo de archivo Unix. Por defecto, Unix tiene solo 3 tipos de archivos. Son:
-
-
– Archivo normal -
d
– Archivo de directorio - Archivo especial (con 5 subtipos):
-
b
– Archivo de bloque -
c
– Archivo de dispositivo de caracteres -
p
– Archivo de canalización con nombre o simplemente archivo de canalización -
l
– Archivo de enlace simbólico -
s
– Archivo de socket
-
Lea más aquí: Tipos de archivos en Linux / Unix explicados en detalle
0777
vs 777
Se ha especificado o no un bit fijo. Cuando se establece el bit adhesivo de un directorio, el sistema de archivos trata los archivos de dichos directorios de una manera especial, de modo que solo el propietario del archivo, el propietario del directorio o el usuario root pueden cambiar el nombre o eliminar el archivo. Sin el bit adhesivo establecido, cualquier usuario con permisos de escritura y ejecución para el directorio puede cambiar el nombre o eliminar los archivos contenidos, independientemente del propietario del archivo.
0777
establece 777 permisos de archivo y el bit pegajoso a 0, sin modos especiales.
777
está configurando 777 permisos de archivo, sin cambiar el bit pegajoso.
Leer más: sticky bit y chmod
Comentarios
- Mejor: pero todavía no ofrece nada que las otras respuestas ‘ t ya hayan cubierto …
- ( 1) Hay tres tipos de archivos básicos: archivos sin formato, directorios y todo lo demás. ¿Qué? ¿De dónde sacas esto? En el gran esquema de las cosas, los archivos y directorios planos son bastante similares. Las canalizaciones con nombre y los enlaces simbólicos se parecen más a archivos y directorios sin formato que a archivos de dispositivo o sockets. (2) ¿Crees que
chmod 777
no borra los bits setuid, setgid y sticky? Pruébelo. - Unix tiene 7 tipos de archivos, no 3.
Respuesta
Dos cosas relacionadas que siempre he encontrado confusas, y que no mencioné anteriormente, son:
I) qué « 1 » hace:
En chmod
: cada «1» en tiene un permiso, por ejemplo, chmod 777 en permite todo, pero preste atención porque
en umask
: cada «1» dis tiene un permiso, por ejemplo, umask 777 dis permite todo.
II ) archivo «propietarios» vs.file «usuarios» :
En otras palabras, hay usuarios que «poseen» y usuarios que «usan» .
Cada archivo es propiedad de , al mismo tiempo, por dos entidades:
- un usuario único y específico, y
- un único y específico grupo (de uno o más usuarios).
Por lo tanto, cada archivo puede ser utilizado por un usuario específico de tres formas:
1) Directamente, como el usuario propietario del file,
2) en directamente, como miembro del grupo propietario del archivo, y
3 ) posiblemente, como otra persona.
De lo contrario , el respuestas anteriores, ¡haz un gran trabajo! Gracias a todos.
S_IFDIR
. No ‘ no lo usa al configurar el modo de archivo, pero la funciónstat()
en realidad devuelve el valor 040750 paradrwxr-x---
.