ProFTPd ticket kezeléssel (Wheezy)

Innen: AdminWiki
A lap korábbi változatát látod, amilyen KZoli (vitalap | szerkesztései) 2018. május 29., 22:56-kor történt szerkesztése után volt. (Új oldal, tartalma: „A [http://www.proftpd.org/ ProFTPd] általános célú FTP szerver alkalmazás, amelyet jelen leírásban ''ticketing'' (ideiglenes és erősen korlátozott hozzáfér…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

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.

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

Egy másik megközelítés: