Wie Joomla richtig installieren? (Rechteproblem in Apache?)

cabriofahrer

Well-Known Member
Ich habe joomla aus den ports intalliert (cd /usr/ports/www/joomla3/ && make install clean), lief erfolgreich mit folgender Meldung am Ende:

Code:
1) Add the following to your Apache configuration, and restart the server:

  ### Add the AcceptPathInfo directive only for Apache 2.0.30 or later.
  Alias /joomla /usr/local/www/joomla3/
  AcceptPathInfo On

  <Directory /usr/local/www/joomla3>
      AllowOverride None
      Order Allow,Deny
      Allow from all
      # For Apache 2.4 add:
      Require all granted
  </Directory>

2) Visit your Joomla site with a browser (i.e. http://your.server.com/joomla/),
    and you should be taken to the install.php script, which will lead you
    through creating a config.php file and then setting up Joomla, creating
    an admin account, etc.


3) As of 2.5.5, php5-mysqli and php5-zip are installed. Use of mysqli for mysql
    is recommended over mysql.

4) As of 3.6.4, php7 is also supported, and the php*-mysql extension is NOT
    asked for.  Also, the php*-pgsql extension is asked for as Joomla supports
    PostgreSQL as well.

================================================================================

===>  Cleaning for php71-gd-7.1.21
===>  Cleaning for php71-mbstring-7.1.21
===>  Cleaning for oniguruma-6.8.2
===>  Cleaning for php71-pecl-pdflib-4.1.2
===>  Cleaning for php56-pecl-pdflib-4.1.2
===>  Cleaning for php70-pecl-pdflib-4.1.2
===>  Cleaning for php72-pecl-pdflib-4.1.2
===>  Cleaning for pdflib-7.0.5_5
===>  Cleaning for php71-zip-7.1.21
===>  Cleaning for php71-zlib-7.1.21
===>  Cleaning for php71-mysqli-7.1.21
===>  Cleaning for joomla3-3.8.11
#

Habe daraufhin den oberen Abschnitt in /usr/local/etc/apache24/httpd.conf kopiert und apache neu gestartet (service apache24 restart):

Code:
 ### Add the AcceptPathInfo directive only for Apache 2.0.30 or later.

  Alias /joomla /usr/local/www/joomla3/

  AcceptPathInfo On


  <Directory /usr/local/www/joomla3>

      AllowOverride None

      Order Allow,Deny

      Allow from all

      # For Apache 2.4 add:

      Require all granted

  </Directory>

Apache, php, mysql und phpmyadmin sind installiert und funktionieren. Ich habe mir zuerst in phpmyadmin eine leere Datenbank erstellt, so geht man auch vor, wenn man das Ganze unter Windows/XAMPP macht.

Wenn ich dann im Browser auf http://localhost/joomla/ gehe, erscheint die Installationsseite von Joomla, ich fülle die Felder aus, gebe den Namen der Datenbank ein, usw. doch am Ende erscheint leider folgende Meldung:

Screenshot_2019-02-11_17-33-58.png


Vorher auch schon "configuration.php Writeable NO"

Screenshot_2019-02-11_18-36-00.png



Was geht hier schief? Ich dachte, mit der Ergänzung der httpd.conf und dem Neustart sei alles erledigt. Mehr steht in dem File ja nicht drin. Was mich allerdings stutzig macht, ist was in diesem Link steht:

https://docs.joomla.org/FreeBSD_Installation


Code:
Installing Joomla! CMS

Download the Joomla installation package ending with .zip
Unzip the file to apache's data directory.
unzip Joomla_*.zip -d /usr/local/www/apache24/data/

Change ownership of the data directory and everything in it to 'www' thus allowing the Joomla! configuration script to write into this directory.
chown -R www /usr/local/www/apache24/data/

At this point you should be able to begin installing and configuring Joomla!

Ich dachte, durch die Installation des Ports sei das nicht mehr nötig, es sei schon alles dorthin installiert, wo es hingehört?
 
Viele Webtools wollen ihre eigene Konfig schreiben. Das kann man als Sicherheitsrisiko sehen und deswegen ist es wenn du aus dem Port installierst nicht erlaubt. Du kannst jetzt entweder die Rechte ändern, oder config.php selbst ändern.
 
