www.ProFTPD.de
13. März 2007, 18:30:02 *
Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge
News: SMF - Neu installiert!
 
   Übersicht   Hilfe Suche Login Registrieren  
Seiten: [1]   Nach unten
  Drucken  
Autor Thema: Mod_Sql  (Gelesen 549 mal)
0 Mitglieder und 1 Gast betrachten dieses Thema.
AlphaWolf
ProFTPD
*
Offline Offline

Beiträge: 4


Profil anzeigen
« am: 28. Mai 2006, 00:21:54 »

Hallo,

ich möchte gerne meine User über eine mysql Datenbank verwalten. Ich habe die proftpd mit --with-modules=mod_sql:mod_sql_mysql kompiliert und eingerichtet.

Konfiguriert habe ich das ganze dann folgendermaßen:

#MYSQL User
SQLAuthTypes Plaintext
SQLAuthenticate users*
SQLConnectInfo proftpd@localhost ftp ************
SQLDefaultGID   65534
SQLDefaultUID   65534
SQLMinUserGID   100
SQLMinUserUID   500
SQLUserInfo ftp username password uid gid homedir shell
SQLLOGFILE /var/log/proftpd.sql.log

Ich benutze dies Datenbank Layout: http://www.proftpd.de/files/proftpd_sql.sql

Jedoch kann man sich trotz SQLAuthenticate users* weiterhin mit normalen System Konten einloggen und über User die ich in die DB mal manuell eingetragen habe kann ich mich auch nicht einloggen. Er sagt einfach Passwort falsch. Was mich dann doch ein Stück weiter bringt ist das SQL Logfile vom proftpd:

May 27 23:04:45 mod_sql/4.2.1[10692]: defaulting to 'postgres' backend
May 27 23:04:45 mod_sql/4.2.1[10692]: backend module 'mod_sql_postgres/4.02'
May 27 23:04:45 mod_sql/4.2.1[10692]: backend api    'mod_sql_api_v2'
May 27 23:04:45 mod_sql/4.2.1[10692]: >>> sql_sess_init
May 27 23:04:45 mod_sql/4.2.1[10692]: entering    postgres cmd_defineconnection
May 27 23:04:45 mod_sql/4.2.1[10692]:  name: 'default'
May 27 23:04:45 mod_sql/4.2.1[10692]:  user: 'ftp'
May 27 23:04:45 mod_sql/4.2.1[10692]:  host: 'localhost'
May 27 23:04:45 mod_sql/4.2.1[10692]:    db: 'proftpd'
May 27 23:04:45 mod_sql/4.2.1[10692]:  port: '5432'
May 27 23:04:45 mod_sql/4.2.1[10692]:   ttl: '0'
May 27 23:04:45 mod_sql/4.2.1[10692]: exiting    postgres cmd_defineconnection
May 27 23:04:45 mod_sql/4.2.1[10692]: entering    postgres cmd_open
May 27 23:04:45 mod_sql/4.2.1[10692]: exiting    postgres cmd_open
May 27 23:04:45 mod_sql/4.2.1[10692]: unrecoverable backend error
May 27 23:04:45 mod_sql/4.2.1[10692]: error: 'mod_sql_postgres/4.02'
May 27 23:04:45 mod_sql/4.2.1[10692]: message: 'could not connect to server: Connection refused
   Is the server running on host "localhost" and accepting
   TCP/IP connections on port 5432?

Scheinbar nutzt er gar nicht das mysql Modul was extra mit einkompiliert wurde. Hat jemand eine Idee, was ich machen kann?

Gespeichert
VolGas
Moderator
ProFTPD
*****
Online Online

Beiträge: 770



Profil anzeigen
« Antwort #1 am: 28. Mai 2006, 02:41:23 »

Hallo!

Man kann dem ProFTPD angeben, in welcher Reihenfolge die Authentifikationsmodule durchlaufen werden sollen.
Mit "AuthOrder mod_sql.c" wird dies ausschließlich auf SQL gelegt - das ist das, was Du gesucht hast.

Sehr merkwürdig ist aber, daß in Deinem Logfile auf einmal der PostgreSQL-Server steht!?!
Ist der überhaupt auf Deinem System installiert?

Starte einmal den ProFTPD mit dem Parameter "-l" - das gibt die eincompilierten Module aus.

mfg.
  VolGas
Gespeichert
AlphaWolf
ProFTPD
*
Offline Offline

Beiträge: 4


Profil anzeigen
« Antwort #2 am: 28. Mai 2006, 09:43:27 »

