Jelikož je na naší síti sdílení dat přes FTP velice rozšířeno a já nemohl zůstat pozadu, porozhlédl jsem se po nějakém vhodném FTP serveru. Měl jsem jasné požadavky co očekávám: bezpečnost, stabilitu, snadnou konfigurovatelnost a svobodný software . Volba padla na FTP server ProFTPD (www.proftpd.org). Ostatně už podnadpis na stránkách tohoto projektu je všeříkající: Highly configurable GPL-licensed FTP server software. Aktuální verze je 1.2.10.
Instalace
Stáhl jsem si z aktuální verzi a dal jsem se do instalace. Instalace probíhá klasickou svatou trojicí: ./configure, make, make install
. Vše, alespoň u mne, proběhlo bez komplikací. Po instalaci je důležité najít čtyři hlavní soubory, které nás budou zajímat. Konkrétně soubory proftpd - spouštěcí soubor, ftpusers - blacklist, proftpd.conf - konfigurační soubor , ftpshut - zastavení FTP serveru. Já osobně tyto soubory mám po standardní instalaci (žádná použitá volba u příkazu ./configure
) rozházené po celém disku.
Po této proceduře je nutno vytvořit uživatele. Na tohoto uživatele bude nastaven ftpserver a do jeho domovského adresáře se dají přimountovat jiné adresáře, viz dále. V shellu postupně zadáme tyto příkazy (jsou uvedeny pro SuSE, pro jiné distribuce se můžou drobně odlišovat):
# groupadd
uživatel - Vytvoří uživatelskou skupinu uživatel.
# useradd -s /etc/ftponly -g
uživatel -d /home/
uživatel uživatel - Vytvoří uživatele ve skupině uživatel s domovským adresářem /home/uživatel a shellem /etc/ftponly. Tento soubor musí existovat (může být prázdný) a zamezuje jinému přihlášení. Tento soubor musí být uvedený v /etc/shells.
Konfigurace
Blacklist
Do souboru ftpusers napište po řádcích všechny uživatele, kteří se nebudou moci přihlásit.
Obecná konfigurace
Tato část se týká už jen výhradně souboru proftpd.conf a vysvětlení příkazů v něm zapsaném.
ServerName
“Jméno serveru“ - Jméno serveru.
ServerType standalone/inetd
– Volba standalone způsobí, že server sám bude čekat na spojení. Volba inetd způsobí, že na spojení bude čekat démon inetd.
Port
číslo portu – Číslo portu ftp.
ShowSymlinks on/off
– Zobrázení symbolických odkazů pro uživatele.
MaxInstances
číslo – Číslo udává maximální počet podprocesů. Zamezuje DoS útokům. Tato volba funguje jen při standalone, při inetd řídí počet podprocesů démon inetd.
TimeoutStalled
číslo – Číslo udává v sekundách, jak dlouho bude existovat spojení, jestliže se nebudou přenášet žádná data.
TimeoutNoTransfer
číslo – Číslo udává v sekundách, jak dlouho bude existovat spojení, jestliže není po přihlášení klienta k serveru zadán žádný příkaz.
TimeoutIdle
číslo – Číslo udává v sekundách, jak dlouho bude existovat spojení při nečinnosti klienta.
DisplayLogin
soubor – Soubor (případně i s cestou) s hláškou pro klienta po přihlášení.
DisplayFirstChdir
soubor – Soubor (případně i s cestou) s hláškou pro klienta při každé změně pracovního adresáře.
MaxClients
číslo – Číslo určuje maximální počet spojení.
MaxClientsPerHost
číslo – Číslo určuje maximální počet spojení z jedné IP adresy.
User
nobody – Uživatel pod nímž server poběží.
Group
nogroup – Skupina pod níž server poběží.
Anonymní účet
Po úvodní hlavičce, kde jsme omezili nebo povolili kdeco kdekomu, nastává konfigurace serveru pro konkrétní účet.
< Anonymous /home/uživatel >
< /Anonymous >
- Do tohoto “tagu“ budeme vkládat další položky. Tímto určujeme, že chceme aby byl server anonymní a nastaven na domácí adresář uživatele, kterého jsme již vytvořili.
User
uživatel – Nastavení přihlášení už ke konkrétnímu účtu.
Group
uživatel – To samé jako předešlé.
UserAlias anonymous
uživatel – Anonymní přihlášení.
MaxClients
číslo “sdělení“ - Maximální počet klientů na daném účtu. Při překročení se dálším zobrazí uvedené sdělení.
AnonRequirePassword on/off
– Při přihlášení bude/nebude vyžadováno heslo.
RequireValidShell on/off
– Platný shell. V některých distribucích je tento řádek vyžadovan.
ReadRateBPS
číslo – Omezení rychlosti pro jednoho přihlášeného uživatele.
HideUser
uživatel – Schování všech souborů na něž má práva uživatel.
< Limit LOGIN >
- Přihlášení.
DenyAll/AllowAll
– Zakázání/povolení všem. V případě zakázání/povolení vybraných je třeba zvolit postup viz níže.
Order deny,allow
- Výčet položek.
Deny from
server – Server určuje odkud se nedá přihlásit. Serverů může být uvedeno více, pak se oddělují čárkami.
Allow from all
– Povolení přihlášení z ostatních serverů.
< /Limit >
< Directory / >
- Zakázání/povolení přepisování stávajících souborů.
AllowOverwrite no/yes
< /Directory >
< Limit WRITE >
- Zapisování.
Opět je možné povolit/zakázat všem nebo jen vybraným. Stejný postup jako při přihlašování.
< /Limit >
< Limit READ >
- Čtení.
To samé jako předešlý tag.
< /Limit >
< Limit READ DIRS >
- Přístup ke skrytým souborům.
IgnoreHidden on/off
– Ignorovat/neignorovat skrýte soubory.
< /Limit >
< Directory upload/* >
- Zpřístupnění upload. Tento adresář musí existovat v /home/uživatel/.
Do tohoto tagu můžeme opět vložit další tagy, které budou zakazovat/povolovat, kdo smí číst nebo zapisovat do tohoto adresáře.
< /Directory >
Takto jako upload se dá zpřístupnit jakýkoliv jiný adresář.
Spouštění a provoz
FTP serveru se spouští příkazem ./proftpd
, z adresáře, kde se tento soubor nachazí. Nebo odkudkoliv, jestliže je uveden v PATH. Zastavení se provádí příkazem ./ftpshut now
(funguje pouze v standalone módu), místo now se dá použít jiných voleb, viz. man ftpshut
. Tento příkaz způsobí vytvoření souboru /etc/shutmsg, který zamezuje přihlášení k serveru, který ale stále běží. Obnovení standardního provozu se provádí příkazem ./ftpshut -R
, který uvedený soubor smaže. Já mám nastaveno automatické spouštění FTP serveru při startu X serveru. Stačí uvést tento příkaz do souboru /etc/X11/xdm/Xsetup nebo Xsession. Ještě je vhodné připojit do /home/uživatel/ adresáře, které chceme sdílet a jsou jinde na disku. To zajistí příkaz mount --bind
olddir newdir, kde olddir je adresář, který chceme připojit do /home/uživatel/newdir. Tyto příkazy mám také uvedené v souboru pro automatické spouštění. Před tímto připojeném je ještě vhodné adresáře odpojit, kvůli případnému restartování X (umount
olddir newdir) – vícenásobné připojení.
Můj soubor proftpd.conf
#Jmeno serveru
ServerName "Samael server ftp"
#Typ nastaveni
ServerType standalone
# Port
Port 21
#Ukazovat Symlinky
ShowSymlinks on
#Odpojeni pri necinosti po prihlaseni
TimeoutNoTransfer 300
#Odpojeni pri neprenaseni dat
TimeoutStalled 300
#Odpojeni pro necinosti klienta
TimeoutIdle 300
#Jmeno uzivatele a skupina kde bezi server
User nobody
Group nogroup
DisplayLogin welcome.msg
MaxClients 10
MaxClientsPerHost 2
#Konfigurace anonymniho uctu
< Anonymous ~ku >
User samael-ftp
Group samael-ftp
UserAlias anonymous samael-ftp
#vse pouze pro cteni
< Limit WRITE >
DenyAll
< /Limit>
#zakaz prepsani existujiciho souboru
< Directory / >
AllowOverwrite no
< /Directory>
#prihlaseni povoleno vsem
< Limit LOGIN >
AllowAll
< /Limit >
#upload
< Directory upload/* >
< Limit WRITE >
AllowAll
< /Limit >
< /Directory >
< /Anonymous >
Závěr
Jestliže server běží můžete se podívat, kdo je přihlášen pomocí programů ftpwho nebo ftptop. Tento server umožňuje spoustu dalších “vychytávek“ , např. virtuální server. Ale to už je mimo rozsah tohoto článku a kdo by měl zájem, může si toto a spoustu dalších zajímavých věcí o tomto projektu nastudovat na uvedených stránkách, v dobře provedené a rozsáhlé dokumentaci.