En informática , el bit pegajoso es un indicador de derecho de acceso de propiedad del usuario que se puede asignar a archivos y directorios en sistemas similares a Unix.
Cuando se establece el bit pegajoso de un directorio, el sistema de archivos trata los archivos en dichos directorios de una manera especial para que solo el propietario del archivo, el propietario del directorio o el usuario raíz puedan cambiar el nombre o eliminar el archivo. Sin el bit adhesivo establecido, cualquier usuario con permisos de escritura y ejecución para el directorio puede cambiar el nombre o eliminar los archivos contenidos, independientemente del propietario del archivo. Normalmente, esto se establece en el /tmp
directorio para evitar que los usuarios normales eliminen o muevan los archivos de otros usuarios.
La función moderna del bit pegajoso se introdujo en 4.3BSD [ discutir ] en 1986, y se encuentra en la mayoría de los sistemas modernos tipo Unix.
Historia
El bit pegajoso se introdujo en la Quinta Edición de Unix (en 1974) para su uso con archivos ejecutables puros . Cuando se establece, indica al sistema operativo que retenga el segmento de texto del programa en el espacio de intercambio después de que el proceso finaliza . Esto acelera las ejecuciones posteriores al permitir que el núcleo realice una sola operación de mover el programa de la memoria 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 el parcheo ); para hacerlo, era necesario eliminar el bit adhesivo del ejecutable, ejecutar el programa y salir para vaciar el caché, reemplazar el ejecutable binario y luego restaurar el bit adhesivo.
Actualmente, [ ¿cuándo? ] este comportamiento solo está operativo en HP-UX y UnixWare . Solaris parece haber abandonado esto en 2005. [ cita requerida ] La versión 4.4-Lite de BSD retuvo 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 soportado este comportamiento tradicional; Linux realiza el almacenamiento en caché de los archivos ejecutables de la misma manera que todos los archivos, por lo que no es necesario volver a ejecutar el programa para vaciar la caché.
Uso
El uso más común del bit pegajoso es en directorios que residen dentro de sistemas de archivos para sistemas operativos similares a Unix. Cuando se establece el bit pegajoso de un directorio, el sistema de archivos trata los archivos en dichos directorios de una manera especial para que solo el propietario del archivo, el propietario del directorio o la raíz puedan cambiar el nombre o eliminar el archivo. Sin el bit adhesivo establecido, cualquier usuario con permisos de escritura y ejecución para el directorio puede cambiar el nombre o eliminar los archivos contenidos, independientemente del propietario del archivo. Normalmente, esto se establece en el /tmp
directorio para evitar que los usuarios normales 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 adhesivo se establece en archivos no ejecutables : esos archivos, cuando se accede a ellos, no serán almacenados en caché por el kernel . Esto generalmente se establece en archivos de intercambio para evitar que el acceso al archivo elimine datos más importantes de la memoria caché del sistema. También se utiliza ocasionalmente para pruebas comparativas . [ cita requerida ]
El sticky bit se establece también por el montador automático para indicar que un archivo no se ha montado todavía. Esto permite que programas como ls ignoren los archivos remotos desmontados.
Sistema operativo | Directorios | Archivos |
---|---|---|
AIX 5.2 [1] | indica que solo los propietarios de archivos pueden vincular o desvincular archivos en el directorio especificado. | establece el atributo de guardar texto. |
Solaris 11 [2] | Si se puede escribir en un directorio y tiene configurado S_ISVTX (el bit adhesivo), los archivos dentro de ese directorio se pueden eliminar o cambiar de nombre solo si se cumple una o más de las siguientes condiciones (consulte desvincular (2) y renombrar (2)): el usuario es propietario el archivo, el usuario es propietario del directorio, el usuario puede escribir en el archivo, el usuario es un usuario privilegiado. | Si un archivo normal no es ejecutable y tiene configurado S_ISVTX, se asume que el archivo es un archivo de intercambio. En este caso, la caché de la página del sistema no se utilizará para almacenar los datos del archivo. Si […] se establece en cualquier otro archivo, los resultados no se especifican. |
HP-UX [3] | Si […] se establece 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 de 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 ejecute, no es necesario leer el texto del sistema de archivos, sino que simplemente se puede intercambiar, ahorrando así tiempo. |
Linux [4] | Cuando […] se establece en un directorio, los archivos en ese directorio solo pueden ser desvinculados o renombrados por la raíz o el propietario del directorio o el propietario del archivo. | el kernel de Linux ignora el bit pegajoso en los archivos. |
FreeBSD [5] | Si […] se establece en un directorio, un usuario sin privilegios no puede eliminar ni cambiar el nombre de los archivos de otros usuarios en ese directorio. | El sistema FreeBSD VM ignora totalmente el bit pegajoso (S_ISVTX) de los ejecutables. |
IRIX [6] | Si […] se establece en un directorio, entonces cualquier archivo creado en ese directorio tomará el ID de grupo del directorio en lugar del ID de grupo del proceso de llamada. mount (1M) se puede utilizar para habilitar esta función independientemente del modo del directorio. | Si el bit adhesivo, S_ISVTX, se establece en un archivo que es un cargador dinámico para un ejecutable ELF, cuando el ejecutable se ejecute, 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 adhesivo en cualquier otro archivo no tiene ningún efecto. |
Mac OS X (Leopard) [7] | Un directorio cuyo 'bit pegajoso' está configurado se convierte en un directorio de solo anexión […] en el que la eliminación de archivos está restringida. Un archivo en un directorio fijo solo puede ser eliminado o renombrado por un usuario si el usuario tiene permiso de escritura para el directorio y el usuario es el propietario del archivo, el propietario del directorio o el superusuario. Esta función se aplica de manera útil a directorios como / tmp, que deben ser de escritura pública, pero deben negar a los usuarios la licencia para eliminar o cambiar el nombre de los archivos de los demás de forma arbitraria. Cualquier usuario puede crear un directorio fijo. | El bit adhesivo no tiene ningún efecto en los archivos ejecutables. Toda la optimización sobre si las imágenes de texto permanecen residentes en la memoria es manejada por el sistema de memoria virtual del kernel. |
NetBSD [8] | Un directorio cuyo 'bit adhesivo' se establece se convierte en un directorio en el que la eliminación de archivos está restringida. Un archivo en un directorio fijo solo puede ser eliminado o renombrado por un usuario si el usuario tiene permiso de escritura para el directorio y el usuario es el propietario del archivo, el propietario del directorio o el superusuario. Esta función se aplica de manera útil a directorios como / tmp, que deben ser de escritura pública, pero deben negar a los usuarios la licencia para eliminar o cambiar el nombre de los archivos de los demás de forma arbitraria. | Actualmente, NetBSD no trata los archivos regulares que tienen el bit adhesivo establecido de forma especial, pero este comportamiento puede cambiar en el futuro. |
OpenBSD [9] | Un directorio con el conjunto de "bits adhesivos" impone restricciones a la eliminación de archivos: un archivo en un directorio adhesivo solo puede ser eliminado o renombrado por un usuario si el usuario tiene permiso de escritura para el directorio y el usuario es el propietario del archivo, el propietario del directorio, o el superusuario. Esta función se aplica de manera útil a directorios como / tmp, que deben ser de escritura pública, pero deben negar a los usuarios la licencia para eliminar o cambiar el nombre de los archivos de los demás de forma arbitraria. 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 que se puede compartir que tenía el bit adhesivo establecido no se descartaba inmediatamente del espacio de intercambio después de la ejecución. El kernel acumuló el segmento de texto del archivo para reutilizarlo en el futuro, evitando así tener que volver a cargar el programa. Esto ya no es así en los sistemas modernos; el sistema de memoria virtual actual realiza un seguimiento de los ejecutables usados recientemente, lo que hace que el bit adhesivo para los archivos sea redundante. El bit adhesivo todavía se puede configurar en archivos, pero sin ningún efecto. Solo el superusuario puede establecer la parte adhesiva en un archivo, aunque el propietario del archivo puede borrar la parte adhesiva. |
SCO UnixWare [10] | Si se puede escribir en un directorio y el bit adhesivo, S_ISVTX , se establece en el directorio, un proceso puede eliminar o cambiar el nombre de los 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 adhesivo (bit de modo 01000) establecido, 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 adhesivo establecido, el sistema operativo no borrará el texto del programa de la memoria cuando finalice el último proceso del usuario. En cualquier caso, si se establece el bit adhesivo, el texto ya estará disponible (ya sea en un área de intercambio o en la memoria) cuando el siguiente usuario del archivo lo ejecute, lo que hará que la ejecución sea más rápida. |
Ejemplos de
El bit pegajoso puede establecerse usando el comando chmod y puede establecerse usando su modo octal 1000 o por su símbolo t ( s ya es usado por el bit setuid ). Por ejemplo, para agregar el bit en el directorio /usr/local/tmp
, se escribiría chmod +t /usr/local/tmp. O, para asegurarse de que ese directorio tenga tmp
permisos estándar , también se podría escribir chmod 1777 /usr/local/tmp.
Para borrarlo, use 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 de Unix , el bit adhesivo está representado por la letra t en el lugar del carácter final, reemplazando lo que de otro modo sería x . Por ejemplo, en Solaris 8, el /tmp
directorio, que de forma predeterminada tiene el bit adhesivo establecido, se muestra como:
$ ls -ld / tmp drwxrwxrwt 4 root sys 485 10 de noviembre 06:01 / tmp
Si el sticky-bit se establece en un archivo o directorio sin el bit de ejecución establecido para la categoría otros (no propietario del usuario y no propietario del grupo), se indica con una T mayúscula (reemplazando lo que de otro modo sería - ) :
# ls -l test -rw-r - r-- 1 root anygroup 0 10 de noviembre 12:57 test # chmod + t test ; ls -l prueba -rw-r - rT 1 root anygroup 0 Nov 10 12:57 prueba
Ver también
- chmod
- setuid
Referencias
- ^ "Copia archivada" . Archivado desde el original el 18 de enero de 2005 . Consultado el 19 de enero de 2009 .CS1 maint: copia archivada como título ( enlace )
- ^ "Sinopsis - sección 2 de las páginas del manual: Llamadas al sistema" . Docs.oracle.com. 2011-11-01 . Consultado el 10 de abril de 2014 .
- ^ [1] Archivado el 20 de noviembre de 2007 en la Wayback Machine.
- ^ "chmod (1) - Página de manual de Linux" . Man7.org . Consultado el 10 de abril de 2014 .
- ^ "chmod - FreeBSD" . Nixdoc.net. 1993-06-04 . Consultado el 10 de abril de 2014 .
- ^ "chmod - IRIX / estándar /" . Nixdoc.net . Consultado el 10 de abril de 2014 .
- ^ "Biblioteca de desarrolladores de Mac" . Developer.apple.com . Consultado el 10 de abril de 2014 .
- ^ "sticky.7 - Páginas del manual de NetBSD" . Netbsd.gw.com. 2021-05-16 . Consultado el 16 de mayo de 2021 .
- ^ "Páginas del manual: pegajosas" . Openbsd.org. 2014-02-14 . Consultado el 4 de febrero de 2018 .
- ^ "chmod (2)" . Uw714doc.sco.com. 2004-04-25 . Consultado el 10 de abril de 2014 .
enlaces externos
- Permisos de archivos y directorios Unix , 2010, por Wayne Pollock, archivado desde el original el 3 de febrero de 2012