¿Cuáles son los directorios de escritura mundial por defecto?


14

En un sistema de archivos Linux estándar, ¿cuál de estos directorios comunes se puede escribir de forma predeterminada en todo el mundo ?

 /tmp 
 /etc
 /var 
 /proc 
 /bin 
 /boot
 /....
 ....

¿Por qué son de escritura mundial? ¿Eso plantea un riesgo de seguridad?

Respuestas:


16

Los únicos directorios obligatorios de FHS que comúnmente se pueden escribir en el mundo son /tmpy /var/tmp. En ambos casos, esto se debe a que están destinados a almacenar archivos temporales que cualquier persona puede crear.

También es común /dev/shm, como tmpfs (sistema de archivos respaldado por RAM), para un acceso rápido a datos de tamaño medio compartidos entre procesos, o simplemente para crear archivos que se garantiza que serán destruidos al reiniciar.

También puede haber un /var/mailo /var/spool/mail, y a veces otros directorios de cola de impresión. Esos se utilizan para retener el correo temporalmente antes de que se procese. No siempre se pueden escribir en todo el mundo, dependiendo de las herramientas en uso. Cuando lo están, es porque las herramientas de usuario pueden crear archivos allí para que sean procesadas por demonios.

Todos estos directorios generalmente tienen el bitt fijo ( ), lo que significa que solo el propietario de un archivo o del directorio puede mover o eliminar los archivos que contiene .

Cualquier programa que se ejecute como cualquier usuario puede crear archivos en estos directorios, y depende del programa creador hacer lo correcto en lo que respecta a la seguridad de sus datos particulares. No hay ningún problema de seguridad general en particular que no sea alguien que potencialmente está llenando el sistema de archivos, pero hay un amplio margen para que un programa se equivoque.

Ha habido algunos movimientos hacia /tmpdirectorios específicos del servicio . Esto evita algunos de los posibles errores que pueden surgir, por lo que no es tan vital que el programa esté libre de errores en la forma en que utiliza el directorio.


Puede encontrar los directorios de escritura mundial en su sistema con:

find / -maxdepth 3 -type d -perm -777

8

/tmp, /var/tmpy /var/lockson de escritura mundial por defecto. Puede haber enlaces simbólicos, como /usr/tmp/var/tmp, proporcionados para compatibilidad con aplicaciones más antiguas.

/tmpy /var/tmpde escritura mundial porque están destinados a ser utilizados por cualquier usuario para cualquier almacenamiento temporal. /var/lockes de escritura mundial para que cualquier proceso, que se ejecute como cualquier usuario, pueda crear archivos de bloqueo en una ubicación central.

¿Existe un riesgo de seguridad? No, pero más o menos sí.

Los permisos para todos esos directorios son 1777, siendo el principal 1el bit adhesivo . Eso significa que, si bien cualquiera puede crear un archivo en esos directorios de escritura mundial, solo el propietario puede eliminar sus propios archivos (y, por supuesto, el usuario raíz también puede hacerlo).

El posible riesgo de seguridad puede surgir de la creación insegura de archivos temporales. Dado que esos directorios son gratuitos, los usuarios deben tomar precauciones para asegurarse de que los archivos que crean sean realmente nuevos, en lugar de abrir un archivo existente o un enlace simbólico que un usuario malintencionado pudo haber instalado allí. Si los archivos se crean utilizando técnicas adecuadas, como open(…, O_EXCL)o mkstemp(3), entonces se evita dicho riesgo.


1
En los sistemas modernos, uno de esos enlaces simbólicos de compatibilidad es /var/lock/run/lock
camh

2

/tmp

Es arriesgado, porque necesita agregar código adicional para usarlo de manera segura. Obviamente esto se pasa por alto.

Steve Kemp da un ejemplo reciente. http://blog.steve.org.uk/sometimes_reading_code_makes_you_scream_.html

./mgmt/tools/SysAPI.cc:  tmp = fopen("/tmp/shadow", "w");
./mgmt/tools/SysAPI.cc:    system("/bin/mv -f /tmp/shadow /etc/shadow");

Si usted (el atacante) reemplaza / tmp / shadow antes de la segunda línea, puede reemplazar la contraseña de todos. (Supongo que el ataque requiere que crees el archivo antes de la primera línea y que el archivo se pueda escribir en todo el mundo).

Systemd en Linux permite mitigar tales vulnerabilidades al aislar / tmp para muchos servicios del sistema. (Excepto los que "mal uso / tmp como una ubicación para sockets IPC y otras primitivas de comunicación").

En Fedora Linux: http://fedoraproject.org/wiki/Features/ServicesPrivateTmp

Explicación de Systemd: http://0pointer.de/blog/projects/security.html


"Creo que el ataque requiere que crees el archivo antes de la primera línea" - De hecho. Si el archivo aún no existe, la primera línea lo creará como el usuario en ejecución (presumiblemente root), y un usuario malintencionado diferente no tendrá permisos para reemplazarlo antes de la segunda línea. Si el archivo ya existe, lo fopensobrescribe pero no restablece los permisos, por lo que el usuario malintencionado aún puede realizar cambios. Además, un usuario malintencionado podría haber hecho algo como ln -s /bin/bash /tmp/shadowantes de la primera línea, para que se sobrescribiera un sistema binario esencial.
hvd

2

Para encontrar directorios de escritura mundial, puede usar

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Para archivos, cambie el tipo a f

Para enlaces simbólicos escriba a l

Para establecer un bit adhesivo:

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print0| xargs -0 chmod +t
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.