Sécuriser proftpd   Version imprimable de cet article Enregistrer au format PDF


par Sphix

La configuration est possible par Webmin (https://adresse du poste:10000), mais il est plus simple d’effectuer la configuration directement.

Création d’un faux shell

Les utilisateurs du FTP ne doivent en aucun cas avoir accès au shell, pour qu’ils ne puissent lancer aucune commande. Créez donc un faux shell bin/false. Editez en root le fichier /etc/shells et ajoutez-y une ligne bin/false.


L’utilisateur nobody

Seuls les utilisateurs du groupe nobody devront pouvoir accéder au serveur FTP. Le groupe et l’utilisateur nobody devraient exister ; pour vous en assurer, entrez :

cat /etc/group | grep nobody

Si la commande ne répond pas, créez-les :
groupadd nobody, puis : useradd nobody -d/ -s/bin/false et enfin : usermod nobody -g nobody


Les utilisateurs

Vous pouvez créer deux catégories d’utilisateurs :

- des utilisateurs pouvant "uploader", par exemple ftpadmin, créé par la commande root :
useradd ftpadmin -s /bin/false
avec un mot de passe défini par : passwd ftpadmin

- des utilisateurs pouvant seulement "downloader", par exemple ftpuser, créé de la même manière.

Répertoire FTP

Donnez tous les droits sur le répertoire que vous avez créé à cet effet, par exemple /var/ftp/private :
chmod -R 777 /var/ftp/private

Configuration de ProFTPD

Vérifiez d’abord qu’il existe une liste des utilisateurs exclus de votre système, c’est le fichier /etc/ftpusers. Ajoutez-y l’utilisateur anonymous, si vous ne souhaitez pas de connexions anonymes. Ce fichier, qui exclut tous les utilisateurs ayant des droits sur la machine, sera appelé par le fichier de configuration /etc/proftpd.conf de ProFTPD.

Pour éviter toute modification malheureuse, vous pouvez sauvegarder au préalable une copie du fichier proftpd.conf originel ; en cas d’erreur, vous n’aurez pas à réinstaller ProFTPD.

Rappel : dans un fichier de configuration, toutes les lignes précédées de # sont des commentaires non interprétés.

Paramètres principaux du fichier proftpd.conf :

ServerName "C’est le nom du serveur". Vous pouvez le changer si vous voulez.

ServerType standalone. Le démon ftpd est toujours actif. N’y touchez pas.

DefaultServer on. Ne changez pas (off uniquement en cas de l’hébergement d’hôtes virtuels).

UseFtpUsers on. ProFTPD utilise le fichier /etc/ftpusers.

ServerIdent on "message de bienvenue". Mettez le message d’accueil que vous voulez.

AllowStoreRestart on. Permet de reprendre des téléchargements. Ne pas modifier.

Port 21 : c’est le port FTP standard, que vous avez ouvert sur votre routeur.


Umask 022
 : empêche les fichiers téléchargés d’être exécutés sur le serveur.

MaxInstances 30
 : laissez ainsi afin d’éviter les attaques DoS, comme l’indiquent les commentaires.

MaxClients 3 : ajoutez cette ligne pour limiter le nombre d’utilisateurs simultanés ; pour une ligne ADSL 512/128, on peut limiter à 3.

DeferWelcome off : vous pouvez ajouter cette ligne, afin que votre serveur ne s’identifie pas.

User nobody et Group nogroup : ne modifiez pas.


IMPORTANT
 : vous devez "chrooter" les utilisateurs dans leur répertoire, c’est à dire les empêcher de voir l’arborescence des répertoires de la machine. Ils doivent être emprisonnés dans leur répertoire. Pour cela, vous devez enlever le commentaire # placé devant la ligne DefaultRoot. Une syntaxe pourrait être DefaultRoot ˜, qui signifierait que chaque utilisateur serait bloqué dans la racine de son répertoire.

Les lignes suivantes indiquent que l’on peut écraser un fichier avec une nouvelle version. Laisser AllowOverwrite on en l’état.

PersistentPasswd off : laissez en l’état, si vous souhaitez changer de mot de passe.

Ajoutez les lignes :

<Directory /var/ftp/private>
<Limit WRITE>
AllowUser ftpadmin
DenyAll
</Limit>

seul l’utilisateur ftpadmin a le droit d’"uploader" des fichiers dans le répertoire /var/ftp/private.

Une fois apportées les modifications au fichier proftpd.conf, arrêtez/relancez le service proftpd. En cas d’erreur, un message indique l’erreur et son numéro de ligne.

Création de nouveaux utilisateurs

Vous pouvez créer autant de nouveaux utilisateurs authentifiés que nécessaire.

Si vous êtes allergique à la ligne de commande, allez dans le Centre de Contrôle Mandrake > Système > Utilisateurs et groupes. Cliquez sur le bouton Ajouter un utilisateur. Dans l’onglet Paramètres du compte, indiquez l’utilisateur et le mot de passe. Choisissez le répertoire, par exemple /var/ftp/lambda. Dans l’onglet Groupes d’appartenance, ajoutez ftp. OK. Cliquez sur le bouton Enregistrer pour sauvegarder votre configuration. L’utilisateur ainsi créé doit apparaître dans la liste des utilisateurs.

Accès anonyme

Le ftp anonyme, mal configuré, est un risque sérieux pour la sécurité. Si vous autorisez l’upload, votre disque risque de servir de "dépôt" pour toutes sortes de fichiers, pas toujours légaux. Si vous tenez absolument à ouvrir le ftp anonyme, bloquez les utilisateurs dans un répertoire, ne leur donnez pas de shell et ne permettez pas l’upload.

Il est bon de rappeler qu’il est possible d’accéder à un compte non-anonyme avec un navigateur Web, en entrant dans la barre d’adresses : ftp://login:password@adresse-machine

Voici une section type du fichier proftpd.conf, autorisant les logins anonymes, qui permet seulement les downloads, que vous pouvez inclure dans le fichier proftpd.conf. Les sections Limit vont préciser les autorisations, indépendamment des permissions attachées aux fichiers.

# Une configuration anonyme simple

<Anonymous ~ftp>

# Le compte anonyme n'a pas de shell
RequireValid Shell no

# Autorise les logins
<Limit LOGIN>
AllowAll
</Limit>

User ftp
Group ftp

# Nous voulons que les clients puissent se connecter en anonyme ou authentifiés
UserAlias anonymous ftp

# Limite le nombre maximal d'utilisateurs anonymes à 5 par exemple
MaxClients 5 "Désolé, nombre maximal d'utilisateurs atteint. Essayez plus tard."

# Empêche d'écrire dans le répertoire "chrooté"
<Limit WRITE>
DenyAll
</Limit>

# An upload directory that allows storing files but not retrieving
# or creating directories.
<Directory incoming/*>

<Limit READ>
DenyAll
</Limit>

<Limit STOR>
AllowAll
</Limit>
</Directory>
</Anonymous>

Documentations publiées dans cette rubrique Documentations publiées dans cette rubrique