Accès FTP sur un répertoire (Debian 3.0) sans accès telnet


#1

Bonjour,
Je suis un néophyte en linux, mais je tente de progresser.

Je souhaite donner à un tilisateur l’accès à un répertoire de ma machine (et les sous-répertoires correspondants), mais je ne souhaite pas qu’il ait les autorisations pour faire autre chose que du FTP (-> donc pas de telnet ou SSH)

Est-ce possible?
Mon serveur est en Debian 3.0 avec ProFTPD installé


J’allais faire

adduser NOUVEL_UTILISATEUR

passwd NOUVEL_UTILISATEUR

et ensuite m’occuper du répertroire en faisant

chown -R NOUVEL_UTILISATEUR.NOUVEL_UTILISATEUR repertoire

Ça fait ce que je veux, mais cet user aura la possibilité d’un accès telnet

Y a-t-il une méthode simple qu’un novice comme moi pourrait appliquer?

Merci pour votre aide!


#2

déjà, enlèves telnet et installe ssh, si tu peux.
ensuite, dans la config de ssh ou de telnet, tu dois avoir une directive “allowuser” ou qqchose comme ca, qui peut te permettre de sélectionner les users qui ont le droit de se connecter au service.
Finalement, tu as peut etre dans proftpd la possibilité de spécifier des utilisateurs ftp qui n’existent pas ailleurs sur ta machine: pas de adduser, ca crée l’utilisateur au niveau du systeme, mais tu as peut etre un fichier ftpusers ou qqchose comme ca.


#3

[quote]Est-ce possible?
Mon serveur est en Debian 3.0 avec ProFTPD installé[/quote]

Tu peux utiliser le concept de user virtuel, le user n’est pas déclaré au niveau de l’OS mais dans la config de proftpd.

Il faut modifier ton fichier proftpd.conf.

Exemple:

root@dalat # pwd
/opt/sfw/etc
root@dalat # cat ftpd.passwd
ids::1000:1000::/netbackup/ftp-data/users/ids:/bin/false
root@dalat # cat proftpd.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 on Netbackup Server dalat "
ServerType standalone
DefaultServer on
ServerIdent On "Bienvenue sur dalat FTP server "
DenyFilter *.*/
DeferWelcome off

AuthUserFile /opt/sfw/etc/ftpd.passwd
#AuthGroupFile /opt/sfw/etc/ftpd.group

TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200

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 ftp
Group ftp

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

