¿Cuál es la letra "t" en la salida de "ls -ld / tmp"?

94

Al ejecutar el comando  ls -ld /tmp, el resultado sería:

drwxrwxrwt 30 root root 20480 Mar 11 14:17 /tmp

Entonces tengo dos preguntas principales:

  • ¿Cuál es la letra tdespués de los permisos?
  • Hasta donde sé, /tmpse usa para crear archivos temporales relacionados con diferentes usuarios en el sistema, entonces, ¿cómo es que tiene permiso rwxrwxrwx(777)?

Esto me parece mal. Por favor, necesito tu ayuda para entender lo que está pasando aquí.

Comunidad
fuente
8
Lea el artículo de Wikipedia , es bastante mejor que las respuestas aquí.
Gilles
1
Ver también: unix.stackexchange.com/q/79395/4784
Martin Thoma
OK ¿Por qué entonces, cuando instalo una actualización o un nuevo paquete rpm desde / tmp, se elimina la parte adhesiva?

Respuestas:

112

Entonces, ¿cuál es la parte pegajosa?

Un bit fijo es un bit de permiso que se establece en un directorio que permite que solo el propietario del archivo dentro de ese directorio, el propietario del directorio o el usuario raíz elimine o cambie el nombre del archivo. Ningún otro usuario tiene los privilegios necesarios para eliminar el archivo creado por otro usuario.

Esta es una medida de seguridad para evitar la eliminación de carpetas críticas y su contenido (subdirectorios y archivos), aunque otros usuarios tienen permisos completos.

¿Por qué /tmptiene la parte tadhesiva?

El /tmpdirectorio puede ser utilizado por diferentes usuarios de Linux para crear archivos temporales. Ahora, ¿qué pasa si un usuario elimina / cambia el nombre de un archivo creado por otro usuario en este directorio?

Bueno, para evitar este tipo de problemas, se utiliza el concepto de bit sticky. Entonces, para eso 777se da a, pero preservar el bit pegajoso no es una mala idea.

¿Cómo puedo configurar el bit fijo para un directorio?

Estableceré un bit fijo en un directorio llamado testen mi Escritorio.

Forma simbólica ( trepresenta el bit adhesivo):

chmod o+t ~/Desktop/test

o

chmod +t ~/Desktop/test

Forma numérica / octal (1, bit de bit fijo como valor 1 en la primera posición)

chmod 1757 ~/Desktop/test

Ahora vamos a probar los resultados:

ls -li ~/Desktop/test

1551793 drwxrwxrwt 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test

Para eliminar / eliminar un bit pegajoso

chmod o-t ~/Desktop/test

Ahora vamos a probar los resultados:

ls -li ~/Desktop/test

1551793 drwxrwxrwx 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test

Fuente: “¿Qué es un Bit pegajoso y cómo configurarlo en Linux?” En The Linux Juggernaut

Maythux
fuente
13
Este uso del bit fijo solo se aplica a directorios, no a archivos. En el pasado distante, su significado en los archivos ejecutables era guardar el segmento de texto del programa para intercambiarlo en lugar de descartarlo para que ejecutarlo nuevamente fuera más rápido, pero en la actualidad no tiene ningún significado en los archivos normales.
psusi
¿Cuál fue el segmento de texto de un programa y cómo mantenerlo lo haría más rápido?
BluePython
@BluePython El segmento 'texto' de un archivo ejecutable es la parte que incluye todo el código de la máquina: el bit ejecutable real. Otros segmentos comunes son 'datos' para datos estáticos y 'bss' para datos que son todos cero (y por lo tanto no necesitan almacenarse en el ejecutable).
Miles Rout
1
¿Hay alguna diferencia entre 't' y 'T' para el permiso de directorio? @ psusi
Afshin
1
@Afshin: Debido a que toculta la xindicación de si todos los usuarios pueden ejecutar el archivo / directorio, necesitamos otra forma de indicarlo. Lo habitual es que todos puedan ejecutarlo, en cuyo caso obtienes un normal t(en lugar de un x). Pero si no, entonces obtienes mayúsculas T(en lugar de a -). Fuente: Wikipedia.
Toby Bartels
25

Un bit permanente es un bit de permiso que se establece en un archivo o directorio que permite que solo el propietario del archivo / directorio o el usuario raíz elimine o cambie el nombre del archivo. Ningún otro usuario tiene privilegios para eliminar el archivo creado por otro usuario.

En algún momento sucede que necesita un directorio de Linux que puedan usar todos los usuarios del sistema Linux para crear archivos. Los usuarios pueden crear, eliminar o renombrar archivos según su conveniencia en este directorio.

Ahora, ¿qué pasa si un usuario elimina accidentalmente o deliberadamente (o renombra) un archivo creado por otro usuario en este directorio?

Bueno, para evitar este tipo de problemas, se utiliza el concepto de bit sticky. Como / tmp se usa para este propósito. Entonces, para evitar el escenario anterior, / tmp usa un bit fijo.

Por ejemplo:

mkdir demo
chmod 777 demo

También creé dos archivos con diferentes usuarios en esta carpeta con permiso 777.

ls -ld demo
drwxrwxrwx 2 guru guru 4096 Mar 11 18:17 demo

ls -l demo
-rwxrwxrwx 1 abhi abhi    0 Mar 11 17:11 file1
-rwxrwxrwx 1 anshu anshu   0 Mar 11 18:15 file2

Ahora encienda la parte adhesiva de esto

 chmod +t demo/
 ls -ld demo
 drwxrwxrwt 2 guru guru 4096 Mar 11 18:17 demo

Ahora, ¿qué sucede si un usuario (abhi) desea cambiar el nombre del segundo usuario (anshu)

mv /home/guru/demo/file2  /home/guru/demo/file3
mv: cannot move '/home/guru/demo/file2' to  '/home/guru/demo/file3': Operation not   permitted  

El origen de la parte pegajosa.

En Linux, el bit adhesivo solo tiene el uso descrito anteriormente, en los directorios. Históricamente, se usaba para algo completamente diferente en los archivos normales, y de ahí proviene el nombre.

Cuando se ejecuta un programa, lleva tiempo cargar el programa en la memoria antes de que el usuario pueda comenzar a usarlo. Si los usuarios utilizan con frecuencia un programa, por ejemplo, un editor, el retraso del tiempo de inicio fue una sobrecarga en ese entonces.

Para mejorar este retraso de tiempo, se introdujo el bit adhesivo. El sistema operativo verificó que si el bit fijo en un ejecutable está activado, el segmento de texto del ejecutable se mantuvo en el espacio de intercambio. Esto facilitó la carga del ejecutable en la RAM cuando el programa se ejecutó nuevamente, minimizando así el retraso de tiempo.

Los sistemas modernos como Linux gestionan su caché de archivos ejecutables y otros archivos automáticamente y no necesitan el bit adhesivo para eso.

Fuente: "Concepto de Linux Sticky Bit explicado con ejemplos" en The Geek Stuff

g_p
fuente
2

Un stickybit es un método alternativo para que los directorios compartidos no se eliminen accidentalmente. Cuando un directorio tiene un stickybit, solo el propietario o la raíz pueden eliminarlo, incluso si todos los usuarios pueden tomar todos los demás permisos.

/tmpes el directorio más compartido entre procesos y usuarios y para eso contiene el stickybit para garantizar que ningún usuario pueda eliminar el directorio, incluso si el permiso es 777, y debe ser así para que los usuarios y procesos puedan usar el directorio sin conflicto en los permisos.


fuente