Viele Webtools wollen ihre eigene Konfig schreiben. Das kann man als Sicherheitsrisiko sehen und deswegen ist es wenn du aus dem Port installierst nicht erlaubt. Du kannst jetzt entweder die Rechte ändern, oder config.php selbst ändern.

Etwas genauer bitte? Welche Rechte wo genau und wie genau? Die config.php selbst ändern? Wahrscheinlich noch komplizierter. Also lieber ersteres, so dass das Webtool seine eigene Konfig schreiben kann.

Das tut echt weh.. manche Dinge gehoeren echt nicht in die Ports.

Also dann doch besser die Anleitung von der Joomla-Seite befolgen und die zip-Datei entpacken (unzip Joomla_*.zip -d /usr/local/www/apache24/data/) und dann chown -R www /usr/local/www/apache24/data/ ?
 
Nichts, was als User des Webservers/PHP läuft, sollte sich selbst so modifizieren können, dass beliebiger Code laufen kann.

Damit sind zwar diese ganzen Arschwisch-Mechanismen wie Config zusammenklicken und Auto-Updates dahin, aber entweder will man sicher oder für Deppen.
 
Nichts, was als User des Webservers/PHP läuft, sollte sich selbst so modifizieren können, dass beliebiger Code laufen kann.

Damit sind zwar diese ganzen Arschwisch-Mechanismen wie Config zusammenklicken und Auto-Updates dahin, aber entweder will man sicher oder für Deppen.

Da geb ich dir schon recht, aber nach der Ersteinrichtung kann man die Config ja wieder ro setzen, daher seh ich das nicht so tragisch. Die Selbstupdate-Mechanismen wie z.b. bei WP sind da ein ganz anderes Problem.
 
Der Port installiert die configuration.php offensichtlich in folgenden Pfad: /usr/local/www/joomla3/installation/model

Ich gebe mal die komplette Übersicht über die Rechte. Sicherlich könnte man der Datei letztendlich für alles rwx-Rechte geben, dann sollte es funktionieren. Aber warum hat die Portinstallation das nicht erledigt? War dafür nicht der oben genannte Eintrag in die httpd.conf erforderlich? Also hier:

Code:
### Add the AcceptPathInfo directive only for Apache 2.0.30 or later.
  Alias /joomla /usr/local/www/joomla3/
  AcceptPathInfo On

  <Directory /usr/local/www/joomla3>
      AllowOverride None
      Order Allow,Deny
      Allow from all
      # For Apache 2.4 add:
      Require all granted
  </Directory>

Und nun die Rechte: Die configuration.php (ganz unten) gehört dem owner www, der hat Schreibrechte. Gruppe www und others nur Leserechte. Also nehme ich an, wenn ich die Browserinstallation vollziehen will, kann ich natürlich nicht der owner "www" sein. Also Panne, richtig?

