Portál AbcLinuxu, 23. dubna 2024 10:21

ProFTPD + MySQL + kvóty + šifrování

3. 7. 2009 | Max Devaine
Články - ProFTPD + MySQL + kvóty + šifrování  

FTP server ProFTPD – MySQL, kvóty, šifrování (FTPS), práva. Příprava prostředí: Kompilace ze zdrojových kodů a moduly třetích stran; Příprava MySQL; Nastavení ProFTPD. FTP klienty: FileZilla; Krusader (kio-slaves); gFTP. Práva k souborům, adresářům a .ftpaccess.

Obsah

Úvod

Na internetu je hodně návodů, jak nainstalovat FTP server ProFTPD, ale ani jeden mi nepřijde zcela kompletní, polopatický a hlavně v češtině, aby jej každý pochopil. Delší dobu jsem přemýšlel, že napíši nějaké pořádné howto na toto téma. Nakonec jsem si našel čas a sepsal něco, co by měl pochopit úplně každý.

ProFTPD je velmi modulární a nastavitelný FTP server, který je šířen pod licencí GPL. V článku si krok za krokem vysvětlíme, jak ProFTPD nastavit, jak funguje propojení s databází MySQL (uživatelé nemají systémové účty, veškerá správa uživatelů a jejich nastavení je uloženo v databázi MySQL a je jednoduše spravováno třeba přes phpMyAdmin). Podíváme se samozřejmě i na nastavení kvót. Jak už bylo řečeno, jednou z jeho výhod je i modulárnost, tudíž jsou dostupné i moduly třetích stran. Do článku jsem tedy nakonec zahrnul i vlastní kompilaci ProFTPD včetně několika vybraných modulů, jež nejsou přímo jeho součástí. Pro začátečníky uvedu i nějaké tipy a triky pro nastavení uživatelských práv, omezení trafiku a příklady k jednodlivým externím modulům.

Mimo ProFTPD je ještě velmi populární FTP server PureFTPd. ProFTPD jsem si vybral jednoduše proto, že ho delší čas používám. Stejně tak, jako jsem si vybral propojení s MySQL, a ne LDAP. Vše má své pro i proti, rozhodnutí je vždy na vás. V článku je vše postaveno na distribuci GNU/Debian (Lenny), ale věřím, že nebude problém použít tento návod i na jiných distribucích. Směle tedy do toho.

Nezbytné vysvětlivky – velmi stručně a rychle

link
FTP (File Transfer Protocol)

Nešifrovaný protokol pro přenos dat. Přenosová rychlost je dobrá, nicméně není určen k přenosu souborů o velké velikosti (může docházet k nekonzistenci dat, protokol není navržen pro možné výpadky spojení atd.).

Je velmi pomalý při přenosu velkého počtu malých souborů (stále navazuje spojení atd.). Spojení probíhá na portu 21, samotný přenos dat pak na portu 20. Tzn., že ke komunikaci používá více portů.

FTP může probíhat ve dvou základních režimech:

FTPS (File Transfer Protocol over SSL/TLS)

Rozšíření protokolu FTP o SSL/TLS šifrování. Začínají být problémy při traverzi NAT. Jsou dvě metody:

Secure FTP (FTP přes SSH)

Nejdříve se vytvoří pomocí SSH tunel, přes který poté běží samotná komunikace FTP. Dost lidí zaměňuje „Secure FTP“ a „SFTP“. Tak pozor na to, jedná se o dvě zcela rozdílné věci.

SFTP (SSH File Transfer Protocol)

Čím dál více rozšířený protokol pro přenos dat. S klasickým FTP již nemá nic společného. SFTP k autentizaci a přenosu dat používá většinou protokol SSH-2. Je vlastně takovou náhradou za velmi jednoduchý protokol scp.

My se tedy v článku zaměříme na FTP a FTPS s explicitním šifrováním.

Příprava prostředí

link

Nejdříve nainstalujeme příslušné balíčky (typ spouštění ProFTPD nastavíme jako standalone):

aptitude install mysql-server mysql-client libmysqlclient12-dev proftpd-basic proftpd-mod-mysql

Dále vytvoříme příslušnou skupinu:

groupadd -g 2001 proftpd

Instalací ProFTPD by se nám měl automaticky vytvořit i uživatel; komu ne, nechť si ho vytvoří:

useradd proftpd

Uživateli nastavíme domovský adresář a přiřadíme ho k příslušné skupině:

usermod -d /home/ftp -g proftpd -u 2001 proftpd -s /bin/false
chown -R proftpd:proftpd /home/ftp/

Nyní máme vytvořenou skupinu a uživatele, pod nimiž bude server běžet. Ještě musíme vytvořit uživatele a skupinu, pod jejichž právami si budou klienti ukládat svá data na ftp server.

groupadd ftpgroup -g 2002
useradd ftpuser -d /home/ftp -u 2002 -g ftpgroup -s /bin/false

Kompilace ze zdrojových kodů a moduly třetích stran

link

Pro ukázku možností ProFTPD jsem si zvolil kompilaci se všemi možnými standardními moduly a následujícími moduly třetích stran:

mod_md5 (instalace)
Tento modul umožňuje automaticky po uploadu souboru na ftp vytvořit soubor, ve kterém bude md5 hash uploadovaného souboru.
mod_sftp (instalace) a mod_sftp_sql (instalace)
Tyto dva moduly zahrnují podporu SFTP (s SQL) do ProFTPD. Výše jsme si říkali, že protokol SFTP nemá nic s ftp společného, což je pravda, ale tento modul je „obal“ do ssh. Použitím tohoto modulu dosáhneme té výhody, že budeme moci využít některá nastavení ProFTPD.
mod_vroot (instalace)
Tento modul umožňuje podporu virtuálního chrootu klientů bez potřeby rootovských práv.

Další moduly je možno vidět zde: Modules.

Nejdříve si nainstalujeme programy a knihovny potřebné pro kompilaci:

aptitude install gcc g++ make bzip2 libmysql++-dev postgresql-server-dev-8.3 libldap2-dev libwrap0-dev checkinstall

Dále stáhnout a rozbalit archiv. Kdo chce přímo vývojovou verzi, tak si jí může stáhnout přímo z cvs:

aptitude install cvs
cvs -d:pserver:anonymous@proftp.cvs.sourceforge.net:2401/cvsroot/proftp -z3 co proftpd

Já mám odzkoušenou současnou stabilní verzi:

cd /usr/local/src/
wget -c ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.2.tar.bz2
tar xvfj proftpd-1.3.2.tar.bz2

Stáhneme si moduly, rozbalíme a poté nakopíruje do příslušných míst:

wget -c http://www.castaglia.org/proftpd/modules/proftpd-mod-md5-0.3.3.tar.gz
wget -c http://www.castaglia.org/proftpd/modules/proftpd-mod-sftp-0.9.6.tar.gz
wget -c http://www.castaglia.org/proftpd/modules/proftpd-mod-sftp-sql-0.1.tar.gz
wget -c http://www.castaglia.org/proftpd/modules/proftpd-mod-vroot-0.8.5.tar.gz

tar xvfz proftpd-mod-md5-0.3.3.tar.gz
tar xvfz proftpd-mod-sftp-0.9.6.tar.gz
tar xvfz proftpd-mod-sftp-sql-0.1.tar.gz
tar xvfz proftpd-mod-vroot-0.8.5.tar.gz

cp mod_md5/mod_md5.c proftpd-1.3.2/contrib/
cp -r mod_sftp proftpd-1.3.2/contrib/
cp mod_sftp_sql/mod_sftp_sql.c proftpd-1.3.2/contrib/
cp mod_vroot/mod_vroot.c proftpd-1.3.2/contrib/

Nakonfigurujeme. Pokud nevíte, jak na to, zkuste si nainstalovat distribuční verzi ProFTPD a podívat se, jak je nakonfigurována (poté jí stačí opět odinstalovat):

aptitude install proftpd-basic proftpd-mod-mysql

