propiedad o modos incorrectos para el componente de directorio chroot

57

Creé el usuario MY_USER. Establezca su directorio de inicio en / var / www / RESTRICTED_DIR, que es la ruta a la que debe estar restringido. Luego edité sshd_config y establecí:

Match user MY_USER
  ChrootDirectory /var/www/RESTRICTED_DIR

Luego reinicié ssh. Hice MY_USER propietario (y propietario del grupo) de RESTRICTED_DIR, y lo modifiqué a 755. Obtengo

Accepted password for MY_USER
session opened for user MY_USER by (uid=0)
fatal: bad ownership or modes for chroot directory component "/var/www/RESTRICTED_DIR"
pam_unix(sshd:session): session closed for user MY_USER

Si eliminé las 2 líneas de sshd_config, el usuario puede iniciar sesión correctamente. Por supuesto, puede acceder a todo el servidor. ¿Cuál es el problema? Incluso intenté poner RESTRICTED_DIR en la raíz (como leí en alguna parte que alguien resolvió este mismo problema haciéndolo). Sin suerte..

MultiformeIngegno
fuente

Respuestas:

73

De la manpágina :

ChrootDirectory
Especifica el nombre de ruta de un directorio para chroot (2) después de la autenticación. Todos los componentes del nombre de ruta deben ser directorios propiedad de root que ningún otro usuario o grupo pueda escribir . Después del chroot, sshd (8) cambia el directorio de trabajo al directorio de inicio del usuario.

Mi conjetura es que uno o más de los directorios en la ruta no cumplen con esos requisitos (mi sospecha wwwes propiedad o puede escribirla su usuario web, no root).
Regrese y siga las instrucciones, asegurándose de que se cumplan los requisitos anteriores en negrita y cursiva .

voretaq7
fuente
Esto me está volviendo loco. Hice "chown root: root -R / var / www"; "chmod 775 -R / var / www /"; "usermod -a -G root www-data". Pero todavía no puedo iniciar sesión con MY_USER
MultiformeIngegno
1
El requisito es sobre los componentes de la ruta ( /, /var, /var/www, y /var/www/RESTRICTED_DIRtodos debemos reúnen los requisitos de seguridad más arriba). Es un verdadero chroot (revise la página de manual): el directorio de inicio de su usuario debe existir dentro del chroot , al igual que /bintodas las demás cosas que su usuario necesitará ...
voretaq7
2
¡Okay! Resuelto Configuré el directorio chroot un nivel más arriba. Luego le di 777 permisos al chrooted_dir original. Está funcionando :)
MultiformeIngegno
1
A pesar de lo que dice la página de manual, e incluso con el grupo configurado como 'root', tuve que configurar el permiso gw antes de que funcionara (Ubuntu 14.04). La página de manual debería decir que todos los componentes de la ruta de acceso deben ser directorios de propiedad raíz que no se pueden escribir por cualquier otro usuario o cualquier grupo en absoluto sudo chown root:root -R /path/to/home; sudo chmod 755 -R /path/to/home
mmell
3
Sé que esto es bastante antiguo, pero en lugar de modificar los permisos para la /var/wwwruta directamente, lo que podría romper apache, sería mucho mejor colocar su directorio sftp en otra ruta, luego usar la asignación de URL en Apache para apuntar al otro directorio . Consulte la documentación aquí httpd.apache.org/docs/2.4/urlmapping.html enFiles Outside DocumentRoot
Daniel
32

El directorio ChrootDirectory debe ser propiedad de root y tener modo 755:

sudo chown root:root /var/www/RESTRICTED_DIR
sudo chmod 755 /var/www/RESTRICTED_DIR

Ok, ahora todos los archivos /var/www/RESTRICTED_DIRdeben ser propiedad de MY_USER, que deben pertenecer al www-datagrupo, y tener el modo 775 para permitir permisos de grupo, como este:

sudo usermod -a -G www-data MY_USER
sudo chown MY_USER:www-data /var/www/RESTRICTED_DIR/*
sudo chmod 775 -R /var/www/RESTRICTED_DIR/*

NOTA: Recuerde que es una buena práctica permitir el acceso solo a una carpeta htdocs si está configurando apache.

JG
fuente
3
Bastante seguro de que debería ser sudo usermod -a -G www-data MY_USERcomo el grupo debería venir después-G
sMyles
Esto funciona pero no puedo cargar nuevos archivos en el directorio, solo puedo modificar archivos creados antes con la cuenta raíz y con la propiedad del usuario.
dlopezgonzalez
3

Después de resolver algunos problemas hoy, me di cuenta de que la raíz también debe poder escribir en los directorios.

Lo siguiente no funcionó:

$ ls -ld /mnt/synology03/files/
dr-xr-xr-x 1 root root 156 Oct  8 20:10 /mnt/synology03/files/
$ ls -ld /mnt/synology03
drwxr-xr-x 7 root root 4096 Oct  1 21:26 /mnt/synology03
$ ls -ld /mnt
drwxr-xr-x 6 root root 4096 Feb  8 10:01 /mnt
$ ls -ld /
drwxr-xr-x 24 root root 4096 Jan 14 09:22 /

Tan pronto como solucioné esto, mi chroot comenzó a funcionar.

$ sudo chmod 755 /mnt/synology03/files/
$ ls -ld /mnt/synology03/files/
drwxr-xr-x 1 root root 156 Oct  8 20:10 /mnt/synology03/files/
Magnus
fuente