Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Howto] proftpd/mysql/quota
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Dutch
View previous topic :: View next topic  
Author Message
lhurgoyf
n00b
n00b


Joined: 11 Jun 2003
Posts: 34

PostPosted: Thu Apr 29, 2004 4:24 pm    Post subject: [Howto] proftpd/mysql/quota Reply with quote

Linux proftpd, mysql en quotas

Door Michiel van den Berg - Michiel@daaw.org

Laast ge-update:
29 april - 2003

#Intro#

Deze howto is geschreven om te beschrijven hoe ProFTPd te installeren
en configureren om gebruik te maken van een MySQL database voor gebruikers en quota management. het basis systeem wat ik gebruik is een Gentoo installatie

Ik ga er van uit dat je een basis systeem heb opgezet met een werkende installatie van een linux distributie.

Ik ben niet verantwoordelijk voor evt. schade aan je systeem door het gebruik van deze distro. ook raad ik geen alchoholische dranken aan bij het invoeren van de commandos.

#Pakketten#

Gentoo:
USE +mysql
dev-db/mysql-4.0.18
net-ftp/proftpd-1.2.9
proftpd-mod-quotatab-1.2.11.tar.gz

#Installatie#

voor Gentoo zullen we wat hacks moeten doen aan de ebuild *Dankzij royger.tk weblog*

doe:
Code:
cd
wget http://www.castaglia.org/proftpd/modules/proftpd-mod-quotatab-1.2.11.tar.gz
tar xvfz proftpd-mod-quotatab-1.2.11.tar.gz


Code:
emerge -f proftpd
cd /usr/portage/net-ftp/proftpd
ebuild proftpd-1.2.9.ebuild unpack
cd /var/tmp/portage/proftpd-1.2.9/work/proftpd-1.2.9/modules
cp ~/mod_quotatab/mod_quotatab.h ~/mod_quotatab/mod_quotatab.c ~/mod_quotatab/mod_quotatab_sql.c ./
cd /usr/portage/net-ftp/proftpd


pas in proftpd-1.2.9.ebuild het volgende aan

Code:
if use mysql; then
modules="${modules}:mod_sql:mod_sql_mysql"


moet worden:

Code:
if use mysql; then
modules="${modules}:mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql"


Hierna:

Code:
ebuild proftpd-1.2.9.ebuild compile
ebuild proftpd-1.2.9.ebuild install
ebuild proftpd-1.2.9.ebuild qmerge


#Linux Configuratie#

Voor linux hebben we een echte user en group account nodig, omdat de users in hun home directory
worden 'jailed' door de 'DefaultRoot ~/' entry in proftpd.conf. we zullen een ftp gebruiker en
een ftp gast account opzetten op het linux systeem.

ik gebruik 901 en 902 voor de ftp group en gebruikers groep. je zal even moeten controleren of deze vrij
zijn dmv:
Code:
grep 901 /etc/passwd
grep 901 /etc/group
grep 902 /etc/passwd


Code:
groupadd -g 901 ftpgroep
adduser -u 901 -s /bin/false -d /bin/null -c "proftpd gebruiker" -g ftpgroep ftpgebruiker
adduser -u 902 -s /bin/false -d /bin/null -c "proftpd gast" -g ftpgroep ftpgast


Zet een wachtwoord op de accounts en voeg ze toe aan de database als lid van de ftpgroep door een
nieuw record toe te voegen.

Code:
passwd ftpgebruiker
passwd ftpgast


Om een gast gebruiker toe te voegen, voeg een record toe voor de gebruiker en maak mappen aan
met de volgende rechten:

Code:
chmod 755 van_map
chmod 731 naar_map


met als gebruiker en groep: ftpgebruiker.ftpgroep

Code:
chown ftpgebruiker.ftpgroep van_map
chown ftpgebruiker.ftpgroep naar_map


de clienten zullen bestanden kunnen downloaden uit de van_map en daar ook bestanden uploaden.
maar ze zullen de inhoud van de naar_map niet kunnen uitlezen.

