Permitir el acceso a un directorio solo para ciertas aplicaciones

3

Me gustaría restringir el acceso a un directorio. Por ejemplo, en mi sistema hay un directorio ~/.thunderbird que contiene configuraciones, letras, cachés, etc. del cliente de correo Thunderbird . Obviamente, otras aplicaciones no necesitan el contenido de esta carpeta. Y otras aplicaciones no deben acceder a la carpeta no por seguridad sino por seguridad (por ejemplo, el comportamiento "loco" de alguna otra aplicación causado por un error o un error en mi script de shell no debería afectar el contenido de Thunderbird El directorio de ).

No puedo usar setuid en el ejecutable de Thunderbird (por ejemplo, /usr/bin/thunderbird ). Porque después de que se establezca el bit setuid , no accederé a los archivos habituales creados por Thunderbird (por ejemplo, archivos adjuntos descargados).

Hay una solución con el bit setgid en el ejecutable de Thunderbird (los archivos adjuntos tendrán thunderbird group mientras que el propietario será yo). Pero esta forma no es segura (porque el propietario será yo, por lo que accidentalmente puedo eliminar algo de ~/.thunderbird ).

De todos modos, el enfoque con setuid / setgid no es confiable y es frágil (por ejemplo, después de eliminar Thunderbird y volver a instalarlo, los bits serán no presente en la nueva instancia de /usr/bin/thunderbird ejecutable).

chroot no es una solución porque Thunderbird requiere acceso no solo a su directorio de inicio a bibliotecas compartidas también.

También he mirado en AppArmor. Sí, puedo configurar restricciones en Thunderbird . Pero parece imposible escribir una regla que niegue el acceso a ~/.thunderbird para todos los ejecutables, excepto /usr/bin/thunderbird .

Quizás, el objetivo se puede lograr a través de SELinux . Pero es demasiado complejo para mí por ahora. Y es superfluo: puede haber una forma más sencilla.

¿Podría ayudarme y señalar una herramienta (o módulo del kernel) que pueda permitir el acceso a un directorio para una aplicación determinada y denegar el acceso a todas las demás aplicaciones?

PS Mi distribución es LinuxMint 17.1 32bit .

    
pregunta flaz14 24.05.2017 - 17:14
fuente

3 respuestas

1

Por esto, ¿has considerado usar una solución de contenedorización como Docker para tener una versión aislada de Thunderbird?

Hay algunos ejemplos existentes como este .

Docker resuelve el problema de las bibliotecas compartidas que identificó en la sección chroot de su pregunta al agrupar todas las dependencias dentro del contenedor, y podría restringir los permisos a los directorios que están montados en el contenedor.

Una advertencia a este enfoque es que debe asegurarse de que los otros usuarios del sistema que no desea leer los datos no puedan ejecutar comandos de la ventana acoplable (así que no los agregue al grupo de la ventana acoplable si úselo) ya que podrían obtener acceso a los datos.

    
respondido por el Rоry McCune 24.05.2017 - 18:35
fuente
1

Lo que piensas obvio no es para mí:

  

Obviamente, otras aplicaciones no necesitan el contenido de esta carpeta. Y otras aplicaciones no deben acceder a la carpeta, no por seguridad sino simplemente por seguridad.

Bueno, ¿qué pasa con la aplicación de copia de seguridad? ¿No debería ser capaz de hacer una copia de seguridad de esa carpeta? ¿Desea explícitamente que no se restaure después de un bloqueo? Otro ejemplo, un amigo mío tenía su buzón de Thunderbird aparentemente vacío después de un apagón. Podría obtener el contenido como un archivo simple y leerlo y reconstruirlo con un script de Python. ¿Por qué no deberían el ejecutable de Python y el administrador de archivos acceder a esa carpeta?