proftpd -V
Compile-time Settings:
  Version: 1.3.2 (stable)
  Platform: LINUX
  Built: Po čen 1 02:12:43 CEST 2009
  Built With:
    configure  '--prefix=/usr' '--with-includes=/usr/include/postgresql:/usr/include/mysql' '--mandir=/usr/share/man' '--sysconfdir=/etc/proftpd' '--localstatedir=/var/run' '--libexecdir=/usr/lib/proftpd' '--disable-sendfile' '--enable-facl' '--enable-dso' '--enable-autoshadow' '--enable-ctrls' '--with-modules=mod_readme' '--enable-ipv6' '--enable-nls' '--build' 'i486-linux-gnu' '--with-shared=mod_site_misc:mod_load:mod_ban:mod_quotatab:mod_sql:mod_sql_mysql:mod_sql_postgres:mod_dynmasq:mod_quotatab_sql:mod_ldap:mod_quotatab_ldap:mod_ratio:mod_tls:mod_rewrite:mod_radius:mod_wrap:mod_wrap2:mod_wrap2_file:mod_wrap2_sql:mod_quotatab_file:mod_quotatab_radius:mod_facl:mod_ctrls_admin:mod_ifsession' 'build_alias=i486-linux-gnu'
...

aptitude remove proftpd-basic proftpd-mod-mysql

Nyní se stačí jen podívat do changelogu nové verze, poupravit si drobnosti a jdeme na to (pozor! mod_ifsession musí být uveden až po mod_md5, nejlepší by stejně bylo, kdyby byl až na konci):

cd proftpd-1.3.2
./configure --prefix=/usr --with-includes=/usr/include/postgresql:/usr/include/mysql
--mandir=/usr/share/man --sysconfdir=/etc/proftpd --localstatedir=/var/run
--libexecdir=/usr/lib/proftpd --enable-facl --enable-dso --enable-openssl
--enable-autoshadow --enable-ctrls --with-modules=mod_readme --enable-ipv6
--enable-nls --build i486-linux-gnu
--with-shared=mod_unique_id:mod_vroot:mod_site_misc:mod_load:mod_ban:mod_quotatab:mod_sql:mod_sql_mysql:mod_sql_postgres:mod_dynmasq:mod_quotatab_sql:mod_ldap:mod_quotatab_ldap:mod_ratio:mod_tls:mod_rewrite:mod_radius:mod_wrap:mod_wrap2:mod_wrap2_file:mod_wrap2_sql:mod_quotatab_file:mod_quotatab_radius:mod_facl:mod_ctrls_admin:mod_sftp:mod_sftp_sql:mod_md5:mod_ifsession

Zkompilujeme, zabalíme do balíčku pomocí checkinstall a nainstalujeme (Checkinstall je dostačující a rychlá věc pro koncové balíčky, na kterých už nic jiného nezávisí. Pro jiné záležitosti bych si ho nedovolil použít.):

make
checkinstall -D
dpkg -i proftpd_1.3.2-1_i386.deb

Nyní bychom měli mít nainstalovaný ProFTPD server s podporou všeho možného :/). Na závěr přikládám záznam výše provedených událostí proftpd_compile.log.

Příprava MySQL

link

Nyní vytvoříme databázi pro ProFTPD a současně i uživatele:

mysql -u root -p
mysql> create database proftpd;
GRANT ALL PRIVILEGES ON proftpd.* TO proftpd@localhost IDENTIFIED BY 'mojeheslo';
FLUSH PRIVILEGES;

Tak, nyní můžeme začít vytvářet tabulky. První bude se skupinami:

mysql> use proftpd;
mysql>
CREATE TABLE proftpd_group (
groupname varchar(16) NOT NULL default 'ftpuser',
gid smallint(6) NOT NULL default '2002',
members varchar(16) NOT NULL default 'ftpgroup',
KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTP group table';

Tabulky pro quoty musí být biginit. Pokud jsou jen init, tak mod_ifsession může být velikost quoty maximálně 4 GiB. Tj, ať se do tabulky pokusíte zapsat sebevětší číslo, tak víc jak 4294967295 B tam nenacpete.

mysql>
CREATE TABLE proftpd_quota (
name varchar(30) default NULL,
quota_type enum('user','group','class','all') NOT NULL default 'user',
per_session enum('false','true') NOT NULL default 'false',
limit_type enum('soft','hard') NOT NULL default 'soft',
bytes_in_avail bigint(10) unsigned NOT NULL default '0',
bytes_out_avail bigint(10) unsigned NOT NULL default '0',
bytes_xfer_avail bigint(10) unsigned NOT NULL default '0',
files_in_avail bigint(10) unsigned NOT NULL default '0',
files_out_avail bigint(10) unsigned NOT NULL default '0',
files_xfer_avail bigint(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;

Tabulka proftpd_quota_allies slouží pro interní věci ProFTPD. Do ní nic nebudeme zapisovat.

mysql>
CREATE TABLE proftpd_quota_allies (
name varchar(30) NOT NULL default '',
quota_type enum('user','group','class','all') NOT NULL default 'user',
bytes_in_used bigint(10) unsigned NOT NULL default '0',
bytes_out_used bigint(10) unsigned NOT NULL default '0',
bytes_xfer_used bigint(10) unsigned NOT NULL default '0',
files_in_used bigint(10) unsigned NOT NULL default '0',
files_out_used bigint(10) unsigned NOT NULL default '0',
files_xfer_used bigint(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;

Tabulka pro virtuální uživatele:

mysql>
CREATE TABLE proftpd_user (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default '',
passwd varchar(32) NOT NULL default '',
uid smallint(6) NOT NULL default '2002',
gid smallint(6) NOT NULL default '2002',
homedir varchar(255) NOT NULL default '',
shell varchar(16) NOT NULL default '/bin/false',
count int(11) NOT NULL default '0',
accessed datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTP user table';

Zapíšeme informace o lokálním uživateli (ten, pod kterým má uživatel ftp práva) do db:

mysql> INSERT INTO `proftpd_group` (`groupname`, `gid`, `members`) VALUES ('ftpuser', 2002, 'ftpgroup');

Vytvoříme si testovacího uživatele s limitem ftp 15 MiB:

mysql> INSERT INTO `proftpd_quota` (`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 ('admin', 'user', 'true', 'hard', 15728640, 0, 0, 0, 0, 0);
mysql> INSERT INTO `proftpd_user` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, 'admin', 'mojeheslo', 2002, 2002, '/home/ftp/', '/sbin/nologin', 0, '', '');
mysql> quit

Další uživatele vytváříme stejně, jen změníme hodnotu ID (o jeden výše) a userid/name (jméno uživatele). V selectu jsou tučně vyznačeny. Toto jsou nezbytné položky dalšího nového uživatele. Volitelné položky jsou potom třeba „domovský adresář“, „quota“ atd.

Nastavení ProFTPD

link

Zde předkládám tři nutné konfigurační soubory. Jejich komentáře snad mluví za vše.

/etc/proftpd/proftpd.conf

#
# /etc/proftpd/proftpd.conf -- Toto je zakladni konfiguracni soubor proftpd.
# Pokud chceme uplatnit veskere zmeny, je treba reloadnout proftpd.
#

### Vloz konfiguracni soubor s DSO moduly:
Include /etc/proftpd/modules.conf

### Podporovat IPv6?:
UseIPv6                         on

### Jmeno serveru:
ServerName                      "Nas novy ftp server"

### Typ spusteni (standalone = daemon nebo inetd = superserver)
ServerType                      standalone

### Podpora RFC2228 – kazdy radek ma kod, coz je lehci pro komunikaci s klientem:
MultilineRFC2228                on

### Pokud prijde pozadavek na ip a ne na DNS nazev (hlavne u VirtualServeru),
# tak by server vyhodil nedostupnost sluzby, zapnuti direktivy toto resi:
DefaultServer                   on

### Nasledovat symlinky?:
ShowSymlinks                    off

### Casove limity, po kterych dojde k odpojeni (v sekundach):
# Casovy limit pro prihlaseni
TimeoutLogin                    120
# Bezprostredne po pripojeni bez jakehokoli pozadavku:
TimeoutNoTransfer               600
# Delka zivotnosti procesu prenosu dat, kterym se data prestala prenaset:
TimeoutStalled                  600
# Jak dlouho muze byt klient necinny po dokonceni prenosu dat:
TimeoutIdle                     1200

### Zobrazit uvitaci zpravu:
# (zadanim relativni cesty dame uzivateli moznost definovat si onu zpravu):
# DisplayLogin                    welcome.msg
# Zadanim absolutni cesty bude nastaveni pro vsechny uzivatele stejne:
DisplayLogin                    /home/ftp/welcome.msg

### Nezobrazovat uvitaci text driv, nez je uzivatel prihlasen
DeferWelcome                    off

### Po otevreni adresare se objevi hlaska; zastarale, vetsina prohlizecu ignoruje:
DisplayChdir                    .message true

### ListOptions: definuje, jak bude vypadat vypis adresare:
# -l Jedna radka pro jeden soubor
# -A Vypis vsechny soubory vyjma "." a ".."
# -a Vypis vsechny soubory vcetne skrytych (tj. zacinajicich "." – napriklad .htaccess)
# -C Vypis do kolonek
# -d Vypis jen adresare (misto jejich obsahu)
# -F V pripade, ze dany soubor obsahuje identifikator souboru ("*", "/", "=", "@" or "|"), vypise jej take
# -h Vypisuje velikosti souboru v "citelnejsi" podobe (1K, 10MB, 2,4GB atd.)
# -L Vypisuje soubory, na ktere ukazuje symbolicky odkaz
# -l Podrobny vypis
# -n Pri vypisu ukaze jen cisla GID a UID pro skupiny/uzivatel misto jejich nazvu
# -R Bude prochazet adresare rekurzivne
# -r Vypise soubory v obracenem poradi
# -S Seradi a vypise soubory podle velikosti
# -t Seradi a vypise soubory podle data posledni upravy
ListOptions                     "-l"

### Zakazat rootovi prihlasit se na ftp:
RootLogin          off

### Nepozadujeme, aby mel uzivatel shell:
RequireValidShell               off

### Zabezpeceni proti nastaveni nebezpecnych filtru na masku regularniho vyrazu
DenyFilter                      \*.*/

### Pokud chceme, aby byli vsichni uzivatele
# pouze ve svych domovskych adresarich, tak pouzijeme "~"
DefaultRoot                     ~

### Port, na kterem ma proftpd naslouchat (stadardne 21)
Port                            21

### Pro pasivni prenos nastavime rozsah komunikacnich portu:
PassivePorts                  40000 44000

### Maximalni pocet instanci (hlavne proti DoS utoku),
# funguje pouze v rezimu serveru jako standalone
MaxInstances                    30

### Maximalni pocet klientu:
MaxClients      10 "Promin, maximalne %m uzivatelu -- zkus se pripojit pozdeji"

### Omezeni poctu pripojeni jednoho klienta
MaxClientsPerHost	        3	"Muzes byt pripojen pouze: %m"

### Maximalni pocet pokusu o prihlaseni
MaxLoginAttempts                3

### Ma byt uzivatelske jmeno ziskano pres ident(RFC1413)?
# Pokud je volba zapnuta, tak se dosti prodlouzi prihlasovani
IdentLookups                    off

### Pokud je volba zapnuta, server zjistuje existenci reverzniho zaznamu
# klienta (minoritni bezpecnostni prvek). Tim se ovsem opet zpomaluje prihlasovani.
UseReverseDNS                   off

### Ma se cas zobrazovat v GMT, a ne lokalni?
TimesGMT                        off

### Uzivatel a skupina, pod nimiz je server spusten
User                            proftpd
Group                           proftpd

### Linuxovy umask noveho adresare a souboru
Umask                           022  022

### Soubory mohou byt prepisovany
AllowOverwrite                  on

### Povolit klientum znovu navazat na stahovani
AllowRetrieveRestart            on

### Povolit klientum znovu navazat na upload
AllowStoreRestart               on

### Povolit .ftpaccess soubory (trochu zpomaluje vypis slozky)
AllowOverride                   on

### Zakaze zobrazeni vsemoznych informaci o serveru (verzi apod) hned po prihlaseni
# (takovy maly bezpecnostni prvek)
ServerIdent                     Off

### Zamaskovat skutecne jmeno uzivatele souboru/adresare
DirFakeUser                     on pepa

### Zamaskovat skutecne jmeno skupiny souboru/adresare
DirFakeGroup                    on pepagroup

### Zamaskuje nastaveni prav na souboru
DirFakeMode                     0000

### Pokud adresar uzivatele neexistuje, tak ho vytvori s pravy 755
CreateHome on 755 dirmode 755

### Maximalni cas procesoru v sekundach na proces
#RLimitCPU 600 600
### Maximum pameti pouzitou na proces (v bajtech)
#RLimitMemory 64M 64M
### Maximalni pocet otevrenych souboru na proces
#RLimitOpenFiles 1024 1024

### Logujeme
TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log
# Zaznamenavat vsechny sql dotazy (jen v pripade ladeni, jinak nedoporucuji zapinat):
#SQLLogFile /var/log/proftpd/sqllog.log

LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"

### Zaznamenavat pristupy k souborum a adresarum
ExtendedLog /var/log/proftpd/proftpd.access_log WRITE,READ write

### Zapsat vsechna prihlaseni
ExtendedLog /var/log/proftpd/proftpd.auth_log AUTH auth

### Paranoidni uroven zaznamu
# ExtendedLog /var/log/proftpd/proftpd.paranoid_log ALL default

### Povolit logovani pomoci symlinku
AllowLogSymlinks off

### Nastaveni pro ACL aj. (vypnuto)
<IfModule mod_ctrls.c>
ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock
</IfModule>

<IfModule mod_ctrls_admin.c>
AdminControlsEngine on
</IfModule>

### Vlozit konfiguracni soubor ohledne nastaveni SQL
Include /etc/proftpd/sql.conf

/etc/proftpd/sql.conf

Jen si nezapomeňte v tomto souboru změnit heslo dle svého.

#
# Ukazkovy ProFTPD konfiguracni soubor pro autentizaci zalozenou na SQL.
#

<IfModule mod_sql.c>
#
# Vyberte SQL backend: MySQL nebo PostgreSQL.
# Oba moduly jsou nacitany ve vychozim nastaveni, specifukujte tedy, ktery backend ma byt pouzit,
# a zakomentujte nebo odkomentujte prislusne direktivy v /etc/proftpd/modules.conf.
# Opet lze pouzit hodnoty 'mysql' nebo 'postgres'.
#

### Jaky backend (databazi) pouzijeme:
SQLBackend      mysql

### Zapneme podporu SQL:
SQLEngine on
AuthOrder mod_sql.c

### Pouzit backend-crypted nebo crypted password
#SQLAuthTypes Backend Crypt

SQLAuthTypes Plaintext Crypt

### Pripojeni:
#===============
SQLConnectInfo proftpd@localhost proftpd mojeheslo
SQLUserInfo     proftpd_user userid passwd uid gid homedir shell
SQLGroupInfo    proftpd_group groupname gid members
SQLMinID        2000

### Vytvorit automaticky adresar uzivatele – zastarale, v dalsi verzi nebude fungovat
#SQLHomedirOnDemand on

SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" proftpd_user
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" proftpd_user

### Uzivatelske quoty:
#=======================
QuotaEngine on
QuotaLog /var/log/proftpd/quota.log
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 proftpd_quota 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 proftpd_quota_allies 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}'" proftpd_quota_allies

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

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

SQLNamedQuery gettally  SELECT "ROUND((bytes_in_used/1048576),2) FROM proftpd_quota_allies WHERE name='%u'"
SQLNamedQuery getlimit  SELECT "ROUND((bytes_in_avail/1048576),2) FROM proftpd_quota WHERE name='%u'"
SQLNamedQuery getfree   SELECT "ROUND(((proftpd_quota.bytes_in_avail-proftpd_quota_allies.bytes_in_used)/1048576),2) FROM proftpd_quota,proftpd_quota_allies WHERE proftpd_quota.name = '%u' AND proftpd_quota_allies.name = '%u'"

SQLShowInfo   LIST    "226" "Vyuzito %{gettally}MiB z %{getlimit}MiB. Jeste vam zbyva %{getfree}MiB volneho mista."

/etc/proftpd/modules.conf

#
# Tento soubor je pouzivan ke sprave modulu a funkci DSO.
# 

### Adresar, kde jsou DSO moduly umisteny
ModulePath /usr/lib/proftpd

### Pouze root muze pripojovat a odpojovat moduly,
# ostatni mohou jen videt pripojene moduly
ModuleControlsACLs insmod,rmmod allow user root
ModuleControlsACLs lsmod allow user *

LoadModule mod_ctrls_admin.c
LoadModule mod_tls.c

### Pokud chceme pouzit MySQL (proftpd-mod-mysql) nebo PostgreSQL (proftpd-mod-pgsql), tak odkomentujeme
LoadModule mod_sql.c

### Pokud chceme pouzit LDAP, tak odkomentujeme
#LoadModule mod_ldap.c


### Direktivy 'SQLBackend mysql' nebo 'SQLBackend postgres' vyzaduji, kterou SQL autorizaci maji pouzit.
# Odkomentujte tedy prislusny modul
# Pri pouziti proftpd-mod-mysql odkomentujeme toto:
LoadModule mod_sql_mysql.c
# Pri pouziti proftpd-mod-pgsql odkomentujeme toto:
#LoadModule mod_sql_postgres.c

LoadModule mod_radius.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_file.c

### Pri pouziti proftpd-mod-ldap odkomentujeme toto:
#LoadModule mod_quotatab_ldap.c

### Nainstalovany proftpd-mod-pgsql nebo proftpd-mod-mysql pouziva tyto moduly:
LoadModule mod_quotatab_sql.c
LoadModule mod_quotatab_radius.c
LoadModule mod_wrap.c
LoadModule mod_rewrite.c
LoadModule mod_load.c
LoadModule mod_ban.c
LoadModule mod_wrap2.c
LoadModule mod_wrap2_file.c

#LoadModule mod_wrap2_sql.c
LoadModule mod_dynmasq.c

# Nechte tento modul posledni
LoadModule mod_ifsession.c

Nyní stačí jen reloadnout proftpd:

/etc/init.d/proftpd restart

Šifrujeme

link

Kdo chce šifrovat, až se z něj bude prášit, tak jen do toho. Nejdříve budeme potřebovat OpenSSL:

aptitude install openssl

Vygenerujeme certifikáty:

mkdir /etc/proftpd/ssl
openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem
chown root:root /etc/proftpd/ssl/*
chmod 600 /etc/proftpd/ssl/proftpd.key.pem
chmod 644 /etc/proftpd/ssl/proftpd.cert.pem

Do /etc/proftpd/proftpd.conf přidáme následující řádek:

Include /etc/proftpd/tls.conf

Vytvoříme soubor /etc/proftpd/tls.conf a přidáme do něj:

#
# Ukazkovy konfiguracni soubor ProFTPD pro FTPS spojeni.
#
# Pozor, FTPS zavadi nekolik omezeni pri traverzi NAT.
# Pro vice informaci se podivejte na:
# http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-TLS.html
#

<IfModule mod_tls.c>

### Povolit ProFTPD TLS/SSL
TLSEngine                               on

### Soubor s logem pro vse ohledne TLS spojeni
TLSLog                                  /var/log/proftpd/tls.log

### Typ protokolu – TLSv1, SSLv3, SSLv23 (kompatibilita obou predchozich):
TLSProtocol                             SSLv23

#
# Pokud chcete vygenerovat self-signed certifikat, pouzijte tento prikaz:
#
# openssl req -x509 -newkey rsa:1024 \
#          -keyout /etc/proftpd/ssl/proftpd.key.pem \
#          -out /etc/proftpd/ssl/proftpd.cert.pem \
#          -nodes -days 365
#
# Soubor proftpd.key.pem musi byt citelny pouze pro uzivatele root. Ostatni soubory mohou
# byt citelne pro kohokoli.
#
# chmod 0600 /etc/proftpd/ssl/proftpd.key.pem
# chmod 0640 /etc/proftpd/ssl/proftpd.cert.pem
#

### Cesty k certifikatum:
TLSRSACertificateFile                   /etc/proftpd/ssl/proftpd.cert.pem
TLSRSACertificateKeyFile                /etc/proftpd/ssl/proftpd.key.pem

### Soubor s certifikatem certifikacni autority (CA) pro overovani klientu:
#TLSCACertificateFile                    /etc/ssl/certs/CA.pem
# cesta k crtifikatum pro overovani klientu pomoci CA:
#TLSCACertificatePath                    /etc/ssl/certs/
# cesta ke zrusenemu/neduveryhodnemu certifikatu:
#TLSCARevocationFile                     /etc/ssl/revocate/CA.pem
# cesta ke zrusenym/neduveryhodnym certifikatum:
#TLSCARevocationPath

### Neoverovat klientuv certifikat
TLSOptions                              NoCertRequest

### Nedotazovat se na klientuv certifikat
TLSVerifyClient                         off

### Vyzadovat TLS spojeni; pokud je off, klient se bude moci pripojit i nesifrovane
TLSRequired                             off

### Spojeni se navaze s trvalym certifikatem a dalsi komunikace a prenos dat
# probiha s docasnym. Da se nastavit platnost docasneho v navaznosti na
# casU prenosu, objemu prenesenych dat atd.
# Tuto fci rozhodne moc klientu nepodporuje, takze se asi ani moc nepouziva.

# Nastavit tak, aby nebylo nutne, ale jen pozadovane/dobrovolne:
#TLSRenegotiate required off
# Po 1 hodine:
#TLSRenegotiate ctrl 3600
# Po preneseni 500 MiB dat:
#TLSRenegotiate data 512000
# Timeout:
#TLSRenegotiate timeout 300
# Veskere nastaveni v jedne directive:
#TLSRenegotiate ctrl 3600 data 512000 required off timeout 300

</IfModule>

Nakonec už jen reloadneme ProFTPD:

/etc/init.d/proftpd reload

FTP klienty

link

FTP klientů je celá řada, my si vyjmenujeme tři nejzákladnější.

FileZilla

link

Jeden z nejznámějších FTP klientů vůbec je FileZilla. Pokud používáme explicitní způsob šifrovaného spojení, tak v tomto klientu musíme zadat adresu serveru jako:

ftpes://adresa

Pro implicitní způsob šifrování je:

ftps://adresa

Krusader (kio-slaves)

link

Hojně využívanmým klientem je Krusader aka KDE, aka kio-slaves. Aby nám fungovalo FTP v Krusaderu (Konqueroru apod.), je potřeba doinstalovat kio-ftps. Pro KDE 3 je k dispozici verze 1a, viz: kio-ftps-0.1a.tar.gz. Kdo nemá součástí distribuce, kompiluje se trojčlenkou:

tar xvfz kio-ftps-0.1a.tar.gz
./configure
make
make install

Poté stačí do Krusaderu zadat ftps://adresa a spojení je navázáno.

Pro KDE 4 je verze 0.2: kio-ftps-0.2.tar.gz, která se kompiluje pomocí CMake.

gFTP

link

Pro GNOME je k dispozici gFTP. Pokud dostanete při pokusu o přihlášení na FTPS serveru tuto chybovou hlášku:

error 18:self signed certificate

tak si vypněte ověřování certifikátu v nastavení, nabídka FTP -> Preference -> Engine SSL -> Ověřit protistranu SSL. Další možností by mělo být umístění veřejného certifikátu vaší certifikační autority do adresáře certifikátů OpenSSL. V Debianu je v „/usr/lib/ssl/certs“ V Arch Linuxu jsou v /usr/share/ca-certificates/ a míří na ně symlinky z /etc/ssl/certs/.

Tipy a triky

link

Několik drobných tipů, co a jak nastavit.

Práva k souborům, adresářům a .ftpaccess

link

Všechno šlape, uživatel funguje, ale vše v jeho adresáři jde smazat. Resp. práva se chovají tak, že pokud má adresář práva třeba root:root 755, tak soubor v onom adresáři s root:root 755 nejde smazat. Pokud má ovšem adresář třeba práva ftpuser:ftpgroup 755 a soubor root:root 700, tak lze soubor v klidu smazat a ProFTPD může běžet i pod uživatelem „proftpd“. Myslím si, že za to může mod_sql (měl by se chovat trochu korektněji k fyzickým právům a povolovat manipulaci se soubory těch uživatelů a skupin, které má definované v databázi). Provedeme si příklad řešení práv třeba na testovacím souboru (100 MiB na rychlost) pro download. Vytvoříme si ho takto (adresář ftp má práva třeba ftpuser:ftpgroup 775):

dd if=/dev/zero of=/home/ftp/100MiB.iso bs=1024 count=102400
# práva souboru jsou trochu irelevantní, ale budiž:
chown proftpd:proftpd 100MiB.iso
chmod 755 100MiB.iso

Nyní nastavíme práva, aby šel jen číst, a ne mazat. Potom upravíme proftpd.conf:

AllowOverride on
#DenyFilter                     \*.*/
PathDenyFilter "(\.ftpaccess)$"

Nesmíme zapomenout na reload serveru:

/etc/init.d/proftpd reload

Tímto jsme si pomocí AllowOverride povolili možnost použití konfiguračního souboru .ftpaccess. Pomocí PathDenyFilter jsme zakázali možnost přepsání onoho souboru uživatelem.

Konečně si vytvoříme soubor .ftpaccess v adresáři uživatele „ftp“ (/home/ftp/.ftpaccess) a v případě, že chceme povolit pouhé čtení na náš testovací soubor, zapíšeme do něj:

PathDenyFilter "(\.ftpaccess|\100MiB.iso)$"

Do PathDenyFilter zapíšeme také zmíněný .ftpaccess. Definování PathDenyFilter v souboru .ftpaccess má za následek nepoužití této direktivy v proftpd.conf. .ftpaccess je načten při příchodu do adresáře, kde se nachází. Nyní mohou uživatelé tyto soubory jen číst. Pokud je klient již přihlášen, tak vytvořením onoho souboru nic nezmůžete, jelikož jej uživatel bude moci třeba smazat. Soubor se korektně načítá až při samotném přihlášení klienta. Resp. se mi zdá, že jen direktiva PathDenyFilter vyžaduje přihlášení klienta (BUG, nebo FEATURE?). Ostatní lze měnit za chodu a klient hned změny pocítí.

Soubor .ftpaccess je určen na řešení drobných restrikcí. Nelze v něm používat direktivu Directory, ač mi to částečně fungovalo. Pravidla se vždy aplikují na samotný adresář a podadresáře. Pokud v podadresáři vytvoříme .ftpaccess, tak budou platit pravidla zapsaná v něm atd.:

# zakaze upload (prepis) souboru 100MiB.iso, .ftpaccess a .htaccess:
PathDenyFilter "(\.ftpaccess|\.htaccess|\100MiB.iso)$"

# v aktualnim adresari budou vsichni moci cist, ale nikdo zapisovat (krome uzivatele "admin"):
<Limit Write>
  AllowUser admin
  DenyAll
  Order allow,deny
</Limit>

<Limit Read>
  AllowAll
</Limit>

# povolime pristup ze vsech IP adres krom jedne:
<Limit ALL>
  Deny 192.168.0.21
  Allow all
  Order deny,allow
</Limit>

# omezeni rychlosti pro tento adresar a podadresare:
TransferRate RETR 20:262144   # maximalni rychlost uploadu (od serveru ke klientu) je 20 KiB/s; do prenosu prvnich 256 KiB dat je rychlost maximalni

Práva trochu složitěji

link

Nyní se podíváme na trochu složitější definování práv, zakládání tříd (classes) aj. Třídy lze definovat jen pomocí konfiguračních souborů ProFTPD. Aby nastavení vypadalo trochu přehledněji, vložíme si definice tříd stejně jako třeba nastavení SQL nebo TLS do jiného souboru. Do proftpd.conf doplníme:

Include /etc/proftpd/access.conf

Vytvoříme si soubor /etc/proftpd/access.conf a příklad nastavení by mohl vypadat nějak takto:

### seznam IP adres zlobivych uzivatelu:
<Class blacklist>
    From 192.168.0.5
    From 192.168.20.22
    From 192.168.30.0/24
    From 192.168.40.55
</Class>

### seznam VIP clenu:
<Class vip>
    From 192.168.5.1
    From 192.168.10.1
</Class>

### pokud se prihlasi uzivatel tonda, tak bude moci stahovat jen 20b KiB/s
# (plati pouze pro adresar ~/pokus/*, vsude jinde to pojede naplno)
<IfUser tonda>
  <Directory ~/pokus/*>
       TransferRate RETR 20
  </Directory>
</IfUser>

### kdo neni clenem skupiny vip, tomu pojede stahovani z FTP max. 40 KiB/s
# a prvnich 256 KiB dat se bude stahovat plnou rychlosti:
<IfGroup !vip>
       TransferRate RETR 40:262144
</IfGroup>

### kdo je clenem skupiny vip, tomu pojede stahovani 540 KiB/s
<IfGroup vip>
       TransferRate RETR 540
</IfGroup>

### ti, jejichz IP nebo rozsah adres je definovan ve tride "blacklist",
# se nebudou moci prihlasit
<Limit LOGIN>
    DenyClass blacklist
    AllowAll
</Limit>

Dávejte si pozor na fyzická práva adresářů. Jak už bylo řečeno, všechny direktivy se nedají používat všude. Pokud vás zajímá nějaká direktiva, tak se na ni podívejte do dokumentace: List of Directives by Name.

Nastavení modulů třetích stran

link

Nyní se podíváme na moduly třetích stran, které jsme si ručně zkompilovali spolu s ProFTPD.

mod_md5

link

Do souboru /etc/proftpd/modules.conf si doplníme následující řádek:

LoadModule mod_md5.c

# jako posledni by se mel vzdy nacitat tento modul:
LoadModule mod_ifsession.c

Do souboru /etc/proftpd/access.conf si doplníme následující řádky a vše by mělo fungovat:

### Jestlize se uploadne soubor do adresare "upload", tak se k nemu vytvori kontrolni md5 soucet
# podadresar test je vynechan (kdyz se tam soubor uploadne, tak se md5 soucet generovat nebude)
<IfModule mod_md5.c>
    MD5Engine on
    MD5Path ~/upload/
    MD5Path !~/upload/test
</IfModule>

### md5 soucet se bude generovat jen v pripade, ze bude dany soubor uploadovat uzivatel admin:
<Limit SITE_MD5>
    AllowUser admin
    DenyAll
</Limit>

Funkčnost vytváření md5 hashů můžeme vyzkoušet takto:

#:/# ftp 127.0.0.1
Connected to 127.0.0.1.
220::ffff:127.0.0.1 FTP server ready
Name (127.0.0.1:root): admin
331 Password required for admin
Password:
230 User admin logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd upload
250 CWD command successful
ftp> quote SITE MD5 frozenbubble.exe
quote site md5 frozenbubble.exe
200-2bbff112066c93871155d4cf1ada5d2d    frozenbubble.exe
200 Please contact webmaster@abclinuxu.cz if this digest is inaccurate
ftp>

Bohužel, po uploadnutí souboru na FTP server do příslušného adresáře nedojde k vytvoření dalšího souboru s md5 hashem. Takže všechno funguje, ale vlastně nefunguje).

mod_sftp a mod_sft_sql

link

Do /etc/proftpd/modules.conf doplníme:

LoadModule mod_sftp.c
LoadModule mod_sftp_sql.c

Do /etc/proftpd/proftpd.conf doplníme řádek:

Include /etc/proftpd/sftp.conf

A do souboru /etc/proftpd/sftp.conf vložíme:

### Nastaveni v pripade, ze bychom chteli mit ulozeny klice v databazi a treba overovat uzivatele ceertifikaty apod.
# Osobne nepotrebuji, takze jsem nezkousel.
# (museli bychom si zrejme pridat sloupecek do tabulky k uzivatelum, kde by byl klic ulozen):
#<IfModule mod_sql.c>
#    # Other mod_sql configuration here
#
#    # Define a SELECT statement to retrieve users' authorized SSH keys
#    SQLNamedQuery get-user-authorized-keys SELECT "key FROM sftpuserkeys WHERE name='%U'"
#
#    # Define a SELECT statement to retrieve hosts' authorized SSH keys
#    SQLNamedQuery get-host-authorized-keys SELECT "key FROM sftphostkeys WHERE host='%{0}'"
#</IfModule>

### Velmi jednoduche nastaveni SFTP:
<IfModule mod_sftp.c>
    ### Zapneme podporu SFTP:
    SFTPEngine on
    ### Soubor s logem:
    SFTPLog /var/log/proftpd/sftp.log

    ### Jelikoz se pouziva rozdilny zpusob prihlasovani,
    # tak pro debug rezim pouzijeme nasledujici logovani:
    #TraceLog /var/log/proftpd/sftp-trace.log
    #Trace scp:20 sftp:20 ssh2:20


    ### Cesta ke klicum pro autentizaci (pouzijeme stavajici klice ssh demona):
    SFTPHostKey /etc/ssh/ssh_host_dsa_key
    SFTPHostKey /etc/ssh/ssh_host_rsa_key

    ### Zapneme kompresi:
    SFTPCompression delayed

### Pokracujeme v prikladu s databazi (osobne nepotrebuji, takze jsem ani nezkousel):
#  <IfModule mod_sftp_sql.c>
#      # Instead of using a file-based key store, we tell mod_sftp to use
#      # the SQL-based key store provided by mod_sftp_sql
#      SFTPAuthorizedUserKeys sql:/get-user-authorized-keys
#      SFTPAuthorizedHostKeys sql:/get-host-authorized-keys
#  </IfModule>

</IfModule>

Nyní už stačí jen restart a je hotovo:

/etc/init.d/proftpd restart

Přihlašujeme se na port 21, tzn., že třeba v Krusaderu zadáme sftp://192.168.0.55:21. Poté už je krásně vidět, jak se nám plní soubor se záznamy /var/log/proftpd/sftp.log. Nebuďte ovšem bláhoví. Kdo si myslí, že může provozovat FTP/FTPS/SFTP na jednom portu, tak se mýlí. Pokud nastavíme SFTP, budeme moci používat jen tento protokol.

mod_vroot

link

Do /etc/proftpd/modules.conf doplníme:

LoadModule mod_vroot.c

Do /etc/proftpd/proftpd.conf doplníme řádek:

Include /etc/proftpd/vroot.conf

A do souboru /etc/proftpd/vroot.conf vložíme:

<IfModule mod_vroot.c>
   VRootEngine on

   DefaultRoot ~

   ### Vsem uzivatelum namapujeme tento adresar
   # (nefunguje soucasne s direktivou VRootServerRoot):
   VRootAlias upload /home/ftp/nejakaslozka/tamtaslozka

   ### Povolit symlinky:
   VRootOptions allowSymlinks

   ### Budeme logovat provoz:
   VRootLog /var/log/proftpd/vroot.log

</IfModule>

Bohužel se mi tento modul nepodařilo zprovoznit. Alias se vytvoří, ale do logu se nic nezapisuje a do žádného adresáře nemám přístup. Ani do těch, kam jsem dřív mohl. U ProFTPD hodně záleží na pořadí modulů při kompilování, třeba ho tedy jen neumím správně zkompilovat.

Ladění

link

Pokud se nám něco nedaří a chceme ladit, tak spustíme ProFTPD v debug režimu:

proftpd -d9 -n

V případě Debianu stačí upravit soubor /etc/default/proftpd takto:

# Defaults for ProFTPD initscript

# Master system-wide ProFTPD switch. The initscript
# will not run if it is not set to yes.
RUN="yes"

# Default options.
# For more exhaustive logging, try "-d 3".
OPTIONS="-d 9 -n"

A restartovat server:

/etc/init.d/proftpd restart

Závěr

link

Nyní máme nainstalovaný a kompletně funkční ProFTPD server. Samotný server běží pod uživatelem a skupinou „profptd“. Uživatelské soubory spadají pod uživatele „ftpuser“ a skupinu „ftpgroup“. ProFTPD není rozhodně dokonalý FTP server, ale není ani nikterak špatný. Konfigurace mi přijde přehledná a práce s direktivami intuitivní. Jeho možnosti a rozšíření jsou velké, ač bohužel někdy ne zcela funkční (ve VirtualBoxu jsem měl i problémy s fitry na IP adresy, což ProFTPD umožňuje). Také by mě zajímalo, zda má někdo zkušenosti s nějakými externími moduly. V případě, že ano, může se o zkušenosti podělit pod článkem. To samozřejmě platí i o tipech na další různé možnosti nastavení.

Související články

FatRat - česká krysa stahuje i uploaduje
FTP klienti
Bezpečný FTP server: glFTPd
Pure-FTPd s virtuálními uživateli v PostgreSQL
NFS+NIS+LTSP - přihlašování na server
Přihlašování uživatelů do webové aplikace v PHP
Seriál: Nagios + Centreon + MySQL

Odkazy a zdroje

The ProFTPD Project
Castaglia
Virtual Hosting With Proftpd And MySQL (Incl. Quota)
Proftp Server Web interface or GUI Tools

Další články z této rubriky

PowerDNS – přívětivý a jednoduchý DNS server
Bootování ze sítě: pxelinux a kořenový adresář na NFS
Těžký život Do Not Track
OpenAFS – servery
Architektura IPv6 – konfigurace adres a objevování sousedů (2)

Diskuse k tomuto článku

3.7.2009 00:30 Lubos Kopecky | skóre: 32
Rozbalit Rozbalit vše Useri v mysql a povoleni prihlaseni pouze z vybrane IP
Odpovědět | Sbalit | Link | Blokovat | Admin
Je nejak mozne nastavit, aby se v databazi uchovavala informace o tom, ktery uzivatel se muze pripojit z ktere IP-adresy?

napr.
ferda si povoli prihlaseni pouze z IP 127.0.0.1
amalka si povoli prihlaseni pouze z IP 192.168.0.6
cmelda si povoli prihlaseni z 2 IP 192.168.0.7 a 192.168.0.8
brumbda se omezovat nehodla vubec
Max avatar 3.7.2009 01:28 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Useri v mysql a povoleni prihlaseni pouze z vybrane IP
Tak to jsem neřešil a abych pravdu řekl, tak si teď nejsem jist. Musím nato juknout. Jinak pokud by si to měli uživatelé definovat sami, tak je lepší, když se to bude řešit přes .ftpaccess, ne?
Zdar Max
Měl jsem sen ... :(
3.7.2009 02:56 Lubos Kopecky | skóre: 32
Rozbalit Rozbalit vše Re: Useri v mysql a povoleni prihlaseni pouze z vybrane IP
reseni to urcite je, to mas pravdu, ale

1) admin muze treba chtit omezit adresy pro ruzny uzivatele a mit to prehledne nekde ulozeny a zaroven aby nemusel mit skripty, ktery to budou pravidelne pregenerovavat z db dou souboru na disku

2) mas jedno administracni rozhrani pres web na vice sluzeb, takze tam chces mit i tuto informaci, aby to bylo vse na jednom miste.

3) muze nastat pripad, ze ty si omezis pristup jen z jedny IP, vse funguje jak ma rok, dva, pak na to zapomenes (pripadne ti to nedocvakne), pac odjinud tam nechodis a zmenis treba poskytovatele internetu nebo budes mimo tohle jedno misto a najednou budes muset nutne na ftp pristoupit a ejhle, ono to nejde - pres db to zmenis, ale primo v souboru ne, pac se tam nedostanes

sou to ciste modelovy priklady - osobne to treba nepotrebuju, ale byl na mne vznesen dotaz (dokonce vcera :) ), zda by to omezeni neslo resit prave pres db
Max avatar 3.7.2009 11:42 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Useri v mysql a povoleni prihlaseni pouze z vybrane IP
Mno, vytvořit si tabulku a k ni uživatele v db (kdyby jsi měl díru v php, útočník může ovlivnit akorát ony povolené IP, nic víc), která by byla třeba přes ID propojená s tabulkou o uživatelích. V ní sloupečky ID, AlloIP, DenyIP a pomocí php a cronu bych ládoval info z této tabulky do konfiguračního souboru proftpd a říkal mu, aby akceptoval nové nastavení. Bylo by to bezpečné, přístup přes web rozhraní zaručen, všechno by jsi měl na jednom místě a bylo by :).
Zdar Max
Měl jsem sen ... :(
Jardík avatar 3.7.2009 23:59 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Useri v mysql a povoleni prihlaseni pouze z vybrane IP
Místo cronu bych použil incron :-)
Věřím v jednoho Boha.
5.7.2009 15:57 tomash
Rozbalit Rozbalit vše Re: Useri v mysql a povoleni prihlaseni pouze z vybrane IP

tohle umi treba pureftpd

3.7.2009 05:57 Kroko | skóre: 22
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Odpovědět | Sbalit | Link | Blokovat | Admin
Nikdy jsem nepochopil quoty na ftp ... (v případě, že je to jen ftp tak ano) protože pokud má pak někdo přístup přes web apod. tak tam ty soubory může rvát přes prohlížeč a quota je mu v ftp k ničemu.
http://kroko.evesnight.net
Max avatar 3.7.2009 10:20 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Jak přes web? Pokud někdo provozuje pro klienty třeba nějaké webftp, tak snad není problém toto webftp ošetřiř, ne? Nebo myslíš případ, kdy jsou na onom ftp umístěny webové stránky? A dotyčný pak může třeba pomocí php skriptu udělat útok na server, který akorát bude moci zato, že se sežere veškeré místo na oddílu, kde budou ony stránky umístěny. Ale toto ti nikdo neudělá na placeném hostingu. A když ano, tak jako správce svůj server určitě monitoruješ a toto by jsi měl za chvilku vyřešené. Pokud by to byl třeba nějaký free, tak bych to stejně řešil účtama v mysql (jednoduší správa všeho) a pak bych pomocí skriptů a cronu generoval fyzické quoty a uživatele. Tím by se pak vyřešily veškeré problémy :).
Zdar Max
Měl jsem sen ... :(
3.7.2009 18:32 fixinko | skóre: 15 | Bratislava
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování

ono to bolo myslene tak, ze ked nieco v php uploadujes cez tie jeho funkcie(move_uploaded_file....), tak owner/group je ten user pod ktorym bezi www server, a nie ten komu patria skripty... ciastocne riesenie je pouzivat mod_suphp (riesi to len otazku komu ten subor po vytvoreni patri), ale ani to neriesi zapisovanie quoty do databazy... to sa da imho vyriesit len quotami priamo v systeme...

3.7.2009 13:00 snajpa | skóre: 20 | blog: snajpuv_blocek | Brno
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Odpovědět | Sbalit | Link | Blokovat | Admin
Na konci článku mi chybí "Zdar Max" :-D, jinak pochvala za super článek!
--- vpsFree.cz --- Virtuální servery svobodně
3.7.2009 13:07 eoj
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Jo, to podepisování pod příspěvky, které mají jméno už v hlavičce, mi taky nějak nejde pod vousy :-)
Max avatar 3.7.2009 13:15 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Snad si nemyslíš, že se pod své články nepodepisuji. Redakce mi podpisy z článku totiž maže, s tím já nic nenadělám :-/. Zřejmě to nikdy neprojde korekcema :).
Ale myslím, že už ho tam vlastně asi ani nepíšu, abych nepřidělával práci redakci :P.
Zdar Max
Měl jsem sen ... :(
26.1.2010 21:15 Pepin
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Odpovědět | Sbalit | Link | Blokovat | Admin
Teď jsem nainstaloval proftpd podle tohodle návodu, ale na FTP mi nejde zapisovat :-( peru se stim už celej den a pořád mi to nechce chodit. Co stím? Díky
Max avatar 26.1.2010 21:41 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Pokud se úspěšně přihlásíš, tak je chyba v právech. Buď jsi je špatně zapsal do mysql databáze (uid gid), nebo vytvoření uživatelé v systému mají jiná uid a gid, než jsi zadal do db. Tyto věci se musí shodovat, tak se nato podívej ;-). Také by měl mít nadřazený adresář práva ftpuser:ftpgroup a nejlépe 755.
Zdar Max
Měl jsem sen ... :(
25.3.2010 15:28 Honza
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Odpovědět | Sbalit | Link | Blokovat | Admin
vím, že offtopic,ale velmi pěkné i pro amatéry jako jsem já, jen by mě zajímalo jak to udělat s anonymními uživateli. uživatele jsem přidal do mysql, vytvořil v systému vše funguje s heslem,ale já bych rád uživatele anonymous bez hesla :-)

Max avatar 25.3.2010 15:38 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Ahoj, díky :). Offtopic to rozhodně není :). Anonymouse uděláš tak, že přidáš příslušné direktivy do proftpd.conf. Jako popisují třeba zde : http://www.ls-l.net/ftp/
Zdar Max
Měl jsem sen ... :(
25.3.2010 19:15 Honza
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Aha, no já si říkal, jestli by to nešlo spíše přes mysql, jelikož tam je podle tvého návodu krásny přehled o počtu přihlášení apod. Hlavně jsem měl za to, že pokud pouziji přímo direktivu z proftpd.conf tak si tím můžu narušit usery (teď si uvědomuji, že je to naprostá hloupost :D). Ale přesto ti patří velký dík
21.7.2010 13:58 tre-SKA
Rozbalit Rozbalit vše neobmedzena kvóty
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdarek, neviete ako nastavim uzivatelovi neobmedzenu kvotu cez mysql ?
Max avatar 21.7.2010 14:23 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: neobmedzena kvóty
Neomezená je 0
Zdar Max
Měl jsem sen ... :(
10.2.2011 20:12 mir.jar | skóre: 2
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Odpovědět | Sbalit | Link | Blokovat | Admin
zdravim, hadam to nieje prilis stary clanok na to aby mi niekto odpovedal. Mam virtualny server kde mi uz provider nainstaloval Debian/LAMP cize vsetko co treba pre bezny webserver tam uz je. Bolo tam uz aj proftpd, takze instalaciu som preskocil. Vytvoril som uzivatel ftpuser s ID 2002, skupinu proftpd s ID 2001 a skupinu ftpgroup s ID 2002. uzivatel proftpd tam uz bol, ma ID 104 a skupinu nogroup. MySQL som neinstaloval kedze tam uz bolo, len som pospustal vsetky prikazy podla clanku. Lenze pri niektorych som dostal hlasku, ze su tam jedno, alebo dve warnings. Predpokladam, ze mu nieco nesedi, kde si to mozem skontrolovat? vo var/log je vsetko co ma v nazve mysql prazdne. System sa pri instalaci len nejak vyklonoval z obrazu co mal provider nachystany a nastavil par hesiel. Proftpd uz fungovalo a malo uz vytvoreneho uzivatela aj s heslom. Nechcel som preto prepisovat cely /etc/proftpd/proftpd.conf. Doplnil som teda nakoniec Include /etc/proftpd/sql.conf a subor /etc/proftpd/sql.conf okopiroval z clanku, len heslo som upravil. S tymi modulmi sa este nechcem hrat, zatial len vytvorit uzivatela do MySQL a pod nim sa prihlasit. Dal som reload a teraz mi pise total commander, ze vyzva na spojenie bola neuspesna. Pise to aj pri prihlasovacich udajoch co predtym fungovali a aj tych co som vlozil cez MySQL. Je vobec mozne aby islo prihlasovanie oboma sposobmi? Teda ja ani neviem co to bolo za povodny sposob, ale MySQL asi nepouzivalo kedze nemala este vytvorene heslo a uz to fungovalo. Asi som sa dost zamotal :( ... pomoze mi niekto sa z toho vymotat? :)
Max avatar 10.2.2011 20:33 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
To jsi se do toho zamotal docela pěkně :). Dělat slepě něco, co se nesnažím pochopit, to většinou nedopadá moc dobře. Otázkou je, co přesně chceš? Chceš mít ftp server schopný ověřovat se přes mysql? Podporovat kvóty apod.? Nebo chceš provozovat ftp pro pár lidí, né-li jen pro sebe? Pak by se totiž vše xkrát zjednodušilo.
Jinak doporučuji směřovat dotaz do poradny a né pod rok a půl starý článek, u kterého mám zapnuté sledování snad jen já :).
Zdar Max
Měl jsem sen ... :(
10.2.2011 21:14 mir.jar | skóre: 2
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
no mozno postacis aj ty :) ... chcem webserver kde bude mat pristup cez ftp len zopar ludi. Nikde na nete som nenasiel jednoduchy navod krok za krokom ako to rozbehat. Tie navody co som nasiel som prestal chapat uz v uvode a nedokazal som podla nich nic nastavit. V podstate mi staci ak budem moct vytvarat uzivatelov, ktory budu mat prava cisto len pre ftp a casom by som sa chcel pohrat zo subdomenami kde by mali pristup k jednotlivym priecinkom len konkretny ludia. Tie kvoty by som tam tiez potreboval uz len koli sebe aby som trebars nechtiac nezaplnil cely disk. Casom samozrejme koli subdomenam a inym uzivatelom aby to nezahltili oni. Do poradne som nesiel preto ,ze som nasiel toto a uz sa tu teda aj rozbehla na to diskusia. Ak by nikto neodpisal, siel by som do poradne :). V podstate by mi stacil nejaky serial, nepotrebujem to surne rychlo rozbehat, chcem sa to naucit. Ucim sa na dvoch frontach, jedna je programovanie v php a druha je rozbehanie a spravovanie servra kde bezi distribucia Debian/LAMP. O PHP mam more literatury, lenze o LAMP skoro nic, tak som si to rozdelil a postupne idem po jednotlivych sluzbach. Samotny web mi ide, stranka tam funguje, aj PHPcko ide, mysql aj s phpmyadmin funguju. Teraz sa chcem postupne do nich vrtat hlbsie a hlbsie. Zacal som s FTP pristupmi. Ja netusim z akeho konca mam zacat kedze kompletny serial o vsetkom krok za krokom asi ani neexistuje. Ako si sa to ucil ty?
Max avatar 11.2.2011 07:49 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Já se vše naučil sám, z internetu a knih. Třeba o apache je výborná kniha toto : Linux Administrace serveru Apache.

Pokud jde o to proftpd a článek, tak nevidím problém. Je to formou krok za krokem s krátkými českými komentáři. Nevím, jak jednodušejí to popsat :-/.
Pokud jsi si neprošel svoje nastavení proftpd.conf a bezmyšlenkovitě si jen přidal na konec souboru vložení konfigráku sql.conf (jeho obsah by mohl být součásti proftpd.conf, ale pro přehlednost je v separátním souboru a pomocí include se vkládá do proftpd.conf), tak může být samozřejmě problém (nehledě nato, že pak nemůžeš svádět na články a postupy to, že jsou nefunkční, když se jich nedržíš). Další věcí je, zda jsi povoloval sql moduly v modules.conf? Pokud ne a nemáš je povolený, tak ti asi ftp ani nenaběhne.

Otázkou tedy je, co máš v proftpd.conf? A co v modules.conf? Pošli tyto soubory jako přílohu ke komentáři a pak se uvidí. Další věcí je, co ti hlásí logy?
/var/log/daemon.log
/var/log/proftpd...? (cestu a soubory jsou definované v proftpd.conf, nevím, jak to máš u sebe).
Jinak co máš za distribuci? Debian? Ubuntu? Něco jiného?
Zdar Max
Měl jsem sen ... :(
11.2.2011 10:57 mir.jar | skóre: 2
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
nezvalujem ziadnu vinu na clanok. Viem, ze riskujem ak nejdem podla postupu. Pre mna je to nezrozumitelne koli tomu, ze je tam kvantum prikazov a niesu detailne vysvetlene, je to skor pre pokrocilych.

Distribucia je Debian(5.0)/LAMP, ale ako som spominal je to virtualna masina a system tam je naklonovany z nejakeho obrazu a neviem ake zmeny tam boli urobene oproti cistej instalaci. Ja som dal len vytvorit masinu a asi za 5 minut som to mal aj s heslom pre roota a FTP. Apache aj PHP uz bezalo, malo to tam aj skusobnu stranku, len MySQL nemalo administratorske heslo vytvorene. Hocikedy to mozem dat do toho povodneho stavu, trva to asi tych 5 minut. To je obrovska vyhoda ak nieco domrvim.

deamon.log je prazdny, ani jeden zaznam. proftpd pise, ze user admin neexistuje, ale medzi casom som prisiel na to, ze po restarte mi to nenabehlo. on v tom sql.conf nasiel na riadku 99 chybu. Ja tie configuracne subory este prezkumam doma, potom napisem ak na nieco narazim. Co sa tyka tych warnings ked som vkladal prikazy do mysql, tak tie kde vidno? Najskor by som zacal tam, lebo to bolo este pred upravou configov.

Max avatar 11.2.2011 11:28 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Naopak, popsaný jsou myslím dostatečně.
Když to shrnu, tak se jedná jen o tyto věci :
- vytvořit uživatele a skupinu, pod kterými bude běžet ftp server
- vytvořit uživatele a skupinu, pod kterými budou pracovat uživatelé ftp serveru
- vytvořit hlavní adresář s příslušnými právy pro proftpd, kde budou data uživatelů
- vytvořit databázi včetně tabulek a příslušného uživatele v mysql pro ftp server, kde budou uloženy informace o uživatelích a jejich nastavení
- zkopírovat soubory z článku a spustit ftp server (maximálně v těch souborech změnit hesla pro přístup do databáze, popř. popis serveru)

Toto je v článku v sekcích :
Příprava prostředí
Příprava MySQL
Nastavení ProFTPD

Článek je zaměřen pro začátečníky, kteří mají aspoň základní znalosti a ví co je co. Ovšem pokud uživatel ani neví, co je to databáze a snaží se s ní pracovat, tak je samozřejmě jasné, že to povede jen k neúspěchu.
Zdar Max
Měl jsem sen ... :(
11.2.2011 13:52 mir.jar | skóre: 2
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Mne osobne sa zdal zaciatok ozaj ako pre zaciatocnikov, preto som sa do toho pustil, ale potom ako sa clanok dostal k MySQL uz prestali byt veci podla mna dostatocne vysvetlene, tam som sa uz stratil, tak som to len bezhlavo kopiroval. Neviem napriklad co vsetko a preco je v tej databaze. Preco tam treba tolko veci vytvarat. Napr. v tabulke proftpd_quota. Pri vkladani uzivatela sme to nakoniec nastavili skoro vsetko na nulu.

Co sa mna tyka nakoniec bol niekde v .conf problem. Asi prave to co si spominal, ze tie veci co boli v sql.conf mozu byt aj v proftpd.conf. Jedna z hlasiek co mi nabehla kym sa to rozbehlo hovorila nieco o tom, ze akysi prikaz uz je v sql.conf. Ked som to vsetko nanovo poprepisoval(vsetky 3) a restartol proftpd, uz nabehol bez chyby a viem sa aj prihlasit.

Inak v clanku co mas na zaciatku linky na tie mody. Ked som ich skusal boli vsetky mrtve.
Max avatar 11.2.2011 13:59 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Rozcestník je z části mrtvý (neposouvá se na příslušná místa v článku, věc redakce, já ho nevytvářel), jinak linky na moduly (na oficiální stránky apod.) jsou stále živé.

Pokud jde o ty nuly v tabulce quota, tak je snad jejich hodnota jasná z názvu sloupečku, ne? Jsou to statistiky přenosu aj. věcí a jak to bývá, všechno se začíná počítat od nuly.
Zdar Max
Měl jsem sen ... :(
11.2.2011 15:21 mir.jar | skóre: 2
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Posledny ide, ale tieto 3 nie.

http://www.castaglia.org/proftpd/modules/proftpd-mod-md5-0.3.3.tar.gz http://www.castaglia.org/proftpd/modules/proftpd-mod-sftp-0.9.6.tar.gz http://www.castaglia.org/proftpd/modules/proftpd-mod-sftp-sql-0.1.tar.gz
Max avatar 11.2.2011 15:26 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Jo takto, no to je možné. Po roce a půl jsou k dispozici určitě novější verze. A teď když koukám na jejich stránky, tak skutečně ano : http://www.castaglia.org/proftpd
Jistě pochopíš, že v takto starém článku nelze udržovat čerstvé odkazy (nejen kvůli náročnosti, ale i kvůli tomu, že by následné postupy nemusely s novými verzemi fungovat).
Zdar Max
Měl jsem sen ... :(
11.2.2011 16:28 mir.jar | skóre: 2
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
ved jasne, ja len na to upozornujem kedze som si to nedavno vsimol a opatovne sme tu rozbehli diskusiu k tomu clanku.

Tak dakujem, ze si sa mi venoval, som rad, ze mi to uz funguje. Teraz to idem trosku prezkumavat a hadam coskoro v ramci ucenia nakodim v php nejaky skriptik kde si to budem vediet spravovat.
16.4.2014 16:31 cesilko007
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdravím, chtěl bych se zeptat, pokud dobře znáte kód, tak jsem se dozvěděl, že proFTPD umí rozeznávat názvy počítačů z IP adresy, která k nim náleží. Nevěděl by někdo, jak to funguje? Mě běží moje ftp pres FileZillu a nechtel bych menit program, ale hodilo by se mě tohle znát.

Děkuji za reakce
Max avatar 18.11.2015 07:17 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: ProFTPD + MySQL + kvóty + šifrování
Odpovědět | Sbalit | Link | Blokovat | Admin
Jen bych chtěl upřesnit toto tvrzení : Nebuďte ovšem bláhoví. Kdo si myslí, že může provozovat FTP/FTPS/SFTP na jednom portu, tak se mýlí. Pokud nastavíme SFTP, budeme moci používat jen tento protokol.

Není to zcela pravda. Lze provozovat ftp, ftps a sftp v rámci jednoho proftpd serveru. Řeší se to pomocí virtuálů.
Osobně tak provozuji ftp, ftps a sftp(tady na portu 2222, aby nebyl v kolizi s ssh). Vše plně ok.
I logy u sftp přenosů jsou plně ok. Vše mám stále napojeno na mysql.
Zdar Max
Měl jsem sen ... :(

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.