Compiled-in modules:
  mod_core.c
  mod_xfer.c
  mod_auth_unix.c
  mod_auth_file.c
  mod_auth.c
  mod_ls.c
  mod_log.c
  mod_site.c
  mod_delay.c
  mod_sql.c
  mod_sql_mysql.c
  mod_cap.c

Und nein ich habe gar keinen Postgree Server installiert *G*

Ich habe den Server zunächst mit Apt Installiert, damit ich die Start Stop scripte nicht selber einrichten muss. Dann habe ich den Daemon mit dem aus den sourcen kompilierten ersetzt. Jedoch hat Debian noch eine modules.conf angelegt. Scheinbar kann der Server auch nicht einkompilierte dynamische Bibbliotheken laden, was aber irgendwie nicht geklappt hat:

#
# This file is used to manage DSO modules and features.
#

# This is the directory where DSO modules resides

ModulePath /usr/lib/proftpd

# Allow only user root to load and unload modules, but allow everyone
# to see which modules have been loaded

ModuleControlsACLs insmod,rmmod allow user root
ModuleControlsACLs lsmod allow user *

#LoadModule mod_ctrls_admin.c
LoadModule mod_tls.c
LoadModule mod_sql.c
LoadModule mod_ldap.c
LoadModule mod_sql_mysql.c
LoadModule mod_sql_postgres.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_file.c
LoadModule mod_quotatab_ldap.c
LoadModule mod_quotatab_sql.c
LoadModule mod_radius.c
LoadModule mod_wrap.c
LoadModule mod_rewrite.c

# keep this module the last one
LoadModule mod_ifsession.c


Ich hab die Stelle aber auskommentiert wo die Datei eingebunden wird. Auch mit AuthOrder mod_sql.c kann ich mich immer noch mit SystemKonten einloggen. Da läuft scheinbar irgendwas falsch.
Gespeichert
VolGas
Moderator
ProFTPD
*****
Online Online

Beiträge: 770



Profil anzeigen
« Antwort #3 am: 28. Mai 2006, 10:58:34 »

Sehr merkwürdig, das Ganze.
AuthOrder ist doch genau dazu da, um die Reihenfolge der Auth-Module zu definieren.

Was Du da gebastelt hast, ist übrigens nicht ganz ungefährlich: wenn der Maintainer des
Debianpaketes ein Update auf die Menschheit "losläßt", wird Deine Konfigoration überschrieben.
Du kannst aber mit "apt-get remove" den ProFTPD deinstallieren, ohne daß die Startscripte
(und alles was dazugehört) gelöscht werden. Dazu fehlt noch der Parameter "--purge".
Oder Du installierst einfach nur das Paket "proftpd-common"...

Ich habe unseren ProFTPD übrigens so compiliert:
./configure -q \
--with-modules="mod_sql:mod_sql_mysql:mod_tls" \
--disable-auth-pam --disable-auth-file \
--disable-sendfile --enable-buffer-size=8092 \
--with-includes=/usr/local/mysql/include/mysql \
--with-libraries=/usr/local/mysql/lib/mysql \
\
--prefix=/usr/local/proftpd \
--sysconfdir=/etc --localstatedir=/var/run --mandir=/usr/local/man

make
make install
Damit fehlen dem ProFTPD die entsprechenden Module, die er überhaupt benutzen könnte,
um Systemuser zuzulassen und zusätzlich werden noch ein paar Dinge (für unsere Zwecke) optimiert.

mfg.
  VolGas
Gespeichert
AlphaWolf
ProFTPD
*
Offline Offline

Beiträge: 4


Profil anzeigen
« Antwort #4 am: 28. Mai 2006, 14:55:54 »

So ich habe das ganze mal neu aufgestzt etc. und nun bin ich schon einen Schritt weiter. Ich weiß nur nicht, warum der Server mir trotzdem den Zugriff verwehrt (falsches Passwort):

