FTP server

Instalace a konfigurace FTP serveru ProFTPD.

10.3.2005 06:00 | Martin Pruša | přečteno 17519×

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.

ServerNameJmé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 souborSoubor (případně i s cestou) s hláškou pro klienta po přihlášení.
DisplayFirstChdir souborSoubor (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.

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=682