Para crear un usuario SSH que solo tenga permiso para acceder a carpetas específicas

48

Instalé SSH, pero descubrí que si uso mi cuenta original para iniciar sesión en Ubuntu, tiene demasiados permisos.

Quiero restringir al usuario para que solo tenga permisos para carpetas específicas en Ubuntu. ¿Cómo puedo configurar un usuario así?

Tonto
fuente

Respuestas:

50

Esto es simple. Simplemente cree un nuevo usuario con su directorio de inicio configurado al que necesita que tenga acceso (este comando debe ejecutarse bajo sudoo en el shell raíz):

adduser --home /restricted/directory restricted_user

Esto creará un usuario restricted_user, se establecerá el directorio /restricted/directoryy luego los permisos en el directorio para que el usuario pueda escribir en él. No tendrá la capacidad de escribir en ningún otro directorio de forma predeterminada.

Si ya tiene el directorio, puede ejecutar el addusercomando con una --no-create-homeopción añadida y establecer permisos manualmente (también con privilegios de root), como:

chown restricted_user:restricted_user /restricted/directory
chmod 755 /restricted/directory

Si necesita hacer que incluso los directorios de escritura mundial no sean accesibles para este usuario, hay dos variantes.

1) Si desea proporcionar una sesión de shell interactiva al usuario, considere seguir este manual sobre cómo crear una cárcel chroot (en su /restricted/directory).

Después de eso, agregue lo siguiente a su sshd_config:

Match user restricted_user
  ChrootDirectory /restricted/directory

2) Si solo necesita que copie archivos entre su punto final de conexión y su host, todo es mucho más fácil. Agregue estas líneas al final de su sshd_config:

Match user restricted_user
  ForceCommand internal-sftp
  ChrootDirectory /restricted/directory

Subsystem       sftp    internal-sftp

Luego comente Subsystem sftp /usr/lib/openssh/sftp-servercolocando un #signo hash ( ) al comienzo.

Después de reiniciar su servidor SSH (no mata las sesiones interactivas al reiniciar, por lo que es seguro incluso si configuró algo mal; además, no cierra su sesión en ejecución antes de que haya verificado que todavía puede iniciar sesión), todo debería funcionar Como era la intención.

Whitequark
fuente
1
Lo intenté, pero parece que todavía puedo cd ... y navegar por el directorio superior. y cuando uso vi a.txt en el directorio superior, se muestra: presione enter o comando para continuar, y no puedo salir de vi
Foolish
1
¿Puedo usar la opción # 2 si el usuario solo debe tener acceso sshfs?
flickerfly
1
Todo funciona bien, excepto que no tengo permiso de escritura. ¿Cómo puedo establecer un permiso de escritura para este directorio restringido? Si uso chmod 775, el usuario ya no puede iniciar sesión.
Mi nombre es el
3
Debería escribir la Subsystem sftp internal-sftplínea en su segundo ejemplo sobre el Matchbloque. De lo contrario, ssh imprimirá un error y no se iniciará.
Tik0
1
Alerta de spoiler: no funciona con scp
bicicleta
5

La forma más fácil de crear un usuario restringido que no pueda salir del directorio dado (por ejemplo, al directorio superior, etc.) y que tenga un conjunto de comandos limitado / elegido para usar, es usar un Shell restringido. Árbitro:

http://man.he.net/man1/rbash

Primero, cree un enlace simbólico llamado rbash(ejecutar como usuario root).

ln -s /bin/bash /bin/rbash

Luego, cree un usuario normal con este Shell restringido y configure su directorio de inicio en la carpeta deseada:

useradd -s /bin/rbash -d /home/restricted_folder username

Incluso sin el Shell restringido, si no agrega explícitamente a este usuario a la lista de sudoers, ni a ningún grupo especial, entonces estará limitado de manera predeterminada.

Con el Shell restringido, lo siguiente no se permite o no se realiza:

  • cambio de directorios con cd

  • establecer o desarmar los valores de SHELL, PATH, ENV o BASH_ENV

  • especificando nombres de comandos que contienen /

  • especificando un nombre de archivo que contiene un / como argumento para el. comando incorporado

  • Especificar un nombre de archivo que contenga una barra como argumento para la opción -p del comando hash builtin

  • importar definiciones de funciones desde el entorno de shell al inicio

  • analizando el valor de SHELLOPTS desde el entorno de shell al inicio

  • redirigir la salida utilizando los operadores de redireccionamiento>,> |, <>,> &, &> y >>

  • usando el comando incorporado exec para reemplazar el shell con otro comando

  • Agregar o eliminar comandos incorporados con las opciones -f y -d al comando habilitar incorporado

  • Uso del comando enable builtin para habilitar los builtins de shell deshabilitados

  • especificando la opción -p para el comando incorporado

  • desactivar el modo restringido con set + r o set + o restringido.

Estas restricciones se aplican después de cualquier archivo de inicio

Además / Opcionalmente, para restringir al usuario a un conjunto de comandos limitado / elegido para usar, puede crear un .bash_profile de solo lectura para ese usuario, con

PATH=$HOME/bin

y enlace simbólico cualquier comando que permita en la carpeta ~ / bin a ese usuario:

ln -s /bin/ls /home/restricted_folder/bin/ls
ln -s /bin/mkdir /home/restricted_folder/bin/mkdir
ln -s /bin/rm /home/restricted_folder/bin/rm

etc.

HTH

xpt
fuente
Puedo encontrar cualquier archivo en el sistema de archivos, incluido el directorio / root y puedo leer estos archivos. Preguntándose cómo restringir aún más el acceso para ver cualquier cosa fuera de la carpeta de usuario o capturar cualquier paquete de red o leer / var / log contenidos
16851556