¿Cómo funciona la parte adhesiva?

148

SUID

El bit fijo se aplicó a los programas ejecutables que marcaban el sistema para mantener una imagen del programa en la memoria después de que el programa terminó de ejecutarse.

Pero no sé lo que está almacenado en la memoria. ¿Y cómo puedo verlos, en este caso?

fluke-ng
fuente
Aquí hay un buen tutorial con ejemplos trabajados y explicaciones. La clave para entender esto es el sistema octal involucrado. Tutorial de Linux Sticky Bits con ejemplos resueltos .
CMP

Respuestas:

193

Esta es probablemente una de las cosas más molestas que la gente comete todo el tiempo. El bit SUID / GUID y el bit adhesivo son 2 cosas completamente diferentes.

Si lo hace man chmod, puede leer sobre el SUID y los bits adhesivos. La página de manual también está disponible aquí .

antecedentes

extracto

Las letras rwxXst seleccionan bits de modo de archivo para los usuarios afectados: leer (r), escribir (w), ejecutar (o buscar directorios) (x), ejecutar / buscar solo si el archivo es un directorio o ya tiene permiso de ejecución para algunos usuario (X), establecer ID de usuario o grupo en ejecución (s) , bandera de eliminación restringida o bit fijo (t) .

SUID / GUID

Lo que la página de manual anterior está tratando de decir es que la posición que toma el bit x en rwxrwxrwx para el usuario octal (primer grupo de rwx) y el grupo octal (segundo grupo de rwx) puede tomar un estado adicional donde la x se convierte un s. Cuando esto ocurre, este archivo cuando se ejecuta (si es un programa y no solo un script de shell) se ejecutará con los permisos del propietario o del grupo del archivo.

Entonces, si el archivo es propiedad de root y el bit SUID está activado, el programa se ejecutará como root. Incluso si lo ejecuta como un usuario normal. Lo mismo se aplica al bit GUID.

extracto

SETUID Y SETGID BITS

chmod borra el bit set-group-ID de un archivo normal si la ID de grupo del archivo no coincide con la ID de grupo efectiva del usuario o una de las ID de grupo suplementarias del usuario, a menos que el usuario tenga los privilegios apropiados. Las restricciones adicionales pueden hacer que se ignoren los bits set-user-ID y set-group-ID de MODE o RFILE. Este comportamiento depende de la política y la funcionalidad de la llamada al sistema chmod subyacente. En caso de duda, verifique el comportamiento subyacente del sistema.

chmod conserva los bits set-user-ID y set-group-ID de un directorio a menos que especifique explícitamente lo contrario. Puede establecer o borrar los bits con modos simbólicos como u + sy gs, y puede establecer (pero no borrar) los bits con un modo numérico.

Ejemplos de SUID / GUID

sin suid / guid : solo se configuran los bits rwxr-xr-x .

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

bit ejecutable de suid y usuario habilitado (s minúscula) : se establecen los bits rwsr-xrx .

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid habilitado y bit ejecutable deshabilitado (S mayúscula) : se establecen los bits rwSr-xr-x .

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

bit ejecutable de guid & group habilitado (minúsculas) : se establecen los bits rwxr-sr-x .

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

guid habilitado y bit ejecutable deshabilitado (S mayúscula) : se establecen los bits rwxr-Sr-x .

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

poco pegajoso

El bit adhesivo, por otro lado, se denota como t, por ejemplo, con el /tmpdirectorio:

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

Este bit siempre debería haberse llamado "bit de eliminación restringida" dado que eso es lo que realmente connota. Cuando este bit de modo está habilitado, crea un directorio de modo que los usuarios solo puedan eliminar archivos y directorios de los que son propietarios.

extracto

BANDERA DE ELIMINACIÓN RESTRINGIDA O PICADA

El indicador de eliminación restringida o bit fijo es un solo bit, cuya interpretación depende del tipo de archivo. Para los directorios,
evita que los usuarios no privilegiados eliminen o cambien el nombre de un archivo en el directorio a menos que sean dueños del archivo o del directorio; Esto se llama el indicador de eliminación restringida para el directorio, y se encuentra comúnmente en directorios de escritura mundial como / tmp. Para archivos regulares en algunos sistemas más antiguos, el bit guarda la imagen de texto del programa en el dispositivo de intercambio para que se cargue más rápidamente cuando se ejecuta; esto se llama la parte adhesiva.