Code:
$ ls -l /usr/local/www/joomla3/
total 88
drwxr-xr-x  11 root  wheel   512 Jan 23 20:03 administrator
drwxr-xr-x   2 root  wheel   512 Jan 23 20:03 bin
drwxr-xr-x   2 root  wheel   512 Jan 23 20:03 cache
drwxr-xr-x   2 root  wheel   512 Jan 23 20:03 cli
drwxr-xr-x  19 root  wheel   512 Jan 23 20:03 components
-rw-r--r--   1 www   www    3005 Jan 23 20:03 htaccess.txt
drwxr-xr-x   5 root  wheel   512 Jan 23 20:03 images
drwxr-xr-x   2 root  wheel   512 Jan 23 20:03 includes
-rw-r--r--   1 www   www    1420 Jan 23 20:03 index.php
drwxr-xr-x  14 root  wheel  1024 Jan 23 20:03 installation
drwxr-xr-x   4 root  wheel   512 Jan 23 20:03 language
drwxr-xr-x   5 root  wheel   512 Jan 23 20:03 layouts
drwxr-xr-x  12 root  wheel   512 Jan 23 20:03 libraries
drwxr-xr-x  27 root  wheel  1024 Jan 23 20:03 media
drwxr-xr-x  27 root  wheel  1024 Jan 23 20:03 modules
drwxr-xr-x  17 root  wheel   512 Jan 23 20:03 plugins
-rw-r--r--   1 www   www    4872 Jan 23 20:02 README.txt
-rw-r--r--   1 www   www     836 Jan 23 20:03 robots.txt.dist
drwxr-xr-x   5 root  wheel   512 Jan 23 20:03 templates
drwxr-xr-x   2 root  wheel   512 Jan 23 20:03 tmp
-rw-r--r--   1 www   www    1690 Jan 23 20:03 web.config.txt
$ ls -l /usr/local/www/joomla3/installation/
total 116
drwxr-xr-x   2 root  wheel    512 Jan 23 20:03 application
drwxr-xr-x   2 root  wheel    512 Jan 23 20:03 cache
-rw-r--r--   1 www   www     5036 Jan 23 20:03 configuration.php-dist
drwxr-xr-x   3 root  wheel    512 Jan 23 20:03 controller
-rwxrwxrwx   1 www   www      880 Jan 23 20:03 COPYRIGHT
-rw-r--r--   1 www   www      571 Jan 23 20:03 CREDITS
-rw-r--r--   1 www   www     2019 Jan 23 20:03 favicon.ico
drwxr-xr-x   4 root  wheel    512 Jan 23 20:03 form
drwxr-xr-x   2 root  wheel    512 Jan 23 20:03 helper
drwxr-xr-x   2 root  wheel    512 Jan 23 20:03 html
-rw-r--r--   1 www   www      978 Jan 23 20:03 index.php
-rw-r--r--   1 www   www     4560 Jan 23 20:03 INSTALL
drwxr-xr-x  78 root  wheel   1536 Jan 23 20:03 language
-rw-r--r--   1 www   www    30400 Jan 23 20:03 LICENSES
-rw-r--r--   1 www   www      200 Jan 23 20:03 localise.xml
drwxr-xr-x   3 root  wheel    512 Jan 23 20:03 model
drwxr-xr-x   2 root  wheel    512 Jan 23 20:03 response
drwxr-xr-x   5 root  wheel    512 Jan 23 20:03 sql
drwxr-xr-x   5 root  wheel    512 Jan 23 20:03 template
drwxr-xr-x  12 root  wheel    512 Jan 23 20:03 view
$ ls -l /usr/local/www/joomla3/installation/model/
total 112
-rw-r--r--  1 www   www    10313 Jan 23 20:03 configuration.php
-rw-r--r--  1 www   www    33658 Jan 23 20:03 database.php
drwxr-xr-x  2 root  wheel    512 Jan 23 20:03 forms
-rw-r--r--  1 www   www     7323 Jan 23 20:03 ftp.php
-rw-r--r--  1 www   www    37477 Jan 23 20:03 languages.php
-rw-r--r--  1 www   www    11875 Jan 23 20:03 setup.php
$
 
Du wirfst hier einiges durcheinander, die von dir gefunden "configuration.php" gehört zum Installationsskript und hat nichts mit der Anwendung am Ende zu tun (steht auch in dem Screenshot: "PLEASE REMEMBER TO COMPLETELY REMOVE THE INSTALLATION FOLDER").

Sicherlich könnte man der Datei letztendlich für alles rwx-Rechte geben, dann sollte es funktionieren.
Das kannste schon so machen, aber dann ist es halt Kacke!
Aber warum hat die Portinstallation das nicht erledigt?
Weil das eine sehr doofe Idee ist. In den Webanwendungen schlummern gerne Sicherheitslücken, die es dem Angreifer erlaubt Code auf dem Server auszuführen und wenn der www-User nun Schreibrechte hat, kann der Angreifer seinen Code sogar speichern.

War dafür nicht der oben genannte Eintrag in die httpd.conf erforderlich?
Nein, der Eintrag in der httpd.conf teilt nur dem Webserver mit, wo er die Dokumente findet die er ausliefern soll wenn "deine-domain.de/joomla" aufgerufen wird und konfiguriert ein paar Apache Optionen.

