Empfohlene Vorgehensweisen in Bezug auf Joomla-Datei- / Verzeichnisberechtigungen und -Eigentum auf Linux-Systemen?

26

In der Vergangenheit habe ich oft Probleme mit den Berechtigungen und dem Besitz von Joomla-Dateien / -Verzeichnissen auf Linux-Systemen.

Probleme enthalten

  • Dateien können nicht mit Programmen wie WinSCP auf den Server übertragen werden.
  • Joomla-Erweiterungen, Plugins usw. können nicht installiert werden.
  • Unsichere Dateien und Ordner aufgrund gefährlicher Berechtigungen und Besitzereinstellungen.

Was sind die empfohlenen Best Practices zum Festlegen von Berechtigungen und Eigentümern in Joomla auf Linux-Systemen?

TryHarder
quelle

Antworten:

22

Es gibt einige mögliche Ursachen für Probleme mit Datei- und Ordnerberechtigungen beim Linux-Hosting.

1. Datei- und Ordnerberechtigungen

Die Einstellungen für die Ordnerprüfung sind auf 0755 und die Dateiberechtigungen auf 0644 festgelegt. Beachten Sie, dass die Datei- und Ordnerberechtigungen mit der kostenlosen oder kostenpflichtigen Version der Akeeba Admin Tools auf Site-weiter Basis auf diese sicheren Standardeinstellungen zurückgesetzt werden können.

2. PHP-Parameter

Überprüfen Sie, ob der Parameter upload_max_filesize auf der Registerkarte PHP-Informationen in den Systeminformationen ausreichend ist. Sie können die Standardeinstellung in einer gemeinsam genutzten Hosting-Umgebung häufig über die PHP-Einstellungen in cPanel oder eine benutzerdefinierte php.iniDatei überschreiben .

3. Falsche Pfade in configuration.php

Möglicherweise wurden falsche Pfade für die Ordner tmp und logs angegeben. Diese sind in der Systemkonfiguration angegeben oder können direkt in der Datei configuration.php aktualisiert werden, wenn Sie Systemdateien direkt bearbeiten möchten. Wenn Sie sich nicht sicher sind, wie der Pfad lauten soll, erstellen Sie eine Datei whereami.php(oder ähnliches) mit folgendem Inhalt und laden Sie sie in den Stammordner Ihrer Website hoch:

<?php
  print 'Current folder is ' . dirname(__FILE__);
?>

Navigieren Sie zu [mywebsite].com/whereami.php, um den Pfad zum Stammordner anzuzeigen.

Denken Sie daran, die whereami.phpDatei zu löschen, sobald Sie den richtigen Pfad angegeben haben .

4. Ungeeigneter PHP File Handler

Ihr Webhosting kann mit dem standardmäßigen PHP-Datei-Handler konfiguriert werden, sollte jedoch idealerweise suPHP oder FastCGI oder ähnliches verwenden, damit Joomla Dateien mit sicheren Dateiberechtigungen hochladen und ausführen kann.

Sie können sehen, welcher PHP-Handler verwendet wird System -> System Information -> WebServer to PHP Interface.

Es gibt einen guten Artikel über die relativen Vorzüge von PHP-Datei-Handlern unter: http://boomshadow.net/tech/php-handlers

In einer Shared-Hosting-Umgebung können Sie normalerweise nicht ändern, welcher PHP-Datei-Handler aktiviert ist, aber Ihr Webhosting-Unternehmen kann dies möglicherweise für Sie ändern.

Manchmal werden Datei- und Ordnerberechtigungen als Abhilfemaßnahme in 0777 geändert, aber dies versetzt Ihre Website in einen anfälligen Zustand und 0777-Dateiberechtigungen sollten im Allgemeinen vermieden werden.

Wenn Ihr Webhosting-Unternehmen suPHP oder FastCGI nicht aktivieren kann, besteht die einzige andere Möglichkeit darin, ein neues Webhosting-Unternehmen zu finden.

5. Speicherplatz

Stellen Sie sicher, dass Sie Ihr Speicherplatzkontingent nicht überschritten haben.

FEHLERSUCHE-CHECKLISTE

Was sind die empfohlenen Best Practices zum Festlegen von Berechtigungen und Eigentümern in Joomla auf Linux-Systemen?

Siehe 1 und 4.

Dateien können nicht mit Programmen wie WinSCP auf den Server übertragen werden.

Siehe 1, 2, möglicherweise 4 und 5.