<Anonymous /netbackup/ftp-data/users/ids>
User ids
#Group nobody
#UserAlias bej ids
AnonRequirePassword on
DirFakeUser on applicuser
DirFakeGroup on applicgrp
DirFakeMode 0777 #0644
<Directory /*>
AllowOverwrite on

AllowAll



root@dalat #

ATTENTION:

  1. le chemin des fichiers est pour une install faite sur Solaris (adapter pour Debian…)
  2. Cette installation n’est pas forcément sécurisée dans les règles de l’art (ftp entre 3 machines dans un réseau séparé, donc j’avais pas besoin de me casser la tête … :slightly_smiling: )

#4

Excuse moi Jabba si je te demande plus de précisions concernant ta réponse:

CE que tu dis, c’est que dans mon proFTPD.conf, je dois ajouter la ligne (par exemple)

AuthUserFile /etc/ftpd.passwd

en ayant au préalable créé un ficher /etc/ftpd.passwd pour gérer mes users FTP,. C’est bien cela?

Je n’ai pas de fichier ftpd.passwd sur mon serveur. Comment cela se créée-t-il?


#5

pour créer un fichier texte ? tu ouvre un editeur de texte, tu tapes ce que tu as à taper, puis tu l’enregistre sous le nom que tu veux…
Mais à mon avis, si tu ne l’as pas trouvé la ou tu le cherche, c’est qu’il est ailleurs, parceque ca m’étonnerais que proftpd soit installé sans une config minimum.
D’autant plus aprés recherche sur packages.debian.org (je m’apercois que je ne sais pas lister les fichiers d’un paquet), il semblerait que le fichier de config soit bien dans /etc/proftpd.conf:
packages.debian.org/cgi-bin/sear … &arch=i386

par ailleurs, il y a bien un fichier ftpusers, qui à priori doit contenir la liste des users réels qui ont un droit d’accés.


#6

Bonjour MattOTop
J’ai bien mon fichier proFTPD.conf (voir le détail ci-dessous)
Mais par contre, il n’y a pas de fichier ftpd.password

Bien sûr, je sais utiliser emacs pour créer un tel fichier, mais j’aimerai connaître la syntaxe de ce que je dois mettre dedans.
Jabba me dit de mettre une ligne:
ids::1000:1000::/netbackup/ftp-data/users/ids:/bin/false

C’est ça que je ne comprends pas bien
Si je veux que NOUVEL_UTILISATEUR ait le mot de passe PASSWORD pour accéder uniquement au répertoire /var/www/domaine.com/repertoire
Ça va se traduire par quoi dans mon fichier /etc/ftpd.passwd ?

Par ailleurs, j’ai un fichier
/etc/ftpusers dont voici le contenu:

====== début contenu de mon fichier ftpusers ====

/etc/ftpusers: list of users disallowed FTP access. See ftpusers(5).

root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
nobody
====== fin contenu de mon fichier ftpusers ====

Est-ce que je dois y ajouter mon NOUVEL_UTILISATEUR ?

Merci pour votre patience :slightly_smiling:

======== début de mon fichier proFTPD.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 "Debian"
ServerType standalone
DeferWelcome off

ShowSymlinks on
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
AllowOverwrite on

TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200

DisplayLogin welcome.msg
DisplayFirstChdir .message
LsDefaultOptions “-l”

Port 21 is the standard FTP port.

Port 21

Umask 022 is a good standard umask to prevent new files and dirs

(second parm) from being group and world writable.

Umask 022 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 that the server normally runs at.

User nobody
Group nogroup

Normally, we want files to be overwriteable.

<Directory /*>
AllowOverwrite on

A basic anonymous configuration, no upload directories.

DefaultRoot ~

<Anonymous ~ftp>

User ftp

Group nogroup

# We want clients to be able to login with “anonymous” as well as “ftp”

UserAlias anonymous 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

DisplayFirstChdir .message

# Limit WRITE everywhere in the anonymous chroot

<Directory *>

DenyAll

# Uncomment this if you’re brave.

#

#

# DenyAll

#

#

# AllowAll

#

#

======== fin de mon fichier proFTPD.conf ================


#7

Voilà, je viens de retrouver … Ca faisait bien longtemps que j’avais plus touché à proftpd.
Installé depuis 1 année et ensuite ca ronronne tout seul dans son coin :slightly_smiling:

Va sur le site:
http://www.castaglia.org/proftpd/#ContribTools

Tu trouveras une bonne collection de scripts tout prêts pour gérer ton ftp.
C’est dans la section “ContribTools” que j’avais trouvé un script Perl pour créer automatiquement des comptes ftp avec génération (automatique ou non) du password.

Le script s’appelle ftpasswd.pl

Ca vaudrais vraiment la peine de lire la doc pour bien comprendre comment ca marche.
De plus, le site proftpd.org est bien fait et plutôt didactique, alors profite en …


#8

bon, regardes bien le fichier de conf de Jabba. Il y a une ligne
AuthUserFile /opt/sfw/etc/ftpd.passwd
qui précise ou se trouve le fichier pour lui (il existe manifestement aussi la possibilité de configurer les groupes). à toi de voir ou tu mets ce fichier de password. Pour ce qui est du format, je ne peux que te conseiller de faire un ‘man proftpd’, pour voir si c’est décrit, et éventuellement dans la section “voir aussi/see also” s’il n’y a pas une page de manuel spécifique à la config de ce fichier de password.
si ca te parait un peu difficile de configurer tout ca “à la main”, je te signale qu’il y a un module webmin d’administration de proftpd.
le fichier ftpusers, je me suis trompé: c’est la liste des users du système qui n’ont pas accés ftp.


#9

Merci pour votre aide à tous les deux.
J’ai bien avancé mais contre toute attente, ça ne fonctionne pas, et je ne comprends pas pouquoi!

  1. J’ai créé un fichier /etc/ftpasswd
    reprenant le script perl trouvé ici: castaglia.org/proftpd/contrib/ftpasswd

  2. en suivant les indications concernant ce script trouvées ici ( castaglia.org/proftpd/contrib/ftpasswd.html )

au terminal j’ai lancé la ligne

ftpasswd --USERPASSWORD --name=USER --uid=1001 --home=/var/www/USERDIR --shell=/bin/false

Là, ça a créé comme prévu un fichier /etc/ftpd.passwd contenant la ligne
USER:QBnvron7hac8w:1001:1001::/var/www/USERDIR:/bin/false

dans mon /etc/proftpd.conf, j’ai ajouté la ligne
AuthUserFile /etc/ftpd.passwd

Et 4) Après reboot de la machine, non seulement je ne suis pas parvenu à lancer un FTP pour le nouvel utilisateur avec son login-passwd, mais pire, il m’était devenu impossible de lancer du FTP avec une quelconque identité qui fonctionnait auparavant (login incorrect).

J’ai retiré la ligne
AuthUserFile /etc/ftpd.passwd
du fichier /etc/proftpd.conf et tout est alors rentré dans l’ordre… sauf que mon USER et son USERPASSWORD ne sont toujours pas reconnus (login incorrect)

J’ai du oublier quelque chose?


#10

Tu as renseigné inetd.conf que ton serveur ftp à changé ?

Chez moi (euh, enfin au boulot …)
root@dalat # grep ftp /etc/inetd.conf

ftp telnet shell login exec tftp finger printer

TFTPD - tftp server (primarily used for booting)

#tftp dgram udp6 wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot
#ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -a
ftp stream tcp6 nowait root /opt/sfw/sbin/proftpd proftpd
root@dalat #

Ca veut dire que j’ai désactivé (voir les lignes mises en commentaire)
le ftp standard et je l’ai remplacé par

ftp stream tcp6 nowait root /opt/sfw/sbin/proftpd proftpd

Ensuite, tu tapes kill -HUP inetd
pour prendre en compte ton changement.
(Attention, sous linux, inetd est souvent remplacé par xinetd !!!)
/etc/xinetd.conf
ET
/etc/inetd.d
sauf erreur…


#11

Merci pour ta réponse Jabba, mais aucune ligne concernant le serveur ftp ne figure dans mon fichier inetd.conf

Pourtant, proftpd tournait déjà sur mon serveur avant que je ne cherche à ajouter un nouvel utilisateur FTP

Je ne comprends toujours pas pourquoi ça ne fonctionne pas.

Tant pis

Mais merci à tous les 2 d’avoir pris le temps de m’aider


#12

Alors dans ce cas là, tu utilises peut-être xinetd à la place de inetd…
regardes dans /etc/xinetd.conf


#13

Non, j’ai bien un /etc/inetd.conf mais pas de /etc/xinetd.conf

Bon, tant pis, ce n’est pas grave.

J’ai fait au plus simple (et qui fonctionne surtout):

adduser USERNAME

ensuite, dans /etc/passwd
j’ai modifié la ligne contenant le USERNAME avec comme shell “/bin/true”

J’ai aussi déclaré le shell /bin/true comme shell valide dans /etc/shells

Comme dans Proftpd.conf la ligne

DefaultRoot est activé, ça limite USERNAME à son répertoire racine (celui que j’ai déclaré dans /etc/passwd

Que pensez-vous de cette méthode?

Quelle est la différence entre les shells
/bin/true
/bin/bash
/bin/false
???


#14
Alors probablement que ton ftp est démarré dès le boot de la machine et pas à la demande par inetd.

[code]J'ai fait au plus simple (et qui fonctionne surtout):

# adduser USERNAME

ensuite, dans /etc/passwd
j'ai modifié la ligne contenant le USERNAME avec comme shell "/bin/true"

J'ai aussi déclaré le shell /bin/true comme shell valide dans /etc/shells 
[/code]
Rien à dire pour le adduser, c'est correct si tu désactives son shell de login.
Par contre, /bin/true et /bin/false  ne sont pas les noms de shells. 
Extrait des man pages de true et false:

[code]
true ne fait rien d'autre que renvoyer un code de retour valant 0, signifiant ``réussite''.
 false ne fait rien, mais renvoie un code de retour valant 1, signifiant ``échec''.
[/code]

C'est la raison pour laquelle on met /bin/false à la place du shell dans les comptes utilisateurs qui ne doivent pas se logguer sur la machine. Avec ça impossible de se logguer.
Par contre, si tu mets /bin/true ça doit avoir le même effet ... ? 
Mais pas très juste, je ne sais pas j'y avais jamais pensé :slightly_smiling:
Peut-être un trou de sécurité potentiel ? (code de retour 0) 
Ca serait intéressant de savoir. Quelqu'un a une idée sur le sujet ?

Du côté de proftpd, les users virtuels t'évitent de devoir déclarer tes users au niveau OS. Mais les 2 méthodes fonctionnent sans problème.

[quote]DefaultRoot est activé, ça limite USERNAME à son répertoire racine (celui que j'ai déclaré dans /etc/passwd
[/quote]
Me rappelle plus, ca limite le user à son rép. perso, je pense. Si c'est ça c'est tout à fait correct.

[quote]
Quelle est la différence entre les shells
/bin/true
/bin/bash
/bin/false 
[/quote]
On pourrait jouer au jeu: dans cette liste, trouvez-moi un véritable shell !  :laughing:
En fait, comme dit plus haut il n'y a que bash qui soit un shell.

Sur ton système, tu peux trouver les shells suivants: 
(y en a certains que je connais pas...)

luciole:~# cat /etc/shells
# /etc/shells: valid login shells
/bin/ash
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/zsh
/bin/sash
/bin/zsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
luciole:~#
/usr/bin/rc <-- cé koi c'machin ???
Tu choisis selon tes préférences ... Le mieux est de consulter la doc.

Alors probablement que ton ftp est démarré dès le boot de la machine et pas à la demande par inetd.

[code]J’ai fait au plus simple (et qui fonctionne surtout):

adduser USERNAME

ensuite, dans /etc/passwd
j’ai modifié la ligne contenant le USERNAME avec comme shell “/bin/true”

J’ai aussi déclaré le shell /bin/true comme shell valide dans /etc/shells
[/code]
Rien à dire pour le adduser, c’est correct si tu désactives son shell de login.
Par contre, /bin/true et /bin/false ne sont pas les noms de shells.
Extrait des man pages de true et false:

true ne fait rien d'autre que renvoyer un code de retour valant 0, signifiant ``réussite''.
 false ne fait rien, mais renvoie un code de retour valant 1, signifiant ``échec''.

C’est la raison pour laquelle on met /bin/false à la place du shell dans les comptes utilisateurs qui ne doivent pas se logguer sur la machine. Avec ça impossible de se logguer.
Par contre, si tu mets /bin/true ça doit avoir le même effet … ?
Mais pas très juste, je ne sais pas j’y avais jamais pensé :slightly_smiling:
Peut-être un trou de sécurité potentiel ? (code de retour 0)
Ca serait intéressant de savoir. Quelqu’un a une idée sur le sujet ?

Du côté de proftpd, les users virtuels t’évitent de devoir déclarer tes users au niveau OS. Mais les 2 méthodes fonctionnent sans problème.

[quote]DefaultRoot est activé, ça limite USERNAME à son répertoire racine (celui que j’ai déclaré dans /etc/passwd
[/quote]
Me rappelle plus, ca limite le user à son rép. perso, je pense. Si c’est ça c’est tout à fait correct.

On pourrait jouer au jeu: dans cette liste, trouvez-moi un véritable shell ! :laughing:
En fait, comme dit plus haut il n’y a que bash qui soit un shell.

Sur ton système, tu peux trouver les shells suivants:
(y en a certains que je connais pas…)

luciole:~# cat /etc/shells

/etc/shells: valid login shells

/bin/ash
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/zsh
/bin/sash
/bin/zsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
luciole:~#
/usr/bin/rc <-- cé koi c’machin ???
Tu choisis selon tes préférences … Le mieux est de consulter la doc.