#MySQL Configuratie#

Maak de database en tabellen aan voor de gebruikers en het loggen.

Ik maak een tabel genaamd proftp met als gebruiker proftp en wachtwoord.

Log in op MySQL met jouw root account en bijbehorend wachtwoord.

Code:
mysql -u root -p wachtwoord


Code:
create database proftp;
grant select, insert, update on proftp.* to proftp@localhost identified by 'jouw_wachtwoord';

use proftp;

#
# Table structure for table `ftpgroup`
#

CREATE TABLE `ftpgroup` (
`groupname` varchar(16) NOT NULL default '',
`gid` smallint(6) NOT NULL default '5500',
`members` varchar(16) NOT NULL default '',
KEY `groupname` (`groupname`)
) TYPE=MyISAM COMMENT='ProFTP group table';

INSERT INTO `ftpgroup` VALUES ('ftpgroep', 901, 'ftpgebruiker');

# --------------------------------------------------------

#
# Table structure for table `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') NOT NULL default 'soft',
`bytes_in_avail` float NOT NULL default '0',
`bytes_out_avail` float NOT NULL default '0',
`bytes_xfer_avail` float 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'
) TYPE=MyISAM;

# --------------------------------------------------------

#
# Table structure for table `ftpquotatallies`
#

CREATE TABLE `ftpquotatallies` (
`name` varchar(30) NOT NULL default '',
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`bytes_in_used` float NOT NULL default '0',
`bytes_out_used` float NOT NULL default '0',
`bytes_xfer_used` float 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'
) TYPE=MyISAM;

# --------------------------------------------------------

#
# Table structure for table `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`)
) TYPE=MyISAM COMMENT='ProFTP gebruikers tabel' ;

INSERT INTO `ftpuser` VALUES (1, 'testaccount', password('ftppasswd'), 901, 901, '/home/testdomein.nl', '/sbin/nologin',0,'','');

exit;



Notes:

* de group tabel houd alle leden van een group. hier hoeft niks in te staan voor een simpele installatie.
* de user tabel houd alle ftp gebruikers en houd hun stats bij,
hij houd ook de authenticatie bij en verwijst de mensen naar de goede home directory.
Als de home directory nog niet bestaat wordt deze aangemaakt door proftp.
* de quotalimits tabel wordt gebruikt om de quotas van gebruikers in te stellen.
* de quotatallies tabel wordt gebruikt door proftp om de gebruikers quota bij te houden. en zal gevult worden
als het veld 'name' overeenkomt als een gebruiker inlogt.
* er wordt automagisch een test account toegevoegd om te controleren of ftp goed werkt.

Field Explanations:

quotalimits

name - gebruikersnaam
quota_type - user, group, class, all (wij gebruiken user)
per_session - true or false (wij gebruiken true)
limit_type - quota limit type - hard or soft (wij zullen een hard limiet gebruiken)
bytes_in_avail - het maximale bytes wat geupload mag worden (eg. diskquota)
bytes_out_avail - het maximale bytes wat gedownload mag worden
bytes_xfer_avail - het maximale bytes wat een gebruiker mag up en downloaden
files_in_avail - maximale aantal bestanden dat een gebruiker mag uploaden
files_out_avail - maximale aantal bestanden dat een gebruiker mag downloaden
files_xfer_avail - maximale aantal bestanden dat geupload en gedownload mag worden

quotatallies
name
quota_type
bytes_in_used - upload tally in bytes
bytes_out_used - download tally in bytes
bytes_xfer_used - transfer tally in bytes
files_in_used - upload tally in files
files_out_used - download tally in files
files_xfer_used - transfer tally in files

als een waarde op 0 staat betekend dat ongelimiteerd.

je kan een 15MB quota limit testen op 'testaccount' door het volgende record toe te voegen in 'quotalimits':

Code:
INSERT INTO ftpquotalimits VALUES('testaccount','user','true','hard','15728640','0','0','0','0','0');


