staging.inyokaproject.org

vsftpd

Status: Gelöst | Ubuntu-Version: Ubuntu
Antworten |
Dieses Thema ist die Diskussion des Artikels vsftpd.

Chrissss Team-Icon

Anmeldungsdatum:
31. August 2005

Beiträge: 37971

Tachchen!

Ich habe mich mal wieder an einen weiteren Server Artikel gesetzt

Baustelle/vsftpd

Der Artikel ist soweit fertig. Kommt es rüber, dass vsftpd Daemon ideal für Leute ist, die einfach nur einen FTP-Server ohne Schnickschnack brauchen?

Tschuess
Christoph

Raubsau

Avatar von Raubsau

Anmeldungsdatum:
16. Juli 2006

Beiträge: 256

Ja kommt rüber. Werde gleich mal proftpd deinstallieren 😉 Lediglich kleinere Rechtschreibfehler würde ich noch "bemängeln".

Dee Team-Icon

Avatar von Dee

Anmeldungsdatum:
9. Februar 2006

Beiträge: 20087

Rechtschreibung ist nun ok, es fehlt das InArbeit-Tag (Chrissss, Chrissss, Chrissss, ... 😉) und die Kategorien dann später.

Gruß, Dee

Chrissss Team-Icon

(Themenstarter)

Anmeldungsdatum:
31. August 2005

Beiträge: 37971

OK, hab den Artikel ins Wiki verschoben ☺

vsftpd

Tschuess
Christoph

otzenpunk Team-Icon

Avatar von otzenpunk

Anmeldungsdatum:
17. Oktober 2005

Beiträge: 8691

