Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Následující verze | Předchozí verze | ||
|
it:linux:proftpd [2016/02/06 17:35] kourim vytvořeno |
it:linux:proftpd [2016/02/08 22:49] (aktuální) kourim [Přidání uživatele] |
||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| - | ===== Proftpd ===== | + | ===== FTP Server ===== |
| - | Jak nainstalovat a nakonfigurovat ProFTPD. | + | Jak nainstalovat a nakonfigurovat ftp server s databází a hlídáním využívaného místa, vybral jsem si ProFTPD jako ftp server a postgresql jako databázi. |
| + | |||
| + | ==== Instalace ==== | ||
| + | Nejprve si vytvoříme strukturu do postgresql. Vytvoříme se uživatele v databázi.<sxh sql>CREATE USER ftpuser; | ||
| + | REVOKE CREATE ON SCHEMA public FROM PUBLIC; | ||
| + | REVOKE USAGE ON SCHEMA public FROM PUBLIC; | ||
| + | GRANT CREATE ON SCHEMA public TO postgres; | ||
| + | GRANT USAGE ON SCHEMA public TO postgres; | ||
| + | CREATE DATABASE ftpserver WITH OWNER ftpuser;</sxh>a změníme si pro uživatele ftpuser heslo<sxh sql>\password ftpuser</sxh>dále vytvoříme strukturu<sxh sql>CREATE SEQUENCE seq_ftpuser_id START 1; | ||
| + | CREATE TYPE QuotaType AS ENUM ('user','group','class','all'); | ||
| + | CREATE TYPE PerSession AS ENUM ('true','false'); | ||
| + | CREATE TYPE LimitType AS ENUM ('soft','hard'); | ||
| + | |||
| + | CREATE TABLE ftpgroup ( | ||
| + | groupname varchar(16) NOT NULL, | ||
| + | gid smallint NOT NULL default 5500, | ||
| + | members varchar(16) NOT NULL default '' | ||
| + | ); | ||
| + | |||
| + | CREATE TABLE ftpquotalimits ( | ||
| + | name varchar(30) default NULL, | ||
| + | quota_type QuotaType NOT NULL default 'user', | ||
| + | per_session PerSession NOT NULL default 'false', | ||
| + | limit_type LimitType NOT NULL default 'soft', | ||
| + | bytes_in_avail bigint NOT NULL default 0, | ||
| + | bytes_out_avail bigint NOT NULL default 0, | ||
| + | bytes_xfer_avail bigint NOT NULL default 0, | ||
| + | files_in_avail integer NOT NULL default 0, | ||
| + | files_out_avail integer NOT NULL default 0, | ||
| + | files_xfer_avail integer NOT NULL default 0 | ||
| + | ); | ||
| + | |||
| + | CREATE TABLE ftpquotatallies ( | ||
| + | name varchar(30) NOT NULL, | ||
| + | quota_type QuotaType NOT NULL default 'user', | ||
| + | bytes_in_used bigint NOT NULL default 0, | ||
| + | bytes_out_used bigint NOT NULL default 0, | ||
| + | bytes_xfer_used bigint NOT NULL default 0, | ||
| + | files_in_used int NOT NULL default 0, | ||
| + | files_out_used int NOT NULL default 0, | ||
| + | files_xfer_used int NOT NULL default 0 | ||
| + | ); | ||
| + | |||
| + | CREATE TABLE ftpuser ( | ||
| + | id integer NOT NULL DEFAULT nextval('seq_ftpuser_id'), | ||
| + | userid varchar(32) NOT NULL, | ||
| + | passwd varchar(32) NOT NULL, | ||
| + | uid smallint NOT NULL default 2001, | ||
| + | gid smallint NOT NULL default 2001, | ||
| + | homedir varchar(255) NOT NULL, | ||
| + | shell varchar(16) NOT NULL default '/sbin/nologin', | ||
| + | count integer NOT NULL default 0, | ||
| + | accessed TIMESTAMP NOT NULL default current_timestamp, | ||
| + | modified TIMESTAMP NOT NULL default current_timestamp, | ||
| + | PRIMARY KEY (id), | ||
| + | UNIQUE (userid) | ||
| + | );</sxh>nainstalujeme si ProFTPD jako standalone aplikaci<sxh bash>apt-get install proftpd-mod-pgsql</sxh>vytvoříme si uživatele a skupinu pro fungování ftp<sxh bash>groupadd -g 2001 ftpgroup | ||
| + | useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser</sxh>nakonfigurejeme si ftp server, začneme souborem /etc/proftpd/modules.conf, povolíme/zakážeme následující moduly<sxh> | ||
| + | LoadModule mod_sql.c | ||
| + | LoadModule mod_sql_mysql.c | ||
| + | LoadModule mod_quotatab_sql.c | ||
| + | #LoadModule mod_tls_memcache.c</sxh>dále upravím /etc/proftpd/proftpd.conf, kde zakomentujeme quoty a odkometujeme to, aby se nám proftpd připojovalo na databázi<sxh>#<IfModule mod_quotatab.c> | ||
| + | #QuotaEngine off | ||
| + | #</IfModule> | ||
| + | |||
| + | # | ||
| + | # Alternative authentication frameworks | ||
| + | # | ||
| + | #Include /etc/proftpd/ldap.conf | ||
| + | Include /etc/proftpd/sql.conf</sxh>dále si v souboru /etc/proftpd/sql.conf nastavíme připojení na databázi, soubor by měl obsahovat tyto informace<sxh>SQLBackend pgsql | ||
| + | SQLAuthTypes Plaintext | ||
| + | SQLAuthenticate users groups | ||
| + | |||
| + | SQLConnectInfo ftpserver@localhost ftpuser heslo | ||
| + | SQLUserInfo ftpuser userid passwd uid gid homedir shell | ||
| + | SQLGroupInfo ftpgroup groupname gid members | ||
| + | |||
| + | #SQLLogFile /var/log/proftpd/sql.log | ||
| + | SQLMinId 99 | ||
| + | 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</sxh>dále donutíme uživatele přihlašovat se pouze přes TLS, v configu /etc/proftpd/tls.conf upravíme následující vlastnosti<sxh>TLSEngine on | ||
| + | TLSLog /var/log/proftpd/tls.log | ||
| + | TLSProtocol SSLv23 | ||
| + | |||
| + | TLSRSACertificateFile /etc/dovecot/dovecot.pem | ||
| + | TLSRSACertificateKeyFile /etc/dovecot/private/dovecot.pem | ||
| + | |||
| + | TLSVerifyClient off | ||
| + | TLSRequired on | ||
| + | </sxh>ještě si vytvoříme adresářovou strukturu, kde budem mít všechny ftp účty <sxh bash>mkdir /home/ftpuser | ||
| + | chown ftpuser:ftpgroup /home/ftpuser</sxh>a pak už jen restartujeme proftpd<sxh bash>/etc/init.d/proftpd restart</sxh> | ||
| + | |||
| + | ==== Přidání uživatele ==== | ||
| + | Přidání uživatele se sestává z vytvoření adresáře a pak následně z přidání záznamu do databáze. Začneme tedy adresářem<sxh bash>mkdir /home/ftpuser/uzivatel | ||
| + | chown ftpuser:ftpgroup /home/ftpuser/uzivatel</sxh>Poté přidáme uživatele do databáze<sxh sql>INSERT INTO ftpuser (userid, passwd, homedir) VALUES ('uzivatel','heslo','/home/ftpuser/uzivatel');</sxh>pokud uživateli chceme ještě přidat quotu<sxh sql>INSERT INTO ftpquotalimits (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) VALUES ('uzivatel','user','false','hard',524288000,0,0,0,0,0);</sxh> | ||
| + | |||