mirroir readonly du Gitit wiki.evolix.org (attention, ne rien commiter/merger sur ce dépôt) https://wiki.evolix.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

471 lines
13 KiB

4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 months ago
4 months ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
3 years ago
4 years ago
2 years ago
2 years ago
  1. ---
  2. categories: web
  3. title: Howto ProFTPD
  4. ...
  5. * Documentation : <http://www.proftpd.org/docs/>
  6. [ProFTPD](http://www.proftpd.org/) est un serveur [FTP](https://fr.wikipedia.org/wiki/File_Transfer_Protocol) libre. Il est particulièrement configurable grâce à des modules. Il permet notamment de facilement restreindre un compte dans un répertoire donné (_chroot_) ou d'utiliser les protocoles FTPS (FTP over SSL/TLS) et SFTP/SCP (issus de SSH).
  7. ## Installation
  8. ~~~
  9. # apt install proftpd
  10. # proftpd -v
  11. ProFTPD Version 1.3.5b
  12. # systemctl status proftpd
  13. ● proftpd.service - LSB: Starts ProFTPD daemon
  14. Loaded: loaded (/etc/init.d/proftpd; generated; vendor preset: enabled)
  15. Docs: man:systemd-sysv-generator(8)
  16. Process: 28249 ExecStop=/etc/init.d/proftpd stop (code=exited, status=0/SUCCESS)
  17. Process: 22916 ExecReload=/etc/init.d/proftpd reload (code=exited, status=0/SUCCESS)
  18. Process: 28259 ExecStart=/etc/init.d/proftpd start (code=exited, status=0/SUCCESS)
  19. Tasks: 1 (limit: 4915)
  20. CGroup: /system.slice/proftpd.service
  21. └─28267 proftpd: (accepting connections)
  22. ~~~
  23. ## Configuration
  24. Le fichier de configuration principal est `/etc/proftpd/proftpd.conf`, voici les directives que nous conseillons de changer en général :
  25. ~~~
  26. ServerName "Foo FTP Server"
  27. PassivePorts 60000 61000
  28. MaxInstances 50
  29. MaxClients 40
  30. MaxClientsPerHost 20
  31. Umask 137 027
  32. UseReverseDNS off
  33. IdentLookups off
  34. TimesGMT off
  35. DefaultRoot ~
  36. RequireValidShell off
  37. UseFtpUsers off
  38. ServerIdent on "FTP Server Ready"
  39. AccessGrantMsg "Hey, bienvenue %u sur le serveur FTP example.com !"
  40. # Allow RESUME (REST command)
  41. AllowStoreRestart on
  42. <Limit LOGIN>
  43. AllowUser foo
  44. AllowGroup ftpusers
  45. DenyAll
  46. </Limit>
  47. ~~~
  48. Avec cette configuration proposée, un utilisateur doit être dans le groupe `ftpusers` (à créer) pour pouvoir utiliser le FTP.
  49. Si l'IPv6 n'est pas fonctionnel sur votre serveur :
  50. ~~~
  51. UseIPv6 off
  52. ~~~
  53. ### Configuration par VirtualHost
  54. Dans un fichier de configuration de ProFTPD, on peut isoler certaine configuration par VirtualHost, la balise `<VirtualHost>` s'utilise de la même façon qu'avec [Apache](HowtoApache). Voici un exemple d'une configuration classique, mais avec un port d'écoute différent :
  55. ~~~
  56. <VirtualHost 192.168.1.8>
  57. ServerName "FTP Server"
  58. ServerIdent on "FTP Server Ready"
  59. AccessGrantMsg "Hey, bienvenue %u sur le serveur FTP !"
  60. SFTPEngine on
  61. Port 8887
  62. DefaultRoot ~
  63. PassivePorts 60000 61000
  64. UseReverseDNS off
  65. IdentLookups off
  66. TimesGMT off
  67. # Local permissions
  68. DefaultRoot ~
  69. Umask 137 027
  70. RequireValidShell off
  71. UseFtpUsers off
  72. # Allow RESUME (REST command)
  73. AllowStoreRestart on
  74. </VirtualHost>
  75. ~~~
  76. Dans la balise VirtualHost on peut mettre soit une adresse IP, soit un nom de domaine.
  77. Cela permet notamment de faire écouter ProFTPD sur 2 ports différents en même temps, dans ce cas-là, la configuration par défaut écoute sur le port 21, et la configuration dans le VirtualHost écoute sur le port 8887.
  78. On peut aussi utiliser les VirtualHost pour faire du SFTP et du FTP classique, sur deux ports différents.
  79. Il y a plusieurs types d'autres options dans les virtalhost de ProFTPD, comme notamment les alias, on peut voir tout ce qu'on peut faire dans la doc [ProFTPD Virtual Servers](http://www.proftpd.org/docs/howto/Vhost.html)
  80. Si l'on veux faire écouter deux VirtualHost sur deux IPs différentes (publique ou LAN) mais sur le même port, il faut utilisé ces options avant la directive `<VirtualHost>` :
  81. ~~~
  82. Port 0
  83. SocketBindTight on
  84. ~~~
  85. Cela va forcer à utiliser l'ip configuré dans la directive `<VirtualHost>` avec le port indiquer dans celui-ci, exemple avec une configuration SFTP :
  86. ~~~
  87. Port 0
  88. SocketBindTight on
  89. <VirtualHost 192.168.199.27>
  90. <IfModule mod_sftp.c>
  91. SFTPEngine on
  92. Port 22
  93. DefaultRoot ~
  94. RequireValidShell off
  95. AuthUserFile /etc/proftpd/vpasswd
  96. </IfModule>
  97. </VirtualHost>
  98. ~~~
  99. ## Comptes virtuels
  100. ProFTPD peut utiliser des comptes Unix ou des comptes virtuels définis dans SQL/LDAP ou simplement un fichier.
  101. On détaille ici l'utilisation de comptes avec un simple fichier `/etc/proftpd/vpasswd`.
  102. Il faut ajouter dans _/etc/proftpd/proftpd.conf_ :
  103. ~~~
  104. AuthOrder mod_auth_file.c
  105. AuthUserFile /etc/proftpd/vpasswd
  106. ~~~
  107. On peut alors ajouter un compte FTP avec la commande suivante :
  108. ~~~
  109. # ftpasswd --file=/etc/proftpd/vpasswd --name=foo --home=/home/example/foo --shell=/bin/false --uid=1664 --gid=1664 --passwd
  110. ~~~
  111. Si l'on veut que le compte FTP soit une sorte de sous-compte d'un compte existant restreint dans un répertoire, il faut préciser les UID et GID du compte UNIX propriétaire du répertoire dans lequel est le $HOME du compte virtuel créé.
  112. ### Modifier mot de passe
  113. Pour modifier le mot de passe d'un compte existant :
  114. ~~~
  115. # ftpasswd --file /etc/proftpd/vpasswd --name=FTP_user --change-password --passwd
  116. ~~~
  117. ### Directive Limit
  118. Voir <http://www.proftpd.org/docs/howto/Limit.html>
  119. La directive `Limit` permet d'autoriser ou empêcher l'exécution de commande FTP bas niveau.
  120. C'est puissant et dangereux, car on pourrait croire que l'on empêche la lecture d'un fichier, mais il faut avoir en tête qu'il existe plusieurs commandes FTP pour faire cela. Il existe des groupes de commandes : LOGIN, DIRS, READ, WRITE et enfin ALL (tout sauf LOGIN).
  121. Voici un exemple d'utilisation pour empêcher toutes opérations sauf dans un répertoire :
  122. ~~~
  123. <Directory *>
  124. <Limit ALL>
  125. DenyAll
  126. </Limit>
  127. </Directory>
  128. <Directory foo>
  129. <Limit ALL>
  130. AllowAll
  131. </Limit>
  132. </Directory>
  133. ~~~
  134. ou encore autoriser **uniquement** le dépôt de fichiers dans un répertoire :
  135. ~~~
  136. <Directory foo>
  137. <Limit ALL>
  138. DenyAll
  139. </Limit>
  140. <Limit CDUP CWD XCWD XCUP PWD STOR STOU>
  141. AllowAll
  142. </Limit>
  143. </Directory>
  144. ~~~
  145. Pour avoir un utilisateur Read-Only chrooter dans un répertoire :
  146. ~~~
  147. <Directory ~user>
  148. <Limit CWD PWD DIRS READ>
  149. AllowUser user
  150. </Limit>
  151. <Limit ALL>
  152. DenyUser user
  153. </Limit>
  154. </Directory>
  155. ~~~
  156. Blacklisté les connexions depuis une ip ou hôte, mais en autorisant seulement certains comptes :
  157. ~~~
  158. <Limit LOGIN>
  159. Deny from 1.2.3.4
  160. AllowUser foo
  161. AllowUser bar
  162. </Limit>
  163. ~~~
  164. Cette configuration refuse toutes les connexions au serveur depuis l'ip 1.2.3.4, mais accepte les connexions aux utilisateur foo et bar, mais refuse pour tous les autres utilisateurs.
  165. Attention, si il y a plusieurs blocs / directives LOGIN dans la configuration / virtualhost, il faut autorisé les utilisateurs dans toutes ces directives, sinon l'accès sera refusée tout le temps.
  166. ## Divers
  167. Pour limiter les uploads de fichiers de taille supérieure à 50 Mo :
  168. ~~~
  169. MaxStoreFileSize 50 Mb
  170. ~~~
  171. Forcer les droits 640 en fichier et 750 en dossier avec l'umask:
  172. ~~~
  173. <Directory /home/utilisateur/dossier>
  174. Umask 0137 0027
  175. <Limit SITE_CHMOD>
  176. DenyAll
  177. </Limit>
  178. </Directory>
  179. ~~~
  180. ## Quota
  181. Pour activer les quotas spécifiquement à ProFTPD avec gestion via fichiers :
  182. ~~~
  183. # cd /etc/proftpd
  184. # ftpquota --create-table --type=limit
  185. # ftpquota --create-table --type=tally
  186. ~~~
  187. Puis ajouter dans la configuration :
  188. ~~~
  189. <IfModule mod_quotatab.c>
  190. QuotaEngine on
  191. QuotaLimitTable file:/etc/proftpd/ftpquota.limittab
  192. QuotaTallyTable file:/etc/proftpd/ftpquota.tallytab
  193. </IfModule>
  194. ~~~
  195. On peut ensuite positionner des quotas, par exemple pour limiter les données uploadées à 200 Go :
  196. ~~~
  197. # ftpquota --add-record --type=limit --bytes-upload=200 --units=Gb --name=foo --quota-type=user
  198. ~~~
  199. Imaginons que vous positionnez le quota alors que l'utilisateur a déjà 170 Go, vous devez mettre à jour son compteur :
  200. ~~~
  201. # ftpquota --update-record --type=tally --bytes-upload=170 --units=Gb --name=foo --quota-type=user
  202. ~~~
  203. On peut lister les données de quota sur le serveur ainsi :
  204. ~~~
  205. # ftpquota --show-records --type=tally
  206. -------------------------------------------
  207. Name: foo
  208. Quota Type: User
  209. Uploaded bytes: 182536110080.00
  210. Downloaded bytes: 0.00
  211. Transferred bytes: 0.00
  212. Uploaded files: 0
  213. Downloaded files: 0
  214. Transferred files: 0
  215. # ftpquota --show-records --type=limit
  216. -------------------------------------------
  217. Name: foo
  218. Quota Type: User
  219. Per Session: False
  220. Limit Type: Hard
  221. Uploaded bytes: 214748364800.00
  222. Downloaded bytes: unlimited
  223. Transferred bytes: unlimited
  224. Uploaded files: unlimited
  225. Downloaded files: unlimited
  226. Transferred files: unlimited
  227. ~~~
  228. Via FTP, vous pourrez voir les données de quota ainsi :
  229. ~~~
  230. ftp> quote SITE QUOTA
  231. 200-Quota pour la session actuelle [courant / limite]:
  232. 200-Nom: foo
  233. 200-Type quota: Utilisateur
  234. 200-Par session : Faux
  235. 200-Type de limite : matérielle
  236. 200- bytes: 182536110080.00/193273528320.00 envoyés
  237. 200- bytes: unlimited reçus
  238. 200- bytes: unlimited téléchargés
  239. 200- files: unlimited envoyés
  240. 200- files: unlimited reçus
  241. 200- files: unlimited téléchargés
  242. 200 Veuillez contacter ftpmaster@example.com si ces données sont inexactes
  243. ~~~
  244. Enfin, on peut réinitialiser un compteur (tous les jours par exemple) :
  245. ~~~
  246. # ftpquota --update-record --type=tally --name=foo --quota-type=user
  247. ~~~
  248. Ou même effacer toutes les données de quota d'un utilisateur :
  249. ~~~
  250. # ftpquota --delete-record --type=limit --name=foo --quota-type=user
  251. # ftpquota --delete-record --type=tally --name=foo --quota-type=user
  252. ~~~
  253. ## FTPS
  254. On peut activer SSL/TLS en editant le fichier suivant pour y activer ces directives :
  255. ~~~
  256. # vim /etc/proftpd/tls.conf
  257. ~~~
  258. ~~~
  259. TLSEngine on
  260. TLSLog /var/log/proftpd/tls.log
  261. TLSProtocol SSLv23
  262. TLSRSACertificateFile /etc/proftpd/ssl/proftpd.crt
  263. TLSCACertificateFile /etc/proftpd/ssl/proftpd.ca.crt
  264. TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key
  265. ~~~
  266. Il y aura besoin de renseigner les bon certificats et clé privé et il faudra vérifier que le fichier est bien chargé par la configuration principale. Sinon ajouter cette directive :
  267. ~~~
  268. # vim /etc/proftpd/proftpd.conf
  269. ~~~
  270. ~~~
  271. Include /etc/proftpd/tls.conf
  272. ~~~
  273. Recharger le service et vérifiez que ça fonctionne bien :
  274. ~~~
  275. # systemctl restart proftpd.service
  276. ~~~
  277. ~~~
  278. $ lftp domaine.com
  279. lftp domaine.com:~> set ftp:ssl-force true
  280. lftp domaine.com:~> login utilisateur
  281. Mot de passe :
  282. lftp utilisateur@domaine.com:~> ls
  283. ~~~
  284. Si l'on peut lire le contenu du dossier, alors c'est fonctionnel.
  285. ## SFTP
  286. On peut configurer FTP over SSH ainsi :
  287. ~~~
  288. LoadModule mod_tls.c
  289. <IfModule mod_sftp.c>
  290. SFTPEngine on
  291. Port 2222
  292. DefaultRoot ~
  293. SFTPLog /var/log/proftpd/sftp.log
  294. SFTPAuthMethods password publickey
  295. SFTPHostKey /etc/ssh/ssh_host_dsa_key
  296. SFTPHostKey /etc/ssh/ssh_host_ecdsa_key
  297. SFTPHostKey /etc/ssh/ssh_host_rsa_key
  298. SFTPAuthorizedUserKeys file:/etc/sftp/authorized_keys/%u
  299. SFTPCompression delayed
  300. </IfModule>
  301. ~~~
  302. Si on veut faire du SFTP over SSH avec les comptes virtuels, on crée une configuration comme celle-ci dans */etc/proftpd/conf.d/sftp.conf* :
  303. ~~~
  304. LoadModule mod_tls.c
  305. <IfModule mod_sftp.c>
  306. SFTPEngine on
  307. Port 2222
  308. DefaultRoot ~
  309. SFTPLog /var/log/proftpd/sftp.log
  310. SFTPAuthMethods password publickey
  311. # ProFTPD doesn't support ed25519 yet
  312. #SFTPHostKey /etc/ssh/ssh_host_ed25519_key
  313. SFTPHostKey /etc/ssh/ssh_host_ecdsa_key
  314. SFTPHostKey /etc/ssh/ssh_host_rsa_key
  315. SFTPAuthorizedUserKeys file:/etc/proftpd/sftp.passwd.keys/%u
  316. AuthOrder mod_auth_file.c
  317. AuthUserFile /etc/proftpd/vpasswd
  318. RequireValidShell off
  319. </IfModule>
  320. ~~~
  321. Note: Il faudra sans doute mettre en place un VirtualHost car proftpd écoute sur un port en plus.
  322. On peut soit se connecter avec le mot de passe du compte virtuel, soit ajouter une clé ssh au format de la RFC 4716 dans /etc/proftpd/sftp.passwd.keys/ en faisant ainsi :
  323. ~~~
  324. # ssh-keygen -e -f ~/.ssh/id_rsa.pub
  325. ~~~
  326. Ou créé le compte sftp avec la commande classique :
  327. ~~~
  328. # ftpasswd --file=/etc/proftpd/vpasswd --name=foo --home=/home/example/foo --shell=/bin/false --uid=1664 --gid=1664 --passwd
  329. ~~~
  330. Le fichier /etc/proftpd/vpasswd doit avoir les droits en 600, sinon Proftpd refuse de se lancer.
  331. Il faut vérifier que le dossier racine possède les bons droits (775), sinon il y a une erreur d'authentification dans les logs proftpd.
  332. ## Logs
  333. [fichier xferlog](http://www.castaglia.org/proftpd/doc/xferlog.html)
  334. ## Troubleshooting
  335. ### Problème d'envoi de fichier, avec erreur "open for write: permission denied"
  336. L'erreur est provoqué lorsque l'on veux écraser un fichier existant, il faut rajouter la directive `AllowOverwrite on` dans le VirtualHost de la configuration, par exemple en sftp.
  337. On la positionne dans une balise `<Directory>` comme ceci :
  338. ~~~
  339. <Directory /home/*>
  340. AllowOverwrite on
  341. </Directory>
  342. ~~~