Titel: ProFTPd mit MySql - ein paar Fragen Beitrag von: Mr.John_doe am 24. November 2006, 11:41:54 Hallo Leute,
ich nutze seit kurzem ProFTPd mit dem MySQL-Modul auf einem Debian-Sarge. Leider fehlen mir noch ein paar features und vielleicht könnt ihr mir da helfen: 1. Ich habe folgende Dateistruktur: Code: /FTP /Download /Upload /User1 /User2 Der User1 soll, wenn er sich einloggt, wenn möglich, diese Struktur sehen und nicht höher kommen: Code: / (/ftp/Download) (r) /Upload (/ftp/Upload/User1) (r;w) Kann man das irgendwie realisieren? Meine Datenbank sieht wie folgt aus: Code: FTPGroup: +-----------+------+---------+ | groupname | gid | members | +-----------+------+---------+ | ftpgroup | 5500 | ftpuser | +-----------+------+---------+ FTPUser: id userid passwd uid gid homedir shell count accessed modified Außerdem möchte ich einem User, nähmlich mir, außerdem Zugriff auf das Verzeichnis /mnt geben. Wenn möglich r und w. Und dieses Verzeichniss wenn möglich auch in die virtuelle Struktur einbinden. Ich habe momentan den Fehler, dass ich zwar, wenn ich in der User-Tabelle, Feld Homedir, den Wert /home/ftp/user1 eintrage, er zwar in diesem startet, aber immer noch eine Ebene höher gehen kann. Ich habe mir eine Möglichkeit im bind-mounten überlegt, aber diese Methode ist, denke ich, ziemlich umständlich. Kann mir einer ein paar Tipps geben, wie ich die Probleme lösen kann? Hier noch meine conf: Code: # # /etc/proftpd.conf -- This is a basic ProFTPD configuration file. # To really apply changes reload proftpd after modifications. # ServerName "Debian" ServerType standalone DeferWelcome off MultilineRFC2228 on DefaultServer on ShowSymlinks on TimeoutNoTransfer 600 TimeoutStalled 600 TimeoutIdle 1200 DefaultRoot /home/ftp DisplayLogin welcome.msg DisplayFirstChdir .message ListOptions "-l" DenyFilter \*.*/ # Uncomment this if you are using NIS or LDAP to retrieve passwords: #PersistentPasswd off # Uncomment this if you would use TLS module: #TLSEngine on # Uncomment this if you would use quota module: #Quotas on # Uncomment this if you would use ratio module: #Ratios on # Port 21 is the standard FTP port. Port 21 # 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 ftp 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 # 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 off # A basic anonymous configuration, no upload directories. # <Anonymous ~ftp> # 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 # <Directory *> # <Limit WRITE> # DenyAll # </Limit> # </Directory> # # # Uncomment this if you're brave. # # <Directory incoming> # # # Umask 022 is a good standard umask to prevent new files and dirs # # # (second parm) from being group and world writable. # # Umask 022 022 # # <Limit READ WRITE> # # DenyAll # # </Limit> # # <Limit STOR> # # AllowAll # # </Limit> # # </Directory> # # </Anonymous> RequireValidShell off AuthOrder mod_sql.c AuthPAM off #<Directory /home/ftp> # HideFiles "^(\.htaccess|\.directory|welcome\.msg)$" # <Limit WRITE> # IgnoreHidden on # DenyAll # </Limit> #</Directory> # MySQL-Konfiguration SQLAuthTypes Plaintext SQLAuthenticate users* SQLConnectInfo proftpd@localhost proftpd hier_passwort_einfuegen PERSESSION SQLDefaultGID 65534 SQLDefaultUID 65534 SQLMinUserGID 1000 SQLMinUserUID 1000 SQLHomedirOnDemand off SQLNegativeCache off #SQLLogFile /var/log/proftpd-sql.log SQLUserInfo users userid passwd uid gid homedir shell # Zusaetzliche WHERE Klausel * WHERE ftp_allow = 'Y' SQLUserWhereClause "ftp_allow = 'Y'" Danke im voraus... Titel: Re: ProFTPd mit MySql - ein paar Fragen Beitrag von: VolGas am 25. November 2006, 18:14:51 Hallo!
Die Direktive "DefaultRoot" dient dazu, den User in ein Verzeichnis "einzusperren" (chroot). Wenn dies nicht sein Homedir ist, dann kann er natürlich innerhalb dieser Verzeichnisstruktur herumspazieren wie er will und es die Zugriffsrechte erlauben. Damit der User ausschließlich in seinem Homedir ist (und bleibt!), muß "DefaultRoot ~" verwendet werden. Andere Verzeichnisse außerhalb davon sind dann eine Sache von entweder individuellen mount's oder von separaten FTP-Accounts. Es gibt noch eine Möglichkeit, "DefaultRoot" aufzuweichen - die "VRootEngine". Siehe ->hier (http://www.proftpd.de/Direktiven.54.0.html#287) und ->hier (http://www.castaglia.org/proftpd/modules/mod_vroot.html). Da das Ganze aber darauf beruht, daß Symlinks das chroot-Gefängnis durchbrechen können, ist diese Methode nur bein reinen FTP-Accounts sicher. Mit Shellzugang oder Scriptsprachen wie z.B. PHP wäre dann die ganze Absicherung nutzlos und für die Katz. Meine Meinung: für unterschiedliche Verzeichnisse, die außerhalb des eigenen Homedirs sind, immer eigene FTP-Accounts anlegen. Das ist zwar nicht so anwenderfreundlich, aber darum geht es bei Sicherheitsfragen einfach nicht. Zu den Zugriffsrechten habe ich noch einen Textbaustein für Dich: Der ProFTPD ist wie eine Usershell zu betrachten: nach dem Einloggen hat der neu gestartete, individuelle Prozess die selbe User- und Group-ID wie der eingeloggte User - alle Root-Rechte wurden aufgegeben. Damit hat der ProFTPD nur noch die selben Zugriffsrechte wie der User. Das kann nicht ausgehebelt oder umgangen, sondern nur weiter ausgebaut werden! Was mir bei Deiner recht ordentlichen proftpd.conf noch aufgefallen ist:
Zu Deinen Fragen konnte ich Dir leider nur eine etwas unbequeme Lösung bieten, aber ich hoffe, Du kommst damit dennoch ein Stück weiter. mfg. VolGas |