24 votos

Restringir el acceso de un usuario de Linux a los archivos que posee

Imagine un servidor de instalación de una empresa de alojamiento web compartido, en donde múltiples (~100) los clientes tienen acceso shell a un único servidor.

Un montón de web de "software" recomienda a chmod archivos 0777. Estoy nervioso acerca de nuestros clientes imprudentemente siguiendo estos tutoriales, la apertura de sus archivos a nuestros clientes. (Ciertamente no estoy usando cmod 0777 innecesariamente a mí mismo!) Hay un método para asegurarse de que los clientes sólo pueden acceder a sus propios archivos y les impiden el acceso de lectura pública de los archivos de otros usuarios?

Miré en AppArmor, pero que está muy estrechamente ligado a un proceso, que parece fallar en ese entorno.

34voto

Tim Howland Puntos 5705

Poner una restringida e inmutable directorio entre el mundo exterior y los archivos protegidos, por ejemplo,

/
 ├─ bin
 ├─ home
 │  └─ joe <===== restricted and immutable
 │     └─ joe <== regular home directory

o /home/joe/restricted/public_html.

Restringido significa que sólo el usuario y tal vez el servidor web puede leer (por ejemplo, los modos de 0700/0750 o algunos Acl).

La inmutabilidad se puede hacer con chattr +i o por el cambio de la titularidad a algo como root:joe.

Una manera fácil de crear la jerarquía en Ubuntu sería editar /etc/adduser.conf y establezca GROUPHOMES a yes.

15voto

Dennis Nolte Puntos 1730

Hay una opción que usted puede ser que desee considerar (en función de la cantidad de trabajo que usted desea hacer para que).

Como otros ya han publicado, "normalmente" no se puede impedir que alguien con acceso shell a la lectura del mundo-lectura de archivos.

Sin embargo, usted podría chroot en su propia casa, básicamente limitar el acceso shell, en primer lugar, sólo el directorio root desea (también conocido como el directorio de inicio) y, en segundo lugar, evitar que los usuarios de la ejecución de todo lo que usted no desea ejecutar.

Hice un enfoque similar cuando tuve un usuario para tener acceso a la webfiles, pero yo no quería contar con él para ver a otros archivos fuera de la webfolder.

Este tenía una gran cantidad de sobrecarga, fue un desastre para la instalación, y cada vez que he actualizado algo, se rompió.

Pero, hoy por hoy creo que usted podría conseguir bastante fácil con el OpenSSH chroot opción:

Wikilibros OpenSSH

11voto

HBruijn Puntos 16577

He encontrado POSIX Listas de Control de Acceso permiten que usted, como administrador del sistema, para proteger a sus usuarios de las peores de su propia ignorancia, reemplazando el usuario normal-grupo-otros permisos del sistema de archivos, sin mucho de una oportunidad para romper con algo crucial.

Pueden ser especialmente útil si, por ejemplo, (f.i.) se necesita casa de los directorios de ser accesible debido a que el contenido web debe ser accesible para apache en ~/public_html/. (Aunque con ACL ahora se puede hacer a la inversa, quitar el acceso de todos y el uso de determinada eficaz ACL para el usuario apache. )

Sí, un usuario experto puede quitar y reemplazar de nuevo, son bastante infrecuente, que es improbable, y los usuarios que pueden no son normalmente los que convenientemente chmod -R 777 ~/ de todos modos, ¿verdad?

Usted necesita para montar el sistema de ficheros con el acl opción de montaje:

 mount -o remount,acl /home

En muchas distribuciones, el valor predeterminado es crear grupos de usuarios, cada usuario tiene su grupo principal, y he puesto todos los usuarios en un grupo secundario con la imaginación nombre de users.

El uso de ACL ahora es trivial para evitar que otros usuarios tengan acceso a los directorios de inicio:

Antes:

 chmod 0777 /home/user* 

 ls -l /home/user*
 drwxrwxrwx.  2 user1  user1  4096 Jul 11 15:40 user1
 drwxrwxrwx.  2 user2  user2  4096 Jul 11 15:24 user2

Ahora establecer la efectiva permisos de directorio para los miembros de la users grupo 0 no leer, escribir o acceso:

 setfacl setfacl -m g:users:0 /home/user*

 ls -l 
 drwxrwxrwx+  2 user1  user1  4096 Jul 11 15:40 user1
 drwxrwxrwx+  2 user2  user2  4096 Jul 11 15:24 user2

El + signo denota la presencia de configuración de ACL allí. Y el getfacl puede confirmar que:

getfacl /home/user1
getfacl: Removing leading '/' from absolute path names
# file: home/user1
# owner: user1
# group: user1
user::rwx
group::rwx
group:users:---
mask::rwx
other::rwx

El group:users:--- muestran que el grupo de forma eficaz no tener derecho de acceso, a pesar de regular los permisos para otros ser other::rwx

Y las pruebas como user1 :

[user1@access ~]$ ls -la /home/user2
ls: cannot open directory /home/user2: Permission denied

Una segunda solución común en sistemas compartidos es tener el automontaje de montar los directorios de inicio en la demanda de un servidor dedicado para el acceso shell. Que lejos de ser infalible, pero por lo general sólo un puñado de usuarios va a estar conectado simultáneamente, lo que significa que sólo los directorios home de los usuarios son visibles y accesibles.

3voto

Marek Puntos 43

Por ejemplo, si desea que el usuario tenga acceso sólo a sus propios home directorio, se debe hacer:

cd /home
sudo chmod 700 *

Ahora /home/username sólo es visible para su propietario. Para hacer de este el valor predeterminado para todos los usuarios nuevos, editar /etc/adduser.conf y establezca DIR_MODE a 0700 en lugar de la 0755 por defecto.

Por supuesto, si usted desea cambiar el valor predeterminado ahora dir_mode depende de su distribución, de la que he publicado obras en Ubuntu.

editar

Como @Dani_l correctamente mencionado, esta respuesta es correcta en lo que NO mundo legible.

3voto

maniaque Puntos 170

Los Contenedores de Linux (LXC) podría ser la mejor combinación de chroot y sistema separado.

  1. Son más como un avanzado chroot, no la virtualización, pero que podría combinar diferentes sistemas operativos en un servidor.

  2. Usted puede dar a un usuario de un sistema operativo completo y chroot de él, de modo que cuando el usuario inicia la sesión, él va a su contenedor. Y también puede limitar el procesador y el uso de memoria no.

Stéphane Graber, el autor de LXC, tiene un buen tutorial para ayudarle a empezar.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: