mauvaise propriété ou modes pour le composant de répertoire chroot

57

J'ai créé l'utilisateur MY_USER. Définissez son répertoire personnel sur / var / www / RESTRICTED_DIR, qui est le chemin auquel il devrait être restreint. Ensuite, j'ai édité sshd_config et défini:

Match user MY_USER
  ChrootDirectory /var/www/RESTRICTED_DIR

Puis j'ai redémarré ssh. Fait de MY_USER propriétaire (et propriétaire du groupe) de RESTRICTED_DIR et l'a modifié à 755. Je reçois

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 j'ai supprimé les 2 lignes de sshd_config, l'utilisateur peut se connecter avec succès. Bien sûr, il peut accéder à tout le serveur cependant. Quel est le problème? J'ai même essayé de chown RESTRICTED_DIR à la racine (car je lis quelque part que quelqu'un a résolu le même problème en le faisant). Pas de chance..

MultiformeIngegno
la source

Réponses:

73

De la manpage :

ChrootDirectory
Spécifie le chemin d'accès d'un répertoire à chroot (2) après l'authentification. Tous les composants du nom de chemin doivent être des répertoires appartenant à la racine qui ne peuvent être insérés en écriture par aucun autre utilisateur ou groupe . Après le chroot, sshd (8) change le répertoire de travail en répertoire de base de l'utilisateur.

Mon hypothèse est qu'un ou plusieurs des répertoires du chemin ne répondent pas à ces exigences (je soupçonne que wwwvotre utilisateur Web est le propriétaire de celui-ci ou qu'il est inscriptible, et non root).
Revenez en arrière et suivez les instructions, en vous assurant que les exigences ci-dessus en italiques gras sont remplies.

voretaq7
la source
Ça me rend fou. J'ai fait "chown root: root -R / var / www"; "chmod 775 -R / var / www /"; "usermod -a -G root www-data". Mais je n'arrive toujours pas à me connecter avec MY_USER
MultiformeIngegno
1
L'exigence est sur les composants de chemin ( /, /var, /var/wwwet /var/www/RESTRICTED_DIRdoivent tous sont conformes aux exigences de sécurité ci - dessus). Il s’agit d’un véritable chroot (consultez la page de manuel). Le répertoire de base de votre utilisateur doit exister dans le chroot , de même que /bintoutes les autres fonctions dont votre utilisateur aura besoin ...
voretaq7
2
D'accord! Résolu Je règle le répertoire chrooté d'un niveau supérieur. Ensuite, j'ai attribué 777 permanentes à l'original chrooted_dir. Ça marche :)
MultiformeIngegno
1
Malgré ce que dit la page de manuel, et même si le groupe était défini sur 'root', je devais définir l'autorisation gw avant que cela fonctionne (Ubuntu 14.04). La page de manuel devrait indiquer que tous les composants du nom de chemin doivent être des répertoires appartenant à la racine qui ne sont pas accessibles en écriture à un autre utilisateur ou à un groupe sudo chown root:root -R /path/to/home; sudo chmod 755 -R /path/to/home
mmell
3
Je sais que c'est assez ancien, mais au lieu de modifier /var/wwwdirectement les permissions du chemin, ce qui pourrait endommager Apache, il serait préférable de placer votre répertoire sftp dans un autre chemin, puis d'utiliser le mappage d'URL dans Apache pour pointer vers l'autre répertoire. . Consultez la documentation ici httpd.apache.org/docs/2.4/urlmapping.html sousFiles Outside DocumentRoot
Daniel
32

Le répertoire ChrootDirectory doit appartenir à root et avoir le mode 755:

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

Ok, maintenant tous les fichiers /var/www/RESTRICTED_DIRdoivent appartenir à MY_USER, qui doivent appartenir à un www-datagroupe et avoir le mode 775 pour autoriser les autorisations de groupe, comme ceci:

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/*

REMARQUE: n'oubliez pas qu'il est recommandé d'autoriser l'accès uniquement à un dossier htdocs si vous configurez apache.

JG.
la source
3
Je suis sûr que cela devrait être sudo usermod -a -G www-data MY_USERcomme le groupe devrait venir après-G
sMyles 21/12/2016
Cela fonctionne mais je ne peux pas télécharger de nouveaux fichiers dans le répertoire, je ne peux que modifier les fichiers créés auparavant avec un compte root et avec la propriété de l'utilisateur.
dlopezgonzalez le
3

Après un certain dépannage aujourd'hui, j'ai compris que root devait également être capable d' écrire dans les répertoires.

Ce qui suit n'a pas fonctionné:

$ 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 /

Dès que j'ai résolu ce problème, mon chroot a commencé à fonctionner.

$ 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
la source