Tento dokument popisuje, jak nainstalovat server PureFTPd, který místo skutečných systémových uživatelů používá virtuální uživatele z databáze MySQL. To je mnohem výkonnější a umožňuje mít tisíce uživatelů ftp na jednom počítači. Kromě toho ukážu použití kvóty a omezení šířky pásma pro nahrávání/stahování s tímto nastavením. Hesla budou v databázi uložena zašifrovaná jako řetězce MD5.
Pro správu databáze MySQL můžete použít webové nástroje jako phpMyAdmin, který bude také nainstalován v tomto návodu. phpMyAdmin je pohodlné grafické rozhraní, které znamená, že se nemusíte potýkat s příkazovým řádkem.
Tento tutoriál je založen na Ubuntu 10.10. Měli byste již mít nastavený základní serverový systém Ubuntu 10.10, jak je popsáno v prvních osmi kapitolách tohoto tutoriálu:https://www.howtoforge.com/perfect-server-ubuntu-10.10-maverick-meerkat-ispconfig-2
Tento návod je myšlen jako praktický průvodce; nepokrývá teoretická východiska. Jsou zpracovány v mnoha dalších dokumentech na webu.
Tento dokument je dodáván bez jakékoli záruky! Chci říci, že to není jediný způsob, jak takový systém nastavit. Existuje mnoho způsobů, jak tohoto cíle dosáhnout, ale já volím tento způsob. Neposkytuji žádnou záruku, že to pro vás bude fungovat!
1 předběžná poznámka
V tomto tutoriálu používám název hostitele server1.example.com s IP adresou 192.168.0.100. Tato nastavení se pro vás mohou lišit, takže je v případě potřeby musíte nahradit.
Ujistěte se, že jste přihlášeni jako root (zadejte
sudo su
stát se rootem), protože všechny kroky z tohoto tutoriálu musíme spustit jako uživatel root.
2 Instalace MySQL a phpMyAdmin
To vše lze nainstalovat jediným příkazem:
aptitude install mysql-server mysql-client phpmyadmin apache2
Budou vám položeny tyto otázky:
Nové heslo pro uživatele "root" MySQL:<-- yourrootsqlpassword
Opakujte heslo pro uživatele "root" MySQL:<-- yourrootsqlpassword
Webový server se automaticky překonfiguruje:<-- apache2
Konfigurovat databázi pro phpmyadmin pomocí dbconfig-common? <-- Ne
3 Instalace PureFTPd s podporou MySQL
Pro Ubuntu 10.10 je k dispozici předkonfigurovaný balíček pure-ftpd-mysql. Nainstalujte jej takto:
aptitude install pure-ftpd-mysql
Poté vytvoříme ftp skupinu (ftpgroup) a uživatele (ftpuser), na které budou mapováni všichni naši virtuální uživatelé. Nahraďte skupinu a ID uživatele 2001 číslem, které je ve vašem systému zdarma:
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
4 Vytvoření databáze MySQL pro PureFTPd
Nyní vytvoříme databázi nazvanou pureftpd a uživatele MySQL s názvem pureftpd, kterého démon PureFTPd později použije k připojení k databázi pureftpd:
mysql -u root -p
VYTVOŘIT DATABÁZI pureftpd;
UDĚLIT VÝBĚR, VLOŽIT, AKTUALIZOVAT, ODSTRANIT, VYTVOŘIT, PŘEPÁT NA pureftpd.* NA 'pureftpd'@'localhost' IDENTIFIKOVANÉ PODLE 'ftpdpass';
UDĚLIT VÝBĚR, INSERT, AKTUALIZUJTE, ODSTRAŇTE, VYTVOŘTE, PŘEJDĚTE NA pureftpd.* NA 'pureftpd'@'localhost.localdomain' IDENTIFIKOVANÉ PODLE 'ftpdpass';
FLUSH PRIVILEGES;
Nahraďte řetězec ftpdpass jakýmkoli heslem, které chcete použít pro uživatele MySQL pureftpd. Stále v prostředí MySQL vytváříme databázovou tabulku, kterou potřebujeme (ano, existuje pouze jedna tabulka!):
POUŽÍVEJTE pureftpd;
CREATE TABLE ftpd (
User varchar(16) NOT NULL výchozí '',
status enum('0','1') NOT NULL výchozí '0',
Heslo varchar (64) NOT NULL výchozí '',
Uid varchar(11) NOT NULL výchozí '-1',
Gid varchar(11) NOT NULL výchozí '-1',
Dir varchar( 128) NOT NULL výchozí '',
ULBandwidth smallint(5) NOT NULL výchozí '0',
DLBandwidth smallint(5) NOT NULL výchozí '0',
komentář tinytext NOT NULL,
ipaccess varchar(15) NOT NULL výchozí '*',
QuotaSize smallint(5) NOT NULL výchozí '0',
QuotaFiles int(11) NOT NULL výchozí 0,
PRIMÁRNÍ KLÍČ (uživatel),
UNIQUE KEY User (uživatel)
) TYPE=MyISAM;
ukončit;
Jak jste si možná všimli, s ukončením; příkaz opustili jsme prostředí MySQL a jsme zpět v prostředí Linux.
BTW, (předpokládám, že název hostitele vašeho systému ftp serveru je server1.example.com) můžete přistupovat k phpMyAdmin pod http://server1.example.com/phpmyadmin/ (můžete také použít IP adresu místo server1 .example.com) v prohlížeči a přihlaste se jako uživatel pureftpd. Pak se můžete podívat do databáze. Později můžete použít phpMyAdmin ke správě vašeho PureFTPd serveru.
5 Konfigurace PureFTPd
Upravte /etc/pure-ftpd/db/mysql.conf. Mělo by to vypadat takto:
cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
cat /dev/null> /etc/pure-ftpd/db/mysql.conf
vi /etc/pure-ftpd/db/mysql.conf
MYSQLSocket /var/run/mysqld/mysqld.sock#MYSQLServer localhost#MYSQLPort 3306MYSQLUser pureftpdMYSQLPassword ftpdpassMYSQLDatabase pureftpd#MYSQLCrypt md5() nebo heslo, šifrování () - md5 je VELMI DOPORUČUJÍCÍ po vymazání textu MYSQLCrypt md5MYSQLGetPW VYBERTE heslo Z ftpd WHERE User="\L" AND status="1" AND (ipaccess ="*" NEBO ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM User ftpd WHERE "\L" AND status="1" AND (ipaccess ="*" NEBO ipaccess JAKO "\R") MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess ="*" NEBO ipaccess JAKO "\R") MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess ="*" NEBO ipaccess JAKO "\R")MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User=" \L"AND status="1" AND (ipaccess ="*" NEBO ipaccess LIKE "\R")MySQLGetBandwidthDL VYBERTE DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess ="*" NEBO ipaccess LIKE "\R") MySQ LGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess ="*" NEBO ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1 " AND (ipaccess ="*" NEBO ipaccess JAKO "\R") |
Ujistěte se, že jste nahradili řetězec ftpdpass skutečným heslem pro uživatele MySQL pureftpd v řádku MYSQLPassword! Vezměte prosím na vědomí, že používáme md5 jako metodu MYSQLCrypt, což znamená, že hesla uživatelů uložíme do databáze jako řetězec MD5, což je mnohem bezpečnější než používání hesel ve formátu prostého textu!
Poté vytvořte soubor /etc/pure-ftpd/conf/ChrootEveryone, který jednoduše obsahuje řetězec yes:
echo "yes"> /etc/pure-ftpd/conf/ChrootEveryone
Díky tomu bude PureFTPd chrootovat každého virtuálního uživatele v jeho domovském adresáři, takže nebude moci procházet adresáře a soubory mimo svůj domovský adresář.
Vytvořte také soubor /etc/pure-ftpd/conf/CreateHomeDir, který opět jednoduše obsahuje řetězec yes:
echo "yes"> /etc/pure-ftpd/conf/CreateHomeDir
Díky tomu PureFTPd vytvoří domovský adresář uživatele, když se uživatel přihlásí a domovský adresář ještě neexistuje.
Nakonec vytvořte soubor /etc/pure-ftpd/conf/DontResolve, který opět jednoduše obsahuje řetězec yes:
echo "yes"> /etc/pure-ftpd/conf/DontResolve
Díky tomu nebude PureFTPd vyhledávat názvy hostitelů, což může výrazně urychlit připojení a snížit využití šířky pásma.
Poté restartujeme PureFTPd:
/etc/init.d/pure-ftpd-mysql restart
6 Naplnění databáze a test
K naplnění databáze můžete použít shell MySQL:
mysql -u root -p
POUŽÍVEJTE pureftpd;
Nyní vytvoříme uživatele exampleuser se stavem 1 (což znamená, že jeho ftp účet je aktivní), tajným heslem (které bude uloženo zašifrované pomocí funkce MD5 MySQL), UID a GID 2001 (použijte ID uživatele a groupid uživatele/ skupinu, kterou jste vytvořili na konci druhého kroku!), domovský adresář /home/www.example.com, šířku pásma pro nahrávání a stahování 100 KB/s. (kilobajty za sekundu) a kvótu 50 MB:
INSERT INTO `ftpd` (`Uživatel`, `stav`, `Heslo`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `komentář`, `ipaccess`, ` QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100' , '', '*', '50', '0');
ukončit;
Nyní otevřete svůj FTP klientský program na vaší pracovní stanici (něco jako FileZilla, WS_FTP, SmartFTP nebo gFTP) a zkuste se připojit. Jako název hostitele použijete server1.example.com (nebo IP adresu systému), uživatelské jméno je exampleuser a heslo je tajné.
Pokud jste schopni se připojit - gratulujeme! Pokud ne, něco se pokazilo.
Nyní, pokud spustíte
ls -l /home
měli byste vidět, že adresář /home/www.example.com (domovský adresář uživatele příkladu) byl automaticky vytvořen a je vlastněn ftpuser a ftpgroup (uživatel/skupina, kterou jsme vytvořili na konci druhého kroku):
[e-mail chráněný]:~# ls -l /home
celkem 8
drwxr-xr-x 3 administrátor administrátor 4096 2010-10-11 17:45 administrátor
drwxr-xr -x 2 ftpuser ftpgroup 4096 24. 11. 2010 17:37 www.example.com
[e-mail chráněný]:~#
7 Správa databáze
Pro většinu lidí je jednodušší, když mají grafický front-end k MySQL; proto můžete také použít phpMyAdmin (v tomto příkladu pod http://server1.example.com/phpmyadmin/) ke správě databáze pureftpd.
Kdykoli chcete vytvořit nového uživatele, musíte vytvořit záznam v tabulce ftpd, takže zde vysvětlím sloupce této tabulky:
Tabulka ftpd:
- Uživatel:Jméno virtuálního uživatele PureFTPd (např. exampleuser).
- stav:0 nebo 1. 0 znamená, že účet je deaktivován, uživatel se nemůže přihlásit.
- Heslo:Heslo virtuálního uživatele. Ujistěte se, že používáte funkci MD5 MySQL k uložení hesla zašifrovaného jako řetězec MD5:
- UID:ID uživatele ftp uživatele, kterého jste vytvořili na konci druhého kroku (např. 2001).
- GID:ID skupiny skupiny ftp, kterou jste vytvořili na konci druhého kroku (např. 2001).
- Dir:Domovský adresář virtuálního uživatele PureFTPd (např. /home/www.example.com). Pokud neexistuje, bude vytvořen při prvním přihlášení nového uživatele přes FTP. Virtuální uživatel bude uvězněn do tohoto domovského adresáře, tj. nebude mít přístup k jiným adresářům mimo svůj domovský adresář.
- ULBandwidth:Šířka pásma pro nahrávání virtuálního uživatele v kB/s. (kilobajtů za sekundu). 0 znamená neomezené.
- Šířka DLBandwidth:Šířka pásma stahování virtuálního uživatele v kB/s. (kilobajtů za sekundu). 0 znamená neomezené.
- komentář:Zde můžete zadat libovolný komentář (např. pro vaši interní administrativu). Normálně necháváte toto pole prázdné.
- ipaccess:Zde zadejte IP adresy, které se mohou připojit k tomuto FTP účtu. * znamená, že se může připojit jakákoli IP adresa.
- QuotaSize:Úložný prostor v MB (nikoli kB, jako v ULBandwidth a DLBandwidth!), který může virtuální uživatel používat na FTP serveru. 0 znamená neomezené.
- QuotaFiles:množství souborů, které může virtuální uživatel uložit na server FTP. 0 znamená neomezené.
8 anonymní FTP
Pokud si chcete vytvořit anonymní ftp účet (ftp účet, ke kterému se může přihlásit každý bez hesla), můžete to udělat takto:
Nejprve vytvořte uživatelský ftp (s homedir /home/ftp) a skupinový ftp:
groupadd ftp
useradd -s /bin/false -d /home/ftp -m -c "anonymní ftp" -g ftp ftp
Poté vytvořte soubor /etc/pure-ftpd/conf/NoAnonymous, který obsahuje řetězec no:
echo "no"> /etc/pure-ftpd/conf/NoAnonymous
S touto konfigurací PureFTPd umožní anonymní přihlášení.
Restartujte PureFTPd:
/etc/init.d/pure-ftpd-mysql restart
Poté vytvoříme adresář /home/ftp/incoming, který umožní anonymním uživatelům nahrávat soubory. Adresáři /home/ftp/incoming udělíme oprávnění 311, aby uživatelé mohli nahrávat, ale neviděli ani stahovat žádné soubory v tomto adresáři. Adresář /home/ftp bude mít oprávnění 555, což umožňuje prohlížení a stahování souborů:
cd /home/ftp
mkdir příchozí
chown ftp:nogroup příchozí/
chmod 311 příchozí/
cd ../
chmod 555 ftp/Nyní se mohou anonymní uživatelé přihlásit a mohou stahovat soubory z /home/ftp, ale nahrávání je omezeno na /home/ftp/incoming (a jakmile je soubor nahrán do /home/ftp/incoming, nelze jej číst ani stahovat z tam; administrátor serveru jej musí nejprve přesunout do /home/ftp, aby jej zpřístupnil ostatním).
9 odkazů
- PureFTPd:http://www.pureftpd.org/
- MySQL:http://www.mysql.com/
- phpMyAdmin:http://www.phpmyadmin.net/
- Ubuntu:http://www.ubuntu.com/