slm
fuente
43
En realidad, el bit adhesivo podría aplicarse previamente a los ejecutables, lo que provocó que estos permanecieran intercambiados después de cargarse por primera vez. Esto podría ahorrar mucho uso innecesario de disco / red (NFS) y CPU para programas que se usaban mucho. Sin embargo, ni Linux ni la mayoría de los sistemas Unix (¿todos?) Ya lo soportan (se eliminó del núcleo). Es "pegajoso", porque el ejecutable se atascó en el intercambio. Además, se utilizó para directorios como usted describe.
Baard Kopperud
44
En realidad, "muy usado o muy grande" sería una mejor descripción. Recuerde que mi universidad tenía el navegador web Netscape como "adhesivo" en su computadora HP-UX en 1995. Por lo tanto, los programas pequeños que se usaban con mucha frecuencia (p. Ej., Los comandos del sistema se ejecutaban con frecuencia por cron) y los programas grandes (p. Ej. Netscape) fueron los principales candidatos para ser "pegajosos". En ambos casos, volver a cargarlos constantemente desde el disco / NFS sería un desperdicio.
Baard Kopperud
8
Los programas de bits fijos estaban destinados a permanecer residentes en la RAM, no en el intercambio (cargar una imagen desde un archivo de intercambio no es mucho más rápido que cargarlo desde un disco del sistema de archivos). Estaba destinado a comandos esenciales a nivel del sistema operativo como ls. Obviamente, solo el superusuario podría establecer el bit adhesivo en un archivo. Se volvió menos importante después de que se introdujeron la memoria virtual y las bibliotecas compartidas, y especialmente a medida que los localizadores se volvieron más inteligentes y podían decidir dinámicamente qué páginas mantener como residentes.
alexis
44
Y dado que la propiedad adhesiva no tenía sentido para un directorio, el mismo bit de la máscara de permisos se interpretó más tarde para modificar la semántica tradicional de creación de archivos para directorios.
alexis
55
@alexis: Originalmente, los programas de bits fijos se mantenían en el espacio de intercambio. Esto fue mucho más rápido que leer desde el sistema de archivos porque la lectura de imágenes de archivos de intercambio eran sectores contiguos y, por lo tanto, se podían leer principalmente de forma asincrónica. Con los primeros sistemas de archivos, no había "longitudes de ejecución" del sector y la mayoría de los primeros controladores del sistema de archivos leían un sector a la vez, incluso si los sectores eran consecutivos. El resultado en un PDP-40 fue que los programas fijos parecían cargarse instantáneamente, mientras que los programas no fijos tomaban el habitual segundo o dos. Creo que solo teníamos edpegajoso.
wallyk
8

"El bit fijo se aplicó a los programas ejecutables que marcaban el sistema para mantener una imagen del programa en la memoria después de que el programa terminó de ejecutarse".

Creo que es información bastante obsoleta, hoy en día la mayoría de los Unix modernos ignoran eso. En Linux, el bit adhesivo solo es relevante para los directorios. Vea aquí y el artículo de Wikipedia bastante informativo .

De todos modos, en ese viejo comportamiento, la imagen (solo el "código", no los datos) solo se mantuvo en la memoria virtual, normalmente intercambiada, no en la memoria real, para ejecutarla más rápido la próxima vez.

leonbloy
fuente
3

¿Qué son las partes adhesivas?

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 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.

chandrakumar.M
fuente
1
Eso no está bien: en.wikipedia.org/wiki/Sticky_bit
AB
77
@AB Me parece bastante exacto, casi hasta el punto de parafrasear el comienzo del artículo de Wikpedia que cita. ¿Qué tiene de malo?
roaima
Yo diría que la respuesta está incompleta. "Adhesivo" también denota que el ejecutable se mantendría en el espacio de intercambio para que se ejecute más rápido. Ahora, esta es una historia antigua, pero en los sistemas de archivos más antiguos, los controladores solían leer un sector a la vez, incluso si los sectores eran consecutivos. Esto hizo que los ejecutables no adhesivos fueran lentos, la adherencia tenía mucho sentido en ese momento.
GhostCode