web-dev-qa-db-fra.com

Comment verrouiller l'utilisateur SFTP?

J'ai vraiment besoin d'aide, j'ai essayé d'emprisonner un utilisateur en utilisant ubuntu.

Chose à noter:

  1. james est l'utilisateur
  2. sshusers est le groupe
  3. /home/james/upload/ est le répertoire où je souhaite verrouiller l'utilisateur

sshd_config:

AllowGroups sshusers 

Match Group sshusers
    ChrootDirectory /home/%u/upload/
    ForceCommand internal-sftp

Je suivi une réponse sur askubuntu, voici mes commandes

Sudo chown root /home/james
Sudo chmod go-w /home/james
Sudo mkdir /home/james/upload
Sudo chown james:sshusers /home/james/upload
Sudo chmod ug+rwX /home/james/upload

Problème:

Je reçois cette erreur

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

J'ai enquêté dans les journaux, et j'ai trouvé ceci:

fatal: mauvaise propriété ou modes pour le composant de répertoire chroot "/ home/james/upload /"

Mais si je lance les commandes suivantes

Sudo chown root /home/james/upload
Sudo chmod go-w /home/james/upload

Cela fonctionne parfaitement, l'utilisateur peut se connecter, le dossier est verrouillé MAIS impossible de déposer des fichiers dans le répertoire

Status: Listing directory /
Status: Directory listing successful
Status: Starting upload of C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm
Command:    put "C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm" "test"
Error:  /test: open for write: permission denied
Error:  File transfer failed

S'il vous plaît des conseils, j'ai tellement de recherches sur Google que tous les liens sont violets (Visité :P)

J'utilise le client filezilla pour tester SFTP.

2
meda

La directive ChrootDirectory s'attend à ce que le répertoire chroot soit la propriété de root et ne puisse être écrit par personne d'autre. Ainsi, vous ne pouvez pas emprisonner un utilisateur dans un répertoire et lui donner le droit d'écrire dans ce répertoire. Vous pouvez:

Chroot à la maison, télécharger sur upload/

Les premières commandes que vous avez essayées sont correctes pour cela:

Sudo chown root /home/james
Sudo chmod go-w /home/james
Sudo mkdir /home/james/upload
Sudo chown james:sshusers /home/james/upload
Sudo chmod ug+rwX /home/james/upload

Cependant, l'option dans sshd_config serait:

Match Group sshusers
    ChrootDirectory %h
    ForceCommand internal-sftp

(%h est remplacé par le répertoire de base de l'utilisateur authentifié, ce qui équivaut à /home/%u. Dans la plupart des cas.) En outre, pour limiter la visibilité des dossiers dans /home/james et limiter les droits en écriture. utilisez les options récursives pour chown et chmod dans la première commande de /home/james, et supprimez les autorisations read. L'ensemble modifié ressemblerait à ceci:

Sudo chown root /home/james -R 
Sudo chmod go-rwx /home/james -R  # Disallow traversing any directory in home 
Sudo chmod go+x /home/james       # Allow traversing this directory
Sudo mkdir /home/james/upload
Sudo chown james:sshusers /home/james/upload
Sudo chmod ug+rwx /home/james/upload

Désormais, l'utilisateur ne doit pouvoir accéder qu'à /home/james/upload ou /upload.

Chroot à télécharger, télécharger sur upload/some_directory

À peu près la même chose que ci-dessus, en remplaçant /home/james/ par /home/james/upload, et /home/james/upload par /home/james/upload/some_directory. Aucun gain particulier.

Remplacez le répertoire personnel de james par /upload

Le comportement habituel de ChrootDirectory est le suivant: "Après le chroot, sshd (8) modifie le répertoire de travail en répertoire de base de l'utilisateur." Nous changeons donc le répertoire personnel de james:

usermod -d /upload  user

Ensuite, réglez ChrootDirectory sur /home/%u. Utilisez les mêmes restrictions dans la première option.

3
muru

Le mécanisme intégré de sftp chroot dans OpenSSH nécessite que le répertoire de chroot soit la propriété de root (et qu’il ne soit pas accessible en écriture aux utilisateurs). Cela peut poser problème si le répertoire est un partage SMB/CIFS, par exemple, où vous devez effectuer un montage lié.

Une des solutions les plus souples consisterait à utiliser MySecureShell ( http://mysecureshell.readthedocs.io/en/latest/ )

apt install mysecureshell

Cela fonctionne sans aucune modification de vos paramètres OpenSSH par défaut. Tout ce que vous avez à faire est de faire en sorte que votre utilisateur SFTP se connecte Shell à mysecureshell, qui se chargera du chroot virtuel/ACL. Voir la documentation pour plus de détails,

Par exemple, une fois que vous avez installé MySecureShell, vous pouvez ensuite ajouter un utilisateur SFTP (limité à son répertoire de base) comme indiqué ci-dessous,

Sudo useradd -m -d /home/sftpuser01 --Shell /usr/bin/mysecureshell sftpuser01

D'après ce qui précède, l'utilisateur 'sftpuser01' obtiendra un chrootage virtuel en '/ home/sftpuser01' dans une session SFTP.

Il fournit également de nombreuses options flexibles pour contrôler ACL, groupe, etc. en configurant "/ etc/ssh/sftp-config". Veuillez vous référer à http://mysecureshell.readthedocs.io/en/latest/configuration.html pour plus de détails.

0
TL-Aiyor