Joomla-Erweiterungen, Plugins usw. können nicht installiert werden.

Siehe 1, 2, 3, 4 und 5.

Unsichere Dateien und Ordner aufgrund gefährlicher Berechtigungen und Besitzereinstellungen.

Siehe 1 und 4.

Neil Robertson
quelle
1
In meinem Fall waren PHP-Handler ein großer Teil des Problems.
TryHarder
1
+1 Ihre Antwort hat mein Problem nicht wirklich behoben, aber ich wurde inspiriert, die PHP-Einstellungen meines Servers - Abgesicherter Modus - zu überprüfen, und es stellte sich heraus, dass sie aktiviert waren. Daher war das Ausschalten die Lösung. Also für zukünftige Leser, wenn keiner der oben genannten
Fehler
12

Bitte überprüfen Sie die Berechtigungsstufen, sie sollten für Dateien und Ordner 644 bzw. 755 sein.

Oft sind die Berechtigungsstufen in Ordnung, auch wenn einige Probleme auftreten. Dies bedeutet, dass Sie den Besitz und die Gruppe der spezifischen Dateien und Ordner überprüfen müssen . Normalerweise können die Gruppe und der Eigentümer in www-Daten für Apache geändert werden (verwendet in Ubuntu-basierten Webservern).

Schauen Sie sich dieses interessante Joomla-Dokument an, indem Sie die Dateiberechtigungen überprüfen.

Shyam
quelle
Gehört Joomla normalerweise zur Gruppe der WWW-Daten?
TryHarder
1
Zusammen mit Shyams Antwort verwenden wir das SuPHP-Apache-Modul . Wir haben festgestellt, dass wir bei der Installation einer Erweiterung diese Dateien nicht über FTP und umgekehrt ändern konnten (Dateieigentumsproblem). SuPHP hat dies für uns behoben, indem sichergestellt wurde, dass PHP-Skripte mit den Berechtigungen ihrer Eigentümer ausgeführt werden.
Zachary Draper
1
Der Apache-Prozess wird unter 'www-data' einer Unix-Gruppe ausgeführt. Es ist nicht nur Joomla, alle Apache-basierten Anwendungen.
Shyam
Ist es möglich, ein Shell-Skript zu entwickeln und auszuführen, um alle Dateiberechtigungen automatisch zu korrigieren?
NivF007
1
Ja. gist.github.com/ssv445/11204300 Sie können das Skript in cron ausführen.
Shyam
8

Eine einfache Lösung für mich ist es, PHP häufig im (Fast-) CGI-Modus laufen zu lassen und den Besitz des Joomla-Verzeichnisses auf den FTP-Benutzer festzulegen. So können Sie Dateien über FTP hochladen und überschreiben und Joomla kann auch Dateien schreiben.

Eine Möglichkeit, dies in einer gemeinsam genutzten Hosting-Umgebung zu tun (sofern dies zulässig ist), besteht darin, Ihrer .htaccess-Datei Folgendes hinzuzufügen:

AddHandler php53-cgi .php

Sehen Sie sich auch eine Übersicht über die verschiedenen Modi an .

Fruppel
quelle
7

Die Berechtigungen sollten 644 und 755 laut Shyam sein.

In Joomla können Sie alle genannten Probleme mit den folgenden Methoden vermeiden.

Dateien können nicht mit Programmen wie WinSCP auf den Server übertragen werden.

  • Dies kann aufgrund der Erlaubnis von (444) geschehen, so wie Joomla configuration.phpdiese Erlaubnis standardmäßig nicht erlaubt hat (aus Sicherheitsgründen).
  • Eine andere Situation für denselben Fehler ist, wenn Sie eine Site oder Ordner von einem Server auf einen anderen übertragen.

Joomla-Erweiterungen, Plugins usw. können nicht installiert werden.

  • Dies wird aufgrund einer temp/logfalschen Ordner-Berechtigung geschehen . (Erforderlich sind 755)

  • Oder ein anderer Grund ist, dass der temp/logPfad falsch istconfiguration.php

Unsichere Dateien und Ordner aufgrund gefährlicher Berechtigungen und Besitzereinstellungen.

  • Dies ist sehr wichtig , Joomla immer 777 nicht für Datei- und Ordner empfehlen Sie , wenn Sie nicht bewusst sind diese .

Hoffe, es hilft ..

Jobin Jose
quelle
7

Die Berechtigungen sollten 644 und 755 laut Shyam sein.

