# [vsftpd]utilisateurs virtuels et mysql

## mornik

Le but est ici d'avoir des utilisateurs "virtuels" sur notre server ftp vsftpd.

Ces utilisateurs seront définis sous mysql (user et password). Ils pourront facilement avoir une configuration personnélisée (ou bien sur commune).

Pour commencer on installe le server ftp vsftpd

Installation de vsftpd :  

```
emerge -av vsftpd
```

Installation de pam_mysql 

```
USE="openssl" emerge -av pam_mysql
```

Creation du répertoire racine du site ftp: 

```
mkdir -p /var/ftp/mysite.com
```

Copie du fichier de configuration dexemple en fichier de configuration globale : 

```
cp /etc/vsftpd/vsftpd.conf.example /etc/vsftpd/vsftpd.net.conf
```

Modifier la configuration vsftpd :

```

vi /etc/vsftpd/vsftpd.conf

listen=YES

anonymous_enable=NO => on refuse les connections anonymous

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES => port ftp

ftpd_banner=Serveur ftp monsite.com => message affiché à la connection, sur le server

local_enable=YES => on autorise les user système à se connecter au server (facultatif)

chroot_local_user=YES => chaque user est enfermé dans son répertoire "racine". Il ne peut pas remonter l'arborescence

# Chaque utilisateur va avoir un fichier de configuration specifique

user_config_dir=/etc/vsftpd/users_conf

# Pour l'identification via mysql

guest_enable=YES

guest_username=ftp

local_root=/var/ftp/$USER

pam_service_name=vsftpd

user_sub_token=$USER

virtual_use_local_privs=YES

```

On crée le répertoire /etc/vsftpd/users_conf : 

```
mkdir /etc/vsftpd/users_conf
```

Un exemple de fichier utilisateur. L'utilisateur alexandre à ici l'ensemble des droits d'écriture sur le répertoire (création d'un nouveau répertoire, upload, delete de fichiers etc..). Le répertoire par défaut est alexandre, à l'intérieur du répertoire racine du server (cad dans : /var/ftp/mysite.com/alexandre)

```
cat /etc/vsftpd/users_conf/alexandre

anon_world_readable_only=NO

write_enable=YES

anon_upload_enable=YES 

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

local_root=alexandre

local_umask=022
```

Modifier /etc/pam.d/vsftpd :

user_vsftpd : utilisateur mysql utilisé pour l'identification pam. 

password_vsftpd : mot de passe attaché à user_vsftpd

localhost : server hébergeant la base mysql.

uservsftpd : table contenant la liste des utilisateurs virtuels

name : champ contenant l'identifiant du user virtuel (dans mon exemple alexandre)

passwd : champ contenant le password du user

Les valeures suivante sont communes à tous les utilisateurs virtuels.

Le champs crypt définis la valeur de cryptage des données dans la table. 0 correspond à une valeure en claire, 2 cryptée. 

Il ne faut pas oublié que le protocole ftp fait transiter les couples user/mdp en claire sur le réseau.

```

auth optional pam_mysql.so user=user_vsftpd \

passwd=password_vsftpd host=localhost db=vsftpd table=uservsftpd usercolumn=name \

passwdcolumn=passwd crypt=0

auth required pam_mysql.so user=user_vsftpd \

passwd=password_vsftpd host=localhost db=vsftpd table=uservsftpd usercolumn=name \

passwdcolumn=passwd crypt=0

account required pam_mysql.so user=user_vsftpd \

passwd=password_vsftpd host=localhost db=vsftpd table=uservsftpd usercolumn=name \

passwdcolumn=passwd crypt=0
```

Pour la partie mysql : Connexion à la base mysql

```
$ mysql -u root -p
```

On utilise la base mysql : 

```
use mysql
```

On crée un user vsftpd 

```
INSERT INTO user (host,user,password) VALUES ('localhost','user_vsftpd','');
```

On redefinis son password : 

```
UPDATE user set password=PASSWORD('password_vsftpd') WHERE user='user_vsftpd';
```

On crée une base de données vsftpd et on rentre dans la base : 

```
create database vsftpd; use vsftpd
```

On crée la table des utilisateurs virtuels : 

```
create table uservsftpd ( name char(16) binary , passwd char(16) binary );
```

Mise a jour des droits de la table : 

```
GRANT select ON vsftpd.* to vsftpd; FLUSH PRIVILEGES;
```

Creation dun user virtuel :

```
INSERT into uservsftpd (name, passwd) VALUES ('utilisateur_virtuel_1','mot_de_passe_en_claire');
```

On peut choisir un répertoire différent. Dans ce cas il faut adapter les droits : 

```
chown -R root:ftp /home/mp3 chmod -R 775 /home/mp3
```

Modification du user ftp pour quil appartienne au groupe ftp et pour que son home soit /var/ftp/ (dans /etc/passwd et /etc/group) :

```
|grep ftp  /etc/passwd

ftp:x:21:21:added by portage for ftpbase:/var/ftp:/sbin/nologin

grep ftp /etc/group

ftp:x:21:ftp
```

Ajout du serveur vsftp à la liste des serveur à démarrer (spécifique gentoo) : 

```
rc-update add vsftpd default
```

Démarrage du serveur : 

```
/etc/init.d/svftpd start
```

test :

```

D:\Documents and Settings\alexandre>ftp mysite.com

Connecté à mysite.com.

220 Serveur ftp mysite.com

Utilisateur (mysite.com:(none)) : alexandre

331 Please specify the password.

Mot de passe :

230 Login successful.

ftp> ls

200 PORT command successful. Consider using PASV.

150 Here comes the directory listing.

bigboss.jpg

users_conf

226 Directory send OK.

ftp : 118 octets reçus en 0,00 secondes à 118000,00 Ko/sec.

ftp>
```

Et pour finir on active la surveillance par fail2ban :

```
[VSFTPD]

# Option: enabled

# Notes.: enable monitoring for this section.

# Values: [true | false] Default: false

#

enabled = true
```

On redémarre fail2ban pour la prise en compte de notre modification : 

```
/etc/init.d/fail2ban restart
```

On oublira pas d'ouvrir les ports 20 et 21 du firewall (voir le post de bouleetbil par exemple)

Edit 1 : Petite correction (suppression du cat en attendant de faire mieux ^^

----------

## geekounet

 *mornik wrote:*   

> Modification du user ftp pour quil appartienne au groupe ftp et pour que son home soit /var/ftp/ (dans /etc/passwd et /etc/group) :
> 
> ```
> cat /etc/passwd|grep ftp
> 
> ...

 

Haaaa mes yeux !! Vires moi ces cat inutiles s'il-te-plait, tu viens de tuer 2 chatons là, malheureux !

EDIT: d'autres part, t'as aussi les commandes getent passwd ftp et getent group ftp pour ça  :Smile: 

----------

## truc

ça fait effectivement mal aux yeux  :Razz: 

Par contre, merci, c'est un post très interessant  :Smile: 

----------

## mornik

oui c'est vrai le cat est moche. ça marche si je dits que c'etait la fatigue ? non ? bon ok je file corriger rapidement ça. Par contre je connaissais pas getent passwd ftp et getent group ftp. Je regarderai ça ce soir.

----------

