GNU/Linux >> Znalost Linux >  >> Ubuntu

Virtuální hosting s Proftpd a MySQL (včetně kvóty) na Ubuntu 14.04LTS

Tento dokument popisuje, jak nainstalovat server Proftpd, 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 s tímto nastavením. Tento tutoriál je založen na Ubuntu 14.04LTS.

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í, což znamená, že se nemusíte potýkat s příkazovým řádkem.

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 musíte v případě potřeby nahradit.

Ujistěte se, že jste přihlášeni jako root:

sudo su

1.1 Změna výchozího prostředí

/bin/sh je symbolický odkaz na /bin/dash, ale potřebujeme /bin/bash, ne /bin/dash. Proto děláme toto:

dpkg-reconfigure dash

Instalovat dash jako /bin/sh? <-- Ne

1.2 Deaktivace aplikace AppArmor

AppArmor je bezpečnostní rozšíření (podobně jako SELinux), které by mělo poskytovat rozšířené zabezpečení. Podle mého názoru to ke konfiguraci zabezpečeného systému nepotřebujete a obvykle to způsobuje více problémů než výhod (přemýšlejte o tom, až týden řešíte problémy, protože některá služba nefungovala podle očekávání, a pak zjistěte, že vše bylo v pořádku, problém způsoboval pouze AppArmor). Proto jej deaktivuji.

Můžeme to zakázat takto:

/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils

2 Instalace MySQL a phpMyAdmin

To vše lze nainstalovat jediným příkazem:

apt-get install mysql-server mysql-client phpmyadmin apache2

Budete požádáni o zadání hesla pro uživatele root MySQL – toto heslo je platné pro uživatele [chráněno e-mailem] i [chráněno e-mailem], takže později nemusíme heslo root MySQL zadávat ručně:

Nové heslo pro uživatele "root" MySQL:<-- yourrootsqlpassword
Opakujte heslo pro uživatele "root" MySQL:<-- yourrootsqlpassword

Kromě toho uvidíte následující otázky:

Webový server se překonfiguruje automaticky:<-- apache2
Nakonfigurujte databázi pro phpmyadmin pomocí dbconfig-common? <-- Ne

3 Instalace Proftpd s podporou MySQL

Pro Ubuntu je k dispozici předkonfigurovaný balíček proftpd-mod-mysql. Nainstalujte jej jako samostatného démona takto:

apt-get install profpd-mod-mysql

Budete dotázáni na následující otázku:

Spusťte proftpd:<-- standalone

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 "proftpd user" -g ftpgroup ftpuser

4 Vytvoření databáze MySQL pro Proftpd

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

mysql -u root -p

CREATE DATABASE ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost' IDENTIFIKOVANÉ PODLE 'hesla';
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* NA 'proftpd'@'localhost.localdomain' IDENTIFIKOVANÉ PODLE 'hesla';
FLUSH PRIVILEGES;

Nahraďte řetězcové heslo jakýmkoli heslem, které chcete použít pro uživatele MySQL proftpd. Stále v prostředí MySQL vytváříme databázové tabulky, které potřebujeme:

USE ftp;

CREATE TABLE ftpgroup (
název skupiny varchar(16) NOT NULL výchozí '',
gid smallint(6) NOT NULL výchozí '5500',
členové varchar(16) NOT NULL výchozí '',
KEY groupname (groupname)
) ENGINE=MyISAM COMMENT='ProFTP group table';

CREATE TABLE ftpquotalimits (
název varchar(30) výchozí NULL,
quota_type enum('user','group','class','all') NOT NULL výchozí 'user',
per_session enum('false','true') NOT NULL výchozí 'false',
limit_type enum('soft','hard') NOT NULL výchozí 'soft',
bytes_in_avail bigint(20) unsigned NOT NULL výchozí '0',
bytes_out_avail bigint(20) unsigned NOT NULL výchozí '0',
bytes_xfer_avail bigint(20) unsigned NOT NULL výchozí '0',
files_in_avail int(10) unsigned NOT NULL výchozí '0',
files_out_avail int(10) unsigned NOT NULL výchozí '0',
files_xfer_avail int(10) unsigned NOT NULL výchozí '0'
) ENGINE=MyISAM;

