ProFTPD FTP Benutzer gegen TYPO3 Backend User authentisieren
Gelegentlich mag es Sinn ergeben, vielen TYPO3-Redakteuren FTP-Zugriff auf der user_upload-Ordner zu gewähren, um große Dateien oder Datenmengen hochladen zu können. Dies lässt sich z.B. über eine spezielle TYPO3-BE-Gruppe kombiniert mit entsprechender FTP-Server-Konfiguration automatisieren.
Prerequisites:
- Keine Shared-Hosting Umgebung, d.h. z.B. 1 Server fuer TYPO3 und FTP
- ProFTPD mit MySQL Unterstuetzung
- Einen Datenbankbenutzer fuer ProFTPD mit Leserechten auf be_users
- Die UID und GID des TYPO3 Webs
- Die ID einer zusaetzlichen Gruppe im TYPO3 Backend fuer FTP-erlaubte Benutzer
Fuer dieses Beispiel werden folgende Werte verwendet:
- ProFTPD MySQL Benutzer: proftpdauth
- ProFTPD MySQL Passwort: proftpdauth123456
- ProFTPD MySQL Datenbank: typo3
- ProFTPD MySQL Hostname: localhost
- Webverzeichnis UID: 33
- Webverzeichnis GID: 33
- Pfad fuer die TYPO3 FTP User: /var/www/htdocs/fileadmin/user_upload/
- ID der Gruppe der FTP-erlaubten TYPO3 Backend Benutzer: 17
Die ProFTPD muss MySQL Module laden. Unter Debian/Ubuntu ist das in /etc/proftpd/modules.conf ausgelagert. Andere Distributionen erwarten die Angaben moeglicherweise direkt in /etc/proftpd.conf bzw. /etc/proftpd/proftpd.conf
Unabhaengig anderer Module muessen auf jedenfall folgende Statements angegeben werden:
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_sql_passwd.c
Die Benutzeranmeldung muss auf das HOME Verzeichnis des Benutzers zeigen – eine Login Shell bietet TYPO3 (natuerlich) nicht, daher muss geprueft werden ob folgende Angaben in der ProFTPD Konfiguration vorhanden sind:
DefaultRoot ~
RequireValidShell off
Die eigentliche Authentisierung findet durch folgende Angaben (unter Debian/Ubuntu in /etc/proftpd/sql.conf) statt:
SQLPasswordEngine on
SQLBackend mysql
SQLEngine on
SQLAuthenticate users groups
SQLAuthTypes MD5
#SQLConnectInfo Database@Hostname Username Password
SQLConnectInfo typo3@localhost proftpdauth proftpdauth123456
SQLNegativeCache on
# UID = 33
SQLMinUserUID 33
SQLDefaultUID 33
# GID = 33
SQLMinUserGID 33
SQLDefaultGID 33
# UID = 33, GID = 33, TYPO3 FTPGroup = 17, Path = /var/www/htdocs/fileadmin/user_upload/
SQLNamedQuery get-user-by-name SELECT "username AS userid, password AS passwd, '33' AS uid, '33' AS gid, '/var/www/htdocs/fileadmin/user_upload/' AS homedir, '/bin/true' AS shell FROM be_users WHERE username = '%U' AND ( usergroup LIKE '17' OR usergroup LIKE '17,%%' OR usergroup LIKE '%%,17,%%' OR usergroup LIKE '%%,17' ) AND disable = 0 AND deleted = 0"
SQLUserInfo custom:/get-user-by-name
SQLNamedQuery get-group-by-name SELECT "username AS groupname, '33' AS gid, username AS members FROM be_users WHERE username = '%{0}'"
SQLNamedQuery get-group-by-id SELECT "username AS groupname, '33' AS gid, username AS members FROM be_users WHERE username = '%{0}'"
SQLNamedQuery get-group-by-member SELECT "username AS groupname, '33' AS gid, username AS members FROM be_users WHERE username = '%{0}'"
SQLGroupInfo custom:/get-group-by-name/get-group-by-id/get-group-by-member