Home / Linux / Ubuntu / PureFTPd virtuális felhasználókkal

PureFTPd virtuális felhasználókkal

FTP szerver esetén célszerű a felhasználókat a rendszer falhasználóitól elkülönítve, valamilyen adatbázisban tárolni. Jelen esetben MySQL adatbázisban lesznek a felhasználók tárolva, és az FTP szolgáltatást a PureFTPd végzi. Mivel egy FTP szerver nem FTP szerver kvóta és sávszélesség kezelés nélkül, ezért az is lesz eme képzeletbeli szerverben.

Előszó

Ebben a leírásban a következő paramétereket fogom használni (ezeket a paramétereket, természetesen a saját rendszeredhez igazítsd):
Szerver neve: server1.example.com
Szerver IP címe: 192.168.0.100
A szerver beállításához root jogosultság kell, ezért célszerű egy root jogú shellt szereznünk:

sudo -s

MySQL és phpMyAdmin telepítése

A MySQL szervert használjuk majd a felhasználói adatbázis tárolására, és a phpMyAdminnal lehet webes felületről kezelni az adatbázist. Telepítsük hát őket:

apt-get install mysql-server mysql-client libmysqlclient15-dev phpmyadmin apache2

A rendszer két kérdést fog feltenni:
New password for the MySQL “root” user
Erre a kérdésre adjuk meg a MySQL root felhasználó leendő jelszavát (ide nem a rendszer root jelszavát kell beírni, de beírhatjuk azt is, viszont ajánlott valami más jelszó megadása)
Web server to reconfigure automatically
Apache2-t válasszuk.

PureFTPd telepítése MySQL támogatással

Ubuntu alatt elérhető csomagból, tehát csak egyszerűen telepítsük:

apt-get install pure-ftpd-mysql

Hozzunk létre egy ftp felhasználót és csoportot (a virtuális felhasználók a rendszer műveleteket ennek a felhasználónak a nevében végzik majd)

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

A felhasználó és csoport ID-t (uid és guid) 2001-ről változtassuk meg egy olyan értékre, ami szabad a rendszerünkben.

MySQL adatbázis létrehozása

Hozzunk létre egy pureftpd nevű felhasználót, és egy pureftpd nevű adatbázist.

mysql -u root -p

Adjuk meg neki a telepítéskor megadott jelszót

CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;

A “ftpdpass” jelszót cseréljük ki egy általunk szimpatikusnak tartott jelszóra.
Majd hozzuk létre a pureftpd tábláját:

