Outils pour utilisateurs

Outils du site


serveur_proftpd

Ceci est une ancienne révision du document !


Installer ProFTPD

Au début

 # apt-get install proftpd

SSL

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

 <Global>

 DefaultRoot ~

 <del># Afin que même ceux qui n'ont pas de Shell puisse avoir accès: (point important pour la suite)</del>
 <del>RequireValidShell off</del>
 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
 <Limit LOGIN>
 Order Allow,Deny
 AllowUser ftp

 AllowGroup ftpuser
 Deny from all
 </Limit>

 </Global>

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: 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

 <Global>
 ... 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
 <Directory /home/recup/ftproot/*>
    <Limit WRITE STOR RNFR DELE>

        DenyAll
    </Limit>
 </Directory>

 # on peut quand même ecrire dans le répertoire 'RecupBox'
 <Directory /home/recup/ftproot/RecupBox/*>

    <Limit WRITE STOR RNFR DELE>
        AllowAll
    </Limit>
 </Directory>
 ... snip ...
 </Global>

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

 <Directory /home/recup/ftproot>
    AllowOverwrite off                  # on interdit d'ecraser un fichier
 #    Umask 002  002
    <Limit WRITE STOR RNFR RETR DELE>
        Order Allow,Deny
        AllowUser autorecup             # **autorecup** peut ecrire et plus, mais pas les autres
        Deny from all
    </Limit>

 </Directory>

 <Directory /home/recup/ftproot/RecupBox/*>
    <Limit WRITE STOR RNFR>
        AllowAll                        # tous le monde retrouve quelques droits d'ecriture
    </Limit>

 </Directory>

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

<IfModule mod_rewrite.c>
  RewriteEngine on
  #RewriteLog /var/log/proftpd/rewrite.log
  RewriteLog none
</IfModule>

<Anonymous ~webcam>
  # 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...
</Anonymous>

Suite a une mise à jour du firmware de la cam, ca ne fonctionnait plus…

J'ai corrigé les règles, mais elle me semble compliqué… mais ca marche.

Old fashion

On va changer cela avec “mod_rewrite”, exemple (dans proftpd.conf) :

<IfModule mod_rewrite.c>
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

# -----------------------------
</IfModule>

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)

serveur_proftpd.1262815097.txt.gz · Dernière modification : 2010/01/06 21:58 de thierry