je zal in moeten loggen met deze tabel al ingevoerd, als je deze later toevoegt wordt ie pas van kracht bij de
eerstvolgende keer dat iemand inlogt. Enig nadeel is dat hij je wel een bestand laat uploaden, maar daarna verwijderd
als je bij het limiet bent. normaal gesproken zou je een bericht krijgen voordat je gaat uploaden. dit is wel vervelend
maar kunnen we niet omheen werken op het moment.

Als je kan uitvinden hoe dit op te lossen is. laat het me weten dan zal ik dit document updaten.

#Proftpd Config File#

Hier is het configuratie bestand voor PROFTP. vergeet niet de mysql gebruiker en password aan te passen voor jouw database. controleer natuurlijk ook de andere variablen zodat ze goed zijn voor jou.

Code:

ServerName "mijn Proftpd Server"
ServerType Standalone
ServerAdmin gebruiker@domein.nl

# Hide as much as possible to outside users
ServerIdent on "Welcome op mijn FTP server."
DeferWelcome on

DefaultServer on

# Deze zou ik uit zetten als je veel uploads op je server krijgt.
AllowStoreRestart on

# Port 21 is the standard FTP port.
Port 21

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022

# 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 under which the server will run.
User nobody
Group nogroup

# Dit zorgt ervoor dat gebruikers 'Jailed' worden in hun home dir.
DefaultRoot ~

# Normally, we want files to be overwriteable.

AllowOverwrite on

# De wachtwoorden worden gecrypt voordat ze opgeslagen worden
SQLAuthenticate users groups
SQLAuthTypes Crypt Backend

# Database connectie info
# databasenaam@server gebruiker wachtwoord
SQLConnectInfo proftp@localhost proftp mijngeheimepw

# Dit zijn de namen van de velden voor de gebruikers
# in de database, zorg dat deze hetzelfte zijn.
SQLUserInfo ftpuser userid passwd uid gid homedir shell

# Dit zijn de namen van de velden voor de groepen in de
# database, deze moeten natuurlijk ook hetzelfte zijn.
SQLGroupInfo ftpgroup groupname gid members

# Onderstaande is voor de quotas. dit kan je overnemen. verander
# hooguit de log directories/namen.
QuotaEngine on
QuotaShowQuotas on
QuotaDisplayUnits Mb
QuotaLog /var/log/proftpd.quota
#QuotaDirectoryTally on
SQLLogFile /var/log/proftpd.sql

# Minimale uid en gid voor het inloggen. je zou em ook op 899
# kunnen zetten bij gentoo aangezien de gebruikers en ftp services
# allemaal boven de 899 beginnen
SQLMinID 500

# maak een homedir als die nog niet bestaat.
SQLHomedirOnDemand on

# Tel de keren dat de gebruiker inlogt en zet de laatst ingelogte datum neer
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# Update de datum in het 'modified' veld
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

#SQL Queries voor de quota
SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies

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

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

RootLogin off
RequireValidShell off



Start de ftp server nu
Code:
/etc/init.d/proftpd start


en log in op ftp met 'testaccount' en 'ftppasswd'.
als de home directory /home/testdomein.nl nog niet bestaat wordt deze aangemaakt.

ref: http://www.khoosys.net/single.htm?ipg=848
Back to top
View user's profile Send private message
garo
Bodhisattva
Bodhisattva


Joined: 15 Jul 2002
Posts: 860
Location: Edegem,BELGIUM

PostPosted: Thu Apr 29, 2004 5:17 pm    Post subject: Reply with quote

Allemaal heel leuk, maar als je hier echt iemand wil helpen dan kan je het beter naar het engels vertalen en hier zetten...
Als je het niet in het engels wilt vertalen kan je het op een nederlandstalige site met linuxdocs zetten (met google vind je er wel genoeg).

Indien iemand hier niet mee akkoord is, post dan maar een reply.
_________________
My favorite links this month:
- Surf Random
- Web-based SSH
- Stop Spam
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Dutch All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum