Estoy ejecutando un servidor y necesito dar acceso de lectura / escritura a un directorio particular a un solo usuario. He intentado lo siguiente:
sudo adduser abcd
sudo groupadd abcdefg
chown -R .abcdefg /var/www/allowfolder
chmod -R g+rw /var/www/allowfolder
usermod -a -G comments abcd
Lo anterior parece funcionar, sin embargo, le da al usuario acceso de solo lectura al resto del servidor.
¿Cómo puedo configurar permisos para que el usuario solo pueda leer y escribir en una carpeta en particular? El usuario también debería poder ejecutar programas como mysql
.
permissions
files
account-restrictions
Manishearth
fuente
fuente
mysql
programa? El usuario debe poder leerlo, y todas las bibliotecas y archivos de datos que necesita.Respuestas:
LCA negativas
Puede evitar que un usuario acceda a ciertas partes del sistema de archivos estableciendo listas de control de acceso . Por ejemplo, para garantizar que el usuario
abcd
no pueda acceder a ningún archivo en/home
:Este enfoque es simple, pero debe recordar bloquear el acceso a todo a lo que no desea
abcd
poder acceder.Chroot
Para obtener un control positivo sobre lo que
abcd
puede ver, configure un chroot , es decir, restrinja al usuario a un subárbol del sistema de archivos.Debe crear todos los archivos que necesita el usuario (por ejemplo,
mysql
y todas sus dependencias, si desea que el usuario pueda ejecutarmysql
) bajo el chroot. Digamos que el camino al chroot es/home/restricted/abcd
; elmysql
programa debe estar disponible en/home/restricted/abcd
. Un enlace simbólico que apunta fuera del chroot no es bueno porque la búsqueda del enlace simbólico se ve afectada por la cárcel chroot. En Linux, puede hacer un buen uso de los montajes de enlace:También puede copiar archivos (pero luego deberá asegurarse de que estén actualizados).
Para restringir al usuario al chroot, agregue una
ChrootDirectory
directiva a/etc/sshd_config
.Puedes probarlo con:
chroot --userspec=abcd /home/restricted/abcd/ /bin/bash
Marco de seguridad
También puede usar marcos de seguridad como SELinux o AppArmor. En ambos casos, debe escribir una configuración bastante delicada, para asegurarse de no dejar ningún agujero.
fuente
/var/www/allowfolder
y sus subdirectorios deben ser accesibles, no solo ellos/var/www/allowfolder
mismos. Y a la inversa, otros archivos no deben ser accesibles. De hecho, una solución basada únicamente en permisos de archivos y ACL no puede cumplir completamente los requisitos: al menos permitiría al usuario probar si existe un nombre dado/var/www
, ya que necesitan tener permiso x/var/www
para acceder/var/www/allowfolder
.Debe utilizar
chroot
. Elchroot
comando cambia el directorio raíz que ven todos los procesos secundarios. Daré un ejemplo para demostrar cómo funciona.Esto fue escrito en el acto; En realidad no estoy frente a una máquina UNIX en este momento. En este ejemplo, hay un directorio llamado
dir
con tres archivos:a
,b
,c
, yls
. Los primeros tres son archivos regulares.ls
es un enlace directo alls
binario real para que podamos enumerar archivos mientras estamos en el chroot.Voy a
chroot
dentrodir
. (Tenga en cuenta que probablemente estoy olvidando algunos directorios en el directorio raíz).Aquí está la configuración, en forma de salida de shell:
Ahora voy a
chroot
entrardir
. El/bin/bash
argumento elige qué proceso se debe ejecutar con el nuevo directorio raíz. Por defecto es/bin/sh
.Ahora salimos de
chroot
:Espero que esto ilustra cómo funciona el
chroot
comando. Básicamente, lo que tiene que hacer para resolver su problema es ejecutar unchroot
comando como ese usuario cada vez que inicie sesión. ¿Quizás ponerlo en un script de inicio?Un enlace fijo a un archivo continuará funcionando dentro de un
chroot
archivo, incluso si no se puede acceder a ese archivo por otros medios (esto funciona porque los enlaces directos apuntan a inodes, no a rutas). Entonces, para permitir que el usuario acceda, por ejemplo, almysql
comando, debe ejecutar:fuente
chmod
. cuando dices "no sería más fácil ejecutar un comando ... no pierdas el acceso a ellos", ese comando eschroot
. si explica lo que quiere decir con "un entorno chroot completo", o por qué esto sería un problema, tal vez lo entienda mejor. (Observe que puede dar acceso a todos los archivos ejecutables con una oneliner:ln /bin/* /path/to/chroot/target
)chroot
contigo mismo o me hagas saber lo que no tiene sentido. aún mejor, haz las dos cosas. (y lea las páginas de manual.)