ProFTP

De DiouxX's Wiki
Aller à : navigation, rechercher
Cette page permet d'installer et configurer un serveur ProFTP

Installation

Pour installer ProFTPD, il suffit d'aller rechercher les sources sur le site officiel

Konsole.png


Désarchivez l'archive avant de pouvoir passer à l'étape de compilation

Konsole.png
[user@ordi ~]$ tar -xjvf proftpd-X.X.X.tar.bz2


Une fois désarchiver, on peux compiler notre serveur FTP. Déplacez vous dans le dossier que vous venez de désarchiver et démarrer la compilation :

Konsole.png
[root@ordi ~]# ./configure --prefix=/opt/proftpd


  • --prefix indique le dossier d'installation pour notre serveur


Une fois l'étape de configuration terminée, on peux passer à l'installation

Konsole.png
[root@ordi ~]# make
[root@ordi ~]# make install


Notre serveur FTP est maintenant installé, il nous reste plus qu'à le configurer avant de le démarrer

Configuration

Pour configurer le serveur FTP, on utilise 2 fichiers :

  • /opt/proftpd/etc/proftpd.conf
  • /opt/proftpd/etc/ftpusers

proftpd.conf

Ce ficher est le fichier de configuration du serveur FTP, le fichier de configuration peux ressembler à ceci (Pour les besoins du FTP dasn une DMZ ) :

# This is a basic ProFTPD configuration file (rename it to 
# 'proftpd.conf' for actual use.  It establishes a single server
# and a single anonymous login.  It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.

ServerName			"PASS FTP Access"

#Le demon reste en memoire et ecoute les connexions
ServerType			standalone

DefaultServer			on
#IdentLookups			off

#Message d'acceuil
ServerIdent			on "Welcome to ftp.pass.be"

#Ne pas donner d'infos sur le server
DeferWelcome			off

# Port 21 is the standard FTP port.
Port				21

DefaultAddress 192.168.55.12

#adresse à renvoyer pour être accessible du réseau (pour activer le mode passif)
MasqueradeAddress 193.190.248.6
#MasqueradeAddress 192.168.55.12

#Configuration du mode passif
PassivePorts 5000 5100

# PID File
PidFile /opt/proftpd/var/proftpd.pid

# Don't use IPv6 support by default.
UseIPv6				off

#Utilisation du fichier /opt/proftpd/etc/ftpusers
#Reference les utilisateurs qui ne peuvent pas e connecter au service FTP
#Exemple : root,www-data,...
UseFtpUsers on

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask				022

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances			30

# Nombre maximum de clients ayant le même login
MaxClientsPerHost 		5
MaxClientsPerUser		5

#Timeout
#TimeoutStalled 		10
#TimeoutNoTransfer 	20
#TimeoutLogin 		20

#Gestion des logs
ExtendedLog                     /var/log/proftpd/access.log WRITE,READ write
ExtendedLog                     /var/log/proftpd/auth.log AUTH auth
ExtendedLog                     /var/log/ftp.log AUTH

SystemLog			/var/log/proftpd/proftpd.log

LogFormat               default "%h %l %u %t \"%r\" %s %b"
LogFormat               auth    "%v [%P] %h %t \"%r\" %s"
LogFormat               write   "%h %l %u %t \"%r\" %s %b"
SyslogFacility          AUTH

#Section Administrateur
UseReverseDNS           off

#ServerAdmin             
MaxLoginAttempts  	2

# Set the user and group under which the server will run.
User				proftpd
Group				proftpd

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
DefaultRoot ~

# Message d'accueil après une connexion réussie
AccessGrantMsg "Connexion reussie pour %u"

# Normally, we want files to be overwriteable.
AllowOverwrite		on

# Bar use of SITE CHMOD by default
#DenyAll
<Limit SITE_CHMOD>
	DenyAll
</Limit>

# A basic anonymous configuration, no upload directories.  If you do not
# want anonymous users, simply delete this entire <Anonymous> section.
<Anonymous ~ftp>
  User				ftp
  Group				ftp

  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias			anonymous ftp

  # Limit the maximum number of anonymous logins
  MaxClients			5

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin			welcome.msg
  DisplayChdir			.message

  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>
    DenyAll
  </Limit>
</Anonymous>

<VirtualHost 192.168.55.12>
	ServerName "FTP PASS Interne"
	Port			2121
	MasqueradeAddress  192.168.55.12
</VirtualHost>


ftpusers

Ce fichier à pour utilité de lister les différents noms d'utilisateurs qui ne pourront pas se connecter au serveur FTP.

On peux très bien le construire en récupérant seulement le nom des utilisateurs du système à partir du fichier /etc/passwd  :

cat /etc/passwd | cut -d : -f 1 > /opt/proftpd/etc/ftpusers


Après, il ne reste plus qu'a retirer les utilisateurs qu'on autorise à se connecter au service FTP.

root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
proxy
www-data
backup
list
irc
gnats
nobody
libuuid
syslog
messagebus
whoopsie
landscape
sshd
proftpd
anonymous


Utilisateurs

Pour ajouter un utilisateur au service FTP, il suffit de créer un utilisateur système ( Si on utilise pas les utilisateurs virtuelles) :

