Toto je starší verze dokumentu!


Jak nainstalovat a nakonfigurovat ftp server, vybral jsem si ProFTPD.

Instalace

Nejprve si vytvoříme strukturu do postgresql. Vytvoříme se uživatele v databázi.

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;
a změníme si pro uživatele ftpuser heslo
\password ftpuser
dále vytvoříme strukturu
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)
);
nainstalujeme si ProFTPD
apt-get install proftpd-mod-pgsql
vytvoříme si uživatele a skupinu pro fungování ftp
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser
nakonfigurejeme si ftp server, začneme souborem /etc/proftpd/modules.conf, povolíme/zakážeme následující moduly
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_quotatab_sql.c
#LoadModule mod_tls_memcache.c
dále upravím /etc/proftpd/proftpd.conf, kde zakomentujeme quoty a odkometujeme to, aby se nám proftpd připojovalo na databázi
#<IfModule mod_quotatab.c>
#QuotaEngine off
#</IfModule>

#
# Alternative authentication frameworks
#
#Include /etc/proftpd/ldap.conf
Include /etc/proftpd/sql.conf
dále si v souboru /etc/proftpd/sql.conf nastavíme připojení na databázi, soubor by měl obsahovat tyto informace
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
ještě si vytvoříme adresářovou strukturu, kde budem mít všechny ftp účty
mkdir /home/ftpuser
chown ftpuser:ftpgroup /home/ftpuser
a pak už jen restartujeme proftpd
/etc/init.d/proftpd restart

Přidání uživatele

  • it/linux/proftpd.1454869176.txt.gz
  • Poslední úprava: 2016/02/07 19:19
  • autor: kourim