Zu deinem "Problem":
Die "/usr/local/www/joomla3/configuration.php" kann nicht erstellt werden (weil der Port-Maintainer schlau war), wenn du dem widersprichst, erstellt in "/usr/local/www/joomla3/" eine "configuration.php", setz den owner auf "www" und ändere die Berechtigungen so das www schreiben darf. Falls das zu Problemen führt (keine Ahnung wie Joomla auf eine existierende config Dateien reagiert), mach das rückgängig und ändere die Berechtigung des Ordners "/usr/local/www/joomla3" so das www schreiben darf, führ die Installation durch und ändere die Berechtigungen wieder zu dem Ursprungswert.

PS: Finde ich eine doofe Idee, ich würde einfach die Datei "/usr/local/www/joomla3/configuration.php" erstellen, den generierten Code kopieren und einfügen, dann ist das Thema erledigt.
 
(steht auch in dem Screenshot: "PLEASE REMEMBER TO COMPLETELY REMOVE THE INSTALLATION FOLDER")

Selbst das funktionierte nicht.

PS: Finde ich eine doofe Idee, ich würde einfach die Datei "/usr/local/www/joomla3/configuration.php" erstellen, den generierten Code kopieren und einfügen, dann ist das Thema erledigt.

Wenn man das nur einmal machen will... Aber wer mit Joomla arbeitet, erstellt für jede neu zu entwerfende Seite/Projekt das Ganze nochmal mit jeweils anderem Namen. Z.B. ein Mitarbeiter in einer Firma, dessen Aufgabe es ist, Webseiten zu erstellen. Das wäre also ziemlich nervig und für einen Nicht-Systemadministrator gar nicht machbar.

Mit Euren Tipps und Erklärungen habe ich aber das Problem besser verstehen können und die m.E. angemessenste und bequemste Lösung finden können (vielen Dank also!):

Die Joomla-Seite geht wie oben schon erwähnt von einer manuellen Installation des Pakets aus in dem o.g. Pfad. Der Port installiert jedoch in den Pfad /usr/local/www/joomla3/, also ist chown -R www /usr/local/www/joomla3/ die richtige Lösung.
 
Wenn man das nur einmal machen will... Aber wer mit Joomla arbeitet, erstellt für jede neu zu entwerfende Seite/Projekt das Ganze nochmal mit jeweils anderem Namen. Z.B. ein Mitarbeiter in einer Firma, dessen Aufgabe es ist, Webseiten zu erstellen. Das wäre also ziemlich nervig und für einen Nicht-Systemadministrator gar nicht machbar.

Eine schöne Lösung dafür wäre ein Shellscript was temporär die Berechtigung umstellt, und nach einer gewissen Zeit wieder auf RO. Das könnten die Mitarbeiter über einen eigenen Account per Shell ausführen, oder, wenn die Shell teufelszeug ist, einen eigenen Webserver von innen erreichbar machen, wo die mit einem Klick auf einen Button das erledigen können.
 
Ich sehe schon, dass man hier im Forum sehr auf Sicherheit bedacht ist. Könnte mal jemad bitte genauer erklären, wie ein Angriff aus dem Internet über den Browser konkret aussehen würde, wenn das joomla3-Verzeichnis, so wie es offiziell vorgesehen ist, dem owner www gehört? Schließlich sind die in diesem Verzeichnis liegenden Projekte auch jeweils mit Passwörtern geschützt.
 
Joomla und ähnliche Projekte haben hin und wieder Sicherheitslücken (wie jede Software). Das Kritische dabei ist, dass diese Systeme direkt nach außen hin offen sind (das ist ja ihr Job), und gleichzeitig oft recht komplex.
Kann ein Angreifer dein Joomla übernehmen hat der die Rechte des www-Benutzers, da es ja im Webserver läuft. Hat www nur Leserechte kann er nicht viel kaputt machen. Hat er Schreibrechte dann kann er halt mehr schaden anrichten, dein System umkonfigurieren, etc.
 
Ich sehe schon, dass man hier im Forum sehr auf Sicherheit bedacht ist. Könnte mal jemad bitte genauer erklären, wie ein Angriff aus dem Internet über den Browser konkret aussehen würde, wenn das joomla3-Verzeichnis, so wie es offiziell vorgesehen ist, dem owner www gehört? Schließlich sind die in diesem Verzeichnis liegenden Projekte auch jeweils mit Passwörtern geschützt.

