En informática , el bit fijo es un indicador de derecho de acceso de propiedad del usuario que se puede asignar a archivos y directorios en sistemas tipo Unix .
Hay dos definiciones: una para archivos y otra para directorios.
En el caso de los archivos, en particular los ejecutables, el superusuario podría etiquetarlos para que se conserven en la memoria principal, incluso cuando ya no sea necesario, a fin de minimizar el intercambio que se produciría cuando surgiera otra necesidad y el archivo tuviera que volver a cargarse desde una memoria secundaria relativamente lenta. [1] Esta función se ha vuelto obsoleta debido a la optimización del intercambio.
En el caso de los directorios, cuando se activa el bit de adhesión 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 de adhesión activado, cualquier usuario con permisos de escritura y ejecución para el directorio puede cambiar el nombre o eliminar los archivos que contiene, independientemente del propietario del archivo. Normalmente, esto se activa en el /tmp
directorio para evitar que los usuarios normales eliminen o muevan los archivos de otros usuarios.
La función moderna del bit adhesivo se refiere a los directorios y protege a los directorios y su contenido de ser pirateados por personas que no son sus propietarios; esto se encuentra en la mayoría de los sistemas modernos similares a Unix. Los archivos en un directorio compartido, por ejemplo, /tmp
pertenecen a propietarios individuales y las personas que no son sus propietarios no pueden eliminarlos, sobrescribirlos ni cambiarles el nombre.
El bit pegajoso se introdujo en la quinta edición de Unix (en 1974) para su uso con archivos ejecutables puros . [2] Cuando se configuraba, indicaba al sistema operativo que retuviera el segmento de texto del programa en el espacio de intercambio después de que el proceso saliera. Esto acelera las ejecuciones posteriores al permitir que el núcleo realice una sola operación de mover el programa desde el espacio de intercambio a la memoria real. Por lo tanto, los programas de uso frecuente, como los editores, se cargarían notablemente más rápido. Un problema notable con los programas "pegados" era reemplazar el ejecutable (por ejemplo, durante la aplicación de parches ); para hacerlo, era necesario eliminar el bit pegajoso del ejecutable, ejecutar el programa y salir para vaciar la caché, reemplazar el ejecutable binario y luego restaurar el bit pegajoso.
Posteriormente, este comportamiento se volvió operativo solo en HP-UX y UnixWare . Solaris parece haber abandonado esto en 2005. [ cita requerida ] La versión 4.4-Lite de BSD mantuvo el antiguo comportamiento de bit pegajoso, pero posteriormente se eliminó de OpenBSD (a partir de la versión 3.7) y FreeBSD (a partir de la versión 2.2.1). Ninguna versión de Linux ha admitido nunca este comportamiento tradicional; Linux realiza el almacenamiento en caché de archivos ejecutables de la misma forma que todos los archivos, por lo que no es necesario volver a ejecutar el programa para vaciar el caché.
El uso más común del bit adhesivo es en directorios que residen dentro de sistemas de archivos para sistemas operativos tipo Unix . Cuando se activa el bit adhesivo de un directorio, el sistema de archivos trata los archivos en dichos directorios de una manera especial, de modo que solo el propietario del archivo, el propietario del directorio o el root pueden renombrar o eliminar el archivo. Sin el bit adhesivo activado, cualquier usuario con permisos de escritura y ejecución para el directorio puede renombrar o eliminar los archivos que contiene, independientemente del propietario del archivo. Por lo general, esto se activa en el /tmp
directorio para evitar que los usuarios comunes eliminen o muevan los archivos de otros usuarios. Esta característica se introdujo en 4.3BSD en 1986 y hoy se encuentra en la mayoría de los sistemas modernos tipo Unix.
Además, Solaris (a partir de Solaris 2.5) define un comportamiento especial cuando el bit persistente se activa en archivos no ejecutables : cuando se accede a esos archivos, el núcleo no los almacena en caché . Esto se suele activar en los archivos de intercambio para evitar que el acceso al archivo borre datos más importantes de la caché del sistema. También se utiliza ocasionalmente para pruebas de evaluación comparativa . [ cita requerida ]
El bit de fijación también lo establece el montador automático para indicar que un archivo aún no se ha montado. Esto permite que programas como ls ignoren los archivos remotos que no se han montado.
Sistema operativo | Directorios | Archivos |
---|---|---|
AIX 5.2 [3] | indica que sólo los propietarios de archivos pueden vincular o desvincular archivos en el directorio especificado. | Establece el atributo de texto guardado. |
Solaris 11 [4] | Si un directorio es escribible y tiene S_ISVTX (el bit fijo) establecido, los archivos dentro de ese directorio se pueden eliminar o renombrar solo si se cumple una o más de las siguientes condiciones (ver unlink(2) y rename(2)): el usuario es dueño del archivo, el usuario es dueño del directorio, el usuario puede escribir en el archivo, el usuario es un usuario privilegiado. | Si un archivo normal no es ejecutable y tiene S_ISVTX configurado, se supone que el archivo es un archivo de intercambio. En este caso, no se utilizará la caché de páginas del sistema para almacenar los datos del archivo. Si se configura [...] en cualquier otro archivo, los resultados no se especifican. |
HP-UX [5] | Si [...] se configura en un directorio, un usuario sin privilegios no puede eliminar ni cambiar el nombre de los archivos de otros en ese directorio. | [...] evita que el sistema abandone la imagen del espacio de intercambio de la parte del texto del programa del archivo cuando finaliza su último usuario. Luego, cuando el siguiente usuario del archivo lo ejecuta, no es necesario leer el texto del sistema de archivos, sino que simplemente se puede intercambiar, ahorrando así tiempo. |
Linux [6] [7] | Cuando se configura [...] en un directorio, los archivos de ese directorio solo pueden ser desvinculados o renombrados por root o el propietario del directorio o el propietario del archivo. Los sysctl fs.protected_fifos, fs.protected_regular y fs.protected_symlinks restringen aún más la creación de FIFO, la creación de archivos regulares y el seguimiento de enlaces simbólicos, respectivamente, dentro de directorios con el bit sticky configurado. | El kernel de Linux ignora el bit adhesivo en los archivos. |
FreeBSD [8] | Si [...] está configurado en un directorio, un usuario sin privilegios no puede eliminar ni renombrar archivos de otros usuarios en ese directorio. | El sistema VM FreeBSD ignora totalmente el bit persistente (S_ISVTX) para los ejecutables. |
IRIX [9] | Si [...] se configura en un directorio, entonces cualquier archivo creado en ese directorio adoptará el ID de grupo del directorio en lugar del ID de grupo del proceso que lo llama. Se puede usar mount(1M) para habilitar esta función independientemente del modo del directorio. | Si el bit persistente, S_ISVTX, se configura en un archivo que es un cargador dinámico para un ejecutable ELF, entonces, cuando se ejecuta el ejecutable, los espacios de direcciones de solo lectura del proceso anterior estarán disponibles para el cargador dinámico en el nuevo proceso. Esto puede mejorar considerablemente el tiempo de inicio del programa. La configuración del bit persistente en cualquier otro archivo no tiene ningún efecto. |
Mac OS X (Leopard) [10] | Un directorio cuyo bit "sticky" está activado se convierte en un directorio de solo anexión [...] en el que la eliminación de archivos está restringida. Un usuario solo puede eliminar o renombrar un archivo en un directorio sticky si el usuario tiene permiso de escritura para el directorio y es el propietario del archivo, el propietario del directorio o el superusuario. Esta característica se aplica de manera útil a directorios como /tmp que deben tener permisos de escritura públicos pero que deberían negar a los usuarios la licencia para eliminar o renombrar arbitrariamente los archivos de los demás. Cualquier usuario puede crear un directorio sticky. | El bit de adherencia no tiene efecto sobre los archivos ejecutables. Toda la optimización sobre si las imágenes de texto permanecen residentes en la memoria la gestiona el sistema de memoria virtual del núcleo. |
NetBSD [11] | Un directorio cuyo bit "sticky" está activado se convierte en un directorio en el que se restringe la eliminación de archivos. Un usuario solo puede eliminar o renombrar un archivo en un directorio sticky si tiene permiso de escritura para el directorio y es el propietario del archivo, el propietario del directorio o el superusuario. Esta característica se aplica de manera útil a directorios como /tmp, que deben tener permisos de escritura públicos, pero que deberían negar a los usuarios la licencia para eliminar o renombrar arbitrariamente los archivos de los demás. | Actualmente, NetBSD no trata de manera especial los archivos regulares que tienen el bit persistente configurado, pero este comportamiento podría cambiar en el futuro. |
OpenBSD [12] | Un directorio con el bit "sticky" activado impone restricciones a la eliminación de archivos: un usuario solo puede eliminar o renombrar un archivo en un directorio sticky si tiene permiso de escritura para el directorio y es el propietario del archivo, el propietario del directorio o el superusuario. Esta característica se aplica de manera útil a directorios como /tmp, que deben tener permisos de escritura públicos, pero que deberían negar a los usuarios la licencia para eliminar o renombrar arbitrariamente los archivos de los demás. Cualquier usuario puede crear un directorio fijo. Consulte chmod(1) para obtener detalles sobre cómo modificar los modos de archivo. | Históricamente, un archivo ejecutable compartible que tenía el bit sticky activado no se descartaba inmediatamente del espacio de intercambio después de la ejecución. El núcleo almacenaba el segmento de texto del archivo para su posterior reutilización, evitando así tener que volver a cargar el programa. Esto ya no es así en los sistemas modernos; el sistema de memoria virtual actual mantiene un registro de los ejecutables utilizados recientemente, lo que hace que el bit sticky para los archivos sea redundante. El bit sticky aún se puede activar en los archivos, pero sin ningún efecto. Sólo el superusuario puede establecer el bit adhesivo en un archivo, aunque el propietario del archivo puede borrar el bit adhesivo. |
Software Unix de SCO [13] | Si un directorio es escribible y el bit persistente, S_ISVTX , está configurado en el directorio, un proceso puede eliminar o renombrar archivos dentro de ese directorio solo si se cumple una o más de las siguientes condiciones:
| Si un archivo ejecutable 0410 a.out tiene el bit sticky (bit de modo 01000) activado, el sistema operativo no eliminará el texto del programa del área de intercambio cuando finalice el último proceso de usuario. Si un archivo ejecutable 0413 a.out o ELF tiene el bit sticky activado, el sistema operativo no eliminará el texto del programa de la memoria cuando finalice el último proceso de usuario. En cualquier caso, si el bit sticky está activado, el texto ya estará disponible (ya sea en un área de intercambio o en la memoria) cuando el próximo usuario del archivo lo ejecute, lo que hace que la ejecución sea más rápida. |
El bit persistente se puede configurar con el comando chmod y se puede configurar con su modo octal 1000 o con su símbolo t ( s ya lo utiliza el bit setuid ). Por ejemplo, para agregar el bit al directorio /usr/local/tmp
, se escribiría chmod +t /usr/local/tmp. O bien, para asegurarse de que el directorio tenga tmp
permisos estándar, también se podría escribir chmod 1777 /usr/local/tmp.
Para borrarlo, utilice chmod -t /usr/local/tmpo chmod 0777 /usr/local/tmp(este último también restablecerá el tmp
directorio a los permisos estándar).
En la notación de permisos del sistema de archivos simbólico Unix , el bit persistente se representa con la letra t o T en el lugar del carácter final, dependiendo de si el bit de ejecución de la categoría Otros está activado o desactivado, respectivamente. Por ejemplo, en Solaris 8, el /tmp
directorio, que de manera predeterminada tiene activados tanto el bit de ejecución Otros como el bit persistente, se muestra como:
$ ls -ld /tmp drwxrwxrwt 4 root sys 485 10 de noviembre 06:01 /tmp
Si el bit fijo se configura en un archivo o directorio sin el bit de ejecución configurado para las otras categorías (no propietario del usuario y no propietario del grupo), se indica con una T mayúscula (que reemplaza lo que de lo contrario sería - ):
# ls -l test -rw-r--r-- 1 root cualquiergrupo 0 10 nov 12:57 prueba # chmod +t prueba ; ls -l test -rw-r--rT 1 root cualquiergrupo 0 10 nov 12:57 prueba
{{cite web}}
: CS1 maint: bot: estado de URL original desconocido ( enlace )