Die Probleme, mit denen Sie konfrontiert sind, hängen höchstwahrscheinlich mit der Art und Weise zusammen, wie Ihr Server eingerichtet ist. Meistens geschieht dies auf gemeinsam genutzten Hosts, auf denen Apache unter einem anderen Benutzer als Ihrem FTP-Konto ausgeführt wird. Da Sie Joomla normalerweise über FTP hochladen, ist Apache nicht der Eigentümer der Datei und verfügt daher nicht über die erforderlichen Berechtigungen, um sie zu ändern.

Es gibt einen FTP-Modus in Joomla, mit dem Sie dieses Problem umgehen können. Sie können es in der globalen Konfiguration von Joomla aktivieren. Der gesamte Dateizugriff erfolgt dann über den FTP-Benutzer anstelle des regulären Apache-Benutzers.

Besser ist es jedoch, den Host zu bitten, das Problem zu beheben. Sie können PHP (Apache) so einrichten, dass es unter einem bestimmten Benutzer ausgeführt wird, der in diesem Fall Ihr FTP-Benutzer sein sollte. Dann wird alles gut funktionieren.

Bakual
quelle
Der Benutzer / die Gruppe ist die Antwort, da Sie sagten, dass der spezielle Benutzer für PHP dies besonders löst, wenn er mit dem FTP-Benutzer übereinstimmt.
JackJoe
5

Ja, die Berechtigungen sollten 644 und 755 sein, wie von Shyam erklärt , aber die anderen Poster vergessen zu erwähnen, dass dies der Fall ist, wenn die Datei Ihrem Webserver gehört und die Gruppe die Gruppe ist, der Sie angehören.

In FileZilla sehen Sie beispielsweise die folgenden Berechtigungen:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM      www-data myGroup 

Die Berechtigungen drwxr-xr-x sind 755 (ignorieren Sie einfach den führenden dr, es ist also wxr-xr-x). Leseberechtigungen sind 4 wert, Schreibberechtigungen sind 2 wert und Ausführungsberechtigungen sind 1 wert. Wenn also alle Berechtigungen 7 ergeben, hat der Eigentümer dieser Datei diese Berechtigung. Die Gruppe hat Lese- und Ausführungsberechtigungen, aber keine Schreibberechtigungen. Sie hat also 5 und jeder hat auch 5 Berechtigungen. 755.

754 wären Eigentümer, die lesen, schreiben, ausführen müssen. Gruppe, die gelesen und ausgeführt hat, und alle, die nur Leseberechtigungen haben.

Im obigen Beispiel sehen Sie, dass der Dateibesitzer www-data ist (dies ist die Standard-Webservergruppe für viele Apache-Server) und die Gruppe ist die Gruppe myGroup, die die Gruppe (Administratoren) ist, der ich angehöre.

Die erste Zahl sind die Berechtigungen des Besitzers, die zweite die Berechtigungen der Gruppe und die dritte Zahl sind die Berechtigungen aller. Natürlich müssen Sie darauf achten, dem Webserver die erforderlichen Berechtigungen zu erteilen ... und sicherstellen, dass die Dateien, die gesperrt werden müssen, nicht von irgendjemandem (der dritten Nummer) geschrieben oder ausgeführt werden können. Nachfolgend sehen Sie, was die Zahlen bedeuten:

Angenommen, der Webserver besitzt die Dateien, ist Ihr Administrator in der Gruppe, und natürlich ist jeder die dritte Nummer.

644: Dateien mit den Berechtigungen 644 können von jedem gelesen und nur vom Eigentümer der Datei / des Ordners beschrieben werden.

755: Dateien mit den Berechtigungen 755 können von jedem gelesen und ausgeführt werden, jedoch nur vom Datei- / Ordnereigentümer beschrieben werden.

777: Dateien mit den Berechtigungen 777 können von jedem gelesen, geschrieben und ausgeführt werden. Verwenden Sie diesen Berechtigungssatz aus Sicherheitsgründen nicht auf Ihrem Webserver, es sei denn, dies ist unbedingt erforderlich und nur vorübergehend. Es ist eine Katastrophe, die auf Sie wartet, insbesondere wenn ein Verzeichnis über diese Berechtigungen verfügt. Dies bedeutet, dass jeder Dateien hochladen und ausführen kann.

Hier sind die Linux-Befehle zum Einrichten des Joomla! Empfohlene Berechtigungen über die Befehlszeile. Empfohlene Joomla-Dateiberechtigungen

