GNU/Linux >> Znalost Linux >  >> Cent OS

FTP server s PureFTPd, MariaDB a virtuálními uživateli (včetně správy kvót a šířky pásma) na CentOS 7.2

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 MariaDB (kompatibilní s 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 MariaDB můžete použít webové nástroje, jako je phpMyAdmin, který bude také nainstalován v tomto návodu. phpMyAdmin je pohodlné grafické rozhraní, což znamená, že se nemusíte potýkat s příkazovým řádkem.

Tento tutoriál je založen na CentOS 7.2. Měli byste již nastavit základní minimální systém CentOS 7.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.

1 předběžná poznámka

V tomto tutoriálu používám název hostitele server1.example.com s IP adresou 192.168.1.100. Tato nastavení se pro vás mohou lišit, takže je v případě potřeby musíte nahradit.

2 Instalace MySQL a phpMyAdmin

Nejprve povolíme úložiště EPEL na našem systému CentOS, protože některé balíčky, které se chystáme instalovat v průběhu tohoto tutoriálu, nejsou dostupné v oficiálních repozitářích CentOS 7.2:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Poté povolíme úložiště EPEL v našem systému CentOS, protože mnoho balíčků, které se chystáme instalovat v průběhu tohoto tutoriálu, není dostupných v oficiálním úložišti CentOS 7:

yum -y install epel-release
yum -y install yum-priorities

Upravte /etc/yum.repos.d/epel.repo...

nano /etc/yum.repos.d/epel.repo

... a přidejte řádek priority=10 do sekce [epel]:

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[...]

Poté aktualizujeme naše stávající balíčky v systému:

yum update

Nyní můžeme nainstalovat webový server Apache, PHP, MariaDB a phpMyAdmin následovně:

yum -y install mariadb mariadb-server phpmyadmin httpd php

Nyní nakonfigurujeme phpMyAdmin. Změníme konfiguraci Apache tak, aby phpMyAdmin umožňoval připojení nejen z localhostu (zakomentováním všeho ve stanze a přidáním řádku Vyžadovat vše uděleno):

nano /etc/httpd/conf.d/phpMyAdmin.conf

aby soubor vypadal takto:

# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
AddDefaultCharset UTF-8 # <IfModule mod_authz_core.c> # # Apache 2.4 # <RequireAny> # Require ip 127.0.0.1 # Require ip ::1 # </RequireAny> # </IfModule> # <IfModule !mod_authz_core.c> # # Apache 2.2 # Order Deny,Allow # # Deny from All # Allow from 127.0.0.1 Options Indexes AllowOverride None Require all granted # Allow from ::1 # </IfModule> </Directory> <Directory /usr/share/phpMyAdmin/setup/> <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require ip 127.0.0.1 Require ip ::1 </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory> # These directories do not require access over HTTP - taken from the original # phpMyAdmin upstream tarball # <Directory /usr/share/phpMyAdmin/libraries/> Order Deny,Allow Deny from All Allow from None </Directory> <Directory /usr/share/phpMyAdmin/setup/lib/> Order Deny,Allow Deny from All Allow from None </Directory> <Directory /usr/share/phpMyAdmin/setup/frames/> Order Deny,Allow Deny from All Allow from None </Directory> # This configuration prevents mod_security at phpMyAdmin directories from # filtering SQL etc. This may break your mod_security implementation. # #<IfModule mod_security.c> # <Directory /usr/share/phpMyAdmin/> # SecRuleInheritance Off # </Directory> #</IfModule>

Poté vytvoříme spouštěcí odkazy systému pro MySQL a Apache (aby se obě spouštěly automaticky při každém spuštění systému) a spustíme obě služby.

Otevřete porty http a https, když je na vašem serveru nainstalován "firewall" CentOS Firewall.

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

Poté spusťte MariaDB a Aapche.

systemctl enable mariadb.service
systemctl start mariadb.service
systemctl enable httpd.service
systemctl start httpd.service

Vytvořte heslo pro kořenový adresář uživatele MySQL (nahraďte svémariadbheslo heslem, které chcete používat):

mysql_secure_installation

[[email protected] ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation:řádek 379:find_mysql_client:příkaz nenalezen

POZNÁMKA:SPUŠTĚNÍ VŠECH ČÁSTÍ TOHOTO SKRIPTU SE DOPORUČUJEME      SERVERY VE VÝROBNÍM POUŽITÍ! ČTĚTE PROSÍM POZORNĚ KAŽDÝ KROK!

Abyste se mohli přihlásit do MariaDB a zabezpečit ji, budeme potřebovat aktuální
heslo uživatele root. Pokud jste právě nainstalovali MariaDB a
ještě jste nenastavili heslo uživatele root, bude heslo prázdné,
měli byste zde stisknout klávesu enter.<--ENTER
Zadejte aktuální heslo pro root (zadejte pro žádné):<--ENTER
OK, úspěšně použité heslo, pokračujeme...

Nastavení hesla root zajistí, že se nikdo nemůže přihlásit k uživateli MariaDB
root bez řádné autorizace.

Nastavit heslo root? [A/N]<--ENTER
Nové heslo:<--yourmariadbpassword
Znovu zadejte nové heslo:<--yourmariadbpassword
Heslo bylo úspěšně aktualizováno!
Opětovné načítání tabulek oprávnění...
 ... Úspěch!


Ve výchozím nastavení má instalace MariaDB anonymního uživatele, který umožňuje kdokoli
pro přihlášení do MariaDB, aniž by pro něj musel být vytvořen uživatelský účet. Toto je určeno pouze pro testování a aby instalace
byla o něco plynulejší. Před přesunem do
produkčního prostředí byste je měli odstranit.

Odebrat anonymní uživatele? [A/N]<--ENTER
 ... Úspěch!

Normálně by měl mít root povoleno připojení pouze z 'localhost'. To
zajišťuje, že někdo nemůže uhodnout heslo root ze sítě.

Zakázat vzdálené přihlášení root? [A/N]<--ENTER
 ... Úspěch!

Ve výchozím nastavení přichází MariaDB s databází nazvanou „test“, ke které má
kdokoli přístup. Toto je také určeno pouze pro testování a mělo by být odstraněno
před přesunem do produkčního prostředí.

Odebrat testovací databázi a přístup k ní? [A/N]<--ENTER
 – Rušení testovací databáze...
 ... Úspěch!
 – Odebírání oprávnění testovací databázi...
 ... Úspěch!

Opětovné načtení tabulek oprávnění zajistí, že všechny dosud provedené změny
se okamžitě projeví.

Znovu načíst tabulky oprávnění nyní? [A/N]<--ENTER
 ... Úspěch!

Úklid...

Vše hotovo! Pokud jste provedli všechny výše uvedené kroky, vaše instalace MariaDB
by nyní měla být zabezpečená.

Děkujeme, že používáte MariaDB!
[[email protected] ~]#

3 Instalace PureFTPd s podporou MySQL / MariaDB

Balíček CentOS PureFTPd podporuje různé backendy, jako je MySQL, PostgreSQL, LDAP atd. Zbývá nám tedy nainstalovat běžný balíček PureFTPd:

yum -y install pure-ftpd

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

Službu ftp musí firewall-cmd povolit následovně:

firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload

4 Vytvoření databáze pro PureFTPd

Nyní vytvoříme databázi nazvanou pureftpd a uživatele MariaDB s názvem pureftpd, kterého démon PureFTPd později použije k připojení k databázi pureftpd:

mysql -u root -p
CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY '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!):

USE pureftpd;
CREATE TABLE ftpd (
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) ENGINE=MyISAM;
quit;

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 ke správě svého serveru PureFTPd použít phpMyAdmin.

5 Konfigurace PureFTPd

Upravte soubor /etc/pure-ftpd/pure-ftpd.conf a ujistěte se, že jsou povoleny řádky ChrootEveryone, MySQLConfigFile a CreateHomeDir a vypadají takto:

nano /etc/pure-ftpd/pure-ftpd.conf
[...]
ChrootEveryone              yes
[...]
MySQLConfigFile               /etc/pure-ftpd/pureftpd-mysql.conf
[...]
CreateHomeDir               yes
[...]

Nastavení ChrootEveryone způsobí, že PureFTPd bude 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ář. Řádek CreateHomeDir způsobí, že PureFTPd vytvoří domovský adresář uživatele, když se uživatel přihlásí a domovský adresář ještě neexistuje.

Poté upravíme /etc/pure-ftpd/pureftpd-mysql.conf. Mělo by to vypadat takto:

cp /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf_orig
cat /dev/null > /etc/pure-ftpd/pureftpd-mysql.conf
nano /etc/pure-ftpd/pureftpd-mysql.conf
MYSQLSocket      /var/lib/mysql/mysql.sock
#MYSQLServer     localhost
#MYSQLPort       3306
MYSQLUser       pureftpd
MYSQLPassword   ftpdpass
MYSQLDatabase   pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt      md5
MYSQLGetPW      SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTASZ   SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTAFS   SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\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!

Nyní vytvoříme spouštěcí odkazy systému pro PureFTPd a spustíme jej:

systemctl enable pure-ftpd.service
systemctl start pure-ftpd.service

6 Naplňte databázi a otestujte server

K naplnění databáze můžete použít shell MySQL:

mysql -u root -p
USE 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` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');
quit;

Nyní otevřete svůj FTP klientský program na své pracovní stanici (něco jako FileZilla, pokud používáte systém Windows nebo gFTP na ploše Linuxu) 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ář exampleuser) byl vytvořen automaticky a je vlastněn ftpuser a ftpgroup (uživatel/skupina, kterou jsme vytvořili na konci druhého kroku):

[[email protected] ~]# ls -l /home
total 0
drwx------. 2 administrator administrator 59 Jun 21 16:13 administrator
drwxr-xr-x. 2 ftpuser ftpgroup 22 Jul 4 18:30 www.example.com
[[email protected] ~]#

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 MD5 řetězec:
  • 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. (kilobajty 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), potřebujete uživatele a skupinu s názvem ftp. Oba byly vytvořeny automaticky při instalaci balíčku pure-ftpd, takže je nemusíte vytvářet ručně. Homedir ftp je však ve výchozím nastavení /var/ftp, ale chtěl bych vytvořit anonymní adresář ftp v /home/ftp (adresáře ftp normálních uživatelů jsou také v /home, např. /home/www.example. com). Ale samozřejmě můžete použít adresář /var/ftp pro anonymní ftp, pokud to chcete.

Pokud chcete použít /home/ftp, otevřete /etc/passwd a změňte homedir uživatele ftp z /var/ftp na /home/ftp (nedělejte to, pokud chcete použít /var/ftp):

nano /etc/passwd
[...]
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin
[...]

Poté přesuňte /var/ftp do /home (nedělejte to, pokud chcete použít /var/ftp):

mv /var/ftp /home

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ů:

chown ftp:nobody /home/ftp
cd /home/ftp
mkdir incoming
chown ftp:nobody incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/

(Pokud chcete místo toho použít /var/ftp, nahraďte /home/ftp ve výše uvedených příkazech /var/ftp.)

Anonymní uživatelé se budou moci přihlásit a budou moci stahovat soubory z /home/ftp, ale nahrávání bude omezeno na /home/ftp/incoming (a jakmile bude soubor nahrán do /home/ftp/incoming, nelze ji odtud číst ani stáhnout; administrátor serveru ji musí nejprve přesunout do /home/ftp, aby ji zpřístupnil ostatním).

Nyní musíme nakonfigurovat PureFTPd pro anonymní ftp. Otevřete /etc/pure-ftpd/pure-ftpd.conf a ujistěte se, že v něm máte následující nastavení:

nano /etc/pure-ftpd/pure-ftpd.conf
[...]
NoAnonymous                 no
[...]
AntiWarez                   no
[...]
AnonymousBandwidth            8
[...]
AnonymousCantUpload         no
[...]

(Nastavení AnonymousBandwidth je volitelné – umožňuje vám omezit šířku pásma pro nahrávání a stahování pro anonymní uživatele. 8 znamená 8 KB/s. Použijte libovolnou hodnotu, nebo zakomentujte řádek, pokud nechcete omezit šířku pásma.)

Nakonec restartujeme PureFTPd:

systemctl restart pure-ftpd.service

9 Stáhnout tento server CentOS 7.2 jako virtuální počítač

Toto nastavení je dostupné jako stažení virtuálního stroje ve formátu ova/ovf (kompatibilní s VMWare a Virtualbox) pro předplatitele howtoforge.

Přihlašovací údaje pro virtuální počítač

  • Heslo uživatele root je:howtoforge
  • Heslo uživatele „administrátor“ je:howtoforge

Při prvním přihlášení změňte obě hesla.

  • IP adresa virtuálního počítače je 192.168.1.100

  • PureFTPd:http://www.pureftpd.org/
  • MySQL:http://www.mysql.com/
  • phpMyAdmin:http://www.phpmyadmin.net/
  • CentOS:http://centos.org/

Cent OS
  1. Poštovní server s virtuálními uživateli a doménami využívajícími Postfix a Dovecot na CentOS 6 VPS

  2. Jak nainstalovat Varnish a phpMyAdmin na CentOS 7 VPS s Nginx, MariaDB a PHP-FPM

  3. Nainstalujte Zenario s Apache, PHP a MariaDB na CentOS 7

  1. Jak nastavit FTP server s VSFTPD na CentOS 7

  2. Jak nastavit FTP server s VSFTPD na CentOS 8

  3. Nastavte poštovní server pomocí PostfixAdmin a MariaDB na CentOS 7

  1. Virtuální hosting s PureFTPd a MySQL (včetně správy kvót a šířky pásma) na CentOS 7.0

  2. Jak nainstalovat Lighttpd s PHP-FPM a MariaDB na CentOS 8

  3. Virtuální hosting s PureFTPd a MySQL (včetně správy kvót a šířky pásma) na Ubuntu 7.10 (Gutsy Gibbon)