Comprensión de los tipos de archivos y permisos de UNIX

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 de 777 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

  • Por favor, la próxima vez intente hacer solo una pregunta, varias preguntas suelen ser malas para hacer referencia y casi nunca abordé todos al mismo tiempo.
  • @Kiwy I ‘ lo siento, pensé que ‘ haría así porque tiene que ver con el mismo tema. Si lo desea, puede sugerir un título mejor para mi pregunta para mejorar la ‘ s referencia.
  • Por cierto, el valor de » d » es 040000; se puede encontrar en archivos de encabezado con el nombre S_IFDIR. No ‘ no lo usa al configurar el modo de archivo, pero la función stat() en realidad devuelve el valor 040750 para drwxr-x---.
  • @jamesqf En realidad, ahora que entiendo cómo se asignan los códigos octales, es ‘ más sencillo para mí pensar de esa manera .
  • @Peter: no hay preguntas estúpidas, solo estúpidos que no ‘ no aprenden porque ‘ re tengo miedo de preguntar.

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, con mknod
  • c: archivo especial de caracteres, también se puede crear con mknod (consulte /dev para ver ejemplos)
  • d: directorio, se puede crear con mkdir
  • l: enlace simbólico, se puede crear con ln -s
  • p: canalización con nombre, se puede crear con mkfifo
  • s: socket, se puede crear con nc -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únmente root)
  • 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 bit suid puede configurarse para actuar de manera análoga a sgid (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ón suiddir.
  • » +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:

ingrese la descripción de la imagen aquí

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: Permisos de archivos UNIX

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 ejecutar chmod 1411 (es decir, chmod comando con argumento 1411).
  • … 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *