GNU/Linux >> Tutoriales Linux >  >> Linux

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

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 archivo 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 archivo
  • b :bloque de archivo especial, típicamente dispositivos de disco o partición, se puede crear con mknod
  • c :archivo especial de caracteres, también se puede crear con mknod (ver /dev para ejemplos)
  • d :directorio, se puede crear con mkdir
  • l :enlace simbólico, se puede crear con ln -s
  • p :tubería 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 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únmente root )
  • 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 características 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 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 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 especifica 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 del 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 "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. Asimismo, +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.


Entonces, los permisos en Linux son muy importantes. Intentaré hacer una breve explicación.

Para piezas de un modo de archivo

Cada archivo Unix tiene un conjunto de permisos que determinan si puede leer, escribir o ejecutar el archivo. Runningls -l muestra los permisos. He aquí un ejemplo de una pantalla de este tipo:

-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile

Adjunto imagen de piezas de un archivo modo:

El tipo puede ser algo diferente. Por ejemplo:

  • d (directorio)
  • c (dispositivo de caracteres)
  • l (enlace simbólico)
  • p (tubería con nombre)
  • s (enchufe)
  • b (dispositivo de bloque)
  • D (puerta, no 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 frente a 0777

El chmod El comando generalmente espera que la entrada sea un número octal, el cero inicial se refiere al valor del triplete de bits sticky/sgid/suid. En C, sin embargo, marcaría la diferencia, ya que 777 se traduciría a 01411 (octal), configurando así el sticky bit (ver el chmod(2) página de manual), permisos de lectura para el propietario y bit ejecutable para el grupo y otros (que es una combinación bastante extraña).

EDITAR 1

Encontré otra imagen sobre los permisos de Linux y la adjuntaré para entender más fácilmente:


d significa que es un directorio, si tiene un archivo, es - y si es un enlace encontrarás un l . No se puede activar/desactivar.

Si usa 0777 como permisos, está dando 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 lista el contenido de un directorio y obtiene esto:

-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so

precargable_libintl.so es un archivo propiedad del usuario raíz y del grupo raíz. 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


Linux
  1. Permisos de Linux:una introducción a chmod

  2. Linux:¿comprensión de los permisos y tipos de archivos de Unix?

  3. Tabla de permisos para un archivo/directorio y tipos de usuarios del sistema de archivos

  4. unix - cabeza Y cola del archivo

  5. ¿Cómo eliminar setgid (linux/unix)?

Comando Chmod en Linux (Permisos de archivo)

Comando Chmod:cómo cambiar los permisos de archivo en Linux

Comprender los permisos de archivos de Linux

Ejemplos de comandos chmod de Linux

Administre directorios y permisos de archivos con chmod Recursive

Comprender los permisos básicos de archivos y la propiedad en Linux