Limitez l'accès FTP au répertoire / var / www avec vsftpd

41

J'exécute vsftpd en tant que serveur ftp sur mon linux (rasbian), je me connecte à la machine en tant qu'utilisateur root.

Je voudrais toujours pouvoir utiliser uniquement / var / www. Comment puis-je configurer vsftpd conf pour l'accomplir?

Badr Hari
la source
1
Vérifiez les chroot options vsftpd.confet créez un utilisateur distinct pour celui-ci dont la référence est définie sur /var/www.
Juillet

Réponses:

65

Méthode 1: modification du répertoire de base de l'utilisateur

Assurez-vous que la ligne suivante existe

chroot_local_user=YES

Définissez le répertoire HOME de l'utilisateur sur /var/www/, si vous souhaitez modifier l'utilisateur existant, vous pouvez utiliser:

usermod --home /var/www/ username

puis définissez l'autorisation requise sur /var/www/

Méthode 2: utiliser user_sub_token

Si vous ne souhaitez pas modifier le répertoire de base de l'utilisateur, vous pouvez utiliser:

chroot_local_user=YES
local_root=/ftphome/$USER
user_sub_token=$USER

À propos de user_sub_token:

Générer automatiquement un répertoire de base pour chaque utilisateur virtuel, basé sur un modèle. Par exemple, si le répertoire de base de l'utilisateur réel spécifié par guest_username est / ftphome / $ USER et que user_sub_token est défini sur $ USER, il se terminera (généralement, par chroot ()) dans le répertoire / ftphome / test. Cette option est également active si racine_local contient user_sub_token.

Créer un répertoire et configurer les autorisations:

mkdir -p /ftphome/{test,user1,user2}
chmod 770 -R /ftphome
chown -R ftp. /ftphome
usermod -G ftp test

Une fois redémarrez vsftpdet testez votre configuration.

Exemple de résultat de réussite:

[root@mail tmp]# ftp localhost
Connected to mail.linuxian.local.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mput vhosts
mput vhosts? 
227 Entering Passive Mode (127,0,0,1,146,41)
150 Ok to send data.
226 File receive OK.
24 bytes sent in 3.3e-05 seconds (7.1e+02 Kbytes/s)
ftp> ls -rlt
227 Entering Passive Mode (127,0,0,1,97,90)
150 Here comes the directory listing.
-rw-r--r--    1 787      787            24 Oct 11 19:57 vhosts
226 Directory send OK.
ftp> 221 Goodbye.
Rahul Patil
la source
2
Notez que vous pouvez avoir un suffixe après $USERfor local_root, tel que /home/$USER/ftp(qui chrootera les utilisateurs dans le ftpsous - répertoire de leur répertoire personnel).
Benoit Duffez
Notez les remarques dans la FAQ de vsftp concernant le chrootage dans un dossier accessible en écriture par l'utilisateur se connectant. Ceci est très probable en cas de mise local_rootdans le répertoire personnel de l'utilisateur.
Thomas Urban
Où confirmer que "chroot_local_user = YES" existe?
Le One
4

Tu peux le faire:

usermod --home /var/www/ username
Zeev Cohen
la source
5
Les réponses à une ou deux lignes sont souvent considérées comme de faible qualité. Envisagez d'étendre votre message en expliquant ce que fait votre recommandation, ainsi que des liens ou de la documentation suggérant que votre recommandation est réellement en mesure de résoudre le problème.
HalosGhost
2

J'ai utilisé la suggestion de Rahul Patil ci-dessus:

chroot_local_user=YES
local_root=/home/$USER/www-data
user_sub_token=$USER

Mais je ne comprenais pas pourquoi je ne pouvais me connecter qu’avec un seul utilisateur. Ensuite, j'ai découvert que nous ne pouvions pas chrooter vers un répertoire racine (dans ce cas, /home/$USER/www-data) doté d'un accès en écriture. Je supprime donc l'accès en écriture avec:

# chmod a-w /home/$USER/www-data

NOTE: changez $USERavec votre utilisateur.

Rizal Rahman
la source
1

Vérifiez les chrootoptions vsftpd.confet créez un utilisateur distinct pour celui-ci dont la référence est définie sur /var/www.

jirib
la source
Je suis bien conscient de cela, je vais créer un utilisateur séparé. Je devrais peut - être revoir ma question alors comment puis - je limiter un utilisateur à chemin séparé seulement
Badr Hari
Utilisez sftp depuis OpenSSH. Voir man sshd_config pour internal-sftp, puis 'ForceCommand' et voir 'ChrootDirectory'. Plus récent OpenSSH a également ajouté une option permettant à sftp-server de basculer vers un chemin spécifique. Ainsi, en combinaison avec ChrootDirectory, vous pouvez effectuer les actions suivantes: chroot -> / chemin -> destination -> 'onlyhere' = / chroot / onlyhere
jirib