USE pureftpd;
CREATE TABLE ftpd (
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;
quit;

A legutolsó quit; parancsra kiléptünk a mysql kezelő programjából, és visszatértünk a Linux shellhez.

PureFTPd beállítása

Szerkesszük a /etc/pure-ftpd/db/mysql.conf fájlt.

cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
cat /dev/null > /etc/pure-ftpd/db/mysql.conf
vi /etc/pure-ftpd/db/mysql.conf
MYSQLSocket /var/run/mysqld/mysqld.sock
#MYSQLServer localhost
#MYSQLPort 3306
MYSQLUser pureftpd
MYSQLPassword ftpdpass
MYSQLDatabase pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt md5
MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")

Ne felejtsd el a ftpdpass-t átírni a pureftpd MySQL felhasználó jelszavára!
A felhasználók jelszavát az MYSQLCrypt segítségével MD5 hashként tároljuk, ami sokkal biztonságosabb mint a hagyományos plain text mód (ugyanis MD5 esetén nem magát a jelszót tároljuk el)

Hozzuk létre a /etc/pure-ftpd/conf/ChrootEveryone fájlt, amiben beállíthatjuk, hogy minden felhasználó chrootolva legyen

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

Ezenkívül hozzuk létre a /etc/pure-ftpd/conf/CreateHomeDir, ahol beállíthatjuk, hogy automatikusan létrejöjjön a felhasználó home mappája

echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir

Ezután indítsuk újra a PureFTPd-t

/etc/init.d/pure-ftpd-mysql restart

Felhasználók felvétele

Itt az ideje felvenni felhasználókat a rendszerbe. Ehhez indítsuk el a mysql klienst:

mysql -u root -p

Majd mondjuk meg neki, hogy a pureftpd adatbázist akarjuk használni:

USE pureftpd;

Most hozzunk létre egy teszt felhasználó nevű felhasználót, aki aktív (status 1), a jelszava krftd, az UID és a GIDje 2001, (azt ird ide, amit a második lépésben létrehozott ftp felhasználóhoz, és csoporthoz!), a home mappája a /home/teszt alatt van, 50 MiBájt tárhelye van, és 100 KiBájt-ot tolthet le és fel egy másodperc alatt.

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('teszt', '1', MD5('krftd'), '2001', '2001', '/home/teszt', '100', '100', '', '*', '50', '0');

Lépjünk ki

quit;

Most teszteljük le a rendszert, ehhez szükség van egy FTP kliensre (Windows alatt pl. a TotalCommander, Linux alatt a Krusader, vagy ezer más). Adjuk meg a kapcsolodáshoz szükséges adatokat a kliensnek (szerver címe, felhasználónév és jelszó) majd próbáljunk meg kapcsolódni. Ha sikerült kapcsolódni, akkor minden rendben, ha nem akkor valamit elrontottünk.

Most a szerveren adjuk ki a következő parancsot:

ls -l /home

Valami hasonlót kell látunk:

root@server1:~# ls -l /home
total 8
drwxr-xr-x 2 administrator administrator 4096 2008-01-01 11:35 administrator
drwxr-xr-x 2 ftpuser ftpgroup 4096 2008-01-01 14:29 teszt
root@server1:~#

A ProFTPd automatikusan létrehozta a felhasználó könyvtárát, majd ezt az ftpuser tulajdonába tette.

Adatbázis karbantartása

Felhasználókat hozzáadni és törölni lehet konzolon keresztül, vagy webes felületen phpMyAdminnal. Fogjuk kedvenc böngészőnket, majd a címsorba írjuk be, hogy http://szerverneve/phpmyadmin (példánkban ez http://server1.example.com/phpmyadmin/)

Felhasználók phpmyadminban
Felhasználók phpmyadminban

Egy felhasználó gyakorlatilag csak egy mező a ftpd táblában (ami a pureftpd adatbázisban van). Felhasználó felvételéhez kattintsunk a bal oldali listában a táblára, majd a felső menüsorban a Beilleszt-re (Insert).

ftpdd tábla:

  • User: az ftp felhasználó felhasználóneve
  • Status: 0 vagy 1 lehet. 0 esetén a felhasználó ki van tiltva, így nem tudja igénybe venni a szolgáltatást
  • Password: A felhasználó jelszava kódolva. Ha jelszót akarunk megváltoztatni (vagy új felhasználót felvenni) ugyeljunk arra, hogy a Funkció oszlopba az MD5 legyen kiválasztva (amint ahogy a képen pirossal be van karikázva)!
    Felhasználó adatainak szerkesztése
    Felhasználó adatainak szerkesztése
  • UID: A felhasználó azonosító, jelen példában 2001
  • GID: A csoport azonosítója, jelen példában 2001
  • Dir: A felhasználó home (kezdő) mappájának helye. Ha nem létezik, a rendszer automatikusan létrehozza. A felhasználó nem léphet ki ebből a mappából, így csak a saját adatait láthatja.
  • ULBandwidth: Feltöltési sávszélesség, KiBájt/másodpercben. Ha 0, akkor korlátlan
  • DLBandwidth: Letöltési sávszélesség, KiBájt/másodpercben. Ha 0, akkor korlátlan
  • comment: Ide lehet írni rövid megjegyzéseket a felhasználóról. Kitöltése nem kötelező
  • ipaccess: Itt megadhatjuk, hogy mely IP címekről érhesse el a szervert. Ha * (csillagot) írunk, akkor bárhonnét
  • QuotaSize: A felhasználó tárhely korlátja MiBájtban. Ha 0, akkor nincs korlátozva
  • QuotaFiles: A legnagyobb fájlméret MiBájtban. Ha 0, akkor nincs korlátozva

Névtelen hozzáférés

Ha szeretnénk egy névtelen (anonymous) hozzáférést, jelszó nélkül, akkor a következőt kell tenni:

Először hozzunk létre egy ftp nevű felhasználót és csoportot:

groupadd ftp
useradd -s /bin/false -d /home/ftp -m -c "anonymous ftp" -g ftp ftp

Hozzuk létre a /etc/pure-ftpd/conf/NoAnonymous fájlt, hogy engedélyezzük a névtelen hozzáférést:

echo "no" > /etc/pure-ftpd/conf/NoAnonymous

Ezekkel a beállításokkal engedélyeztük a névtelen hozzáférést.

Indítsuk újra a PureFTPd-t

/etc/init.d/pure-ftpd-mysql restart

Ha létrehozunk egy /home/ftp/incoming mappát, akkor abba a névtelen felhasználók is írhatnak. Állítsuk az incoming mappa jogosultságát 311-re, így feltölteni feltudnak névtelenül, de nem látják, és nem is tudják törölni ami ebben a mappában van. Valamit a /home/ftp mappa jogosultságát állítsuk 555-re, így látják a fájlokat, és le is tudják tölteni azokat.

cd /home/ftp
mkdir incoming
chown ftp:nogroup incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/

Most már az anonymous felhasználók is letölthetnek fájlokat a /home/ftp alól, és feltölthetnek a /home/ftp/incoming mappába.

Szerző charlie

Évek óta foglalkozom informatikával, azon belül elsősorban Linux szerverek üzemeltetésével. Saját vállalkozás keretében VPS szolgáltatás nyújtásával is foglalkozok.

Olvastad?

User_Alias

Hogyan használjuk a Sudo hozzáférést Linux-on? (2. rész)

Az előző részben megnéztük, hogy milyen előnyei lehetnek a „sudo” parancs ismeretének Linux-on. Láttuk, hogy …

53 hozzászólás

  1. Debian-nál nekem ezt még módosítanom kelett:
    /etc/default/pure-ftpd-common fájlt
    STANDALONE_OR_INETD=standalone
    VIRTUALCHROOT=true

    és még a /etc/inetd.conf fájlban
    ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-tpd-wrapper

    ezt kikommenteztem

    ezután pedig:
    /etc/init.d/openbsd-inetd restart

    de én még a rendszer is újra indítottam

    ezt mondjuk a FreeDigital.hu Webhost telepítése debian lenny-n.
    Super, 2009, április 26 vasárnap – 12:30:04 pdf-ből néztem ki mert nekem se akart csatlakozni de így ment

    OZ

  2. Üdv, nekem azt irja hogy Idötullépés, és ha routerem van akkor külsö gépröl mien ip-cimet kell megadni?

  3. Kálomista Ákos: Portforwardolni kell a routeren a gépedhez az FTP portját.

  4. Megmondanád hogy kell ezt? és melyik portot? és külsö gépröl (nem hálozat) milyen ip-t kell megadni ? mert a 192.168.0.X az router által osztott ip. :S a Routerem D-Link DL-524.

  5. Sziasztok!

    Szintén időtúllépést kapok hibaüzenetben.

    Debian van fent.

    A táblában benne van a teszt user.

    Az előző hozzászólásokban sokszor előfordult ez a hiba, van rá már megoldás?

    Köszi:
    Vaka

  6. vaka:

    Ha minden igaz a megoldás ez volt:

    Open /etc/default/pure-ftpd-common

    Change STANDALONE_OR_INETD to standalone:
    STANDALONE_OR_INETD=standalone

    Üdv:
    Vaka

  7. Nekem is úgy működött csak debian alatt, hogy standalonere állítottam…

  8. Sziasztok!

    Abban tudnátok segíteni, hogy miként lehetne azt megoldani, hogy amikor sikeresen csatlakozik ftp-hez a user, akkor db-be lementeni az utolsó csatlakozás dátumát és ip címét?

    Köszönöm előre is!

  9. Sikerült rájönni.

  10. Sziasztok,

    Feltelepitettem a leiras lapjan.Letrehoztam egy usert. Hiba nelkul sikerult.
    Csatlakoznek de nem sikerul.
    A syslogban ezt irja :
    WARNING] Wrong SQL parameters : [SELECT Password FROM ftpd WHERE User=”teszt” AND status=”1″ AND (ipaccess = “*” OR ipaccess LIKE “192.168.1.1”)]
    Mar 28 18:48:06 samu pure-ftpd: (?@szg.lapcom.hu) [INFO] PAM_RHOST enabled. Getting the peer address
    Mar 28 18:48:13 samu pure-ftpd: (?@szg.lapcom.hu) [WARNING] Authentication failed for user [teszt]
    Mar 28 18:48:13 samu pure-ftpd: (?@szg.lapcom.hu) [INFO] Logout.

    Mi a baj ?

    Koszi

    Sztupi

  11. Sziasztok!

    A mysql-nél hibát kapok:
    Kézzel gépeltem be, nem másoltam, nincs elírás többször is megnéztem és mégis ERROR 1064 (42000) hibát kapok. TYPE=MyISAM-re ad ki folyamatosan hibát. Ebben tudtok segíteni? Próbáltam már úgy is, hogy újra írtam az egészet egy teljesen más nevekkel, ugyanezekkel az értékekkel, akkor is megkaptam ezt a hibát.

  12. Helló!

    Az újabb mysql verziókban már nem TYPE=MyISAM kell, mert olyan nincs. :-)
    Viszont van ENGINE=MyISAM!
    Így meg lehet úszni a mysql 1064-es error üzenetet!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

A weboldal használatának folytatásával Ön elfogadja a cookie-k használatát Adatkezelési tájékoztató és felhasználási feltételek

A süti beállítások ennél a honlapnál engedélyezett a legjobb felhasználói élmény érdekében. Amennyiben a beállítás változtatása nélkül kerül sor a honlap használatára, vagy az "Elfogadás" gombra történik kattintás, azzal a felhasználó elfogadja a sütik használatát.

Bezárás