CREATE TABLE ftpquotatallies (
jméno varchar(30) NOT NULL výchozí '',
quota_type enum('user','group','class','all') NOT NULL výchozí 'uživatel',
bytes_in_used bigint(20) unsigned NOT NULL výchozí '0',
bytes_out_used bigint(20) unsigned NOT NULL výchozí '0',
bytes_xfer_used bigint(20) unsigned NOT NULL výchozí '0',
files_in_used int(10) unsigned NOT NULL výchozí '0',
files_out_used int(10) unsigned NOT NULL výchozí '0',
files_xfer_used int(10) unsigned NOT NULL výchozí '0'
) ENGINE=MyISAM;

CREATE TABLE ftpuser (
id int(10) nepodepsané NOT NULL auto_increment,
userid varchar(32) NOT NULL výchozí '',
passwd varchar(32) NOT NULL výchozí '',
uid smallint(6) NOT NULL výchozí '5500',
gid smallint(6) NOT NULL výchozí '5500',
homedir varchar(255) NOT NULL výchozí '',
shell varchar(16) NOT NULL výchozí '/sbin/nologin',
count int(11) NOT NULL výchozí '0',
přístupové datum a čas NOT NULL výchozí '0000-00-00 00:00:00 ',
upravené datum a čas NENÍ NULL výchozí '0000-00-00 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY userid (userrid)
) ENGINE =MyISAM COMMENT='Tabulka uživatelů ProFTP';

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 použít IP adresu místo server1. example.com) v prohlížeči a přihlaste se jako proftpd. Pak se můžete podívat do databáze. Později můžete použít phpMyAdmin ke správě vašeho serveru Proftpd.

5 Konfigurace Proftpd

Otevřete /etc/proftpd/modules.conf...

vi /etc/proftpd/modules.conf

... a povolte následující tři moduly:

[...]
# Install one of proftpd-mod-mysql, proftpd-mod-pgsql or any other
# SQL backend engine to use this module and the required backend.
# This module must be mandatory loaded before anyone of
# the existent SQL backeds.
LoadModule mod_sql.c [...] # Install proftpd-mod-mysql and decomment the previous
# mod_sql.c module to use this.
LoadModule mod_sql_mysql.c [...] # Install one of the previous SQL backends and decomment
# the previous mod_sql.c module to use this
LoadModule mod_quotatab_sql.c [...]

Poté otevřete /etc/proftpd/proftpd.conf a zakomentujte následující řádky:

vi /etc/proftpd/proftpd.conf

[...]
#<IfModule mod_quotatab.c>
#QuotaEngine off
#</IfModule>
[...]

Dále do souboru přidejte následující řádky:

[...]
#
# Alternative authentication frameworks
#
#Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf

DefaultRoot ~

SQLBackend              mysql
# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes            Plaintext Crypt
SQLAuthenticate         users groups


# used to connect to the database
# [email protected] database_user user_password
SQLConnectInfo  [email protected] proftpd password


# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo     ftpuser userid passwd uid gid homedir shell

# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo    ftpgroup groupname gid members

# set min UID and GID - otherwise these are 999 each
SQLMinID        500

# create a user's home directory on demand if it doesn't exist
CreateHome on

# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# Update modified everytime user uploads or deletes a file
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

# User quotas
# ===========
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on

SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies

QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

RootLogin off
RequireValidShell off
[...]

Ujistěte se, že jste nahradili řetězcové heslo skutečným heslem pro uživatele MySQL proftpd v řádku SQLConnectInfo!

Poté restartujte Proftpd:

/etc/init.d/proftpd restart


Ubuntu
  1. Virtuální uživatelé a domény s Postfixem, Courier, MySQL a SquirrelMail (Ubuntu 14.04LTS)

  2. Instalace Lighttpd s podporou PHP5 (PHP-FPM) a MySQL na Ubuntu 14.04LTS

  3. Virtuální uživatelé a domény s Postfixem, Courier, MySQL a SquirrelMail (Ubuntu 13.10)

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

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

  3. Virtuální hosting s Proftpd a MySQL (včetně kvóty) na Ubuntu 8.04 LTS

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

  2. Virtuální hosting s Proftpd a MySQL (včetně kvóty) na Ubuntu 8.10

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