{{tag>Logiciel}} ====== Pro-ftpd : un serveur FTP open source pour Linux ====== ===== Introduction ===== **ProFTPD** est un serveur FTP/SFTP/FTPS open source, modulaire et puissant. * Il gère les répertoires cachés, les hôtes virtuels et les fichiers **.ftpaccess** par répertoire. * La structure interne des répertoires anonymes FTP est quelconque (pas besoin de bin, lib ni de fichiers spéciaux). * Il gère les fonctionnalités avancées (plusieurs fichiers de mots de passe, ratios téléchargement/envoi, etc.). ===== Pré-requis ===== ===== Installation ===== Pour utiliser une authentification sur une base de données, installez les paquets **proftpd-mod** suggérés correspondants. - Installez les paquets **[[apt>proftpd,ftp]]** ou (cas d'un Raspberry Pi) :...@...:~$ sudo apt install proftpd ftp * **ftp** pour les tests * Lors de l’installation, il peut vous être demandé comment ProFTP doit être démarré. Choisissez **autonome** (**standalone**) :{{ logiciel:internet:ftp:proftpd:proftpd-01.png?400 |}} * Vous pouvez installer aussi les paquets **[[apt>proftpd-mod-ldap,proftpd-mod-mysql,proftpd-mod-odbc,proftpd-mod-pgsql,proftpd-mod-sqlite,proftpd-mod-geoip]]** ou...@...:~$ sudo apt install proftpd-mod-ldap proftpd-mod-mysql proftpd-mod-odbc proftpd-mod-pgsql proftpd-mod-sqlite proftpd-mod-geoip * L'installation crée les utilisateurs système suivants : * **proftpd** (UID 127), groupe **nogroup** ; __pas de répertoire personnel__ **/run/proftpd**. * **ftp** (UID 128), groupe **nogroup** ; création du répertoire personnel **/srv/ftp** »... - Vérifiez que ftp fonctionne sous l'utilisateur en cours (**pi** pour un Raspberry Pi) :...@...:~$ ftp localhost ... Name (localhost:xxxxxxx): 331 Mot de passe requis pour xxxxxxx Password: 230 Utilisateur xxxxxxx authentifié Remote system type is UNIX. Using binary mode to transfer files. ftp> ls ... drwxrwxr-x 4 xxxxxxx xxxxxxx 4096 Sep 5 05:39 Bureau ... 226 Téléchargement terminé ftp> bye 221 Au revoir. ...@...:~$ - Si vous essayez avec un client comme **Filezilla**, vous constaterez que l'utilisateur n'est pas bloqué dans son home. ===== Configuration ====== * L'installation a créé l’arborescence :...@...:~$ tree -d /etc/proftpd/ /etc/proftpd/ └── conf.dou pour un Raspberry Pi :pi@framboise:~ $ tree -d /etc/proftpd/ /etc/proftpd/ └── conf.d * **Pour le listing des fichiers de la distribution**, voir [[logiciel:internet:ftp:proftpd:dist:start]] * Pour que les réglages persistent après les mises à jour, nous ne toucherons pas au fichier **/etc/proftpd/proftpd.conf**. * Nous placerons dans le répertoire **/etc/proftpd/conf.d/** des fichiers contenant nos directives de configuration. Ces fichiers ne seront pas affectés par les mises à jour. * Liste des directives : [[http://www.proftpd.org/docs/directives/linked/by-name.html]] ==== Utilisateurs virtuels ==== Chaque utilisateur a accès à son propre répertoire personnel **/home/xxxxxxx** (ou **/home/pi** pour un Raspberry Pi). * Unix ne connaît que les UID : il n'utilise pas les noms d'utilisateurs. * **proftpd** ne fait donc pas de différence entre un utilisateur système et un utilisateur virtuel : ils sont définis par leur UID. * Un **utilisateur virtuel** est un utilisateur qui n'est pas défini dans le système. === Création d'un webmestre pour un site monsite.tld === Nous allons créer un utilisateur virtuel **admiweb** pour accéder par ftp au site **monsite.tld**, hébergé à l'emplacement **/var/www/html/monsite.tld** - Vérifiez l'existence de l'utilisateur **www-data** et de son groupe :...@...:~$ id www-data uid=33(www-data) gid=33(www-data) groupes=33(www-data) -> L’identifiant du groupe **www-data** est **33**. * Si le groupe **www-data** n'existe pas, créez-le ainsi que l'utilisateur **www-data** par :...@...:~$ sudo groupadd www-data ...@...:~$ sudo useradd -g www-data -d /var/www -s /bin/false www-data - Créez un nouvel utilisateur virtuel ayant accès à **/var/www/html** (le webmestre **admiweb**, de home **/var/www/html**, avec les uid et gid de **www-data**, fournissez et confirmez le **mot de passe** du nouveau compte) :...@...:~$ cd /etc/proftpd/ ...@...:/etc/proftpd$ sudo ftpasswd --passwd --name admiweb --gid 33 --uid 33 --home /var/www/html --shell /bin/false ftpasswd: creating passwd entry for user admiweb ... Password: Re-type password: ... ftpasswd: entry created === Création d'un utilisateur virtuel (cas général) === On peut créer de la même façon des utilisateurs virtuels ayant des identifiants quelconques (sauf UID 0 (zéro) et GID 0 (zéro) qui sont utilisés pour l'utilisateur root et le groupe root). Utilisez pour les utilisateurs virtuels des identifiants qui ne sont pas déjà utilisés dans **/etc/passwd** pour séparer les privilèges de vos utilisateurs système de ceux de vos utilisateurs virtuels. Les privilèges sont déterminés par les identifiants. Les utilisateurs virtuels peuvent tous avoir les mêmes identifiants -> ils auront tous exactement les mêmes privilèges. La directive **DefaultRoot ~** dans **/etc/proftpd/conf.d/global.conf** confine vos utilisateurs virtuels dans des répertoires personnels distincts. Ainsi, ces utilisateurs virtuels, bien qu'ayant tous les mêmes privilèges, seront tous séparés dans des répertoires différents. L'outil ftpasswd est un script Perl. ==== Fichier de configuration ==== - Créez ou éditez avec les droits d'administration le fichier **/etc/proftpd/conf.d/global.conf** pour ajouter à la fin votre configuration : # Tous les utilsateurs seront emprisonnés dans leur home, sauf l'utilisateur système xxxxxxx DefaultRoot ~ !xxxxxxx # Pas de shell valide exigé (ex : bin/sh ou /bin/bash). RequireValidShell off # Fichier des mots de passe AuthUserFile /etc/proftpd/ftpd.passwd # Fichier des groupes AuthGroupFile /etc/proftpd/ftpd.group AuthOrder mod_auth_file.c mod_auth_unix.c AuthPAM off Cas d'un Raspberry Pi : # Tous les utilsateurs seront emprisonnés dans leur home, sauf l'utilisateur système pi DefaultRoot ~ !pi # Pas de shell valide exigé (ex : bin/sh ou /bin/bash). RequireValidShell off # Fichier des mots de passe AuthUserFile /etc/proftpd/ftpd.passwd # Fichier des groupes AuthGroupFile /etc/proftpd/ftpd.group AuthOrder mod_auth_file.c mod_auth_unix.c AuthPAM off - Créez les fichiers **/etc/proftpd/ftp.passwd** et **/etc/proftpd/ftpd.group** :...@...:~$ sudo touch /etc/proftpd/ftp.passwd ...@...:~$ sudo touch /etc/proftpd/ftpd.group ==== Rechargement et test ==== - Relancez proftpd et vérifiez que l'utilisateur admiweb peut se connecter : - Relancez proftpd et vérifiez que l'utilisateur admiweb peut se connecter :...@...:~$ sudo systemctl restart proftpd ...@...:~$ ftp localhost ... Name (localhost:xxxxxxx): admiweb 331 Mot de passe requis pour admiweb Password: 230 Utilisateur admiweb authentifié Remote system type is UNIX. Using binary mode to transfer files. ftp> ls ... -rwxrws--- 1 admiweb www-data 612 Apr 25 2018 index.nginx-debian.html ... ftp> bye 221 Au revoir. ...@...:~$ Pour un Raspberry Pi :pi@framboise:~ $ sudo systemctl restart proftpd pi@framboise:~ $ ftp localhost Connected to localhost. 220 ProFTPD Server (Debian) [::1] Name (localhost:pi): admiweb 331 Mot de passe requis pour admiweb Password: 230 Utilisateur admiweb authentifié Remote system type is UNIX. Using binary mode to transfer files. ftp> ls ... drwxrws--- 22 admiweb www-data 4096 Jul 28 13:23 html ... ftp> bye 221 Au revoir. pi@framboise:~ $ - L'utilisateur système xxxxxxx, lui, peut se connecter et n'est pas emprisonné :...@...:~$ ftp localhost ... Name (localhost:xxxxxxx): 331 Mot de passe requis pour xxxxxxx Password: 230 Utilisateur xxxxxxx authentifié Remote system type is UNIX. Using binary mode to transfer files. ftp> ls ... drwxrwxr-x 4 xxxxxxx xxxxxxx 4096 Sep 5 05:39 Bureau ... 226 Téléchargement terminé ftp> cd .. ... ftp> ls ... drwxrwxr-x 269 xxxxxxx xxxxxxx 20480 Sep 10 11:51 xxxxxxx ... ftp> bye 221 Au revoir. ...@...:~$ Pour un Raspberry Pi :pi@framboise:~ $ ftp localhost ... Name (localhost:pi): 331 Mot de passe requis pour pi Password: 230 Utilisateur pi authentifié ... ftp> ls ... drwxr-xr-x 2 pi pi 4096 Sep 9 16:15 Desktop ... ftp> cd .. ... ftp> ls ... drwxr-xr-x 33 pi pi 4096 Sep 9 17:53 pi ... ftp> bye 221 Au revoir. pi@framboise:~ $ ==== Fichier proftpd.conf et dérivés ==== Il inclut : * **/etc/proftpd/modules.conf** * Répertoire des modules DSO : /usr/lib/proftpd * Seul l'utilisateur root peut charger et décharger des modules, mais tout le monde peut voir quels modules ont été chargés. * Charge les modules mod_ctrls_admin.c, mod_tls.c, mod_radius.c, mod_quotatab.c, mod_quotatab_file.c, mod_quotatab_radius.c, mod_wrap.c, mod_rewrite.c, mod_load.c, mod_ban.c, mod_wrap2.c, mod_wrap2_file.c, mod_dynmasq.c, mod_exec.c, mod_shaper.c, mod_ratio.c, mod_site_misc.c, mod_sftp.c, mod_sftp_pam.c, mod_facl.c, mod_unique_id.c, mod_copy.c, mod_deflate.c, mod_ifversion.c, mod_tls_memcache.c, mod_ifsession.c * **/etc/proftpd/conf.d/** * (désactivés) : * #/etc/proftpd/ldap.conf (entièrement désactivé par des #) * #/etc/proftpd/sql.conf (entièrement désactivé par des #) * #/etc/proftpd/tls.conf (entièrement désactivé par des #) * #/etc/proftpd/virtuals.conf (entièrement désactivé par des #) Après chaque changement de configuration, pensez à relancer proftpd :$ sudo systemctl restart proftpd ==== Sécurisation TLS ==== Le serveur est maintenant en place, cependant, tout ce qui transite entre votre serveur et votre Client FTP transite en clair sur le Net. Nous allons chiffrer le tout avec une sécurisation TLS (SSLv3 étant deprecated). Commençons par créer un certificat SSL auto-signé : $ sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/proftpd.cert -keyout /etc/ssl/private/proftpd.key Generating a 2048 bit RSA private key ..........................................................+++ ..................................................................................+++ writing new private key to '/etc/ssl/private/proftpd.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:sd-xxxxx.dedibox.fr Email Address []:me@mymail.tld Renseignez les champs demandés avec les bonnes informations. (sd-xxxxx.dedibox.fr : votre nom de domaine si vous en avez un). Protégez la clé :$ sudo chmod 440 /etc/ssl/private/proftpd.key Nous allons maintenant forcer notre serveur FTP à utiliser cette clé pour générer une connexion chiffrée. Avec les droits d'administration, éditez le fichier **/etc/proftpd/conf.d/tls.conf** pour le modifier comme ceci : TLSEngine on TLSLog /var/log/proftpd/tls.log # TLSv1 Uniquement TLSProtocol TLSv1 # N'autorise que les connexions sécurisées TLSRequired on # Renseigne l'emplacement des certificats TLSRSACertificateFile /etc/ssl/certs/proftpd.cert TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key TLSVerifyClient off TLSRenegotiate none TLSOptions NoSessionReuseRequired Redémarrez le serveur FTP :$ sudo systemctl restart proftpd Vous pouvez maintenant vous connecter à votre serveur FTP de manière sécurisée ! ==== Quelques exemples de fichiers de configuration ==== * **Basic** : ++++ Basic.conf | # 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 "ProFTPD Default Installation" ServerType standalone DefaultServer on # Port 21 is the standard FTP port. Port 21 # 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 # Set the user and group under which the server will run. User nobody Group nogroup # To cause every FTP user to be "jailed" (chrooted) into their home # directory, uncomment this line. #DefaultRoot ~ # Normally, we want files to be overwriteable. AllowOverwrite on # A basic anonymous configuration, no upload directories. If you do not # want anonymous users, simply delete this entire section. 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 10 # We want 'welcome.msg' displayed at login, and '.message' displayed # in each newly chdired directory. DisplayLogin welcome.msg DisplayFirstChdir .message # Limit WRITE everywhere in the anonymous chroot DenyAll ++++ * **Anonymous** ++++ anonymous.conf | # This sample configuration file illustrates configuring two # anonymous directories, and a guest (same thing as anonymous but # requires a valid password to login) ServerName "ProFTPD Anonymous Server" ServerType standalone # Port 21 is the standard FTP port. Port 21 # If you don't want normal users logging in at all, uncomment this # next section # # DenyAll # # Set the user and group that the server normally runs at. User nobody Group nogroup # 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 # Set the maximum number of seconds a data connection is allowed # to "stall" before being aborted. TimeoutStalled 300 # We want 'welcome.msg' displayed at login, and '.message' displayed # in each newly chdired directory. DisplayLogin welcome.msg DisplayFirstChdir .message # Our "basic" anonymous configuration, including a single # upload directory ("uploads") # Allow logins if they are disabled above. AllowAll # Maximum clients with message MaxClients 5 "Sorry, max %m users -- try again later" User ftp Group ftp # We want clients to be able to login with "anonymous" as well as "ftp" UserAlias anonymous ftp # Limit WRITE everywhere in the anonymous chroot DenyAll # An upload directory that allows storing files but not retrieving # or creating directories. DenyAll AllowAll # A second anonymous ftp section. Users can login as "private". Here # we hide files owned by root from being manipulated in any way. User bobf Group users UserAlias private bobf UserAlias engineering bobf # Deny access from *.evil.net and *.otherevil.net, but allow # all others. Order deny,allow Deny from .evil.net, .otherevil.net Allow from all # We want all uploaded files to be owned by 'engdept' group and # group writable. GroupOwner engdept Umask 006 # Hide all files owned by user 'root' HideUser root DenyAll # Disallow clients from any access to hidden files. IgnoreHidden on # Permit uploading and creation of new directories in # submissions/public DenyAll IgnoreHidden on AllowAll IgnoreHidden on # The last anonymous example creates a "guest" account, which clients # can authenticate to only if they know the user's password. User guest Group nobody AnonRequirePassword on AllowAll # Deny write access from all except trusted hosts. Order allow, deny Allow from 10.0.0. Deny from all ++++ * **Simple MySQL Authentication** ++++ mysql_simple.conf | ## ## Config with simple mysql authentication support ## Contributed by 'Stonki' ## Added to www.proftpd.org 18/Oct/2002 ## # This is a basic ProFTPD configuration file. It establishes a single # server and a single anonymous login. It assumes that you have a # user/group "nobody"/"nogroup" for normal operation and anon. # !!! PLEASE read the documentation of proftpd !!! # # You can find the documentation in /usr/doc/packages/proftpd/, # http://www.proftpd.org/ and don't forget to read carefully # and _follow_ hints on http://www.proftpd.net/security.html. # # geaendert: 03.11.2001 für ProFTP 1.2.4 und mod_sql 4.x # # # Basic # ServerName "Stonki" serverType inetd ServerAdmin support@stonki.de # # Debug Level # emerg, alert, crit (empfohlen), error, warn. notice, info, debug # #SyslogLevel emerg #SystemLog /var/log/proftpd.system.log # # uncomment, if you want to hide the servers name: # ServerIdent on "Stonki's Server" DeferWelcome on DefaultServer on # # Display # DisplayLogin /messages/ftp.motd DisplayConnect /net/messages/ftp.pre DisplayFirstChdir index.txt HiddenStor off DirFakeUser on stonki DirFakeGroup on stonki DirFakeMode 0000 # Enable PAM for authentication... # AuthPAM on # Setting this directive to on will cause authentication to fail # if PAM authentication fails. The default setting, off, allows # other modules and directives such as AuthUserFile and friends # to authenticate users. # # AuthPAMAuthoritative on # This directive allows you to specify the PAM service name used # in authentication (default is "proftpd" on SuSE Linux). # You have to setup the service in the /etc/pam.d/. # #AuthPAMConfig # Port 21 is the standard FTP port. Port 21 #------------------------mysql Modul: 4.x # # Zugangskontrolle # SQLAuthTypes Plaintext SQLAuthenticate users* SQLConnectInfo db@localhost username password SQLDefaultGID 65534 SQLDefaultUID 65534 SQLMinUserGID 100 SQLMinUserUID 500 SQLUserInfo ftp username password uid gid homedir shell # # aktive SQL Kommandos, ab hier passiert etwas :-) # SQLLog PASS counter SQLNamedQuery counter UPDATE "letzter_zugriff=now(), count=count+1 WHERE username='%u'" ftp # xfer Log in mysql SQLLog RETR,STOR transfer1 SQLNamedQuery transfer1 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'c', NULL" xfer_stat SQLLOG ERR_RETR,ERR_STOR transfer2 SQLNamedQuery transfer2 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'i', NULL" xfer_stat #------------------------mysql # Port 21 is the standard FTP port. Port 21 # disable listen on 0.0.0.0:21 - the port (and IP) should # be specified explicitly in each VirtualHost definition # #Port 0 # listen for each (additional) address explicitly that is # specified (via Bind and Port) in a VirtualHost definition # #SocketBindTight on # # FXP Unterstuetzung # AllowForeignAddress on # Umask 022 is a good standard umask to prevent new dirs # and files from being group and world writable. Umask 022 # Set the user and group that the server normally runs at. User nobody Group nogroup # Maximal Werte setzen MaxClientsPerHost 3 "Nicht mehr als %m Verbindungen" MaxClients 5 "Leider sind schon %m Clients verbunden" # RateReadBPS 5000 # RateReadFreeBytes 5000 # RateReadHardBPS on Classes on Class default limit 5 Class internet limit 2 Class local limit 3 Class internet ip 0.0.0.0/0 Class internet ip 192.168.99.99/24 Class local ip 127.0.0.1/24 Class local ip 192.168.0.0/24 # # Restart erlauben # AllowStoreRestart on AllowRetrieveRestart on # Normally, we want files to be overwriteable. AllowOverwrite off HideNoAccess on AllowAll DenyAll AllowOverwrite on AllowALL DenyALL # It is a very good idea to allow only filenames containing normal # alphanumeric characters for uploads (and not shell code...) #PathAllowFilter "^[a-zA-Z0-9_.-]()'+$" #PathAllowFilter "^[a-zA-Z0-9 _.-]()'+$" # We don't want .ftpaccess or .htaccess files to be uploaded #PathDenyFilter "(\.ftp)|(\.ht)[a-z]+$" #PathDenyFilter "\.ftp[a-z]+$" # Do not allow to pass printf-Formats (security! see documentation!): #AllowFilter "^[a-zA-Z0-9@~ /,_.-]*$" #DenyFilter "%" # 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 # Performance: skip DNS resolution when we process the logs... UseReverseDNS on # Turn off Ident lookups IdentLookups on # Set the maximum number of seconds a data connection is allowed # to "stall" before being aborted. TimeoutStalled 300 # Where do we put the pid files? ScoreboardPath /usr/local/var/proftpd # # Logging options # TransferLog /var/log/proftpd.xferlog # Some logging formats # 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" # Log file/dir access ExtendedLog /var/log/proftpd.access_log WRITE,READ write # Record all logins ExtendedLog /var/log/proftpd.auth_log AUTH auth # Paranoia logging level.... ExtendedLog /var/log/proftpd.paranoid_log ALL default # # Do a chroot for web-users (i.e. public or www group), but # do not change root if the user is also in the users group... # DefaultRoot ~ !users # # Limit login attempts # MaxLoginAttempts 3 # # Users needs a valid shell # RequireValidShell off ++++ * **Virtual hosts** ++++ virtual.conf | # This sample configuration file illustrates creating two # virtual servers, and associated anonymous logins. ServerName "ProFTPD" ServerType inetd # Port 21 is the standard FTP port. Port 21 # Global creates a "global" configuration that is shared by the # main server and all virtualhosts. # Umask 022 is a good standard umask to prevent new dirs and files # from being group and world writable. Umask 022 # Set the user and group that the server normally runs at. User nobody Group nogroup # 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 # Maximum seconds a data connection may "stall" TimeoutStalled 300 # First virtual server ServerName "Virtual.com's FTP Server" MaxClients 10 MaxLoginAttempts 1 # DeferWelcome prevents proftpd from displaying the servername # until a client has authenticated. DeferWelcome on # Limit normal user logins, because we only want to allow # guest logins. DenyAll # Next, create a "guest" account (which could be used # by a customer to allow private access to their web site, etc) User cust1 Group cust1 AnonRequirePassword on AllowAll HideUser root HideGroup root # A private directory that we don't want the user getting in to. DenyAll # Another virtual server, this one running on our primary address, # but on port 4000. The only access is to a single anonymous login. ServerName "Our private FTP server" Port 4000 Umask 027 DenyAll User ftp Group ftp UserAlias anonymous ftp AllowAll DenyAll AllowAll ++++ * **Complex Virtual** ++++ virtual_authuserfile.conf | # # Virtual Hosting Server Configuration # by M.Lowes # for Frontier Internet Services Limited # (http://www.ftech.net/) # ServerName "Master Webserver" # # Spawn from inetd? # #ServerType inetd # # or maybe a standalone server... # ServerType standalone # # don't give the server banner until _after_ authentication # DeferWelcome off # # Some basic defaults # Port 21 Umask 002 TimeoutLogin 120 TimeoutIdle 600 TimeoutNoTransfer 900 TimeoutStalled 3600 # # No, I don't think we'll run as root! # User ftp Group ftp # # This is a non-customer usable name, (ie they should be connecting via www.{domain}) # not 'hostname'. Therefore let's dump them in a dummy account and wait for them to # scream. # DefaultRoot /web/Legacy/ # # Performance, let's do DNS resolution when we process the logs... # UseReverseDNS off # # Where do we put the pid files? # ScoreboardPath /var/run/proftpd # # Logging options # TransferLog /var/spool/syslog/proftpd/xferlog.legacy # # Some logging formats # 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" # # Global settings # DisplayLogin welcome.msg DisplayFirstChdir readme # # having to delete before uploading is a pain ;) # AllowOverwrite yes # # Turn off Ident lookups # IdentLookups off # # Logging # # file/dir access # ExtendedLog /var/spool/syslog/proftpd/access.log WRITE,READ write # # # Record all logins # ExtendedLog /var/spool/syslog/proftpd/auth.log AUTH auth # # Paranoia logging level.... # ##ExtendedLog /var/spool/syslog/proftpd/paranoid.log ALL default # # Deny writing to the base server... # DenyAll # -------------------------------------------- # Virtual Servers start here.... # # (Note: this is normally auto generated by a # script written in house). # -------------------------------------------- # # www.ftech.net. # This is the default server # Gets all the connections for www.{customer.domain}, # & www.ftech.net # ServerAdmin webmaster@Ftech.net ServerName "Master Webserver" MaxLoginAttempts 2 RequireValidShell no TransferLog /var/spool/syslog/proftpd/xferlog.www MaxClients 50 DefaultServer on DefaultRoot ~ !staff AllowOverwrite yes # # No quickly do we kick someone out # TimeoutLogin 120 TimeoutIdle 600 TimeoutNoTransfer 900 # -------------------------------------------- # Got a Frontpage customer who keeps breaking things???? # - stick 'em in group fpage # -------------------------------------------- # # Block them from doing anything other than reading... # DenyGroup fpage # # ditto for ftp_root if it's there... # DenyALL # # Limit by IP... # Order Allow,Deny Allow 195.200.31.220 Allow 212.32.17.0/26 Deny ALL # -------------------------------------------- # # Legacy server, left in because some people # haven't realised it's gone yet. Shove 'em into # a dummy $home # ServerAdmin webmaster@Ftech.net ServerName "Legacy Web Upload Server" MaxLoginAttempts 2 RequireValidShell no MaxClients 50 DefaultRoot ~ !staff MaxClients 2 AllowOverwrite yes TransferLog /var/spool/syslog/proftpd/xferlog.web-1 # -------------------------------------------- # # ftp.ftech.net # ServerAdmin ftpmaster@ftech.net ServerName "Frontier Internet Public FTP Server" TransferLog /ftp/xferlog/ftp.ftech.net MaxLoginAttempts 3 RequireValidShell no DefaultRoot /ftp/ftp.ftech.net AllowOverwrite yes # # Auth files.... # AuthUserFile /var/conf/ftp/authfiles/passwd.ftp.ftech.net AuthGroupFile /var/conf/ftp/authfiles/group.ftp.ftech.net # A basic anonymous configuration, no upload directories. User ftp Group ftp # We want clients to be able to login with "anonymous" as well as "ftp" UserAlias anonymous ftp RequireValidShell no # Limit the maximum number of anonymous logins MaxClients 50 # We want 'welcome.msg' displayed at login, and '.message' displayed # in each newly chdired directory. AllowAll DenyAll AllowAll DenyAll # # Limit access to the mirrors to LINX # only # Order Allow,Deny Allow .uk, .ftech.net Allow .vom.tm Deny ALL # Limit WRITE everywhere in the anonymous chroot DenyAll # ---------------------------------------------------- # Virtual ftp with anon access, but no incoming # ServerAdmin ftpmaster@foo1.com ServerName "Foo1 FTP Server" TransferLog /var/spool/syslog/xfer/ftp.foo1.com MaxLoginAttempts 3 RequireValidShell no DefaultRoot /ftp/ftp.foo1.com User foo1 Group foo1 AllowOverwrite yes # # Auth files.... # AuthUserFile /var/conf/ftp//authfiles/passwd.ftp.foo1.com AuthGroupFile /var/conf/ftp//authfiles/group.ftp.foo1.com User ftp Group ftp UserAlias anonymous ftp RequireValidShell no MaxClients 20 DenyAll # ---------------------------------------------------- # ftp.foo2.com # Anon, no incoming, some private access areas # ServerAdmin ftpmaster@mcresearch.co.uk ServerName "MC Research FTP Server" TransferLog /var/spool/syslog/xfer/ftp.foo2.com MaxLoginAttempts 3 RequireValidShell no DefaultRoot /ftp/ftp.foo2.com User foo2 Group foo2 AllowOverwrite yes # # Auth files.... # AuthUserFile /var/conf/ftp//authfiles/passwd.ftp.foo2.com AuthGroupFile /var/conf/ftp//authfiles/group.ftp.foo2.com User ftp Group ftp UserAlias anonymous ftp RequireValidShell no MaxClients 20 DenyAll DenyAll AllowUser mcres DenyAll AllowUser mcres AllowUser customer DenyAll # ---------------------------------------------------- # ftp.foo3.com # # ServerAdmin ftpmaster@farrukh.co.uk ServerName "Farrukh FTP Archive" TransferLog /var/spool/syslog/xfer/ftp.foo3.com MaxLoginAttempts 3 RequireValidShell no DefaultRoot /web/farrukh2/ftp_root User farrukh2 Group farrukh2 AllowOverwrite yes # # Auth files.... # AuthUserFile /var/conf/ftp//authfiles/passwd.ftp.foo3.com AuthGroupFile /var/conf/ftp//authfiles/group.ftp.foo3.com User ftp Group ftp UserAlias anonymous ftp RequireValidShell no MaxClients 20 AllowAll DenyAll AllowAll AllowAll DenyAll AllowAll # # block access to the secure areas by anon... # DenyAll DenyAll DenyAll # # define user based access # AllowUser farrukh AllowUser fguest DenyAll AllowUser farrukh AllowUser fgroup DenyAll # ---------------------------------------------------- # ftp.foo4.com # anon, with incoming upload # ServerAdmin ftpmaster@teamwork.co.uk ServerName "Teamwork FTP Server" TransferLog /var/spool/syslog/xfer/ftp.foo4.com MaxLoginAttempts 3 RequireValidShell no DefaultRoot /ftp/ftp.foo4.com User foo4 Group foo4 AllowOverwrite yes # # Auth files.... # AuthUserFile /var/conf/ftp//authfiles/passwd.ftp.foo4.com AuthGroupFile /var/conf/ftp//authfiles/group.ftp.foo4.com User ftp Group ftp UserAlias anonymous ftp RequireValidShell no MaxClients 20 AllowAll DenyAll AllowAll AllowAll DenyAll AllowAll DenyAll # ---------------------------------------------------- # The end.... # ---------------------------------------------------- ++++ ==== Fichier /etc/proftpd/proftpd.conf ==== * **Fichier Proftpd.conf exemple** ++++ Proftpd.conf | # Fichier de configuration de ProFTPD # Pour une liste complète des directives : http://www.proftpd.org/docs/directives/configuration_full.html # /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file. # To really apply changes, reload proftpd after modifications, if # it runs in daemon mode. It is not required in inetd/xinetd mode. # Includes DSO modules Include /etc/proftpd/modules.conf # Set off to disable IPv6 support which is annoying on IPv4 only boxes. UseIPv6 on # Virtualhosts # Emplacement du fichier contenant la liste des utilisateurs virtuels, AuthUserFile /etc/proftpd/ftpd.passwd # Emplacement du fichier contenant la liste des groupes virtuels, AuthGroupFile /etc/proftpd/ftpd.group # Active l'utilisation du fichier /etc/ftpusers qui donne la liste des utilisateur n'ayant pas d'accès au serveur ftp # ( fichier ftpusers situé dans /etc ). UseFtpUsers on # If set on you can experience a longer connection delay in many cases. IdentLookups off # Nom du serveur FTP ServerName "Debian" # Mode de fonctionnement du serveur ( inetd ou standalone ) ServerType standalone DeferWelcome off MultilineRFC2228 on # Si vous utilisez des virtualhosts, laissez cette option activée, sinon désactivez la. DefaultServer on ShowSymlinks on # Déconnection du client au bout de "x" secondes # S'il n'opère aucun transfert. TimeoutNoTransfer 600 # S'il a stoppé le transfert. TimeoutStalled 600 # S'il n'a effectué aucune activité après la saisie du login/passwd. TimeoutIdle 1200 DisplayLogin DisplayChdir ListOptions welcome.msg .message true "-l" DenyFilter \*.*/ # Permet de "chrooter" les utilisateurs FTP locaux dans leurs répertoires personnels.Ici tous les utilsateurs seront « emprisonnés » sauf l'utilisateur mickael, DefaultRoot ~ !mickael #Si cette directive est mise sur "on" , proftpd exigera que les utilisateurs qui se connectent aient des shells valides ( ex : bin/sh ou /bin/bash ). RequireValidShell on #Port d'écoute du serveur ftp. Port 21#Plage des ports passifs que ProFTPd utilisera pour répondre aux clients, # PassivePorts 49152 65534 # If your host was NATted, this option is useful in order to # allow passive tranfers to work. You have to use your public # address and opening the passive ports used on your firewall as well. # MasqueradeAddress 1.2.3.4 # This is useful for masquerading address with dynamic IPs: # refresh any configured MasqueradeAddress directives every 8 hours # DynMasqRefresh 28800 #Nombre maximal de connexions simultanées. MaxInstances 30 # Définit avec quel utilisateur/groupe ProFTPD sera lancé ( vous pouvez modifier le nom de l'utilisateur ou bien le groupe comme vous le voulez ) User userftp Group groupftp # Umask 022 is a good standard umask to prevent new files and dirs # (second parm) from being group and world writable. #Droits du propriétaire du fichier 022 donnes des droits 664 ( rw-r--r-- ) pour les fichiers et 755 ( rwxr-xr-x ) pour les dossiers. Umask 022 022 #Si la directive est mise à "on" cela permettra de remplacer les anciens fichiers par les nouveaux, cette option sera inutile si vous interdisez l'écriture. AllowOverwrite on # Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords: # PersistentPasswd off # This is required to use both PAM-based authentication and local passwords # AuthOrder mod_auth_pam.c* mod_auth_unix.c # Be warned: use of this directive impacts CPU average load! # Uncomment this if you like to see progress and transfer rate with ftpwho # in downloads. That is not needed for uploads rates. # # UseSendFile off #Emplacement du fichier log pour les transferts. TransferLog /var/log/proftpd/xferlog #Emplacement du fichier log du serveur FTP. SystemLog /var/log/proftpd/proftpd.log # Logging onto /var/log/lastlog is enabled but set to off by default #UseLastlog on # In order to keep log file dates consistent after chroot, use timezone info # from /etc/localtime. If this is not set, and proftpd is configured to # chroot (e.g. DefaultRoot or ), it will use the non-daylight # savings timezone regardless of whether DST is in effect. #SetEnv TZ :/etc/localtime QuotaEngine off Ratios off # Delay engine reduces impact of the so-called Timing Attack described in # http://www.securityfocus.com/bid/11430/discuss # It is on by default. DelayEngine on ControlsEngine off ControlsMaxClients 2 ControlsLog /var/log/proftpd/controls.log ControlsInterval 5 ControlsSocket /var/run/proftpd/proftpd.sock AdminControlsEngine off # # Alternative authentication frameworks # #Include /etc/proftpd/ldap.conf #Include /etc/proftpd/sql.conf # # This is used for FTPS connections # #Include /etc/proftpd/tls.conf # # Useful to keep VirtualHost/VirtualRoot directives separated # #Include /etc/proftpd/virtuals.conf # A basic anonymous configuration, no upload directories. #Configuration du mode anonyme.Si vous voulez autoriser ce mode, décommenter toutes les lignes, # # User ftp # Group nogroup # # We want clients to be able to login with "anonymous" as well as "ftp" # UserAlias anonymous ftp # # Cosmetic changes, all files belongs to ftp user # DirFakeUseron ftp # DirFakeGroup on ftp # # RequireValidShell off # # # Limit the maximum number of anonymous logins # MaxClients 10 # # # 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 # # # DenyAll # # # # # Uncomment this if you're brave. # # # # # Umask 022 is a good standard umask to prevent new files and dirs # # # (second parm) from being group and world writable. # # Umask 022 022 # # # # DenyAll # # # # # # AllowAll # # # # # # Partie SSL/TLS # Activation du SSL TLSEngine on # On force toutes les connections avec ssl TLSRequired on # logs TLSLog /var/log/proftpd/proftpd.tls_log # Protocole TLSProtocol SSLv23 # Pas de demande de certificat client TLSOptions NoCertRequest # Certificat et clé TLSRSACertificateFile /etc/ssl/certs/proftpd.cert.pem TLSRSACertificateKeyFile /etc/ssl/certs/proftpd.key.pem # Pas de vérification du certificat client TLSVerifyClient off # Include other custom configuration files Include /etc/proftpd/conf.d/ ++++ ++++ Modèle de fichier proftpd.conf | # Fichier de configuration de ProFTPD # Pour une liste complète des directives : http://www.proftpd.org/docs/directives/configuration_full.html # /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file. # To really apply changes, reload proftpd after modifications, if it runs in daemon mode. # It is not required in inetd/xinetd mode. # # Includes DSO modules Include /etc/proftpd/modules.conf # Set off to disable IPv6 support which is annoying on IPv4 only boxes. UseIPv6 on #Virtualhosts #Emplacement du fichier contenant la liste des utilisateurs virtuels, AuthUserFile /etc/proftpd/ftpd.passwd #Emplacement du fichier contenant la liste des groupes virtuels, AuthGroupFile /etc/proftpd/ftpd.group #Active l'utilisation du fichier /etc/ftpusers qui donne la liste des utilisateur n'ayant pas d'accès au serveur ftp ( fichier ftpusers situé dans /etc ). UseFtpUsers on # If set on you can experience a longer connection delay in many cases. IdentLookups off # Nom du serveur FTP ServerName "Debian" #Mode de fonctionnement du serveur ( inetd ou standalone ) ServerType standalone DeferWelcome off MultilineRFC2228 on #Si vous utilisez des virtualhosts, laissez cette option activée, sinon désactivez la. DefaultServer on ShowSymlinks on # Déconnection du client au bout de "x" secondes #S'il n'opère aucun transfert. TimeoutNoTransfer 600 #S'il a stoppé le transfert. TimeoutStalled 600 #S'il n'a effectué aucune activité après la saisie du login/passwd. TimeoutIdle 1200 DisplayLogin DisplayChdir ListOptions welcome.msg .message true "-l" DenyFilter \*.*/ # Permet de "chrooter" les utilisateurs FTP locaux dans leurs répertoires personnels.Ici tous les utilsateurs seront « emprisonnés » sauf l'utilisateur mickael, DefaultRoot ~ !mickael #Si cette directive est mise sur "on" , proftpd exigera que les utilisateurs qui se connectent aient des shells valides ( ex : bin/sh ou /bin/bash ). RequireValidShell on #Port d'écoute du serveur ftp. Port 21#Plage des ports passifs que ProFTPd utilisera pour répondre aux clients, # PassivePorts 49152 65534 # If your host was NATted, this option is useful in order to # allow passive tranfers to work. You have to use your public # address and opening the passive ports used on your firewall as well. # MasqueradeAddress 1.2.3.4 # This is useful for masquerading address with dynamic IPs: # refresh any configured MasqueradeAddress directives every 8 hours # DynMasqRefresh 28800 #Nombre maximal de connexions simultanées. MaxInstances 30 # Définit avec quel utilisateur/groupe ProFTPD sera lancé ( vous pouvez modifier le nom de l'utilisateur ou bien le groupe comme vous le voulez ) User userftp Group groupftp # Umask 022 is a good standard umask to prevent new files and dirs # (second parm) from being group and world writable. #Droits du propriétaire du fichier 022 donnes des droits 664 ( rw-r--r-- ) pour les fichiers et 755 ( rwxr-xr-x ) pour les dossiers. Umask 022 022 #Si la directive est mise à "on" cela permettra de remplacer les anciens fichiers par les nouveaux, cette option sera inutile si vous interdisez l'écriture. AllowOverwrite on # Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords: # PersistentPasswd off # This is required to use both PAM-based authentication and local passwords # AuthOrder mod_auth_pam.c* mod_auth_unix.c # Be warned: use of this directive impacts CPU average load! # Uncomment this if you like to see progress and transfer rate with ftpwho # in downloads. That is not needed for uploads rates. # # UseSendFile off #Emplacement du fichier log pour les transferts. TransferLog /var/log/proftpd/xferlog #Emplacement du fichier log du serveur FTP. SystemLog /var/log/proftpd/proftpd.log # Logging onto /var/log/lastlog is enabled but set to off by default #UseLastlog on # In order to keep log file dates consistent after chroot, use timezone info # from /etc/localtime. If this is not set, and proftpd is configured to # chroot (e.g. DefaultRoot or ), it will use the non-daylight # savings timezone regardless of whether DST is in effect. #SetEnv TZ :/etc/localtime QuotaEngine off Ratios off # Delay engine reduces impact of the so-called Timing Attack described in # http://www.securityfocus.com/bid/11430/discuss # It is on by default. DelayEngine on ControlsEngine off ControlsMaxClients 2 ControlsLog /var/log/proftpd/controls.log ControlsInterval 5 ControlsSocket /var/run/proftpd/proftpd.sock AdminControlsEngine off # # Alternative authentication frameworks # #Include /etc/proftpd/ldap.conf #Include /etc/proftpd/sql.conf # # This is used for FTPS connections # #Include /etc/proftpd/tls.conf # # Useful to keep VirtualHost/VirtualRoot directives separated # #Include /etc/proftpd/virtuals.conf # A basic anonymous configuration, no upload directories. #Configuration du mode anonyme.Si vous voulez autoriser ce mode, décommenter toutes les lignes, # # User ftp # Group nogroup # # We want clients to be able to login with "anonymous" as well as "ftp" # UserAlias anonymous ftp # # Cosmetic changes, all files belongs to ftp user # DirFakeUseron ftp # DirFakeGroup on ftp # # RequireValidShell off # # # Limit the maximum number of anonymous logins # MaxClients 10 # # # 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 # # # DenyAll # # # # # Uncomment this if you're brave. # # # # # Umask 022 is a good standard umask to prevent new files and dirs # # # (second parm) from being group and world writable. # # Umask 022 022 # # # # DenyAll # # # # # # AllowAll # # # # # # Partie SSL/TLS # Activation du SSL TLSEngine on # On force toutes les connections avec ssl TLSRequired on # logs TLSLog /var/log/proftpd/proftpd.tls_log # Protocole TLSProtocol SSLv23 # Pas de demande de certificat client TLSOptions NoCertRequest # Certificat et clé TLSRSACertificateFile /etc/ssl/certs/proftpd.cert.pem TLSRSACertificateKeyFile /etc/ssl/certs/proftpd.key.pem # Pas de vérification du certificat client TLSVerifyClient off # Include other custom configuration files Include /etc/proftpd/conf.d/ ++++ ++++ Autre exemple | # Nom du serveur qui s'affiche ServerName "ProFTPD Default Server" # Serveur Autonome (ne pas modifier) ServerType standalone # Activer le serveur par défaut (Si pas de "VirtualHost") DefaultServer on # Est-ce qu'on a besoin d'un shell valide pour se connecter RequireValidShell off # Activer l'authentification PAM AuthPAM off AuthPAMConfig ftp # Port d'écoute (21 par défaut) Port 21 # Permissions d'un dossier ou d'un fichier créé via FTP Umask 022 # Nombre de connexions simultanées au FTP MaxInstances 30 # Lancer le démon ftp sous cet utilisateur et groupe User ftp Group ftp # Racine du FTP ( [b]~[/b] correspond au fait que l'utilisateur est cloisonné dans son dossier personnel) DefaultRoot ~ # Généralement, les fichiers peuvent être écrasés. AllowOverwrite on # Désactiver la commande CHMOD via le FTP DenyAll # Exemple de dossier anonyme sans possibilité d'uploader User ftp Group ftp # Possibilité de se connecter avec les utilisateurs "anonymous" et "ftp". UserAlias anonymous ftp # Limiter le nombre de connexions anonymes MaxClients 10 # Désactiver la commande WRITE (d'écriture) pour les utilisateurs anonymes DenyAll ++++ ===== Utilisation ===== Sur un PC du réseau, ouvrez Filezilla et lancez une connexion :{{ logiciel:internet:ftp:proftpd:raspi:proftp-01.png?400 |}} * Hôte : l'adresse IP du serveur (ici, un Raspberry) * Identifiant : admiweb * Mot de passe : son mot de passe Interface graphique : [[logiciel:internet:ftp:proftpd:gadmin-proftpd:start]] FIXME ===== Désinstallation ===== ===== Voir aussi ===== * **(fr)** [[http://arobaseinformatique.eklablog.com/mise-en-place-d-un-serveur-ftp-avec-proftpd-a105781016]] * **(fr)** [[https://raspberrypi-tutorials.fr/comment-configurer-un-serveur-ftp-raspberry-pi-installation-du-serveur-web/]] ---- //Basé sur << [[https://raspberrypi-tutorials.fr/comment-configurer-un-serveur-ftp-raspberry-pi-installation-du-serveur-web/|Comment configurer un serveur FTP Raspberry Pi – Installation du serveur Web]] >> par raspberrypi-tutorials.fr.//