La modification des autorisations d'écriture pour SFTP emprisonné refuse la connexion

14

J'ai exploré de nombreux sites Web et forums sur la façon de configurer un utilisateur SFTP qui est emprisonné dans un certain répertoire à l'aide de CHROOT. Voici les étapes que j'ai suivies mais je n'arrive pas à obtenir les autorisations d'écriture pour travailler.

Installer

sshd_config

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp


Match group webmaster
        X11Forwarding no
        ChrootDirectory %h
        AllowTcpForwarding no
        ForceCommand internal-sftp

Créer le dossier

mkdir /var/www/sites

Créer un utilisateur et un groupe

useradd uploader
passwd uploader
usermod -d /var/www/sites uploader
groupadd webmaster uploader
groupadd www-data uploader

Autorisations et propriété

chown root:root /var/www
chmod 755 /var/www/sites

Maintenant, avec ces paramètres, l'utilisateur téléchargeant est en mesure de SFTP dans le répertoire de base mais ne peut pas écrire dans le répertoire.

Il y a 2 erreurs typiques qui se produisent, je ne peux pas me connecter ou je n'ai pas d'autorisations d'écriture.

Erreur d'identification

Error:    Network error: Software caused connection abort
Error:    Could not connect to server


Changing permissions of /var/www/sites to 775 or 777 causes login error.
chown /var/www/sites to uploader:root causes login error.
chwon root:webmaster or root:www-data I have no write permissions

Je suis en désaccord pour essayer de comprendre cela et si quelqu'un pouvait m'orienter dans la bonne direction, je l'apprécierais grandement.

Je vous remercie.

onggie
la source

Réponses:

16

J'ai trouvé la solution. L'utilisateur est emprisonné /var/www/sites. J'ai ensuite créé un autre dossier /var/www/sites/site1.

J'utilise:

chown root:webmaster /var/www/sites/site1 
chmod 775 /var/www/sites/site1

Cela a permis au répertoire personnel de disposer des autorisations correctes pour se connecter et pouvoir ensuite écrire dans le dossier suivant.

Si l'utilisateur a besoin d'un accès en écriture à /var/www/sites, vous devez emprisonner l'utilisateur /var/wwwdont la root:rootpropriété et les autorisations sont de 755. Vous devez ensuite attribuer la /var/www/sitespropriété de root: (votre groupe) et les autorisations de 775.

onggie
la source
1

La meilleure solution est peut-être:

mkdir /var/www/sites/myfirstuser/hisownsite
mkdir /var/www/sites/myseconduser/hisownsite

...

chown root:root /var/www/sites /var/www/sites/{myfirstuser,myseconduser} && chmod 755 /var/www/sites/{myfirstuser,myseconduser}

chmod 775 /var/www/sites/myfirstuser/hisownsite
chmod 775 /var/www/sites/myseconduser/hisownsite
chgrp www-data /www/sites/myfirstuser/hisownsite /var/www/sites/myseconduser/hisownsite

Ajoutez les utilisateurs:

useradd -d /var/www/sites/myfirstuser -s /bin/false -g www-data  dev1
useradd -d /var/www/sites/myseconduser -s /bin/false -g www-data dev2
passwd dev1
passwd dev2

Ensuite, pour chaque utilisateur que vous avez créé, ajoutez une balise ssh comme ceci: (vous pouvez également utiliser la directive "Match Group" comme dans votre exemple au lieu de "Match User")

Match User dev1
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Match user dev2
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Vous pouvez donc gérer tous les utilisateurs dont vous avez besoin dans un environnement chrooté.

Hth, Fabrizio

fabreg
la source
Concernant votre dernier bloc de code: Matches prennent en charge plusieurs cibles dans des listes séparées par des virgules, nous pourrions donc grandement simplifier / ranger cela en ayant un seul ensemble de remplacements pour les deux utilisateurs, par l'en-têteMatch User dev1,dev2
underscore_d
1
Alors, comment le définissez-vous pour qu'ils soient verrouillés dans le dossier auquel ils ont accès en lecture / écriture?
Kevin B Burns