A bejegyzésből megtanulhatod, hogy hogyan telepítsd a proftpd alkalmazás szervert – Debian8 „Jessie” – rendszerre, mysql adatbázis támogatással és virtuális felhasználó kezeléssel.
Proftpd daemon telepítése
Az ftp szolgáltatás két módon biztosítható.
- Aktív mód
- Passzív mód
Aktív- és passzív mód esetén is, a vezérlő utasítások az ftp szerver 21-es portjára érkeznek. Azonban az adatok aktív mód esetén a szerver 20-as portjáról kiindulva vándorolnak a kliens valamely portjára, míg passzív mód esetén a szerver egy porttartományból választ egy kaput, és annak a számát, valamint a szerver ip címét küldi el a kliensnek, és a kliens ezen információk birtokában jön vissza az adatokért. Ennyi előzetes információ után kezdjük el a munkát.
Legyen a rendszer naprakész:
sudo apt-get update && sudo apt-get upgrade
Telepítsük fel a programot:
apt-get install proftpd
Telepítéskor két lehetőség közül választhatunk, hogy hogyan kívánjuk használni a programot:
- from inetd: A daemon alvó módban van, mindaddig, amíg csatlakozási kérelem nem érkezik.
- standalone: Folyamatosan figyel a daemon
Amennyiben kis terheltségű ftp szolgáltatást kívánsz üzemeltetni, az 1. a jó választás, így erőforrást spórolhatsz. Ellenkező esetben értelemszerűen a 2. lehetőséget válaszd.
Telepítés után, állítsuk le a szolgáltatást:
/etc/init.d/proftpd stop
Nyissuk meg a konfigurációs állományt:
nano /etc/proftpd/proftpd.conf
Módosítsunk néhány bejegyzést:
# Zárjuk be a felhasználókat a saját könyvtárukba: DefaultRoot ~ # Konfigurálnuk a passzív mód porttartományát: PassivePorts 20000 21000 # Amennyiben fix ip címmel rendelkezel azt add meg itt, ha nem, akkor regisztrálj egy domain nevet, valamelyik ingyenes DDNS szolgáltatónál és azt deklaráld. MasqueradeAddress ftp.example.com # Add meg, hogy kinek a nevében fut a daemon User proftpd Group nogroup #Vágül engedélyezd, az sql.conf konfigurációs állomány beillesztését: Include /etc/proftpd/sql.conf
Virtuális felhasználók a Proftpd-ben
A példám előfeltétele, hogy egy MSQL, vgy MariaDB adatbázis kezelő rendszer legyen a szervereden. Szükségünk lesz egy linux felhasználóra, akinek a tulajdonába kerülnek – alapértelmezetten -, a szerveren tárolt adatok, amit a virtuális felhasználó létrehoz. Egyébként ez a tulajdon átállítható akkor, amikor a virtuális felhasználót létrehozzuk.
Csoport- és felhasználó létrehozása:
groupadd -g 2001 ftpgroup useradd -u 2001 -g ftpgroup -c "proftpd user" -d /bin/null -s /bin/false ftpuser
Lépjünk be az adatbázis kezelő rendszerbe:
mysql -u felhasználónév-p jelszó
Adatbázis-, és a kezelésére jogosult felhasználó létrehozása:
CREATE DATABASE ftp; GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost' IDENTIFIED BY 'titok'; GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost.localdomain' IDENTIFIED BY 'titok'; FLUSH PRIVILEGES; USE ftp;
Táblák létrehozása:
CREATE TABLE IF NOT EXISTS `admin` ( `id` int(11) NOT NULL, `userid` varchar(50) COLLATE utf8_hungarian_ci NOT NULL, `password` varchar(255) COLLATE utf8_hungarian_ci NOT NULL, `session_id` varchar(255) COLLATE utf8_hungarian_ci NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci; CREATE TABLE IF NOT EXISTS `ftpgroup` ( `groupname` varchar(16) COLLATE utf8_hungarian_ci NOT NULL DEFAULT '', `gid` smallint(6) NOT NULL DEFAULT '2001', `members` varchar(16) COLLATE utf8_hungarian_ci NOT NULL DEFAULT '' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci COMMENT='ProFTP group table'; CREATE TABLE IF NOT EXISTS `ftpquotalimits` ( `name` varchar(30) COLLATE utf8_hungarian_ci DEFAULT NULL, `quota_type` enum('user','group','class','all') COLLATE utf8_hungarian_ci NOT NULL DEFAULT 'user', `per_session` enum('false','true') COLLATE utf8_hungarian_ci NOT NULL DEFAULT 'false', `limit_type` enum('soft','hard') COLLATE utf8_hungarian_ci NOT NULL DEFAULT 'soft', `bytes_in_avail` bigint(20) unsigned NOT NULL DEFAULT '0', `bytes_out_avail` bigint(20) unsigned NOT NULL DEFAULT '0', `bytes_xfer_avail` bigint(20) 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' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci; CREATE TABLE IF NOT EXISTS `ftpquotatallies` ( `name` varchar(30) COLLATE utf8_hungarian_ci NOT NULL DEFAULT '', `quota_type` enum('user','group','class','all') COLLATE utf8_hungarian_ci NOT NULL DEFAULT 'user', `bytes_in_used` bigint(20) unsigned NOT NULL DEFAULT '0', `bytes_out_used` bigint(20) unsigned NOT NULL DEFAULT '0', `bytes_xfer_used` bigint(20) 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' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci; CREATE TABLE IF NOT EXISTS `ftpuser` ( `id` int(10) unsigned NOT NULL, `name` varchar(70) COLLATE utf8_hungarian_ci NOT NULL, `userid` varchar(32) COLLATE utf8_hungarian_ci NOT NULL DEFAULT '', `passwd` varchar(32) COLLATE utf8_hungarian_ci NOT NULL DEFAULT '', `address` varchar(100) COLLATE utf8_hungarian_ci NOT NULL, `email` varchar(100) COLLATE utf8_hungarian_ci NOT NULL, `phone` varchar(20) COLLATE utf8_hungarian_ci NOT NULL, `uid` smallint(6) NOT NULL DEFAULT '2001', # Az alapértelmezett linux felhasználónál megadott uid érték! `gid` smallint(6) NOT NULL DEFAULT '2001', # Az alapértelmezett linux felhasználónál megadott gid érték! `homedir` varchar(255) COLLATE utf8_hungarian_ci NOT NULL DEFAULT '', `shell` varchar(16) COLLATE utf8_hungarian_ci 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' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci COMMENT='ProFTP user table'; ALTER TABLE `admin` ADD PRIMARY KEY (`id`); ALTER TABLE `ftpgroup` ADD KEY `groupname` (`groupname`); ALTER TABLE `ftpuser` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `userid` (`userid`);
A modules.conf állományt módosítsuk:
LoadModule mod_sql.c LoadModule mod_sql_mysql.c
Az sql.conf állomány módosítása:
<IfModule mod_sql.c> SQLEngine on SQLBackend mysql # A jelszavakat a MysQL-ben crypttel titkosítjuk: SQLAuthTypes Crypt Plaintext SQLAuthenticate on # Kapcsolódás az MySQL adatbázishoz: SQLConnectInfo ftp@localhost proftpd </IfModule>titok # Adatbázis kapcsolat felépítéséhez szükséges adatok. # A felhasználói tábl leírása: SQLUserInfo ftpuser userid passwd uid gid homedir shell # A csoport tábla leírása: SQLGroupInfo ftpgroup groupname gid members # Felhasználó könyvtárának létrehozása ha nem létezik: CreateHome on # Minimális UID és GID SQLMinID 500 # A számláló növelése, ha egy felhasználó belép SQLLog PASS updatecount SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser # A módosítás feljegyzése feltöltésről vagy törlésről SQLLog STOR,DELE modified SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser QuotaEngine on QuotaShowQuotas on QuotaDirectoryTally on QuotaDisplayUnits Mb ## SQL utasítások: 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
Nincs más hátra, mint újraindítani a szolgáltatást:
/etc/init.d/proftpd start
Ellenőrízzük le a szolgáltatás állapotát:
systemctl status proftpd
A kimentből látszani kell, hogy a szolgáltatás hiba nélkül elindult. A továbbiakban létre kell hozni az adatbázisbab a felhasználókat és amennyiben tűzfal mögött használod a szervert, akkor kinyitni a szükséges portokat, természetesen ezt akkor is tedd meg, ha a szervereden futtatod a tűzfalat, bár ez utóbbi nem szerencsés. Remélem tanulságos volt a cikk számodra.