Ist es nicht sinnvoll, dem anon-upload-Verzeichnis die Leserechte für den FTP-User zu entziehen? (Hab' ich mal irgendwo so gelesen.) Dann können Anonyme zwar was hochladen, aber den Server nicht als Tauschplatz für Warez, etc. nutzen. Der Betreiber muss dann halt ab und zu mal in dem Verzeichnis aufräumen und alles was für andere auch interessant ist in den Nur-Lese-Bereich verschieben.

Chrissss Team-Icon

(Themenstarter)

Anmeldungsdatum:
31. August 2005

Beiträge: 37971

Hm. Ja, das ist ein guter Vorschlag, ich probiere das heute Abend mal aus ☺

MKay

Avatar von MKay

Anmeldungsdatum:
25. Februar 2007

Beiträge: Zähle...

Hi,

ich hab mich die letzten Tage auch ein wenig mit vsftpd auseinandergesetzt und ich finde, dass man im Wiki vllt noch die Methode mit virtuellen Benutzern erwähnen sollte, da ich aus diversen Gründen keine echten Linux-Benutzer für den FTP anlegen wollte (unter anderem deswegen). 😉

Letztendlich habe ich es so gemacht, wie in diesem Artikel beschrieben: http://www.chicagolug.org/wiki/Vsftpd

Also zunächst die vsftpd.conf anpassen, damit virtuelle Benutzer erlaubt werden:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
...
local_enable=YES
chroot_local_user=YES
pam_service_name=vsftpd

# logins nur von Benutzern aus der Datei userlist_file erlauben
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list

# virtual users
guest_enable=YES
guest_username=ftpuser
user_sub_token=$USER
hide_ids=YES
local_root=/home/ftp/$USER
virtual_use_local_privs=YES

Mit den virtuellen Benutzern erreicht man auf diese Weise, dass ein Benutzer user1 im Verzeichnis /home/ftp/user1 und ein Benutzer user2 entsprechend in /home/ftp/user2 landet.

Die Authentifizierung der virtuellen Benutzer geschieht dann mittels PAM. Dazu muss man zunächst noch eine entsprechende lib installieren, die das Authentifizieren über ein simples password-file erlaubt:

1
sudo apt-get install libpam-pwdfile

Entsprechend muss man das vsftpd-PAM-Script ändern, sodass diese lib auch genutzt wird:

1
2
3
auth	required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth	required	pam_pwdfile.so	pwdfile	/etc/vsftpd.user
account	required	pam_permit.so

Die erlaubten virtuellen Benutzer werden demnach in die Datei /etc/vsftpd.user eingetragen. Dies kann man bspw. mit htpasswd aus dem package apache2-utils machen. Das hat aber den Nachteil, dass Passwörter nur 8 Zeichen lang sein können, weshalb es sich empfiehlt die MD5-Methode zu wählen. Anscheinend ist der MD5-Code, der von htpasswd erzeugt wird, aber mit der PAM-lib inkompatibel, weshalb man hier auf ein entsprechendes Perl-Script zugreifen muss, welches den MD5 aus dem Passwort erzeugt (Quelle des Scripts: s.o.):
Datei "ftppass":

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#! /usr/bin/perl -w 
use strict; 
# filter "user:cleartext" lines into "user:md5_crypted" 
# probably requires glibc 
while (<>) { 
    chomp; 
    (my $user, my $pass) = split /:/, $_, 2; 
    my $crypt = crypt $pass, '$1$' . gensalt(8); 
    print "$user:$crypt\n"; 
} 
sub gensalt { 
    my $count = shift; 
    my @salt = ('.', '/', 0 .. 9, 'A' .. 'Z', 'a' .. 'z'); 
    my $s; 
    $s .= $salt[rand @salt] for (1 .. $count); 
    return $s; 
}

Nun kann man problemlos Benutzer hinzufügen und löschen.
Um das zu vereinfachen, habe ich noch 2 Bash-Skripte geschrieben:
Datei "addftpuser":

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/bash

# is root?
if [ "$(id -u)" != "0" ]; then
	echo "This script must be run as root!" 1>&2
	exit 1
fi


# ------
# Config
# ------
ftphome=/home/ftp
virtualuser=ftpuser
virtualgroup=ftpuser


cd /etc/


# -------------------------
# get username and password
# -------------------------
echo -n "Enter username: "
read username

echo -n "Enter password: "
read -s password
echo -n -e "\nReenter password: "
read -s password_reenter

if [ "$password" != "$password_reenter" ]; then
	echo -e "\nPasswords mismatch! Abort!"
	exit
fi


# -----------
# Create User
# -----------
echo "Create user..."

# create password-file with cleartext. only root should be able to read this file.
[ -f vsftpd.password_tmp ] && rm vsftpd.password_tmp
touch vsftpd.password_tmp
chmod 600 vsftpd.password_tmp
echo "$username:$password" > vsftpd.password_tmp
# use ftppass to encrypt pass as md5 and store result in user file
ftppass vsftpd.password_tmp >> vsftpd.user
# finally delete file with cleartext password
rm vsftpd.password_tmp


echo "Create user directory..."
mkdir $ftphome/$username
chown $virtualuser:$virtualgroup $ftphome/$username

echo "Allow ftp-access..."
echo $username >> vsftpd.user_list

echo "Finish"

Datei "delftpuser":

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/bash

# is root?
if [ "$(id -u)" != "0" ]; then
        echo "This script must be run as root!" 1>&2
        exit 1
fi


# ------
# Config
# ------
ftphome=/home/ftp


cd /etc/


echo -n "Enter username: "
read username

echo "Delete user..."
# first: delete tmp file if exist
[ -f vsftpd.user_tmp ] && rm vsftpd.user_tmp
cat vsftpd.user | grep -v $username >> vsftpd.user_tmp
mv vsftpd.user_tmp  vsftpd.user

echo "Delete user directory..."
[ -d $ftphome/$username ] && rm -r -f $ftphome/$username

echo "Disallow ftp-access..."
# first: delete tmp file if exist
[ -f vsftpd.user_list_tmp ] && rm vsftpd.user_list_tmp
cat vsftpd.user_list | grep -v $username >> vsftpd.user_list_tmp
mv vsftpd.user_list_tmp  vsftpd.user_list

echo "Finish"

Hinweise:
Die Variablen ftpuser, ftpgroup und ftphome müssen entsprechend den vsftpd-Konfigurationswerten von guest_username und local_root angepasst werden.

Ich denke, dass es ganz nützlich wäre, das ins Wiki einzubauen, weil ich ewig gesucht habe, bis ich die passenden Artikel im Netz gefunden habe ☺

Gruss,
MKay

engel.aloisius

Anmeldungsdatum:
25. Juli 2010

Beiträge: Zähle...

Ein herzliches Danke für dieses HowTo!

ales Newbee hab ich noch ne frage, wie das mit dem "ftppass" ist ... ich nehme mal an, dass das als datei abzulegen ist - die frage ist für mich aber nur wo und wie die heißen muss?

liegt die in /etc/?

heißt die "ftppass.sh"?

MKay

Avatar von MKay

Anmeldungsdatum:
25. Februar 2007

Beiträge: 274

Genau, du erstellst eine Datei ftppass (Endung ".sh" nicht nötig), zB im Ordner /usr/local/bin/ und kopierst dort den genannten Inhalt rein. Du kannst auch jedes beliebige Verzeichnis wählen, aber wenn es in /usr/local/bin/ liegt, dann kannst du von überall einfach "ftppass" in der Konsole eintippen, anstatt den gesamten Pfad zum Script eingeben zu müssen, also zB /home/name/Desktop/ftppass.

Eventuell musst du der Datei noch ausführbare Rechte geben (in dem Ordner wo das Script liegt: chmod +x ftppass)

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

@MKay: Wenn du das einbauen willst können wir den Artikel gerne in die Baustelle schieben. ☺

Gruß, noisefloor

MKay

Avatar von MKay

Anmeldungsdatum:
25. Februar 2007

Beiträge: 274

Hehe, das wurde ich schon einmal gefragt, aber ich habe dafür atm echt leider gar keine Zeit, sry 😢 Aber vllt erklärt sich ja jemand anderes dafür bereit ☺

Madeddy

Avatar von Madeddy

Anmeldungsdatum:
18. Januar 2007

Beiträge: 504

Tag.

Hinweis: Hab grad nach lesen des Artikels + Install des Servers bemerkt, dass die Voreinstellung für den die anonymous und sie locale Nutzer genau anders rum ist. Entweder ein Fehler oder es ist inzwischen geändert worden.(Lucid) Auszug aktuelle vsftpd.conf:

Allow anonymous FTP? (Disabled by default)
anonymous_enable=NO

Uncomment this to allow local users to log in.
local_enable=YES

Vielleicht will das ma jemand prüfen + korrigieren. MfG

Moderiert von kaputtnik:

Post lesbar gemacht

alaak

Anmeldungsdatum:
11. Oktober 2005

Beiträge: Zähle...

Madeddy schrieb:

Tag.

Hinweis: Hab grad nach lesen des Artikels + Install des Servers bemerkt, dass die Voreinstellung für den die anonymous und sie localen" Nutzer genau anders rum ist. Entweder ein Fehler oder es ist inzwischen geändert worden.(Lucid) Auszug aktuelle vsftpd.conf: {{{#!code text Allow anonymous FTP? (Disabled by default) anonymous_enable=NO Uncomment this to allow local users to log in. local_enable=YES }}} Vielleicht will das ma jemand prüfen + korrigieren. MfG

Ist mir auch gerade aufgefallen (10.04). Das führt ein wenig zu Verwirrung wenn man einen annonymen ftp will und das nicht vom Start an funktioniert.

bloody_noob

Anmeldungsdatum:
4. Oktober 2007

Beiträge: Zähle...

Kann es sein das sich der default Pfad auch für anon Nutzer von /home/ftp in /srv/ftp geändert hat? Zumindest ist dies bei meiner Mint Installation der Fall!

erdbeerfeldheld

Anmeldungsdatum:
3. März 2012

Beiträge: Zähle...

Kann mal jemand überprüfen, ob das mit dem Benutzer ohne shell Zugang funktioniert? Wenn ich in meiner /etc/passwd die Shell auf /bin/false setze bekomme ich von Filezilla folgende Fehlermeldung:

1
2
3
Antwort:	530 Login incorrect.
Fehler:	Kritischer Fehler
Fehler:	Herstellen der Verbindung zum Server fehlgeschlagen

Sobald ich aber wieder /bin/bash angebe und mich mit exakt den selben Daten anmelden möchte, funktioniert es wider. (Ja ich melde mich bei ftp://meinserver.de und port 21 an)

💡 Vielleicht könnte der Anleitung noch jemand hinzufügen, wie genau man nur für FTP-vorgesehene User anlegt 💡

Antworten |