2 votes

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

I suivi d'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 : bad ownership or modes for chroot directory component "/home/james/upload/"

Mais si je lance les commandes suivantes

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

Il fonctionne parfaitement, l'utilisateur peut se connecter, le dossier est verrouillé. MAIS ne peut pas déposer de 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

Veuillez me conseiller, j'ai tellement cherché dans Google que tous les liens sont violets maintenant (visités). :P )

J'utilise le client Filezilla pour tester. SFTP .

3voto

muru Points 180007

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

Chroot vers la maison, télécharger vers upload/

La première série de commandes que vous avez essayée est correcte 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 personnel de l'utilisateur en cours d'authentification, ce qui équivaut à /home/%u pour la plupart des cas). En outre, pour limiter la visibilité des dossiers dans /home/james et restreindre les droits d'écriture à cet endroit, utiliser les options récursives de la commande chown y chmod dans la première commande pour /home/james et retirer read permissions. 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

Maintenant, l'utilisateur devrait seulement pouvoir accéder /home/james/upload ou /upload .

Chroot pour télécharger, télécharger vers upload/some_directory

À peu près la même chose que ci-dessus, en remplaçant /home/james/ con /home/james/upload y /home/james/upload con /home/james/upload/some_directory . Pas de gains particuliers.

Changez le répertoire d'origine de james a /upload

Le comportement habituel de ChrootDirectory est : "Après le chroot, sshd(8) change le répertoire de travail en répertoire personnel de l'utilisateur". Donc nous changeons james Le répertoire personnel de l'utilisateur :

usermod -d /upload  user

Définissez ensuite le ChrootDirectory a /home/%u . Utilisez les mêmes restrictions que dans la première option.

0voto

TL-Aiyor Points 66

Le mécanisme chroot sftp intégré à OpenSSH requiert que le répertoire chroot appartienne à root (et ne soit pas accessible en écriture aux utilisateurs). Cela peut être un problème si le répertoire est un partage SMB/CIFS par exemple, où vous devez faire un montage lié.

Une des solutions les plus flexibles serait d'utiliser MySecureShell ( http://mysecureshell.readthedocs.io/en/latest/ )

apt install mysecureshell

Il 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, et il s'occupera de l'ACL/virtual chroot pour vous. Voir la documentation pour plus de détails,

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

sudo useradd -m -d /home/sftpuser01 --shell /usr/bin/mysecureshell sftpuser01

D'après ce qui précède, l'utilisateur 'sftpuser01' aura une racine virtuelle vers '/home/sftpuser01' dans la session SFTP.

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X