GNU/Linux >> Tutoriales Linux >  >> Linux

Concepto de Sticky Bit de Linux explicado con ejemplos

Piense en un escenario en el que cree un directorio de Linux que puedan utilizar todos los usuarios del sistema Linux para crear archivos. Los usuarios pueden crear, eliminar o renombrar archivos según su conveniencia en este directorio. Para todos aquellos que piensan que ¿por qué se crearía un directorio así? Existe, por ejemplo, el directorio /tmp en el sistema Linux que pueden usar diferentes usuarios de Linux para crear archivos temporales.

Ahora, ¿qué sucede si un usuario elimina (o cambia el nombre) de un archivo accidental o deliberadamente? creado por algún otro usuario en este directorio?

Bueno, para evitar este tipo de problemas, se utiliza el concepto de sticky bit.

Un Sticky bit 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 eliminen o cambien el nombre del archivo. Ningún otro usuario tiene privilegios para eliminar el archivo creado por otro usuario.

Historia de Sticky Bit

Antes de seguir explicando el bit adhesivo, analicemos la historia del bit adhesivo, ya que vale la pena analizar esta información.

El bit pegajoso no es un concepto nuevo. De hecho, se introdujo por primera vez en 1974 en el sistema operativo Unix. El propósito de Sticky Bit en ese entonces era diferente. Se introdujo para minimizar el retraso de tiempo introducido cada vez que se ejecuta un programa.

Cuando se ejecuta un programa, se necesita tiempo para cargar el programa en la memoria antes de que el usuario pueda comenzar a usarlo. Si un programa, por ejemplo, un editor, es utilizado con frecuencia por los usuarios, entonces el retraso en el tiempo de inicio era una sobrecarga en aquel entonces.

Para mejorar este retraso de tiempo, se introdujo el bit adhesivo. El sistema operativo verificó que si el bit adhesivo en un ejecutable está activado, entonces 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 tiempo de demora.

Aunque este método demostró ser exitoso en minimizar el retraso del tiempo de arranque, surgió un problema importante debido a esta operación. El problema era que si se aplicaba algún tipo de parche al ejecutable como una corrección de errores o una nueva función, se debían llevar a cabo los siguientes pasos:

  • Primero elimine el bit adhesivo del ejecutable
  • Ahora, ejecute el ejecutable y ciérrelo para que el segmento de texto existente del intercambio se vacíe
  • Ahora, vuelva a establecer el sticky bit en el ejecutable y vuelva a ejecutar el ejecutable para que el nuevo segmento de texto se almacene en la memoria de intercambio

Los pasos anteriores fueron necesarios para que el programa refleje las nuevas funciones o las correcciones de errores que se agregaron al ejecutable.

Así que este fue uno de los principales problemas. Además, con la evolución de la tecnología, las técnicas de acceso rápido a la memoria evolucionaron, lo que dejó obsoleto el requisito de bit adhesivo para este propósito.

Ejemplos de bits adhesivos

En esta sección, discutiremos cómo configurar y desactivar el sticky bit usando algunos ejemplos.

Un ejemplo básico

Cree un directorio y proporcione a todos los usuarios acceso de lectura, escritura y ejecución:

# mkdir allAccess

# chmod 777 allAccess/

# ls -ld allAccess/
drwxrwxrwx 2 himanshu himanshu 4096 Oct 24 15:43 allAccess/

Entonces vemos que se crea un directorio llamado 'allAccess' y se otorga acceso de lectura, escritura y ejecución a este directorio a todos los usuarios a través del comando chmod.

Ahora, cree varios archivos en este directorio (con diferentes usuarios) de modo que todos los usuarios tengan acceso de lectura, escritura y ejecución a ellos.

Por ejemplo:

# ls -l allAccess/
total 0
-rwxrwxrwx 1 himanshu himanshu 0 Oct 24 15:48 user1
-rwxrwxrwx 1 guest    guest    0 Oct 24 16:11 user_file_0
-rwxrwxrwx 1 guest-2  guest-2  0 Oct 24 16:15 user_file_1

Los archivos user_file_0 y user_file_1 son creados por diferentes usuarios, pero tienen acceso de lectura, escritura y ejecución para todos los usuarios. Esto significa que el usuario 'invitado' puede eliminar o cambiar el nombre del archivo creado por el usuario 'invitado-2'.

Para evitar esto, se puede establecer un bit adhesivo en el directorio allAccess.

Ahora, active el sticky bit en el directorio usando el indicador +t del comando chmod.

# chmod +t allAccess/

# ls -ld allAccess/
drwxrwxrwt 2 himanshu himanshu 4096 Oct 24 16:19 allAccess/

Como se puede observar se introduce un bit de permiso ‘t’ en los bits de permiso del directorio.

Ahora, si el usuario 'invitado' intenta cambiar el nombre del archivo 'user_file_1', esto es lo que sucede:

$ mv /home/himanshu/allAccess/user_file_1 /home/himanshu/allAccess/user_file_0
mv: cannot move `/home/himanshu/allAccess/user_file_1' to `/home/himanshu/allAccess/user_file_0': Operation not permitted

Entonces vemos que la operación no estaba permitida.

Eliminar bit adhesivo usando la opción -t

El bit adhesivo se puede eliminar de los permisos de un directorio a través de la opción -t del comando chmod.

Aquí hay un ejemplo:

# chmod -t allAccess/

# ls -ld allAccess/
drwxrwxrwx 2 himanshu himanshu 4096 Oct 24 16:19 allAccess/

Entonces vemos que el bit de permiso 't' se elimina del directorio.

Los diferentes sistemas operativos se comportan de manera diferente con los bits adhesivos, como se explica en este artículo de wikipedia. Por ejemplo, Linux solo busca sticky bit si un usuario intenta cambiar el nombre de un archivo. No verificará el bit adhesivo si se está eliminando un archivo.


Linux
  1. Comando de apagado de Linux explicado con ejemplos

  2. Comando nslookup de Linux explicado con ejemplos

  3. Comando Traceroute de Linux, explicado con ejemplos

  4. Comando whoami en Linux explicado con ejemplos

  5. Comando Ping de Linux explicado con ejemplos

Comando Bash Echo explicado con ejemplos en Linux

Comando Tr en Linux explicado con ejemplos

w Comando explicado con ejemplos en Linux

Comando de espera en Linux explicado con ejemplos prácticos

Explicación del comando tee de Linux (con ejemplos)

Explicación del comando csplit de Linux (con ejemplos)