====== 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)