Lo que es obvio para mí, es que una aplicación en la que no confío nunca debería estar en el sistema de archivos donde almaceno mis datos, y que nunca debería poder acceder a ella: revierto el problema y aíslo las aplicaciones que quiero probar en una máquina virtual dedicada (incluso si sé que aún está lejos de ser una bala de plata, acepto el nivel de riesgo restante). Y nunca olvido que lo más peligroso para la computadora y los datos es lo que hay entre el teclado y la silla ... Así que me atengo a las reglas de seguridad habituales y tengo copias de seguridad periódicas, un antivirus en mi caja de Windows, nunca ejecutar tareas ordinarias bajo una cuenta de administrador, deshabilitar todos los demonios o servicios innecesarios ...

    
respondido por el Serge Ballesta 24.05.2017 - 20:42
fuente
1

No estoy seguro de lo aceptable que es lo siguiente, pero es una solución a lo que pides, y lo he estado usando desde hace aproximadamente 3-4 años. La configuración inicial es dolorosa, pero una vez que la configuración funciona bien. Tenga en cuenta que al usar este método, me imagino que soy inmune a casi cualquier cosa que no sea un tipo de ataque de escalada de privilegios, especialmente, la ejecución de los ataques basados en el navegador del molino, los ataques basados en archivos de medios e incluso cualquier ransomware (si comienzan) apuntando a Linux) etc.

Para empezar, tengo 3 usuarios: u0, u1 y u2. (Los nombres reales son diferentes; usándolos para facilitar la explicación).

u2's pubkey está en el archivo ~ / .ssh / authorized_keys de u0. "ssh u0" de u2 funciona sin pedir nada. Dejo la configuración de keychain / ssh-agent como un ejercicio para el lector :)

u2 es donde están todas las cosas reales: todos los archivos, etc., por ejemplo. Solo thunderbird se ejecuta aquí, pero no tiene acceso a Internet (configura el proxy como algo inexistente, como 127.0.0.22:2222 o algo aleatorio como ese). Los navegadores también están bloqueados, principalmente para evitar que olvide y ejecute algo en este ID de usuario. Todos los reproductores de medios también se deshabilitan usando programas ficticios colocados anteriormente en $ PATH.

Cuando thunderbird abre un archivo, hágalo pasar por un programa que en mi sistema se llama "xo-deleg" (abreviatura de "delegate xdg-open"). Es doloroso de configurar: para cada tipo de archivo / tipo mime, debe hacer que TB elija ejecutar este script. Si olvida, termina ejecutándolo localmente. No he encontrado una forma de automatizar esto, pero estoy seguro de que hay algunos ajustes en TB que podrían ayudar.

Este programa "scp" es el archivo a / tmp / xo debajo del usuario "u0", luego dispara un script llamado "xo-run" (es decir, ejecuta "ssh u0 xo-run").

xo-run es un poco complicado. No estoy seguro si SO toma el código correctamente pero lo intentaré, esperando que esto funcione como markdown:

#!/bin/bash

# runs on 'u0' only

exec >>/tmp/xo.$USER.log
exec 2>&1

( (

    export DISPLAY=:0.0
    cd /tmp/xo

    file='ls -Atc | head -1'
    xdg-open    "/tmp/xo/$file"
    sleep 1h
    /bin/rm -vf "/tmp/xo/$file"

) & )

Como puede ver, el archivo se invoca con la aplicación de escritorio adecuada, en el usuario u0. También se elimina después de 1 hora. El truco de la doble horquilla, con "&" después de la primera bifurcación, se asegura de que el padre (ejecutándose bajo el usuario "u2", recuerde, que disparó "ssh u0 xo-run"?) no espera.

Cada vez que necesito guardar un archivo que llegó por correo electrónico, tengo que hacerlo manualmente. Es decir, en el ID de usuario de u2, ejecute "scp u0: / tmp / xo / FILENAME"

Hay mucho más en mi configuración (no he explicado qué está haciendo el usuario "u1", por ejemplo, ni he mencionado que realmente ejecuto dos servidores x (uno en tty1 y uno en tty2) , y ni siquiera he tocado la seguridad del navegador y la seguridad de los medios, que son parte de este juego complicado), pero para tus propósitos, esto debería ser suficiente.

Tenga en cuenta que incluso si esto suena doloroso, es solo un dolor de una sola vez. El uso real es prácticamente imposible de distinguir de una configuración de vainilla, excepto para guardar archivos de forma permanente.

    
respondido por el sitaram 03.06.2017 - 06:17
fuente

Lea otras preguntas en las etiquetas