ProFTPd ticket kezeléssel (Wheezy)
A ProFTPd általános célú FTP szerver alkalmazás, amelyet jelen leírásban ticketing (ideiglenes és erősen korlátozott hozzáférések automatikus kiosztása és kezelése) támogatással telepítünk.
Tartalomjegyzék
- 1 Szolgáltatások
- 2 Házirend
- 3 Előfeltételek
- 4 Telepítés
- 5 Beállítások
- 6 Irodalom
Szolgáltatások
A jelen szolgáltatással elsősorban fájl fogadásra alkalmas FTP tárhelyet biztosítunk egymástól független, állandó hozzáféréssel rendelkező FTP felhasználóknak, vagyis jellemzően ad-hoc hozzáféréssel rendelkező idegenek töltenek fel (terjedelmes) állományokat, amelyek az állandó felhasználókhoz kerülnek. Az időkorlátos ad-hoc hozzáférés weben keresztül, operátori beavatkozás nélkül igényelhető.
Másodlagosan az állandó felhasználók ugyanezen tárhely egy dedikált részén közzétehetnek (terjedelmes) állományokat, amelyekhez weben keresztül bárki hozzáférhet.
Házirend
- Egy szervergépen csak egy, az alábbiak szerinti ProFTPd szolgáltatás futtatható.
- A ProFTPd szolgáltatás az ftp:www-data Linux user/group nevében fut. Az FTP felhasználók (egyedi felhasználónevű) virtuális userek, nem létezik nekik megfelelő Linux felhasználó.
- A tárterület a /var partíción vagy azzal azonos módon csatolt (nem futtatható) partíción helyezkedik el (alapértelmezés: /var/opt/ftp). Az állományok ftp:www-data 2750/640 fájlrendszerbeli jogokkal rendelkeznek.
- Minden felhasználó dedikált tárterülete az FTP alapkönyvtárból nyíló /felhasználónév könyvtár, ahova a ProFTPd chroot-olva van (azaz ebből az alkalmazás kinavigálni nem tud). A csoportosan használható könyvtárak láthatóságát bind mount-tal oldjuk meg.
- Minden felhasználó tárterületén lehet egy speciális, public_html nevű mappa, amelynek tartalma webfelületen, authentikáció nélkül böngészhető, letölthető (publikus webfelület). A tárterület más részei a webről nem láthatóak.
- Az adminisztrációs (ticketing) webfelület a www-data felhasználó nevében fut, a tárterülethez csak olvasható hozzáférése van.
- Az authentikációs backend egy dedikált MySQL adatbázis (proftpd) dedikált adatbázis-felhasználóval (proftpd), melyhez a webfelület is teljes joggal hozzáférhet (TODO!).
- FTPs: TODO!
Előfeltételek
- Posix ACL-eket kezelő fájlrendszer az FTP tárterülethez;
- Házirend szerint telepített MySQL adatbázis-kezelő /etc/mysql/root.cnf scripttel (authentikációs backendhez);
- Házirend szerint telepített Apache-2/PHP (LAMP) webszerver wsm2-vel (felhasználói webfelület);
- Az exec függvény engedélyezése a /etc/php5/conf.d/wsm2-php5.ini állományban (felhasználói webfelület);
- Egyéb függőségek
- OpenSSL (openssl Debian csomag) (hash kezelés)
- PHP GD modul (php5-gd Debian csomag) (capctha kezelés);
apt-get install openssl php5-gd
- TODO!
Telepítés
A ProFTPd-t Debian csomagból telepítjük:
apt-get install proftpd-basic proftpd-mod-mysql proftpd-mod-vroot proftpd-doc ftp
A telepítés során válasszunk standalone (azaz nem inetd-ből indított) szolgáltatást, telepítés után pedig a konfigurálatlan proftpd démont állítsuk le:
invoke-rc.d proftpd stop
Az FTP szolgáltatást a proftp-manager (saját) csomaggal fogjuk konfigurálni és managelni. Töltsük le a proftpm legfrissebb változatát és (a /usr átmenetileg írható újracsatolása után) könyvtárhelyes kicsomagolással telepítsük. Sikeres kicsomagolás után a /usr csak olvashatóan újracsatolható.
Beállítások
Az alapvető paraméterek (elsősorban a domain név) testreszabásához másoljuk ki a telepítő által hozott konfigurációs állományt a /etc/default könyvtárba:
cp -p /usr/local/share/proftpm/templates/proftpm.defaults /etc/default/proftpm
és szerkesszük meg. A MYDOMAIN beállítása mindenképpen szükséges(!), a többi paraméter opcionálisan módosítható (célszerű az alapértelmezett nyelvet magyarra - hu - állítani).
Ezen kívül szüntessük meg (backupoljuk) a ProFTPd általános-, SQL- és modul beállító állományait (ezek helyett újat fogunk készíteni):
mv /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.bak mv /etc/proftpd/sql.conf /etc/proftpd/sql.conf.bak mv /etc/proftpd/modules.conf /etc/proftpd/modules.conf.bak
A fentiek beállítása után egyszerűen a proftpm telepítő funkciójának meghívásával konfigurálhatjuk a szolgáltatást:
proftpm --configure
A beállító funkció nem destruktív (a már meglévő beállításokat nem teszi tönkre), így bármikor újra meghívható. Futása során:
- létrehozza a /var/log/proftpd/proftpm.log (rotált) logállományt, amelyben ettől kezdve minden saját tevékenységét naplózza;
- a /etc/mysql/root.cnf által biztosított MySQL root jogosultsággal létrehozza a proftpd MySQL felhasználót és a proftpd adatbázist, melyre nézve minden jogot odaad a fenti felhasználónak; készít továbbá egy /etc/mysql/proftpd.cnf állományt, amelyben a hozzáférés adatait tárolja úgy, hogy az a mysql --defaults-file=... paranccsal használható legyen;
- lefuttatja a MySQL setup/upgrade SQL scriptet, amely létrehozza a users és (jelenleg nem használt) groups táblákat;
- beállítja a proftpd-t MySQL authentikáció használatára;
- beállítja a proftpd betöltendő moduljainak listáját;
- létrehozza és megfelelő jogosultságokkal látja el az FTP tárterületet;
- létrehozza a karbantartó feladatokat ütemező cron állományt;
- létrehozza a felhasználói felülethez szükséges Apache-2 beállítóállományt;
- létrehozza és feltölti a felhasználói felület (design) testreszabásához szükséges /etc/proftpm/web könyvtárat.
A változtatásokat a /var/log/proftpd/proftpm.log naplóban ellenőrizhetjük. A telepítő funkció elindítja az FTP szervert, de nem aktiválja a webes virtualhost Apache-2 konfigurációját (azaz nem teszi hozzáférhetővé a felhasználói webfelületet).
A konfiguráció végeztével indítsuk el az FTP szolgáltatást:
invoke-rc.d proftpd start
Az FTP forgalom engedélyezése a bástyagép tűzfalán
A kifelé menő FTP kérések a tűzfal policy-ban eleve engedélyezettek. Beérkező kérés átengedéséhez állítsuk be az alábbi Shorewall szabályt:
-rw-r----- root root /etc/shorewall/rules [...] FTP/ACCEPT all fw [...]
ami engedélyezi az FTP igénybe vételét minden zóna felől (a szükséges conntrack betöltéséről a Shorewall gondoskodik). A változtatás érvényesítéséhez a Shorewall-t újra kell indítani:
/etc/init.d/shorewall restart
Gyorsteszt
Teszteléshez hozzunk létre egy FTP felhasználót a proftpm segítségével:
proftpm -ca teszt sysadmin@MYDOMAIN.COM # érvényes email címet adjunk meg! teszt 0 Levélben értesítve: sysadmin@MYDOMAIN.COM 0
Helyes működés esetén a fenti üzenetet kapjuk (amely a /var/log/proftpd/proftpm.log naplóban is megjelenik) és levélben értesülünk az új FTP hozzáférés létrejöttéről. Az új felhasználó adatait a proftpm-mel is kilistáztathatjuk (a jelszó itt hash-ben jelenik meg):
proftpm -la
Fájlátvitel
Egy, a telepítés alatti szervergépet FTP-n keresztül elérő munkaállomásról tetszőleges FTP klienssel (passzív módot használva) lépjünk be a kapott hozzáféréssel, és ellenőrizzük, hogy a /var/opt/ftp/teszt és benne a public_html könyvtárak létrejöttek-e. Ellenőrizzük a fel- és letöltést, a mappa létrehozás, fájl- és mappa törlés és átnevezés lehetőségét (ízlés szerint egyéb FTP funkciókat is), végül töltsünk fel pl. egy képet a public_html alatt létrehozott tesztmappa könyvtárunkba (maga a public_html a web felől nem böngészhető, csak az almappái) és kapcsolódjunk le az FTP szerverről.
Ezután aktiváljuk a felhasználói webfelületet:
a2ensite ftp.MYDOMAIN.COM # itt az /etc/default/proftpm-ben korábban beállított virtualhostot adjuk meg! invoke-rc.d apache2 reload
és egy, a telepítés alatti szervergépet HTTP-n elérő munkaállomás grafikus böngészőjében ellenőrizzük, hogy a http://ftp.MYDOMAIN.COM/user/teszt/tesztmappa weboldalon a feltöltött állomány megjelenik-e, illetve az weben keresztül letölthető-e. Siker esetén a fájlcsere funkciókat leteszteltük.
Webes adminisztráció
Az adminisztrációs funkciók teszteléséhez ugyaninnen hívjuk be a http://ftp.MYDOMAIN.COM/ weboldalt, amely a böngésző beállításának függvényében magyar vagy angol nyelven jelenik meg. Itt a Meglévő hozzáférés adatainak módosítása fülön bejelentkezve változtassunk jelszót (erről levelet kapunk) és ellenőrizzük, hogy a megváltozott jelszóval sikeres az FTP belépés. Kérjünk jelszó-emlékeztetőt is.
Ticketing
Az adminisztrációs webfelületen kérjünk magunkhoz egy ticketet és ellenőrizzük, hogy levélben megérkezett-e maga a ticket (a webfelületen megadott email címre) illetve a kiadásról szóló értesítő (a teszt felhasználóhoz megadott email címre). Ellenőrizzük a kiadásról szóló bejegyzéseket a /var/log/proftpd/proftpm naplóban, illetve a
proftpm -lt
paranccsal is. Ezután próbáljunk meg a ticketben foglalt hozzáféréssel FTP-n belépni és (a korábbiak szerint) ellenőrizzük a fájlátvitelt. Kilépés után ellenőrizzük, hogy a küldött anyag a teszt felhasználó FTP gyökérkönyvtárának egyedi nevű mappájában megjelent-e.
Ha van rá időnk, kivárhatjuk a ticket lejáratát (alapértelmezésben egy óra); ha nincs, töröljük a ticketet manuálisan:
proftpm -rt teszt # Összes vonatkozó ticket törlése a feltöltött anyagok megtartásával
és ellenőrizzük az erről szóló értesítés megérkezését illetve a hozzáférés tényleges megszűnését is. A tesztelés végeztével szüntessük meg a teszt felhasználót:
proftpm -ra -d teszt "Test account removal." # Felhasználó és tárterületének törlése proftpm -la # Lista üres, nincs érvényes account
Az eseményekről levélben értesülünk és a megfelelő naplóbejegyzések is létrejönnek.
Az FTP tárterület (opcionális) elmozgatása
Amennyiben az FTP tárterületet a /var partícióról el kívánjuk mozgatni (pl. a /mnt/storage helyre csatolt nagykapacitású tároló eszköz ftp könyvtárába), akkor nem alkalmazhatunk symlinket, hanem vagy felül kell definiálnunk az FTP tárterület gyökerének meghatározását a /etc/default/proftpm állományban:
-rw-r--r-- root root /etc/default/proftpm [...] FTPROOT="/mnt/storage/ftp" # FTP storage root folder [...]
vagy bind mount-ot kell alkalmaznunk (ez rugalmasabb, mert az FTP gyökérkönyvtár útvonala minden egyes felhasználó adatbázis-rekordjában külön-külön is szerepel, így ha ez felüldefiniált, egy esetleges költöztetésnél sok módosításra lehet szükség; a bind mount viszont transzparens lehet). Ennek beállítására a /etc/proftpm/proftpm.mount állomány szolgálhat, amely minden rendszerindításkor lefut. Írjuk elő ebben a szükséges csatolást:
-rw-r----- root root /etc/proftpm/proftpm.mount [...] # Bind mounts mount --bind /mnt/storage/ftp /var/opt/ftp
Az elmozgatást követően ezt a sort futtassuk is le. Esetleges reboot után az automatikus csatolást az újraindításkor lefutó /etc/cron.d/proftpm cron job biztosítja.
Az adminisztrációs webfelület testre szabása
Az adminisztrációs webfelület megjelenésének megváltoztatására a /etc/proftpm/web design elemeinek lecserélése javasolt. Ezt a mappát az esetleges frissítések nem érintik. A mappa eredetileg az alapértelmezett design elemekre mutató symlinkeket tartalmaz, amelyeket törölve ide custom CSS-ek, fontok, képek illetve szövegek tölthetőek.
Ha nem kell ragaszkodni valamely arculati kézikönyv előírásaihoz, akkor legegyszerűbb testre szabásként a logo kép, illetve a title bar és címsor szövegek cseréje elegendő lehet.
Logo csere
Az alapértelmezett GNU/GPLv3 logo a /etc/proftpm/web/logo.png symlink törlésével és ide a kívánt kép ugyanezen néven bemásolásával cserélhető ki. A logo független a nyelvi változattól.
Title és címsor csere
Töröljük le a /etc/proftpm/web/languages symlinket, és másoljuk ide fizikailag a /usr/local/share/proftpm/web/templates/languages mappát! Ennek nyelvi változataiban (lang_XX.php állományok) a $lang->site_title hash értéke jelenik meg a böngésző title baron, míg a logo mögötti címsor tartalma a $lang->cim hash értéke lesz. Az állományok UTF-8 karakterkódolásúak.
Egyéb design elemek cseréje
TODO!
Adminisztrációs üzenetek és levelek testre szabása
Szemben az adminisztrációs webfelület design elemeivel, ezek testre szabása jelenleg nem támogatott. Fizikailag ezek a szövegeket a /usr/local/share/proftpm/languages mappa állományai tartalmazzák, amely frissítések esetén felülíródhat.
Monitorozás Muninnal
A proftpm csomag tartalmaz néhány, az FTP forgalom (primitív) monitorozására használható Munin plugint. Ezeket pl. az alábbi parancsokkal telepíthetjük:
cp -p /usr/local/share/proftpm/munin/plugin-conf.d/proftpd /etc/munin/plugin-conf.d/ ln -s /usr/local/share/proftpm/munin/plugins/proftpd_bytes /etc/munin/plugins/proftpd_bytes ln -s /usr/local/share/proftpm/munin/plugins/proftpd_count /etc/munin/plugins/proftpd_count invoke-rc.d munin-node restart
TODO: a disztribúcióban van-e alkalmasabb plugin?
A proftpd_ plugin család a /var/log/proftpd/xfer.log állományt figyeli (annak kumulált állapotát jelzi ki), így a Munin filozófiájának megfelelő napi statisztika érdekében ezt a naplót érdemes az általában szokásos heti rotálás helyett naponta rotálni - a proftpm 0.4 és efeletti változataiban ezt a /etc/logrotate.d/proftpm állomány elő is írja.
A ProFTPd bejegyzése a Tiger által felismert démonok listájába
Az FTP szerver az ftp Linux felhasználó nevében állandóan fut és a 21-es TCP portot figyeli, így a biztonsági figyelmeztetések elkerülése érdekében be kell azt jegyezni a tigerrc állományba:
-rw-r--r-- root root /etc/tiger/tigerrc [...] Tiger_Listening_ValidUsers='[...]|ftp|[...]' [...] Tiger_Listening_ValidProcs='[...]|proftpd|[...]' [...] Tiger_Running_Procs='[...] /usr/sbin/proftpd [...]' [...]
fail2ban integráció
A dictionary attack kísérletek kiszűréséhez adjuk meg a proftpd system naplót a fail2ban számára figyelendőnek, és rendeljük hozzá a maintainer által biztosított, a proftpd-re vonatkozó szabályokat:
-rw------- root root /etc/fail2ban/jail.local [...] [proftpd] enabled = true logpath = /var/log/proftpd/system.log ignoreip = IP.IP.IP.IP maxretry = 5
Hasznos lehet a saját (pl. belhálózati) IP címek kivételként felvétele, és a megengedett kísérletek számát (alapértelmezésben 3) is megnövelhetjük. A konfigurációt a fail2ban újraindításával érvényesíthetjük:
invoke-rc.d fail2ban stop; invoke-rc.d fail2ban start; tail -f /var/log/fail2ban.log
Irodalom
- A ProFTPD honlapja
- ProFTPD direktívák ABC sorrendben
- ProFTPD mod_sql
- ProFTPD mini-HOWTO - Symlinks and chroot()
Egy másik megközelítés: