====== Installer ProFTPD ======
===== Au début =====
# apt-get install proftpd
===== BUGS =====
Ajouter: "UseSendfile off"
Parce que parfois, ca ne fonctionne pas comme on voudrait? ( "UseSendFile" dislike "mount" ? )
===== SSL =====
Liens:
*http://www.commentcamarche.net/forum/affich-1227647-ssl-tls-avec-proftpd
*http://nicolas.dandrea.free.fr/SPIP/article.php3?id_article=38
==== Key ====
# cd /etc/proftpd
# mkdir keys
# chmod 0750 keys
# chown proftpd:root keys
# su -s /bin/bash proftpd
$ cd keys
$ openssl req -new -x509 -days 3650 -nodes -out proftpd-rsa.pem -keyout proftpd-key.pem
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Creteil
Locality Name (eg, city) []:Creteil
Organization Name (eg, company) [Internet Widgits Pty Ltd]:tj-corp
Organizational Unit Name (eg, section) []:web
Common Name (eg, YOUR name) []:www.thierry-jaouen.fr
Email Address []:pem@thierry-jaouen.fr
On a alors:
-rw-r--r-- 1 proftpd nogroup 1233 déc 25 14:31 proftpd-rsa.pem
-rw-r--r-- 1 proftpd nogroup 887 déc 25 14:31 proftpd-key.pem
L'important, c'est "Common Name" qui doit correspondre à:
$ hostname -f
www.thierry-jaouen.fr
==== tls.conf ====
Dans le fichier **''/etc/proftpd/tls.conf''**, faire en sorte d'avoir:
# egrep -v "^(#|$)" tls.conf
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol SSLv23
TLSRSACertificateFile /etc/proftpd/keys/proftpd-rsa.pem
TLSRSACertificateKeyFile /etc/proftpd/keys/proftpd-key.pem
TLSOptions NoCertRequest
TLSVerifyClient off
TLSRequired off
==== proftpd.conf ====
Autoriser "tls" en ayant en faisant en sorte d'ajouter:
... ...
Include /etc/proftpd/tls.conf
... ...
PassivePorts 50000 59999
UseSendFile off
"PassivePorts" : pour simplifier les règles de firewall.
"UseSendFile off" : parce qu'il y a un bug quelque part avec le "passive mode".
===== Restreindre les droits comme j'aime =====
Le principe que j'aime: \\ Autoriser uniquement les utilisateurs que j'ai choisit a acceder a leur propre répertoire. Pour cela, je limite l'accès (presque en totalité) aux utilisateurs appartenant au groupe que j'ai nommé **ftpuser**
Donc, d'abord creer le groupe:
addgroup ftpuser
Dans le fichier de config de **proftpd.conf**, avoir une config **Global** approchant ça:
LogFormat traff "%b %u"
SystemLog /var/log/proftpd.log
DefaultRoot ~
# Afin que même ceux qui n'ont pas de Shell puisse avoir accès: (point important pour la suite)
RequireValidShell off
RequireValidShell on # trés préférable, et n'empeche pas le FTP anonyme de fonctionner
DeferWelcome off
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayFirstChdir .message
DenyFilter \*.*/
PassivePorts 50000 60000 # Plage de ports que le serveur pourra utiliser pour les connexions passives.
User nobody
Group nogroup
Umask 022 022
# ===============================
# Les groupes et les utilisateurs autorisés sur l'ensemble du serveur
# A savoir que sans 'AllowUser ftp', l'acces anonymous est impossible
Order Allow,Deny
AllowUser ftp
AllowGroup ftpuser
Deny from all
Les lignes importantes sont en rouge.
Recharger la config:
# /etc/init.d/proftpd reload
Ensuite, creer les utilisateurs autorisés comme suit:
# adduser monuser
(Remplir les informations)
Si l'on ne souhaite pas que ces utilisateurs puissent se connecter via le shell (et ssh), editer le fichier **/etc/passwd** et changer '/bin/bash' par '/bin/false' pour utilisateurs concernés.
Ajouter ces utilisateurs au groupe **ftpuser**
# adduser monuser ftpuser
Et c'est fini, les utilisateurs appartenant au groupe **ftpuser** peuvent se connecter, et uniquement ceux là.
Remarqué quand même que j'autorise l'utilisateur **ftp** malgré qu'il n'appartient pas au groupe **ftpuser**, parce qu'il le faut sinon l'accès **Anonymous** (non décrit ici) ne serait impossible.
===== Autres vues pour d'autres **users** =====
Une manière parmi d'autres sans doute: Creer un groupe **special**, par exemple, **uuusers**:
addgroup uuusers
Faire appartenir les //user// qu'on veut a ce groupe:
adduser le_user uuusers
Puis editer **/etc/proftpd.conf** pour avoir quelques choses ressemblant à ça (par exemple):
DefaultChDir /home/uuuser uuusers
DefaultRoot /home/uuuser uuusers
DefaultChDir /
DefaultRoot ~
Tous les utilisateurs appartenant au groupe **uuusers** seront envoyé dans un repertoire pré-determiné rien que pour tous ceux là. Les autres seront dans leur répertoire propre.
===== Rotate des logs =====
Lien: [[http://www.ducea.com/2006/06/06/rotating-linux-log-files/|rotating-linux-log-files]]
Dans **/etc/logrotate.d** , mettre un fichier nommé **proftpd** contenant:
/var/log/proftpd.log {
weekly
rotate 52
compress
delaycompress
missingok
notifempty
create 640 root adm
}
En se basant sur le fait que le log est là : **/var/log/proftpd.log**
Ainsi, chaque semaine, il y aura compression des logs. C'est bien.
On peut tester (sans executer) en faisant:
# logrotate -d proftpd
Et on voit...
On peut aussi executer de suite la rotation de log, en faisant:
# logrotate -f proftpd
n'oublions pas: **man logrotate** est notre ami.
===== Des droits trés limités =====
Voici comment j'ai créé un compte qui ne peut que voir le repertoire que je lui ai assigné, et qui ne peut ecrire que dans le repertoire designé. Il s'agit d'un compte nommé **recup** :
Dans **/etc/proftpd.conf**
... snip ...
DefaultChDir / recup # cd a la racine
DefaultRoot /home/recup/ftproot recup # on chroot dans /home/recup/ftproot (qui contient un répertoire RecupBox)
... snip ...
# on rejette toutes ecritures partout
DenyAll
# on peut quand même ecrire dans le répertoire 'RecupBox'
AllowAll
... snip ...
Au final, l'utilisateur **recup** a accès en lecture uniquement dans son **~/ftproot** et ne peut ecrire/lire que dans **~/ftproot/RecupBox**.
===== Droits limités, sauf pour un... =====
C'est la même chose que si ci-dessus, sauf que:
* l'utilisateur **autorecup** (qui a pour groupe: **recup**) a droit de ecrire/lire/effacer les fichiers.
* l'utilisateur **recup** peut ecrire mais sans ecraser un fichier existant, ni le lire.
Dans **/etc/proftpd.conf**
AllowOverwrite off # on interdit d'ecraser un fichier
# Umask 002 002
Order Allow,Deny
AllowUser autorecup # **autorecup** peut ecrire et plus, mais pas les autres
Deny from all
AllowAll # tous le monde retrouve quelques droits d'ecriture
===== RequireValidShell et /etc/shells =====
Si **RequireValidShell on**, alors il faut s'assurer que le fichier **/etc/shells** contient ceci:
... snip ...
/bin/false
Cela permet a **proftpd** (entre autres) de voir **/bin/false** comme un shell valide, (ce qui techniquement est vrai): ce qui autorise un acces FTP sans accès au shell (puisque que **/bin/false**).
====== tweak ======
===== Proftpd lent =====
Lien: http://www.grafactory.net/blog/post/2005/11/18/104-proftp-trop-lent-a-se-connecter
Si on a une impression de lenteur, notamment simplement a la connexion, alors il faut ajouter dans **''proftpd.conf''** :
IdentLookups off
UseReverseDNS off
Et re-demarrer.
===== mod_rewrite =====
Lien: http://www.castaglia.org/proftpd/modules/mod_rewrite.html
Une webcam qui ecrit dans un repertoire, dans un format non souhaité:
/incoming/AAAAMMJJ/nom_du_fichier_horodaté.jpg
==== New method ====
On va changer cela avec "mod_rewrite", exemple (dans ''proftpd.conf'') :
RewriteEngine on
#RewriteLog /var/log/proftpd/rewrite.log
RewriteLog none
# transformer la creation d'un repertoire "de chiffre" en "capture"
RewriteCondition %m MKD
RewriteCondition %f "^\/incoming\/201[0123456789]+$"
RewriteRule ^(\/incoming\/)([0123456789]+)$ $1capture
# transformer le changement de chemin d'un repertoire "de chiffre" en "capture"
RewriteCondition %m CWD
RewriteCondition %f "^\/incoming\/201[0123456789]+$"
RewriteRule ^(\/incoming\/)([0123456789]+)$ $1capture
# transformer le nom du fichier en "cap.jpg"
RewriteCondition %m STOR
RewriteCondition %f "\/incoming\/201[0123456789]+\/.*\.jpg$"
RewriteRule ^(\/incoming\/)(.*)$ $1capture/cap.jpg
etc...
Suite a une mise à jour du firmware de la cam, ca ne fonctionnait plus...
J'ai corrigé les règles, mais elles me semblent plus compliqués maintenant... mais ca marche.
==== Old fashion ====
| :!: les règles sont pas bien rédigées... |
On va changer cela avec "mod_rewrite", exemple (dans ''proftpd.conf'') :
RewriteEngine on
#RewriteLog /var/log/proftpd/rewrite.log
RewriteLog none
# -----------------------------
# pour le compte "webcam"
# transformer la creation d'un repertoire "de chiffre" en "capture"
RewriteCondition %U webcam
RewriteCondition %m MKD
RewriteCondition %f "[0123456789]+$"
RewriteRule ^(.*) capture
# transformer le changement de chemin d'un repertoire "de chiffre" en "capture"
RewriteCondition %U webcam
RewriteCondition %m CWD
RewriteCondition %f "[0123456789]+$"
RewriteRule ^(.*) capture
# transformer le nom du fichier en "cap.jpg"
RewriteCondition %U webcam
RewriteCondition %m STOR
RewriteCondition %f ".*\.jpg$"
RewriteRule ^(.*) cap.jpg
# -----------------------------
Au final, le fichier "image" est créé comme cela:
/capture/cap.jpg
(Y a juste un petit relicat de "cap.jpg" en racine... po grave)