PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ProFTPd mit MySQL Unterstützung (FTP benutzer per


Entity
27.12.2008, 12:35
Installieren von ProFTPd mit MySQL Unterstützung (FTP benutzer per MySQL)

Erstmal kaffee kochen damit es funktioniert ^^

Nun müssen wir zuersteinmal mit einem apt-get install befehl beginnen.


apt-get install proftpd-mysqlBei der Installation das evt. auftretende Fenster mit OK bestätigen.

Nun funktioniert das ganze natürlich noch nicht.

Um FTP User per MySQL hinzufügen zu können, fehlt uns noch eine Verbindung ProFTPd <-> MySQL und natürlich ein Allround User mit dem die ganzen User auf dem Server laufen.

Diesem FTP-User gehören später alle Ordner/Dateien im FTP bereich, sodass man keine spezifischen Rechte mehr für jeden einzelnen Benutzer setzen muss.

DIesen legen wir also dann mal als erstes an mit einer UserID die nicht im System belegt ist. Ich hab hierbei einfach aufs Geratewohl die ID 2593 genommen. Vorher müssen wir allerdings eine Gruppe erstellen, in der wir den User "parken". Hierbei nehme ich auch meine ID 2593.

Somit lauten die 2 Befehle:

groupadd -g 2593 ftpgroupuseradd -u 2593 -s /bin/false -d /bin/null -g ftpgroup ftpuserHiermit haben wir nun also unsern FTPUser.

Damit der auch auf alles zugreifen kann, müssen wir das FTP verzeichnis komplett dem Benutzer zuweisen. Dies geht mit dem Befehl

chown -hRv ftpuser:ftpgroup /ordner/ordnerWenn wir FTP benutzer für einen Webspace im Apache Verzeichnis /var/www erstellen wollen, dann geht das mit

chown -hRv ftpuser:ftpgroup /var/wwwJetzt fehlt also nur noch die Verbindung ProFTPd <-> MySQL. UNd dies wird jetzt ein bisschen aufwändiger.

Als erstes müssen wir im MYSQL einen User für ProFTPd erstellen. Hierbei bietet sich besonderes Phpmyadmin an: Man klickt auf SQL und gibt folgenden Befehl ein:

CREATE DATABASE ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Bitte das Passwort auch ersetzen!!

Als nächstes legen wir dann (wieder in phpmyadmin über DB aus wählen -> Ftp -> SQL) die Tabellen an.

CREATE TABLE ftpgroup (
groupname varchar(16) NOT NULL default '',
gid smallint(6) NOT NULL default '2593',
members varchar(16) NOT NULL default '',
KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTP group table'; 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 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'
) TYPE=MyISAM; 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'
) TYPE=MyISAM; 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 '2593',
gid smallint(6) NOT NULL default '2593',
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)
) TYPE=MyISAM COMMENT='ProFTP user table'; Hiermit sind wir dann im MYSQL Bereich fertig und können phpmyadmin zumachen. PUH! Erstmal ein SChluck aus unserer Kaffeekanne (siehe Utensilien die man benötigt ganz oben^^)

Jetzt muss nur noch der proftpd.conf (/etc/proftpd/proftpd.conf) beigebracht werden, wie sie zu MySQL verbinden soll!

Als allererstes aber müssen wir ProFTPd sagen, dass wir MySQL und nicht PostgreSQL benutzen.

Dazu öffnen wir die modules.conf folgendermaßen:

nano /etc/proftpd/modules.confHier suchen wir nach folgender Stelle:

LoadModule mod_sql_postgres.cund machen davor ein # um es auszukommentieren und speichern dann mit STRG+O die Datei.

Als nächstes nehmen wir uns die proftpd.conf mit dem Befehl

nano /etc/proftpd/proftpd.confDABEI UNBEDINGT DRAUF ACHTEN DASS DAS PASSWORT (BEI "SQLConnectInfo ftp@localhost proftpd password" IN DAS PASSWORT GEÄNDERT WIRD DASS MAN FÜR DEN FTP BENUTZER IN MYSQL ANGELEGT HAT!

DefaultRoot ~


# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes Plaintext Crypt
SQLAuthenticate users* groups*


# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo ftp@localhost proftpd password


# 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

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 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."


RootLogin off
RequireValidShell offDies reicht dann auch mit der Proftpd.conf.

Dann öffnen wir wieder phpmyadmin und tragen unsere FTP Gruppe ein. (DB auswählen -> ftp -> SQL)

INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2593, 'ftpuser'); Jetzt können wir User hinzufügen.

Dies geht ganz einfach mit dem BEfehl (DB Auswählen -> ftp -> SQL):

INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, 'BENUTZERNAME', 'PASSWORT', 2593, 2593, '/VERZEICHNIS/VERZEICHNIS', '/sbin/nologin', 0, '', ''); Bitte genau drauf achten dass die erfoderlichen Daten ersetzt werden.

Nach der ganzen Prozedur den ProFTPd Server neustarten mit

/etc/init.d/proftpd restartUnd dann sind wir fertig mit unserem FTP Usern verarbeiten.. auf diese art können ganz einfach neue hinzugefügt werden! Es sollte nur beachtet werden dass die Shell (/sbin/nologin) und die gid/uid (beidesmal 2593) nicht verändert werden.

Außerdem sollte beachtet werden dass die User auf das Verzeichnis dass wir ihnen zuweisen Rechte haben - im zweifelsfall also ein

chown -hRv ftpuser:ftpgroup /verzeichnis/verzeichnis Ausführen.

Odin
26.09.2010, 23:12
mal ne frage kann jemand ein updat von der anleittung machen. da ja mitlerweile auch neue phpmyadmin versinen draussen sind und der befehl:

apt-get install proftpd-mysql

zum beispiel gar nicht mehr geht und man jetzt das so machen muss:

apt-get install proftpd proftpd-mod-mysql mysql-server-5.0 mysql-client-5.0

wäre klasse, da ftp nicht meine welt ist und für nen flux mit ein paar leuten doch recht nützlich ist

Lex
27.09.2010, 01:07
Ich verwend dafür lieber vsFTP, ne Anleitung gibts hier, funktioniert einwandfrei :)
Debian Root Tutorial (SSH + TorrentFlux) - NetVision-Technik (http://www.netvision-technik.de/forum/showthread.php?t=4065)

Lg Lex