Autorisation en lecture seule pour l'utilisateur sftp dans un répertoire spécifique

10

Je veux créer un utilisateur SFTP spécifique qui aura l'autorisation de lire uniquement tous les dossiers et sous-dossiers /var/www/vhosts. Une aide à ce sujet?

Délire
la source

Réponses:

11

Les systèmes Unix fournissent la chrootcommande qui vous permet de réinitialiser l' /utilisateur dans un répertoire de la hiérarchie du système de fichiers, où il ne peut pas accéder aux fichiers et répertoires "supérieurs".

Cependant, dans votre cas, il serait approprié de fournir un chroot virtuel implémenté par le service shell distant. sftp peut être facilement configuré pour restreindre un utilisateur local à un sous-ensemble spécifique du système de fichiers.

par conséquent, dans votre cas, vous voulez chroot, disons, utilisateur fooutilisateur dans le /var/www/vhosts/répertoire.

Vous pouvez définir un répertoire chroot pour votre utilisateur pour les confiner dans le sous-répertoire /var/www/vhosts/comme dans /etc/ssh/sshd_config;

Créer un utilisateur fooavec mot de passe

sudo useradd foo
sudo passwd foo

Créer pour le groupe SFTP uniquement

$ sudo groupadd sftp_users 

Ajouter à un utilisateur foopour le groupe SFTP uniquement

$ sudo usermod -G sftp_users foo 

Changer de propriétaire, car autorisation de lecture / écriture

sudo chown root.root /var/www/vhosts/

Ajouter une autorisation

sudo chmod 755 /var/www/vhosts/

Éditer /etc/ssh/sshd_config

sudo vi /etc/ssh/sshd_config

Commentez et ajoutez une ligne comme ci-dessous

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

Ajouter à la fin

Match Group sftp_users
  X11Forwarding no
  AllowTcpForwarding no
  ChrootDirectory /var/www/vhosts/
  ForceCommand internal-sftp

(REMARQUE: les Matchblocs doivent se trouver à la FIN du sshd_configfichier.)

Redémarrez le sshservice

sudo service ssh restart

Avec cette configuration, vous pouvez ssh dans un dossier ubuntuet obtenir des fichiers. Impossible putoudelete

Pour sftp dans le dossier de droite, éditez /etc/passwd. Modifier la ligne pour que l'utilisateur fooressemble à ceci

$ sudo vi /etc/passwd

..
foo:x:1001:1001::/var/www/vhosts/:
..

Cela changera le foodossier de départ de l' utilisateur en dossier de votre serveur sftp.

Rahul
la source
J'ai donc ajouté Match Group sftp ChrootDirectory /var/www/vhosts AllowTcpForwarding no In sshd_config et créé l'utilisateur et le groupe comme vous l'avez fait, mais l'utilisateur fooa les droits sur tous les dossiers :(
Delirium
@Delirium voir ma réponse mise à jour
Rahul
Merci beaucoup pour votre réponse. Mais il doit y avoir une erreur .. J'ai ajouté Subsystem sftp internal-sftp Match Group sftp ChrootDirectory /var/www/vhosts AllowTcpForwarding no ForceCommand internal-sftpmais il y a une erreur quand je veux redémarrer ssh/etc/ssh/sshd_config line 92: Directive 'UsePAM' is not allowed within a Match block
Delirium
2
Je @Delirium ai clairement mentionné à mettre la Match.....section à la FIN du fichier. Mettez ce code à la fin du fichier et redémarrez-le.
Rahul
1
Désolé pour mes yeux aveugles, mais ça marche, alors merci beaucoup.
Delirium