Si fuera root, podría simplemente crear un usuario / grupo ficticio, establecer los permisos de archivo en consecuencia y ejecutar el proceso como ese usuario. Sin embargo, no lo soy, entonces, ¿hay alguna manera de lograr esto sin ser root?
permissions
not-root-user
jails
Tobias Kienzler
fuente
fuente
chroot
naturalmente encajaría allí, pero de nuevo no eres root.Respuestas:
Preguntas más similares con más respuestas que merecen atención:
NOTA: Algunas de las respuestas apuntan a soluciones específicas que aún no se mencionan aquí.
En realidad, hay bastantes herramientas de encarcelamiento con implementación diferente, pero muchas de ellas no son seguras por diseño (como
fakeroot
,LD_PRELOAD
basadas en) o no están completas (comofakeroot-ng
,ptrace
basadas en), o requerirían root (chroot
o seplash
mencionan en fakechroot etiqueta de advertencia ).Estos son solo ejemplos; Pensé en enumerarlos todos lado a lado, con indicación de estas 2 características ("¿se puede confiar?", "¿Requiere root para configurar?"), Tal vez en implementaciones de virtualización a nivel de sistema operativo .
En general, las respuestas allí cubren la gama completa de posibilidades descritas y aún más:
máquinas virtuales / SO
extensión del kernel (como SELinux)
chroot
Ayudantes basados en Chroot (que, sin embargo, deben establecerse como root de UID, porque
chroot
requieren root; o tal vezchroot
podrían funcionar en un espacio de nombres aislado, ver a continuación):[para contar un poco más sobre ellos!]
Herramientas de aislamiento basadas en chroot conocidas:
hsh-run
yhsh-shell
comandos. ( Hasher fue diseñado para crear software de manera segura y repetible).traza
Otra solución de aislamiento confiable (además de una
seccomp
basada en la base ) sería la intercepción completa de syscallptrace
, como se explica en la página de manual parafakeroot-ng
:Aún así, como puede leerlo, en
fakeroot-ng
sí mismo no está diseñado para este propósito.(Por cierto, me pregunto por qué han elegido utilizar el
seccomp
enfoque basado en Chromium en lugar de un enfoqueptrace
basado en ...)De las herramientas no mencionadas anteriormente, he señalado a Geordi por mí mismo, porque me gustó que el programa de control esté escrito en Haskell.
Herramientas de aislamiento basadas en ptrace conocidas:
fakeroot-ng
seccomp
Una forma conocida de lograr el aislamiento es a través del enfoque de seccomp sandboxing utilizado en Google Chromium . Pero este enfoque supone que usted escribe un asistente que procesará algunos (los permitidos) del acceso al archivo "interceptado" y otras llamadas al sistema; y también, por supuesto, hacer un esfuerzo para "interceptar" las llamadas al sistema y redirigirlas al asistente (tal vez, incluso significaría reemplazar las llamadas al sistema interceptadas en el código del proceso controlado; por lo tanto, no suena para ser bastante simple; si está interesado, será mejor que lea los detalles en lugar de solo mi respuesta).
Más información relacionada (de Wikipedia):
(El último elemento parece ser interesante si uno está buscando una
seccomp
solución de base general fuera de Chromium. También hay una publicación de blog que vale la pena leer del autor de "seccomp-nurse": ¿ SECCOMP como una solución de Sandboxing?. )La ilustración de este enfoque del proyecto "seccomp-nurse" :
¿Una seccomp "flexible" posible en el futuro de Linux?
En 2009, también aparecían sugerencias para parchear el kernel de Linux para que haya más flexibilidad en el
seccomp
modo, de modo que "se puedan evitar muchas de las acrobacias que necesitamos actualmente". ("Acrobacias" se refiere a las complicaciones de escribir un ayudante que tiene que ejecutar muchas llamadas de sistema posiblemente inocentes en nombre del proceso encarcelado y de sustituir las llamadas de sistema posiblemente inocentes en el proceso encarcelado). Un artículo de LWN escribió a este punto:Este "seccomp flexible" acercaría las posibilidades de Linux a proporcionar la función deseada en el sistema operativo, sin la necesidad de escribir ayudantes tan complicados.
(Una publicación de blog con básicamente el mismo contenido que esta respuesta: http://geofft.mit.edu/blog/sipb/33 .)
espacios de nombres (
unshare
)Aislar a través de espacios de nombres (
unshare
soluciones basadas ), no mencionados aquí, por ejemplo, compartir puntos de montaje (¿combinados con FUSE?) Podría ser parte de una solución de trabajo para que desee limitar el acceso al sistema de archivos de sus procesos no confiables.Más sobre los espacios de nombres, ahora, ya que su implementación se ha completado (esta técnica de aislamiento también se conoce con el nombre de "Contenedores Linux" o "LXC" , ¿no es así?):
"Uno de los objetivos generales de los espacios de nombres es apoyar la implementación de contenedores, una herramienta para la virtualización ligera (así como para otros fines)" .
Incluso es posible crear un nuevo espacio de nombres de usuario, de modo que "un proceso pueda tener una ID de usuario normal sin privilegios fuera de un espacio de nombres de usuario y al mismo tiempo tener una ID de usuario 0 dentro del espacio de nombres. Esto significa que el proceso tiene todos los privilegios de root para operaciones dentro del espacio de nombres de usuario, pero no tiene privilegios para operaciones fuera del espacio de nombres ".
Para ver los comandos de trabajo reales para hacer esto, vea las respuestas en:
y programación / compilación especial de espacio de usuario
Pero bueno, por supuesto, las garantías de "cárcel" deseadas son implementables mediante la programación en el espacio del usuario ( sin soporte adicional para esta función desde el sistema operativo ; quizás es por eso que esta función no se ha incluido en primer lugar en el diseño de sistemas operativos) ); con más o menos complicaciones
El mencionado
ptrace
- oseccomp
caja de arena basado puede ser visto como algunas variantes de la aplicación de las garantías por escrito una caja de arena-helper que controlar sus otros procesos, que serían tratados como "cajas negras", arbitraria programas Unix.Otro enfoque podría ser usar técnicas de programación que puedan preocuparse por los efectos que deben ser rechazados. (Debes ser tú quien escribe los programas; ya no son cajas negras). Por mencionar uno, usar un lenguaje de programación puro (que te obligaría a programar sin efectos secundarios) como Haskell simplemente hará que todos los efectos de programa explícito, por lo que el programador puede asegurarse fácilmente de que no habrá efectos no permitidos.
Supongo que hay instalaciones de sandboxing disponibles para aquellos que programan en algún otro lenguaje, por ejemplo, Java.
Cf. Propuesta de proyecto "Sandboxed Haskell" .
NaCl, no mencionado aquí, pertenece a este grupo, ¿no?
Algunas páginas que acumulan información sobre este tema también fueron señaladas en las respuestas allí:
fuente
chroot
, pero eso probablemente todavía requeriría privilegios de raíz real ...Esta es una limitación fundamental del modelo de permisos de Unix: solo la raíz puede delegar.
No necesita ser root para ejecutar una máquina virtual (no es cierto para todas las tecnologías VM), pero esta es una solución pesada.
Linux en modo de usuario es una solución de virtualización de Linux en Linux relativamente liviana. No es tan fácil de configurar; tendrá que llenar una partición raíz (en un directorio) con, al menos, el mínimo necesario para el arranque (unos archivos en
/etc
,/sbin/init
y sus dependencias, un programa de inicio de sesión, una concha y utilidades).fuente
Supongo que puedes tener suerte
LD_PRELOAD
para interceptar el acceso a ciertos archivos, pero esto puede ser realmente complicado.fuente
LD_PRELOAD
no se puede confiar (se puede eludir), pero la intercepción a través de septrace
puede.LD_PRELOAD
no se puede confiar en las soluciones basadas como medida de seguridad.De la lista completa, simplemente agregaría:
fakeroot (de debian package maintener): tiene como objetivo construir un paquete con herramientas "amigables". Esto no es un aislamiento completo, pero ayuda a construir paquetes con diferentes usuarios y dispositivos falsos y otros pseudoarchivos especiales.
fakechroot (que usa fakeroot). Este programa tiene muchos errores. Por ejemplo, "/ etc / hosts" está codificado en glibc: no puede cambiarlo a través de esta herramienta.
qemu: necesita compilar un kernel de Linux, pero el resultado es muy rápido, y esta es una máquina "falsa" (es decir, virtual) con privilegios de root reales. Puede construir y montar cualquier imagen de arranque.
fuente
Firejail es una buena herramienta para encarcelar cualquier proceso, con o sin acceso a la raíz con muchas opciones y muy flexible:
fuente