Home / Linux / Ubuntu / Virtuális FTP szerver Proftpd és MySQL alapokon

Virtuális FTP szerver Proftpd és MySQL alapokon

Ebben a leírásban egy FTP szervert hozok létre Ubuntu 8.04 LTS disztribúción, Proftpd-vel, és a felhasználókat MySQL-ben tárolódnak. A felhasználókra beállítható lesz kvóta is.

A felhasználó kezelése phpMyAdmin-al valósul meg.

A leírás feltételez egy már feltelepített és konfigurált Ubuntu Servert (leírás itt). A szerver neve gaia, és a teszt.local tartományba van (tehát a gép teljes neve gaia.teszt.local), IP címe 10.0.2.15.

Jelentkezzünk be a szerverre (akár helyileg akár távolról), majd szerezzünk magunknak egy root konzolt:

sudo -s

Majd változtassuk meg az alapértelmezett shellt:

ln -sf /bin/bash /bin/sh

Erre azért van szükség, mert a /bin/sh egy symlink a /bin/dash-re, azonban most a /bin/bash kell, nem a /bin/dash.

Tiltsuk le az AppArmor-t:

/etc/init.d/apparmor stop
update-rc.d -f apparmor remove

Az AppArmor egy biztonsági megoldás, hasonló mint a SELinux. Azonban most nincs rá szükség, és csak problémákat okozhat, ezért szükséges a letiltása.

Telepítsük az phpMyAdmin-t és a MySQL-t:

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

A New password for the MySQL “root” user: kérdésre írjuk be a jelszavunkat,

a Web server to reconfigure automatically: kérdésre válasszuk ki az apache2-t (menjünk rá, és nyomjuk le a szóközt)

Telepítsük a Proftpd-t:

apt-get install proftpd-mysql

A Run proftpd kérdésre a standalone-t válasszuk ki.

Most hozzuk létre egy ftp felhasználót és csoportot:

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

Ha a rendszerünkben a 2001-es UID és GID nem lenne szabad, válasszunk egy másikat.

Hozzuk létre a proftpd adatbázisát. Ehhez lépjünk be a mysql konzoljába (jelszavunkat meg kell majd adni):

mysql -u root -p

Majd hozzuk létre az adatbázist:

create database ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost' IDENTIFIED BY 'jelszo';
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost.localdomain' IDENTIFIED BY 'jelszo';
FLUSH PRIVILEGES;

A ‘jelszo’ részt cseréljük le arra, amit az adatbázis eléréséhez szeretnénk használni!

Majd hozzuk létre a táblákat:

USE ftp;

