¿Cómo puedo evitar que los usuarios accedan a cualquier cosa que no sea su propio directorio personal?

22

¿Cómo puedo evitar que los usuarios accedan a cualquier cosa que no sea su propio directorio personal?

Por ejemplo, tengo una partición NTFS montada debajo /media/ntfs, por lo que si el usuario inicia sesión a través de ssh, puede llegar a esta partición. ¿Cómo puedo deshabilitar a los usuarios para que cdsalgan de su directorio de inicio?

OH LA LA
fuente

Respuestas:

22

Reevaluar su requerimiento primero. ¿Cuál es el problema que estás tratando de resolver? ¿Por qué quiere evitar que los usuarios abandonen su directorio de inicio? ¿No es más bien que no quieres que hurguen en otros directorios específicos , como los directorios de inicio de otros usuarios?

Es muy difícil evitar que los usuarios abandonen su directorio de inicio. En realidad, también es un poco tonto (sigue la explicación). Es mucho más simple evitar que los usuarios ingresen directorios que no desea que ingresen.

En primer lugar, sí, puede dar a los usuarios un llamado shell restringido , vea man rbash. Esto evitará que cdactúen en otro lugar, pero solo dentro de ese caparazón. Si el usuario inicia vio nano(o cualquier otro programa capaz de abrir un archivo) puede volver a abrir archivos en cualquier parte del sistema. De hecho, un caparazón restringido no impide, por ejemplo cat /etc/passwd.

El siguiente paso es una cárcel raíz. Más información en el wiki de la comunidad y en esta pregunta . Aunque una cárcel raíz encerrará a los usuarios dentro de un jardín amurallado, dentro del cual no tienen acceso a nada más que a los archivos y comandos que intencionalmente pusiste allí, las cárceles raíz realmente están destinadas a aislar software no confiable en lugar de usuarios. En particular, son para software que necesita ejecutarse con privilegios elevados, por lo tanto, una cárcel raíz .

Los usuarios, por otro lado, son de confianza : han tenido que autenticarse y ejecutarse sin privilegios elevados. Por lo tanto, los permisos de archivo son suficientes para evitar que cambien archivos que no son de su propiedad y que vean cosas que no deben ver. Para evitar que los usuarios lean el contenido de un archivo, elimine su legibilidad mundial con chmod o-r FILE. Para mantener a los usuarios fuera de un directorio, hágalo inaccesible en todo el mundo chmod o-rwx DIR.

Sin embargo, la legibilidad mundial es la predeterminada, por una buena razón: los usuarios realmente necesitan la mayoría de las cosas que están en el sistema de archivos. No encierres a los usuarios en sus hogares solo porque existan secretos afuera.

Por qué bloquear usuarios en su directorio personal es un poco tonto

Para hacer algo útil, los usuarios necesitan acceso a comandos y aplicaciones. Estos se encuentran en directorios como /biny /usr/bin, por lo tanto, a menos que copie todos los comandos que necesitan desde allí a sus directorios principales, los usuarios necesitarán acceso a /biny /usr/bin. Pero ese es solo el comienzo. Las aplicaciones necesitan bibliotecas de /usr/liby /lib, que a su vez necesitan acceso a los recursos del sistema, que están en /dev, y a los archivos de configuración en /etcy /usr/share.

Esta fue solo la parte de solo lectura. Las aplicaciones también querrán /tmpya menudo /varescribir. Por lo tanto, si desea restringir a un usuario dentro de su directorio de inicio, tendrá que copiar mucho en él. De hecho, prácticamente todo un sistema de archivos base, que ya tiene, ubicado en /.

zwets
fuente
2
Esto no tiene sentido para mí, podría haber muchas razones por las que desea que un usuario solo tenga acceso a 1 carpeta. Un ejemplo podría ser dar acceso por el simple hecho de transmitir archivos de un servidor a otro. Prefiero pensar que es un poco tonto que cualquier usuario pueda navegar por el sistema completo.
Richard
En mi caso, estoy configurando un usuario para permitir que los dispositivos inviertan ssh en la máquina para la administración remota de dispositivos. Por lo tanto, quiero limitar esa cuenta de usuario tanto como sea posible en caso de que se vea comprometida; solo necesito que se realice una conexión exitosa. No diría que es una tontería, solo depende de lo que intentes lograr.
John
7

Que necesitaba para dar acceso a usuario samen /var/xyzcontenidos únicos y bloques lista de otros dentro de las carpetas/var/

Usé la siguiente secuencia de comandos:

setfacl -R -m user:sam:--- /var/

setfacl -m user:sam:rx /var/

setfacl -R -m user:sam:rwx /var/xyz/

Por lo tanto, el usuario puede ver los directorios listados debajo /var/pero no puede ver los contenidos debajo de los subdirectorios excepto /var/xyz.

Sam
fuente
2
Bienvenido a askubuntu! No veo esto como una respuesta a la pregunta que se hace con respecto a los directorios personales.
Élder Geek
3
@ElderGeek ¿No puede el OP simplemente usar los mismos comandos, sino el directorio de inicio?
Seth
@Seth Sí, pero ¿sería claro para el usuario promedio?
Élder Geek
3
@Elder Sí, creo que lo haría. No es perfecto, pero sigue siendo una respuesta
Seth
1

Además de restringir el acceso a otros directorios, particularmente a los directorios principales de otros usuarios, tampoco quería que un usuario ll /homeviera los nombres de los otros usuarios en el sistema.

Para evitar esto, como root ejecutar chmod 701 /home. Esto hace que el /homedirectorio mismo "lea / escriba / ejecute" a la raíz, por supuesto, pero solo "ejecute" a todos los demás. /hometodavía es accesible cd, pero los usuarios no pueden leer su contenido: las carpetas de inicio de los otros usuarios y, por lo tanto, los nombres de usuario.

Willman
fuente
Esto, aunque no es estrictamente una respuesta a la pregunta, sigue siendo muy interesante ... En una situación en la que opera un servidor remoto al que los clientes pueden acceder, esto es genial. Todavía pueden moverse como esperarían, mientras conservan la privacidad de los nombres de usuario de otros clientes.
Jack_Hu