Konsole.png
[root@ordi ~]# useradd user -s /bin/false -G users


  • -s : spécifie le shell de connexion. Dans notre cas, aucun shell de connexion n'est assigné pour une question de sécurité
  • --ingroup : assigne l'utilisateur au groupe users
Warning.png
Attention !
Il est très important que les utilisateurs de votre FTP aient des droits restreints et donc ne soient pas des utilisateurs réguliers de votre Linux d'ou le /bin/false au lieu de /bin/bash habituel. Maintenant éditez /etc/shells et rajoutez la ligne /bin/false (Si elle n'y est pas)


Démarrage/Arrêt


Démarrer

Pour démarrer le serveur FTP, il est nécessaire de lancer le script /opt/proftpd/sbin/proftpd  :

Konsole.png
[user@ordi ~]$ ./proftpd -d 10


  • -d : permet d'indiquer le niveau de log que l'on désire ( Optionnel)

Arrêter le serveur

Pour arrêter le serveur, le seul moyen est de "killer" le process dont l'id est renseigner dans le fichier paramétré dans la configuration du serveur

Konsole.png
[user@ordi ~]$ kill -INT `cat /opt/proftpd/var/proftpd.pid`


Script d'automatisation

On peux automatiser les étapes ci-dessus via un script bash

#! /bin/bash
# Auteur : Devleeschauwer Denis
# Proftpd start script
#
# Avril 2012
#
 
#GLOBAL VARIABLES
DIRECTORY=/opt/proftpd
APPLICATION=ProFTPD
 
######################################################################
##########################Function####################################
######################################################################
function startInstance
{
	#Commande pour demmarer ProFTPD
	cd $DIRECTORY/sbin
	./proftpd -d 10 > /dev/null 2>&1
 
	if [ $? -eq 0 ]
	then
        	echo "Start $APPLICATION Instance                       [OK]"
	else
        	echo "Start $APPLICATION Instance                       [KO]"
	fi
}
 
function stopInstance
{
	#Commande pour arreter ProFTPD
 	kill -INT `cat $DIRECTORY/var/proftpd.pid` > /dev/null 2>&1
	if [ $? -eq 0 ]
	then
        	echo "Stop $APPLICATION Instance                     [OK]"
	else
        	echo "Stop $APPLICATION Instance                     [KO]"
	fi 
}
 
case "$1" in
 
'start')
	startInstance
;;
 
'stop')
	stopInstance
;;
 
'restart')
	stopInstance
 
	sleep 5
 
	startInstance
;;
 
'status')
	cat $DIRECTORY/var/proftpd.pid > /dev/null 2>&1
 
	if [ $? -eq 0 ]
	then
		echo "$APPLICATION Instance Running"
	else
		echo "$APPLICATION Instance Stop"
	fi
;;
 
*)
	echo "Usage: $0 { start | stop | restart | status }"
	exit 1
;;
 
esac
 
exit 0

Démarrage système

Pour que le serveur FTP soit lancé au démarrage du système, il faut créer des liens symboliques de note script d'automatisation à différents emplacements. Ces emplacements correspondent aux différents runlevel du système

Konsole.png
[root@ordi ~]# ln -s /etc/init.d/proftpd /etc/rc2.d/S99proftpd


  • Si il y a la lettre S, le paramètre start sera passé au script /etc/init.d/service. En revanche, si c'est la lettre K, c'est le paramètre stop qui sera passé à ce script.
  • 00 correspond à une priorité d'exécution. Le service possédant le plus petit chiffre s'exécutera en premier.


Pour être sur que le service soit arrêter correctement lors de l'arrêt ou le reboot du système, nous devons faire la même opération mais en modifiant le dossier de destination et le paramètre envoyé au script

Konsole.png
[root@ordi ~]# ln -s /etc/init.d/proftpd /etc/rc6.d/k99proftpd
[root@ordi ~]# ln -s /etc/init.d/proftpd /etc/rc0.d/k99proftpd


Procédure

Créer un utilisateur

Pour ajouter un utilisateur à notre FTP, il faut créer un user système :

BlocNotes.png
À noter !
Cette procédure a été crée pour un accès de nucomat à notre FTP. Les commandes sont identiques seul le nom d'utilisateur et les noms de dossiers peuvent changer selon le cas.


Konsole.png
[root@ordi ~]# useradd -d /home/nucomat -m nucomat


  • -d : Spécifie la home directory du nouvel utilisateur
  • -m : Force la création de la home directory si elle n'existe pas


Ensuite, il faut assigner un mot de passe au nouvel utilisateur :

Konsole.png
[root@ordi ~]# passwd nucomat


Il suffira de renter 2 fois le mot de passe quand cela est demandé.

Si nous créons un utilisateur pour un accès par des personnes extérieurs, il se peut qu'elle ne doivent qu'avoir accès au fichier placé sur le FTP et ne peuvent pas en déposer; Pour cela, il faut retirer les droits d'écriture de l'utilisateur au dossier concerné ( ex : sa Home Directory )

Konsole.png
[root@ordi ~]# chmod -R -w /home/nucomat


  • -R : Pour la récursion
  • -w : Pour retirer les droit en écriture ( write ) sur le dossier.