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

mysqlprograma? 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
abcdno 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
abcdpoder acceder.Chroot
Para obtener un control positivo sobre lo que
abcdpuede 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,
mysqly todas sus dependencias, si desea que el usuario pueda ejecutarmysql) bajo el chroot. Digamos que el camino al chroot es/home/restricted/abcd; elmysqlprograma 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
ChrootDirectorydirectiva a/etc/sshd_config.Puedes probarlo con:
chroot --userspec=abcd /home/restricted/abcd/ /bin/bashMarco 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/allowfoldery sus subdirectorios deben ser accesibles, no solo ellos/var/www/allowfoldermismos. 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/wwwpara acceder/var/www/allowfolder.Debe utilizar
chroot. Elchrootcomando 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
dircon tres archivos:a,b,c, yls. Los primeros tres son archivos regulares.lses un enlace directo allsbinario real para que podamos enumerar archivos mientras estamos en el chroot.Voy a
chrootdentrodir. (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
chrootentrardir. El/bin/bashargumento 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
chrootcomando. Básicamente, lo que tiene que hacer para resolver su problema es ejecutar unchrootcomando 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
chrootarchivo, 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, almysqlcomando, 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)chrootcontigo mismo o me hagas saber lo que no tiene sentido. aún mejor, haz las dos cosas. (y lea las páginas de manual.)