May 28 14:35:24 mod_sql/4.2.1[30243]: defaulting to 'mysql' backend
May 28 14:35:24 mod_sql/4.2.1[30243]: backend module 'mod_sql_mysql/4.05'
May 28 14:35:24 mod_sql/4.2.1[30243]: backend api    'mod_sql_api_v2'
May 28 14:35:24 mod_sql/4.2.1[30243]: >>> sql_sess_init
May 28 14:35:24 mod_sql/4.2.1[30243]: entering    mysql cmd_defineconnection
May 28 14:35:24 mod_sql/4.2.1[30243]:  name: 'default'
May 28 14:35:24 mod_sql/4.2.1[30243]:  user: 'ftp'
May 28 14:35:24 mod_sql/4.2.1[30243]:  host: 'localhost'
May 28 14:35:24 mod_sql/4.2.1[30243]:    db: 'proftpd'
May 28 14:35:24 mod_sql/4.2.1[30243]:  port: '3306'
May 28 14:35:24 mod_sql/4.2.1[30243]:   ttl: '0'
May 28 14:35:24 mod_sql/4.2.1[30243]: exiting    mysql cmd_defineconnection
May 28 14:35:24 mod_sql/4.2.1[30243]: entering    mysql cmd_open
May 28 14:35:24 mod_sql/4.2.1[30243]: connection 'default' opened
May 28 14:35:24 mod_sql/4.2.1[30243]: connection 'default' count is now 1
May 28 14:35:24 mod_sql/4.2.1[30243]: exiting    mysql cmd_open
May 28 14:35:24 mod_sql/4.2.1[30243]: backend successfully connected.
May 28 14:35:24 mod_sql/4.2.1[30243]: mod_sql engine     : on
May 28 14:35:24 mod_sql/4.2.1[30243]: negative_cache     : off
May 28 14:35:24 mod_sql/4.2.1[30243]: authenticate       : users
May 28 14:35:24 mod_sql/4.2.1[30243]: usertable          : ftp
May 28 14:35:24 mod_sql/4.2.1[30243]: userid field       : username
May 28 14:35:24 mod_sql/4.2.1[30243]: password field     : password
May 28 14:35:24 mod_sql/4.2.1[30243]: uid field          : NULL
May 28 14:35:24 mod_sql/4.2.1[30243]: gid field          : NULL
May 28 14:35:24 mod_sql/4.2.1[30243]: homedir field      : homedir
May 28 14:35:24 mod_sql/4.2.1[30243]: shell field        : NULL
May 28 14:35:24 mod_sql/4.2.1[30243]: homedirondemand    : false
May 28 14:35:24 mod_sql/4.2.1[30243]: SQLMinUserUID      : 500
May 28 14:35:24 mod_sql/4.2.1[30243]: SQLMinUserGID      : 100
May 28 14:35:24 mod_sql/4.2.1[30243]: <<< sql_sess_init
May 28 14:35:24 mod_sql/4.2.1[30243]: >>> sql_pre_pass
May 28 14:35:24 mod_sql/4.2.1[30243]: <<< sql_pre_pass
May 28 14:35:24 mod_sql/4.2.1[30243]: >>> cmd_getpwnam
May 28 14:35:24 mod_sql/4.2.1[30243]: entering    mysql cmd_escapestring
May 28 14:35:24 mod_sql/4.2.1[30243]: exiting    mysql cmd_escapestring
May 28 14:35:24 mod_sql/4.2.1[30243]: cache miss for user 'alex'
May 28 14:35:24 mod_sql/4.2.1[30243]: : entering    mysql cmd_select
May 28 14:35:24 mod_sql/4.2.1[30243]: entering    mysql cmd_open
May 28 14:35:24 mod_sql/4.2.1[30243]: connection 'default' count is now 2
May 28 14:35:24 mod_sql/4.2.1[30243]: exiting    mysql cmd_open
May 28 14:35:24 mod_sql/4.2.1[30243]: query "SELECT username, password, homedir FROM ftp WHERE (username='alex') LIMIT 1"
May 28 14:35:24 mod_sql/4.2.1[30243]: entering    mysql cmd_close
May 28 14:35:24 mod_sql/4.2.1[30243]: connection 'default' count is now 1
May 28 14:35:24 mod_sql/4.2.1[30243]: exiting    mysql cmd_close
May 28 14:35:24 mod_sql/4.2.1[30243]: exiting    mysql cmd_select
May 28 14:35:24 mod_sql/4.2.1[30243]: cache miss for user 'alex'
May 28 14:35:24 mod_sql/4.2.1[30243]: user 'alex' cached
May 28 14:35:24 mod_sql/4.2.1[30243]: + pwd.pw_name  : alex
May 28 14:35:24 mod_sql/4.2.1[30243]: + pwd.pw_uid   : 65534
May 28 14:35:24 mod_sql/4.2.1[30243]: + pwd.pw_gid   : 65534
May 28 14:35:24 mod_sql/4.2.1[30243]: + pwd.pw_dir   : /var/www
May 28 14:35:24 mod_sql/4.2.1[30243]: + pwd.pw_shell :
May 28 14:35:24 mod_sql/4.2.1[30243]: <<< cmd_getpwnam
May 28 14:35:24 mod_sql/4.2.1[30243]: >>> cmd_auth
May 28 14:35:24 mod_sql/4.2.1[30243]: entering    mysql cmd_escapestring
May 28 14:35:24 mod_sql/4.2.1[30243]: exiting    mysql cmd_escapestring
May 28 14:35:24 mod_sql/4.2.1[30243]: cache hit for user 'alex'
May 28 14:35:24 mod_sql/4.2.1[30243]: >>> cmd_check
May 28 14:35:24 mod_sql/4.2.1[30243]: checking auth_type Plaintext
May 28 14:35:24 mod_sql/4.2.1[30243]: 'Plaintext' auth handler reports success
May 28 14:35:24 mod_sql/4.2.1[30243]: cache hit for user 'alex'
May 28 14:35:24 mod_sql/4.2.1[30243]: <<< cmd_check
May 28 14:35:24 mod_sql/4.2.1[30243]: <<< cmd_auth
May 28 14:35:33 mod_sql/4.2.1[30243]: entering    mysql cmd_exit
May 28 14:35:33 mod_sql/4.2.1[30243]: entering    mysql cmd_close
May 28 14:35:33 mod_sql/4.2.1[30243]: connection 'default' closed
May 28 14:35:33 mod_sql/4.2.1[30243]: connection 'default' count is now 0
May 28 14:35:33 mod_sql/4.2.1[30243]: exiting    mysql cmd_close
May 28 14:35:33 mod_sql/4.2.1[30243]: exiting    mysql cmd_exit

