no tak celý den tápám a udělal nebo tedy konkretně jsem překopiroval tento proftpd.conf soubor
##ServerType urcuje, zda se jedna o server bezici jako daemon (standalone), nebo jako sluzba superserveru (inetd/xinetd)
ServerType standalone
##DefaultRoot - kam ma byt uzivatel chrootovan (kde bude jeho "/" adresar)
DefaultRoot ~
##CharsetLocal - lokalni znakova sada (pravdepodobne UTF-8)
##CharsetRemote - znakova sada vzdaleneho klienta, pokud predpokladate wokna, pak CP1250
CharsetLocal UTF-8
CharsetRemote UTF-8
##AllowOverwrite - zda lze prepisovat soubory
##AllowRetrieveRestart - zda lze navazat na castecne stazeny soubor
##AllowStoreRestart - zda lze navazat na castecne nahrany soubor
AllowOverwrite on
AllowRetrieveRestart on
AllowStoreRestart on
##ServerName - vpodstate hlaska po pripojeni k serveru
##Port - kde ma server poslouchat - 21 je vychozi (a bezny) port pro FTP
##PassivePorts
##------------
##FTP pouziva vychozi port 21 pro "prikazovou radku", kudy posila informace jako je stor, put, ls ... proste bezne prikazy
##Dale pak pouziva datovy kanal, kudy tecou vlastni data (obsah vypisu adresare, up/download vlastniho souboru
##Existuji dve moznosti, jak datovy kanal muze fungovat
##
##1) Active - znamena, ze server ma otevren jen port 21 a 20 (datovy port),
##Komunikace mezi klientem a serverem pak probiha tak, ze klient z libovolneho portu (N>1023) vysle pozadavek na komunikacni kanal (port 21),
##pokud se mu dostane odpovedi, zacne poslouchat na dalsim (volnem) portu (N+1) a posle toto cislo serveru. Server se pak pripoji ke klientovi
##na oznameny port z portu 20 a zacne odesilat data. Z hlediska serveru je to nejjednodussi mozna konfigurace, protoze ve firewallu staci povolit
##prichozi porty 20 a 21, ale z hlediska klienta uz to tak snadne neni - problem nastava u klientu s neverejnou IP (za NAT nebo PROXY) a zapnutym
##firewallem, ktery neumi povolit prichozi smer pro vsechny porty otevrene FTP klientem. Osobne active mod u serveru nepouzivam, uz jen proto, ze
##hodne nejbeznejsich www klientu (napr. firefox, ie) odesila ihned po prihlaseni prikaz PASV (prepni mne do passive modu) a navic se nelze spolehat
##na to, ze uzivatel bude vzdy "prvni na rane" tj. ze bude mit verejnou IP a pruchozi firewall
##
##2) Passive - znamena, ze server ma otevreny port 21 a urcite mnozstvi dalsich portu, ktere nasledne pouziva pro prenos dat mezi klientem a
##serverem tj. kdy klient po prihlaseni na server obdrzi od serveru cislo prideleneho otevreneho port, na kterem data na klienta cekaji. Z hlediska
##konfigurace firewallu na serveru je to pomerne problem, nastesti proftpd podporuje vynuceni urciteho bloku volnych portu, kdy se uz firewall
##da upravit tak, aby propustil presne a jen toto mnozstvi. Doporucuji otevrit i port 20, protoze pak bude server fungovat v obou modech
ServerName "My ProFTPd server"
Port 21
PassivePorts 5103 5189
##MultilineRFC2228 - Jedna se o urcitou "kompatibilitu rozsirujici" featuru. Vpodstate pri komunikaci klienta se serverm
##kazdy radek zacina urcitym kodem (2xx,4xx,6xx) ktery urcuje o jakou hlasku se jedna - diky tomu je zaruceno, ze klientska
##aplikace bude vedet, co je spatne(nebo dobre) a zaroven to server dokaze rici i cloveku srozumitelnou formou
##Standardne server posle kod odpovedi a pak vysype spousty radku bez kodu, coz muze vest k tomu, ze je protejsi klient zmateny,
##proto je MultilineRFC2228 dulezity - kazdy radek ma svuj jednoznacny kod
MultilineRFC2228 on
##DefaulServer je zalezitost pouzivana hlavne v pripade VirtualServeru, kdy pokud prijde pozadavek na IP (a ne na dns nazev), nevi
##server, kam jej priradit, pokud by tato direktiva chybela, klient obdrzi hlasku "no server available to service your request"
DefaultServer on
##ShowSymlinks - Rekne, zda maji byt zobrazeny (a zda jsou aktivni) symbolicke odkazy. Muze to byt uzitecne v pripade, ze pozadujete nejaky
##ucet, skrz ktery se lze podivat treba do adresaru dalsich uzivatelu bez toho, aby bylo nutne pouzivat nejakou obecnejsi variantu (napr. mount --bind)
ShowSymlinks on
##IdentLookups urcuje, zda ma byt uzivatelske jmeno ziskano pres ident (RFC1413), defaultne je on, vypinam to, protoze to znacne zpomaluje
##prihlasovaci proces
IdentLookups off
##Jedna se o zalezitost, kdy server po navazani spojeni zjistuje reverzni DNS zaznam klienta, pouziva se to treba pro
##bezpecnejsi autorizaci (dany uzivatel se smi prihlasit jen z dane domeny), default je on, vypinam to --> pomale
UseReverseDNS off
##TimeoutNoTransfer urcuje, jak dlouho (v sekundach) muze byt uzivatel necinny bezprostredne po prihlaseni na server bez pozadavku
##TimeoutStalled urcuje, jak dlouho (v sekundach) bude proces prenosu dat (bez prenosu dat) povazovan za aktivni
##TimeoutIdle urcuje, jak dlouho (v sekundach) muze uzivatel zustat necinny (po prenosu dat)
TimeoutNoTransfer 900
TimeoutStalled 600
TimeoutIdle 1800
##Vpodstate klasicky linuxovy umask noveho adresare a souboru (maska se odecita od plne hodnoty tj. 777-022=755 ~ rwxr-xr-x)
Umask 022 022
##DisplayLogin rika, ze ktereho souboru se nacte uvodni hlaska po prihlaseni na server (Vitejte na serveru blablablablabla)
##Zajimava je snad jen moznost, ze si uzivatel hlasku definuje sam - tj. tato konfigurace, kdy se soubor hleda v chrootu
##uzivatele, pokud soubor neexistuje, nevznikne zadna chyba, jen se uzivateli nic nevypise
DisplayLogin welcome.msg
##DisplayFirstChdir definuje, ktery soubor bude po prvnim otevreni adresare vypsan jako hlaska (neco ve smyslu "V tomto adresari se nachazi to
##a to a nelze mazat"), tato direktiva je oznacena za zastaralou, castecne ji nahrazuje DisplayChdir, ale asi stejne nema moc smysl, protoze vetsina
##www prohlizecu (nejcastejsi navstevnici FTP - alespon u mne) tyto hlasky stejne ignoruje
DisplayFirstChdir .message
##ListOptions ma jako hodnotu parametr, ktery udava, jak bude vypadat vypis adresare (v klasickem terminalu). Moznosti jsou
## -l Jedna radka pro jeden soubor
## -A Vypis vsechny soubory vyjma "." a ".."
## -a Vypis vsechny soubory vcetne tech 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 Pouzije tzv. "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"
##RootLogin rika, zda uzivatel root muze pristoupit na server pres FTP, tak jak tak by to melo byt vypnuto pomoci /etc/ftpusers, ale jistota je jistota
##RequireValidShell - normalne proftpd pouziva uzivateli definovany shell, v tomto pripade ale vlastne nechceme, aby uzivatel shell mel, takze jej
##nepozadujeme
RootLogin off
RequireValidShell off
##DenyFilter - zabezpeceni proti nastaveni nebezpecnych filtru na masku regularniho vyrazu
DenyFilter \*.*/
##AuthOrder rika v jakem poradi se ma pristupovat k overeni daneho uzivatele, pokud je nastavena takto,
##dojde k overeni jen na zaklade mysql (virtual user), tj. zadny bezny uzivatel (vlastnici shell) nebude overen
AuthOrder mod_sql.c
##SQLAuthenticate povoluje modul SQL overeni uzivatele
SQLAuthenticate on
##SQLAuthTypes urcuje, jak jsou hesla ulozena v databazi
SQLAuthTypes Crypt Plaintext
##SQLConnectInfo obsahuje informace potrebne pro prihlaseni k databazi, je dobre mit pro proftpd vlastniho uzivatele
SQLConnectInfo databaze@localhost uzivatel_proftpd prisne_tajne_heslo
##SQLUserInfo rika, ktera tabulka a ktere zaznamy budou pouzity pro operace s uzivateli
SQLUserInfo ftpuser userid passwd uid gid homedir shell
##SQLGroupInfo rika, ktera tabulka a ktere zaznamy budou pouzity pro operace se skupinami
SQLGroupInfo ftpgroup groupname gid members
##Minimalni UID A GID uzivatele v SQL databazi, ktery ma opravneni se prihlasit
SQLMinID 500
##Umoznuje zalozit domovskou slozku uzivatele (definovanou v databazi) v pripade jeji neexistence
SQLHomedirOnDemand on
##Pricteme pocet prihlaseni uzivatele po kazdem jeho prihlaseni (prikaz PASS)
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
##Definice posledniho up/downloadu/smazani souboru uzivatele v databazi (prikaz STOR,DELE,GET)
SQLLog STOR,DELE,GET modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
## Uzivatelske kvoty
## =================
QuotaEngine on #Zapnuti kvot
QuotaDirectoryTally on #Maji se zapocitavat i adresare
QuotaDisplayUnits Mb #Zobrazovane jednotky
QuotaShowQuotas on #A maji se zobrazovat kvoty uzivatelum
##Nacita z databaze kvoty daneho uzivatele
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}'"
##Pocita jiz zaplnenou kvotu
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}'"
##Aktualizuje kvotu
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
##Vytvareni zaznamu kvoty pro uzivatele
SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies
##Toto je pouzito pro zobrazeni hlasky uzivateli, kolik z kvoty mu jeste zbyva
SQLNamedQuery gettally SELECT "ROUND((bytes_in_used/1048576),2) FROM ftpquotatallies WHERE name='%u'"
SQLNamedQuery getlimit SELECT "ROUND((bytes_in_avail/1048576),2) FROM ftpquotalimits WHERE name='%u'"
SQLNamedQuery getfree SELECT "ROUND(((ftpquotalimits.bytes_in_avail-ftpquotatallies.bytes_in_used)/1048576),2) FROM ftpquotalimits,ftpquotatallies WHERE ftpquotalimits.name = '%u' AND ftpquotatallies.name = '%u'"
##Zobrazime hlasku do pri prikazu LIST
SQLShowInfo LIST "226" "Used %{gettally}MB from %{getlimit}MB. You have %{getfree}MB available space."
##Tady definujeme, ze se kvoty pro uzivatele budou nacitat z databaze
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally[/shadow][/shadow][/shadow]
[b]pak jsem udělal uživatele proftpd a databázi proftpd s těmi to tabulkami:[/b]
-- Struktura tabulky `ftpgroup`
--
CREATE TABLE `ftpgroup` (
`groupname` varchar(16) NOT NULL default '',
`gid` smallint(6) NOT NULL auto_increment,
`members` varchar(16) NOT NULL default '',
PRIMARY KEY (`gid`),
KEY `groupname` (`groupname`)
) AUTO_INCREMENT=2004 ;
--
-- Struktura tabulky `ftpquotalimits`
--
CREATE TABLE `ftpquotalimits` (
`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') default 'hard',
`bytes_in_avail` int(10) unsigned NOT NULL default '0',
`bytes_out_avail` int(10) unsigned NOT NULL default '0',
`bytes_xfer_avail` int(10) unsigned NOT NULL default '0',
`files_in_avail` int(10) unsigned NOT NULL default '0',
`files_out_avail` int(10) unsigned NOT NULL default '0',
`files_xfer_avail` int(10) unsigned NOT NULL default '0'
)
--
-- Struktura tabulky `ftpquotatallies`
--
CREATE TABLE `ftpquotatallies` (
`name` varchar(30) NOT NULL default '',
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`bytes_in_used` int(10) unsigned NOT NULL default '0',
`bytes_out_used` int(10) unsigned NOT NULL default '0',
`bytes_xfer_used` int(10) unsigned NOT NULL default '0',
`files_in_used` int(10) unsigned NOT NULL default '0',
`files_out_used` int(10) unsigned NOT NULL default '0',
`files_xfer_used` int(10) unsigned NOT NULL default '0'
)
--
-- Struktura tabulky `ftpuser`
--
CREATE TABLE `ftpuser` (
`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 '5500',
`gid` smallint(6) NOT NULL default '5500',
`homedir` varchar(255) NOT NULL default '',
`shell` varchar(16) NOT NULL default '/sbin/nologin',
`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`)
)
a ted momentálně důmám nadtím co dále mám udělat na netu jsem našel nake ty návody ale moc to znich nechá jako nechápu co přesně mám udělat.