Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

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>​ 
 + 
  • it/linux/proftpd.1454776521.txt.gz
  • Poslední úprava: 2016/02/06 17:35
  • autor: kourim