Set ownership:   sudo chown -R www-data:myName /path/to/your/domain.com
Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 755 {} \;
Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 644 {} \;

HINWEIS - viele Leute werden Ihnen diese Befehle ohne Pfad anzeigen, aber ich bevorzuge es IMMER, den vollständigen Pfad zu verwenden, denn wenn Sie vergessen, die Verzeichnisse in das Stammverzeichnis von Joomla! Zu ändern. Installationsverzeichnis und führen Sie sie ohne den Pfad aus. Sie haben gerade die Berechtigungen für jede Datei und jedes Verzeichnis in diesem obersten Verzeichnis geändert und ein großes Durcheinander verursacht.

Nachdem Sie diese Befehle ausgeführt haben, müssen Sie die Berechtigungen für alle Verzeichnisse festlegen, für die weitere Berechtigungen erforderlich sind, z. B. für Benutzer, die Bilder usw. hochladen.

WENN SIE NUR DAS JOOMLA BENUTZEN! Wenn Sie keinen Administrator- oder FTP-Zugriff auf den Server haben, verwenden Sie die oben genannten Berechtigungen und EIGENTÜMER.

STOPPEN SIE HIER, WENN SIE EIN NOVICE SIND. Das Folgende ist nur für Leute gedacht, die wirklich verstehen, was Berechtigungen und Eigentümer tun.

Ich finde es jedoch sehr unhandlich, wenn ich Eigentümer und Berechtigungen auf diese Weise habe, da ich die meiste Zeit FileZilla und eine Terminal-Sitzungsbefehlszeile verwende und viele Dateien manuell hochlade. Ich kann jedoch keine Dateien überschreiben, da sie mir nicht gehören und ich keine Schreibberechtigung habe. Ich könnte FileZilla unter dem Webserverkonto anmelden, ABER ... Ich möchte, dass FileZilla sich unter meinem Konto anmeldet, damit ich auch andere Verzeichnisse durchsuchen kann, nicht nur die Dateien, auf die der Webserver Zugriff hat ... SO ... Ich ändere das Eigentum und die Berechtigungen dazu:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM  drwxr-xr-x    myName www-data

Ich mache mich selbst zum Eigentümer und stelle den Webserver in die Gruppe ... und ändere die Berechtigungen für Verzeichnisse auf 775 und für Dateien auf 664. Erleichtert mir das Leben erheblich ... aber ich empfehle es nicht für jeder.

Wenn Sie es auf meine Weise tun, sind dies die Befehle:

 Set ownership:   sudo chown -R myName:www-data /path/to/your/domain.com
 Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 775 {} \;
 Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 664 {} \;  
bgies
quelle
"drwxr-xr-x sind 755" - dies wäre 751 (fehlende Leseberechtigung für die Öffentlichkeit), nicht 755. (Obwohl 755 für Verzeichnisse "normaler" wäre.)
MrWhite
4

Die anderen Antworten bieten eine gute Erklärung, was zu tun ist. Ich möchte nur ein Skript hinzufügen, um die Berechtigungen zu korrigieren, wenn Sie bereits eine Komponente hochgeladen haben und nicht mit FTP auf die Dateien zugreifen können.

In diesem Fall würde ich diese Datei fix.phpauf den FTP-Server hochladen und im Browser öffnen:http://example.com/fix.php

<?php
file_fix_directory(dirname(__FILE__));

function file_fix_directory($dir, $nomask = array('.', '..')) {
  if (is_dir($dir)) {
     // Try to make each directory world writable.
     if (@chmod($dir, 0777)) {
       echo "<p>Made writable: " . $dir . "</p>";
     }
  }
  if (is_dir($dir) && $handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
      if (!in_array($file, $nomask) && $file[0] != '.') {
        if (is_dir("$dir/$file")) {
          // Recurse into subdirectories
          file_fix_directory("$dir/$file", $nomask);
        }
        else {
          $filename = "$dir/$file";
            // Try to make each file world writable.
            if (@chmod($filename, 0666)) {
              echo "<p>Made writable: " . $filename . "</p>";
            }
        }
      }
    }

    closedir($handle);
  }

}

Dieses Skript setzt alle Dateiberechtigungen auf 666 und alle Verzeichnisse auf 777. World Writable ist nicht der beste Berechtigungssatz für einen freigegebenen Host, aber Sie können wieder auf Ihre Dateien zugreifen und ihn dann mit FTP auf die richtigen Werte setzen.

Harald Leithner
quelle
1

