Fórum Ubuntu CZ/SK
Ostatní => Archiv => Téma založeno: mira_mo 10 Dubna 2007, 12:02:21
-
Jak vytvořím vyrtuálního uživatele v ProFtpd?Poradí mi někdo?
-
jak? velice jednoduše. vytvoříte uživatele v systému a automaticky bude mít i svůj účet FTP. I já dnes zprovoznil svůj veřejně přístupný server. Jen tak dál a lovu zdar...;)
-
nepoužíváš náhodou proftpd-mysql?Potřeboval bych s tím úporadit,nechce mi to nějak fongovat.Předem děkuji.
-
pro úplnost přikládám configurák proftpd
#
# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes reload proftpd after modifications.
#
# Includes DSO modules
Include /etc/proftpd/modules.conf
ServerName "MSCNET_SERVER"
ServerType standalone
DeferWelcome off
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayFirstChdir .message
ListOptions "-l"
DenyFilter \*.*/
# Port 21 is the standard FTP port.
Port 21
# In some cases you have to specify passive ports range to by-pass
# firewall limitations. Ephemeral ports can be used for that, but
# feel free to use a more narrow range.
# PassivePorts 49152 65534
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances 30
# Set the user and group that the server normally runs at.
User proftpd
Group nogroup
# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask 022 022
# Normally, we want files to be overwriteable.
AllowOverwrite on
# Uncomment this if you are using NIS or LDAP to retrieve passwords:
# PersistentPasswd off
# Be warned: use of this directive impacts CPU average load!
#
# Uncomment this if you like to see progress and transfer rate with ftpwho
# in downloads. That is not needed for uploads rates.
# UseSendFile off
TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log
TLSEngine off
QuotaEngine on
Ratios on
# Delay engine reduces impact of the so-called Timing Attack described in
# http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02
# It is on by default.
DelayEngine on
ControlsEngine on
ControlsMaxClients 2
ControlsLog /var/log/proftpd/controls.log
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
AdminControlsEngine on
# A basic anonymous configuration, no upload directories.
#
# User ftp
# Group nogroup
# # We want clients to be able to login with "anonymous" as well as "ftp"
# UserAlias anonymous ftp
# # Cosmetic changes, all files belongs to ftp user
# DirFakeUser on ftp
# DirFakeGroup on ftp
#
# RequireValidShell off
#
# # Limit the maximum number of anonymous logins
# MaxClients 10
#
# # We want 'welcome.msg' displayed at login, and '.message' displayed
# # in each newly chdired directory.
DisplayLogin welcome.msg
# DisplayFirstChdir .message
#
# # Limit WRITE everywhere in the anonymous chroot
#
#
# DenyAll
#
#
#
# # Uncomment this if you're brave.
# #
# # # Umask 022 is a good standard umask to prevent new files and dirs
# # # (second parm) from being group and world writable.
# # Umask 022 022
# #
# # DenyAll
# #
# #
# # AllowAll
# #
# #
#
#
SQLConnectInfo ProFtpd@192.168.1.100 mira mira
SQLAuthenticate users
SQLAuthTypes backend
SQLDefaultHomedir /home/ftp
SQLUserInfo users userid passwd uid gid homedir shell
SQLGroupInfo groups groupname gid members
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1 WHERE userid='%u'" users
-
Uz ani nevim, kde jsem ten konfigurak vysmatl, ale jede dobre. Tech passive ports si moc nevsimejte, pouzivam to pro pruchod firewallem
/etc/proftpd.conf
DefaultRoot ~
ServerName "FTP server"
Port 21
PassivePorts 5103 5189
MultilineRFC2228 on
DefaultServer on
ShowSymlinks yes
IdentLookups off
UseReverseDNS off
AllowStoreRestart on
AllowRetrieveRestart on
TimeoutNoTransfer 900
TimeoutStalled 600
TimeoutIdle 1800
Umask 022 022
DisplayLogin welcome.msg
DisplayFirstChdir .message
ListOptions "-l"
DenyFilter \*.*/
ServerType standalone
# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes Crypt Plaintext
SQLAuthenticate on
# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo ftp@localhost proftpd prisnetajneheslopropripojenikdatabazi
# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo ftpuser userid passwd uid gid homedir shell
# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo ftpgroup groupname gid members
# set min UID and GID - otherwise these are 999 each
SQLMinID 500
# create a user's home directory on demand if it doesn't exist
SQLHomedirOnDemand 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
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'"
SQLShowInfo LIST "226" "Used %{gettally}MB from %{getlimit}MB. You have %{getfree}MB available space."
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
RootLogin off
RequireValidShell offtabulky v databazi:
--
-- 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`)
)
-
díky vyzkouším,kdyžtak se ozvu.
-
Tak mi to hází zatím tuhle chybu.
Failed to start FTP server :
* Starting ftp server proftpd
- Fatal: unknown configuration directive 'SQLAuthTypes' on line 31 of '/etc/proftpd/proftpd.conf'
...fail!
-
A mate nainstalovane baliky proftpd a proftpd-mysql ?
-
ano mám.Když příslušné řídky týkající se sql zakomentuju tak se ProFtpd rozjede.
-
Takze uz mne to trochu nebavilo, jak porad kdyz instaluji novy server marne znova patram, jak jsem to vlastne delal.
Z nejakeho duvodu mi ubunti balicky nefunguji tak, jak maji, takze davam prostor vlastni kompilaci (nebojte, nic sloziteho).
Verze proftpd 1.3.0 je pouzita kvuli dobre kompatibilite a stabilite. Mimo jine je k ni dostupna dvojice patchu umoznujici
vypis adresare v urcitem kodovani:
Pokud nemate nainstalovany zadny balik proftpd, muzete prvni krok vynechat
sudo apt-get remove proftpd* --purge
sudo apt-get install patch gcc g++ make libmysqlclient15-dev
cd /usr/src
sudo wget http://www.nanetu.eu/proftpd/proftpd-1.3.0.tar.gz
sudo wget http://www.nanetu.eu/proftpd/proftpd-1.3.0-nlst-ffftp.patch
sudo wget http://www.nanetu.eu/proftpd/proftpd-1.3.0-iconv.patch
sudo wget -O /etc/init.d/proftpd http://www.nanetu.eu/proftpd/proftpd
sudo chmod 0755 /etc/init.d/proftpd
sudo echo "RUN=yes" >>/etc/default/proftpd
sudo echo "OPTIONS=" >>/etc/default/proftpd
sudo echo "CONF=/etc/proftpd.conf" >>/etc/default/proftpd
sudo tar -zxvf proftpd-1.3.0.tar.gz
sudo patch -p0 < proftpd-1.3.0-iconv.patch
sudo patch -p0 < proftpd-1.3.0-nlst-ffftp.patch
cd proftpd-1.3.0
sudo ./configure --prefix=/usr --sysconfdir=/etc --with-modules=mod_codeconv --with-modules=mod_codeconv:mod_df:mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql --with-includes=/usr/include/mysql
sudo make
sudo make installcat /etc/proftpd.conf:
##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-tallytabulky v databazi:
--
-- 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`)
)Samosebou je potreba do databaze najekeho toho uzivatele zavest (jeho home bude v /home/ftp, uid i gid je 2001 - dobre se na to navazuje primo treba v sambe a nema nastaveny zadne kvoty), jmeno i heslo je "test" :)
INSERT INTO `ftpgroup` VALUES ('ftpgroup', 2001, '');
INSERT INTO `ftpuser` VALUES (1, 'test','test', 2001, 2001, '/home/ftp', '/sbin/nologin', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00');
INSERT INTO `ftpquotalimits` VALUES ('test', 'user', 'false', 'hard', 0, 0, 0, 0, 0, 0);
-
Tyto příkazy mi píší Permission denied
sudo echo "RUN=yes" >>/etc/default/proftpd
sudo echo "OPTIONS=" >>/etc/default/proftpd
sudo echo "CONF=/etc/proftpd.conf" >>/etc/default/proftpd
-
A uzivatel, pod kterym se snazite proftpd instalovat je sudoers?
-
merlin - paráda. Měl jsem sice ty samé problémy jako mira_mo, ale prostě jsem to udělal ručně. Ještě jednou díky.