Angenommen, das Joomla hat irgendeine Lücke, die dazu führt, dass man dem PHP irgendwas hinschmeißen kann und das führt einem dann Befehle als www-User aus. Dann kann man direkt eine Datei ins Webroot schreiben, die z.B. Schadcode enthält und im Zuge der normalen Benutzung durch Besucher ausgeliefert wird. Dann sind alle deine Besucher auf einen Schlag gefährdet.

Wenn der Angreifer sich nicht sofort persistent einnisten kann und normale Besucher nicht betroffen sind, dann kann er nichts weiter machen, als seinen Code ausführen. Der sollte dann im Optimalfall nichts dürfen (Webserver dürfen keine ausgehenden Verbindungen aufbauen, keine Dateien schreiben außer in /tmp, was noexec gemountet sein sollte etc.)
 
Den Schreibzugriff auf die Datenbank würde ich durchaus als Totalschaden werten. (Ich unterstelle mal, dass jemand, der ins Dateisystem schreiben könnte und nur von den Berechtigungen daran gehindert wird, auch Befehle an den DB-Server senden kann.)

Aber ja, wenn jemand beides verändern kann, dann ist das natürlich noch schlechter.)
 
Den Schreibzugriff auf die Datenbank würde ich durchaus als Totalschaden werten. (Ich unterstelle mal, dass jemand, der ins Dateisystem schreiben könnte und nur von den Berechtigungen daran gehindert wird, auch Befehle an den DB-Server senden kann.)

Aber ja, wenn jemand beides verändern kann, dann ist das natürlich noch schlechter.)
Wie kommst du darauf? Die DB könnte theoretisch auf einer ganz anderen Kiste laufen.
 
So ein Standardangriff - was auch häufig automatisiert gemacht wird, da brauchst du gar kein großes "Ziel" sein - wäre halt über eine Lücke in Joomla/WP/Sonstige Webanwendung eine eigene .php Datei an einen Ort zu schreiben, andem der Webserver das Ding später ausführt. Auf diesem Weg bekommt der Angreifer schnell eine Webshell mit Rechten des Webservers. Das reicht in der Regel um die DB Credetials zu lesen und auf die DB zuzugreifen. Schon hat man den Salat und muss theoretisch alle Kunden darüber informieren.
Auch kann der Server so missbraucht werden um andere zu attakieren, Kryptogeld zu minen, ...

Daher sollte jeder halbwegs vernünftige Admin seine Webserver so einstellen, dass er nicht in Orte schreiben darf, von denen er auch ausführt. Das steht btw. auch in der Joomla-Doc unter den Sicherheitshinweißen.
 
Wie kommst du darauf? Die DB könnte theoretisch auf einer ganz anderen Kiste laufen.
Wie soll das helfen? Die Webanwendung braucht Zugriff. Das heißt erstens, dass die Daten in einer zwingend lesbaren Konfigurationsdatei stehen müssen und zweitens, dass weder Paketfilter, noch DB-Rechte hier etwas ausrichten können.
 
Ja klar, aber der www-Benutzer hat keine direkten Rechte auf die DB zu schreiben. Es braucht ein DB-User der im Allgemeinen über deren Schnittstelle auf die DB zugreifen muss. Dass die Daten iA dort irgendwo stehen ist natürlich klar.
 
Möglicherweise reden wir aneinander vorbei. Ich beziehe mich auf eine Situation, in der jemand seinen Code in der Webanwendung ausführen kann. Wenn das passiert, ist der Zugriff auf die Schnittstelle absolut gegeben und die Frage ist nur noch, ob man die bestehende Verbindung übernehmen kann oder ob man eine neue aufbauen muss. Vom Ergebnis her ist das aber egal.
 
Gute CMS können sehr wohl Backend und Frontend trennen, somit braucht das Frontend nicht zwingend SCHREIBENDEN Zugriff auf die DB. Auch können User/PW verschlüsselt in einer Config stehen, der Key dann hardcoded in der Anwendung selbst. Das dürfte gegen alle Arten der automatisierten Angriffe die DB schützen. Das ist aber alles am Thema vorbei, Joomla kann das nicht und würde ich auch nicht als "gutes" CMS bezeichnen :D
 
Zurück
Oben