Spät zur Party. Ich bin hierher gekommen, um nach einer definitiven Anleitung zu suchen, welche Ordner für Joomla beschreibbar sein müssen.

Tut mir leid, dass ich der Vorbote schlechter Nachrichten bin.

Der Rat, die Berechtigungen 755 für alle Verzeichnisse und 644 für alle Ordner zu verwenden, ist zumindest unverantwortlich .

Es ist in Ordnung, alle Ordner und Dateien als Eigentümer beschreibbar zu machen, solange der Eigentümer nicht der Webserver ist (Apache et al.).

Ich weiß, dass dies eine allgemein empfohlene Praxis ist, aber ich kann Ihnen versichern, dass dies keine gute Praxis ist. Die letzte Software, die Sie zum Schreiben in Ordner verwenden möchten, ist der Webserver. Es ist der Webserver, der von Hackern verwendet wird, um den Exploit zu nutzen, der noch nicht gepatcht (oder sogar gefunden) wurde.

Denken Sie, dass .htaccess Ihren Kevin retten wird? Vergiss es, weil du dem Webserver Schreibzugriff gewährt hast. Unsere lieben Hacker-Freunde können ihre eigenen .htaccess-Dateien erstellen und ihnen die Berechtigungen geben, die sie wollen! Oh, ich weiß nicht, ob Umm .jpg-Dateien vom Server ausführbar macht. Und Sie dachten, der Schutz vor der Ausführung von .php würde Ihr A verdecken.

Stellen Sie jedoch sicher, dass nur die Ordner, für die Schreibzugriff erforderlich ist, über diese Berechtigung verfügen. 755 und 644 für die folgenden Ordner.

public_html/images
public_html/cache
public_html/tmp

Und stellen Sie sicher, dass Sie .htaccess-Dateien mit AllowOveride none für alle beschreibbaren Ordner (wie die oben genannten) ausschalten.

Für diejenigen unter Ihnen, die Shared Hosting betreiben, ist dies ein Konfigurationselement, das Sie nicht kontrollieren können.

Denken Sie nicht, dass es hilfreich ist, die .htaccess-Datei schreibgeschützt zu machen. Wenn unsere Hacker-Freunde einen neuen Ordner erstellen können, können sie ihren eigenen .htaccess erstellen.

Für diejenigen unter Ihnen, die Shared Hosting für alles betreiben, was heilig ist, besorgen Sie sich bitte einen Hinweis auf die Sicherheit.

Wenn Sie Sicherheit nicht verstehen, verlassen Sie bitte das Hosting-Geschäft, das Sie für den Rest von uns schwierig machen.

Zurück zu meiner Suche nach dem endgültigen Leitfaden für Ordner, die Schreibzugriff benötigen ...

EntwicklerChris
quelle
Vielen Dank Chris, aber ich werde mich wahrscheinlich an die Standard-Dateiberechtigungen 755 und 644 halten, während dies von der offiziellen Joomla-Website und Sicherheitsexperten wie Sucuri empfohlen wird : docs.joomla.org/Security_and_Performance_FAQs blog.sucuri.net/2015/09/ …
Neil Robertson
Ja, ich weiß, dass es das "empfohlene" ist, aber wenn Sie einmal ausgenutzt wurden und herausfinden, warum Sie ausgenutzt wurden, kann ich Ihnen versichern, dass Sie die "Empfehlungen" aus dem Fenster werfen und von vorne anfangen. Die Empfehlungen sind der Weg des geringsten Widerstands. Nicht die sicherste.
DeveloperChris
Die Schritte 1 bis 10 der Liste "Eine Joomla-Website sichern " unter joomla.stackexchange.com/a/180/120 zusammen mit den Standarddateiberechtigungen haben für die rund 50 Websites, nach denen ich gesucht habe, problemlos funktioniert letzten paar Jahren. Ihr Kilometerstand kann natürlich variieren.
Neil Robertson
@NeilRobertson Ich stimme dieser Liste zu, aber wenn es einen Exploit gibt, der davon nicht erfasst wird, besteht Ihre letzte Verteidigungslinie darin, dem Webserver keine Schreibrechte zu erteilen (apache et al.). Das ist übrigens kein Joomla-spezifischer Ratschlag. Außerdem können die meisten Leute viele der Empfehlungen in dieser Liste nicht umsetzen. Sie haben einfach nicht die Ressourcen oder nutzen billigeres (nicht das billigste) Hosting.
DeveloperChris