CREATE TABLE ftpgroup (
groupname varchar(16) NOT NULL default '',
gid smallint(6) NOT NULL default '5500',
members varchar(16) NOT NULL default '',
KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTP group table';

CREATE TABLE ftpquotalimits (
name varchar(30) default NULL,
quota_type enum('user','group','class','all') NOT NULL default 'user',
per_session enum('false','true') NOT NULL default 'false',
limit_type enum('soft','hard') NOT NULL default 'soft',
bytes_in_avail int(10) unsigned NOT NULL default '0',
bytes_out_avail int(10) unsigned NOT NULL default '0',
bytes_xfer_avail int(10) unsigned NOT NULL default '0',
files_in_avail int(10) unsigned NOT NULL default '0',
files_out_avail int(10) unsigned NOT NULL default '0',
files_xfer_avail int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;

CREATE TABLE ftpquotatallies (
name varchar(30) NOT NULL default '',
quota_type enum('user','group','class','all') NOT NULL default 'user',
bytes_in_used int(10) unsigned NOT NULL default '0',
bytes_out_used int(10) unsigned NOT NULL default '0',
bytes_xfer_used int(10) unsigned NOT NULL default '0',
files_in_used int(10) unsigned NOT NULL default '0',
files_out_used int(10) unsigned NOT NULL default '0',
files_xfer_used int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;

CREATE TABLE ftpuser (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default '',
passwd varchar(32) NOT NULL default '',
uid smallint(6) NOT NULL default '5500',
gid smallint(6) NOT NULL default '5500',
homedir varchar(255) NOT NULL default '',
shell varchar(16) NOT NULL default '/sbin/nologin',
count int(11) NOT NULL default '0',
accessed datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTP user table';

quit;

Most nyissuk meg a /etc/proftpd/proftpd.conf fájlt, és tiltsuk le az IPv6 részét a ProFTPd-nek:

nano /etc/proftpd/proftpd.conf

Kerressük meg az UseIPv6 opciót, majd on-ról írjuk át off-ra.

Majd ezt írjuk be a konfigurációs fájl végére, úgy, hogy az SQLConnectInfo sorban a jelszót, az ftp adatbázis létrehozásakor megadott jelszóra írjuk át, és a végén üssunk entert, egy új üres sorért:

DefaultRoot ~

SQLBackend              mysql
# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes            Plaintext Crypt
SQLAuthenticate         users groups

# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo  ftp@localhost proftpd jelszo

# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo     ftpuser userid passwd uid gid homedir shell

# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo    ftpgroup groupname gid members

# set min UID and GID - otherwise these are 999 each
SQLMinID        500

# create a user's home directory on demand if it doesn't exist
CreateHome on

# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# Update modified everytime user uploads or deletes a file
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

# User quotas
# ===========
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on

SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies

QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

RootLogin off
RequireValidShell off

indítsuk újra a proftpd-t:

/etc/init.d/proftpd restart

Most töltsük fel adatokkal az adatbázist, és próbáljuk ki az ftp hozzáférést:

mysql -u root -p

Adjuk meg a jelszavunkat, majd:

USE ftp;

Először létrehozunk egy ftpgroup nevű csoportot, amin keresztül a virtuális csoportot megfeleltetjük az igazinak, melyet a leírás elején hoztunk létre (ha más UID/GID-et használtunk a 2001 helyett, akkor itt is írjuk át!)

INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');

Most hozzunk létre egy felhasználót. A felhasználóneve peldauser lesz, jelszava titkosjelszo, és a /home/www.pelda.com mappához fér hozzá, valamit 15 MiBájtos kvótája lesz.

INSERT INTO 'ftpquotalimits' ('name', 'quota_type', 'per_session', 'limit_type', 'bytes_in_avail', 'bytes_out_avail', 'bytes_xfer_avail', 'files_in_avail', 'files_out_avail', 'files_xfer_avail') VALUES ('peldauser', 'user', 'true', 'hard', 15728640, 0, 0, 0, 0, 0);

INSERT INTO 'ftpuser' ('id', 'userid', 'passwd', 'uid', 'gid', 'homedir', 'shell', 'count', 'accessed', 'modified') VALUES (1, 'peldauser', 'titkosjelszo', 2001, 2001, '/home/www.pelda.com', '/sbin/nologin', 0, '', '');

Ha megvan léjünk ki a mysql konzolból:

quit;

Most már beléphetünk az előbb létrehozott felhasználóval. A felhasználó mappája az első bejelentkezéskor fog létrejönni!

A felhasználóket létrehozhatjuk, törölhetjük, szerkeszthetjük a phpMyAdminon keresztül is. Ehhez írjuk be a kedvenc böngészőnkbe, hogy http://10.0.2.15/phpmyadmin (vagy ha más a szerver IP címe, akkor azt), és lépjünk be a leírás elején létrehozott proftpd felhasználóval, és annak jelszavával.

A felhasználók kezelése szempontjából csak az ftpquotalimits és ftpuser táblákkal kell foglalkozni.

ftpuser tábla:

  • userid: A virtuális felhasználó felhasználói neve (pl. peldauser).
  • passwd: A felhasználó jelszava
  • uid: A gépen létező ftp felhasználó azonosítója (2001 volt, ha a gépen nem volt olyan azonosító korábról).
  • gid: A gépen létező ftp csoport azonosítója (ugyanaz mint fent, 2001).
  • homedir: A felhasználó mappája, pl. /home/peldauser. Ha nem létezik, az első bejelentkezéskor automatikusan létrejön. A felhasználó a mappájából nem tud kilátni.
  • shell: /sbin/nologin legyen

ftpquotalimits tábla:

  • name: Az ftp felhasználó felhasználó neve (akire az adott kvóta vonatkozik)
  • quota_type: user vagy group, normál esetben user
  • per_session: true vagy false. Ha true (igaz) akkor a kvóta csak az adott sessionra, munkamenetre vonatkozik, ha fals (hamis) akkor a kvóta mindig akkora marad.
  • limit_type: hard vagy soft. Hard kvótát nem lehet átlépni, míg a soft kvótát időlegesen át lehet lépni.
  • bytes_in_avail: Feltöltési limit bájtban. 0 esetén korlátlan.
  • bytes_out_avail: Letöltési limit bájtban. 0 esetén korlátlan.
  • bytes_xfer_avail: Forgalm ilimit bájtban. Le és feltöltések együtt. 0 esetén korlátlan.
  • files_in_avail: Feltöltési korlát fájlok számában. 0 esetén korlátlan.
  • files_out_avail: Letöltési korlát fájlok számában. 0 esetén korlátlan.
  • files_xfer_avail: Forgalmi korlát fájlok számában. 0 esetén korlátlan.

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?

Linux

Friss funkciókkal érkezik a Linux 5.0 „Shy Crocodile”

Linus Torvalds nemrég megjelentette a Linux kernel 5.0 verzióját, melynek a Shy Crocodile, avagy a …

22 hozzászólás

  1. No már meg is találtam a hibát. Valahogy lemaradt 2 sor.
    de ha másnak is lenne hasonló problémája akkor elárulom Én mit rontottam el. Csupán ez maradt ki
    Még jó hogy átnéztem a configot sorról sorra
    DefaultRoot ~

    SQLBackend mysql

  2. Sziasztok,
    hogy lehet megcsinalni, hogy ne csak letolteni lehessen, hanem feltolteni es torolni is tudjon a felhasznalo.

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