Passwort habe ich natürlich mehrmals überprüft. Die Felder, die ich auf NULL gesetzt habe, habe ich auch aus der Datenbank entfernt.

Ich vermute, dass es etwas mit der UID zu tun hat, dass die eventuell auf einen nicht vorhandenen User zeigt. Wie heißt noch gleich die User-Datei  um die UIds nachzugucken? ^^
Gespeichert
VolGas
Moderator
ProFTPD
*****
Online Online

Beiträge: 770



Profil anzeigen
« Antwort #5 am: 28. Mai 2006, 21:36:35 »

Die Datei heißt "passwd", aber so geht das nicht.
Wenn Du uid/gid bei "SQLUserInfo" auf NULL setzt, dann solltest Du
dies zumindest mit SQLDefaultUID/SQLDefaultGID definieren.

Die proftpd.conf hast Du hier noch nicht gepostet,
aber als Minimum sollte auf jeden Fall hinein (Beispiel):

   User nobody
   Group nogroup
   DefaultRoot ~
   RequireValidShell off

Empfehlenswert (für Tempo):

   UseReverseDNS off
   IdentLookups off
   SQLNegativeCache on

mfg.
  VolGas
Gespeichert
AlphaWolf
ProFTPD
*
Offline Offline

Beiträge: 4


Profil anzeigen
« Antwort #6 am: 28. Mai 2006, 22:47:10 »

Ok ich hab das mit der ValidShell vergessen daran lag es (Der user in der DB hat natürlich keine Shell sonst würde ich es ja nicht benutzen Zunge). Ich dachte das wäre schon drin danke endlich läuft es Smiley.

Es gibt ja diese Tabelle Xfer Stats. Gibt es dafür ein PHP Script oder sowas um das übersichtlich darzustellen oder muss man sich da selber was basteln?
Gespeichert
VolGas
Moderator
ProFTPD
*****
Online Online

Beiträge: 770



Profil anzeigen
« Antwort #7 am: 29. Mai 2006, 03:22:44 »

Ehrlich gesagt: keine Ahnung.

Ich finde die Idee sowieso schlecht, (my)SQL mit der Erfassung von Statistiken oder Logs zu belasten.
Jede FTP-Session bedingt dann gleichzeitig eine SQL-Sesson - das ist ein unnötiger Resourcenfresser.
Zumal sind Log-Einträge fortlaufende Daten, also hervorragend geeignet, um in Dateien weggeschrieben
zu werden.

Programme zur Logfile-Analyse lesen ihre Daten i.d.R. ja auch aus Logfiles, so z.B. "awstats", das auch
Statistiken aus FTP-Logs erstellen kann.

mfg.
  VolGas
Gespeichert
Seiten: [1]   Nach oben
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.2 | SMF © 2006-2007, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS
Seite erstellt in 0.068 Sekunden mit 16 Zugriffen.