Wer ist "andere", wenn wir allen Diensten auf unserem Server einen Benutzer geben, existieren "andere" nicht richtig? Wenn wir zum Beispiel Apache einem Benutzer /var/www
zuweisen apache
und chown auf setzen und eingeben chmod 700
, sollte es funktionieren, oder?
So funktionieren die Berechtigungen, die sehr kurz erklärt werden:
Die erste Ziffer ist für den tatsächlichen Eigentümer einer Datei (überprüfen Sie, wem eine Datei gehört, ls -l
und ändern Sie sie mit chown
).
Die zweite Ziffer steht für die Gruppe der Datei (obwohl der Eigentümer einer Datei nicht unbedingt in derselben Gruppe sein muss, der die Datei gehört).
Die dritte Ziffer ist jemand anderes, dh nicht der Dateieigentümer und jeder, der nicht zur Gruppe gehört.
Wenn Sie also chmod
eine Datei bis 700 haben und diese gehört apache
, kann selbst Ihr "normaler" Benutzer sie nicht lesen, schreiben oder ausführen. Dies ist sehr restriktiv und wird nur in seltenen Fällen benötigt. Wenn Sie beispielsweise Ihren privaten SSH-Schlüssel sichern möchten, erhalten Sie 600
Berechtigungen. Für Apache kann dies sogar zu anderen Problemen führen, abgesehen von der Tatsache, dass Sie mit Ihrem normalen Benutzerkonto keine Dateien /var/www
mehr bearbeiten können .
Im Allgemeinen sollten Sie also keine Leseberechtigungen ( x00
) für andere entfernen müssen .
Sie könnten apache
das /var/www
Verzeichnis besitzen lassen, aber mit 644
(schreibgeschützt für andere) vielleicht. Ein anderer Ansatz, den ich häufig verwende, besteht darin, Ihren eigenen Benutzer und den Apache-Benutzer einer neuen www-users
Gruppe hinzuzufügen und dann Dateien in /var/www
zu ändern 775
. Auf diese Weise können sowohl Sie als auch Apache in die Dateien schreiben. Weitere Informationen finden Sie hier: Gruppenberechtigungen für Apache
Was ist der Unterschied zwischen "Ausführen" und "Lesen"?
Ausführbare Dateien können direkt von einem Benutzer ausgeführt werden - direkt aus der Shell. Um dies zu demonstrieren, schreiben wir eine kurze Datei und nennen sie "Test". Fügen Sie den folgenden Inhalt hinzu:
echo "I am executable"
Speicher die Datei. Versuchen Sie nun in Ihrer Shell einzutreten ./test
. Sie erhalten den Fehler " -bash: ./test: Berechtigung verweigert ". Dies liegt daran, dass neu erstellte Dateien standardmäßig keine Ausführungsberechtigungen enthalten. Wenn Sie die Ausführungsberechtigung hinzufügen, funktioniert dies.
$ chmod +x test
$ ./test
I am executable
Dies war nur ein Testskript, aber normalerweise benötigen alle Binärdateien (wie kompilierte Programme) auch die Berechtigung zum Ausführen, damit Sie tatsächlich etwas ausführen und damit tun und nicht nur lesen können.
Dies sind zum Beispiel die Systemprogramme, die meistens in zu finden sind /bin
. Führen Sie diese aus ls -l /bin
, um ihre Berechtigungen zu überprüfen. Wie Sie sehen, gehören sie root
ihnen und Sie können sie nicht ändern, aber Sie können sie jederzeit ausführen.
Dies ist also auch eine Sicherheitsfunktion, da Sie die Ausführung bestimmter Skripte und Binärdateien für einige Benutzer einschränken können.
Weitere Informationen zu Unix-Berechtigungen finden Sie im Wikipedia-Artikel . Die grundlegenden Berechtigungen, die Sie als "Lesen, Schreiben, Ausführen" kennen, gibt es schon seit langer Zeit, sie sind jedoch nur ein Teil der sogenannten Zugriffssteuerungslisten, die viel mehr Funktionen bieten.
Was sind die Standarddateiberechtigungen für das gesamte System nach einer Neuinstallation (z. B. in Ubuntu)?
Sie variieren je nach Verzeichnis und Eigentümer. Einige Dateien und Verzeichnisse sind vom System reserviert und gehören root
. In den meisten Fällen können Sie sie dennoch mit Ihrem normalen Benutzerkonto lesen.
Andere Verzeichnisse wie Ihr Home-Ordner gehören offensichtlich Ihrem Benutzer. Es kann sinnvoll sein, anderen Benutzern auf einem Computer Leseberechtigungen zu verweigern, wenn diese von mehreren Personen gemeinsam genutzt werden. Schließlich möchten Sie nicht, dass Ihre privaten Inhalte offengelegt werden.
Schließlich sind einige Dateien standardmäßig ausführbar (z. B. in /bin
), andere jedoch nicht (z. B. Konfigurationsdateien in /etc
).
Der Dateisystem-Hierarchiestandard gibt die beabsichtigte Verwendung für Verzeichnisse in Linux-Systemen an. Sie können fast "erraten", wie die Berechtigungen basierend auf dem, was Sie mit einem Verzeichnis tun möchten, basieren sollten.
.php
Dateien sind normalerweise nicht ausführbar. Sie werden einfach nur von Apache gelesen, wenn Sie beispielsweise auf Ihren Browserhttp://example.com/file.php
zeigen. Bevor Apache die Ausgabe anzeigen kann, müssen sie von Ihrer PHP-Installation interpretiert werden, aber Apache kümmert sich darum. Sie können eine PHP-Datei theoretisch ausführbar machen und wie ein Skript ausführen - genau wie wir es mit unserertest
Datei getan haben , aber dies wird selten verwendet.Ich möchte nur hinzufügen, dass die Ausführungsberechtigung für Verzeichnisse unterschiedliche effektive Bedeutungen hat:
Für Dateien :
Für Ordner :
Nein, es gibt keine separate Löschberechtigung für Verzeichnisse.
(Habe diese Informationen hier .)
quelle
Ich bin kein Linux-Experte, aber ich versuche trotzdem zu antworten.
Jedem Dateisystemeintrag ist ein Benutzer und eine Gruppe zugeordnet. Die Berechtigungen des Benutzers werden von den "Benutzer" -Flaggen behandelt. Benutzerberechtigungen von Benutzern, die Teil derselben Gruppe sind, werden von den "Gruppen" -Flaggen behandelt. Alle anderen Benutzer werden von den "anderen" Flags behandelt.
"lesen" bedeutet, was es sagt. "Ausführen" bedeutet, dass Sie die Datei starten können (z. B. einen Befehl) oder das Verzeichnis auflisten können.
In Bezug auf die Standardberechtigung bin ich mir nicht sicher. Ich denke, es kann irgendwie konfiguriert werden und kann daher für jeden Benutzer unterschiedlich sein.
quelle
Um Ihnen zumindest eine anständige Antwort auf Frage 2 zu geben, finden Sie hier eine Übersichtstabelle, die zeigt, was Sie tun können / nicht tun können:
Es ist wichtig, sich daran zu erinnern, dass es nicht der USER ist, der die Dateidatei in den Speicher liest, um sie auszuführen, sondern der KERNEL, der dies im Auftrag des USER tut.
quelle
Es kann schwierig sein, alle anderen auszuschließen. Schauen Sie sich diese Liste aus meiner / etc / passwd-Datei an (Berechtigungen und was aus Gründen der Übersichtlichkeit nicht entfernt):
root daemon bin sys sync spiele man lp mail nachrichten uucp proxy www-daten sichern liste irc mücken libuuid syslog messagebus usbmux haldaemon niemand
a {das bin ich, und hier sind die Dinge, die ich installiert habe, vor allem mit dem System}
avahi mysql puls rtkit saned schüchternheit didiwiki
Wenn Sie beispielsweise die Berechtigungen von lp oder uucp entfernen, wird der Druck unterbrochen. Entfernen Sie die Berechtigung aus bin, sys oder daemon, und wahrscheinlich werden viele Dinge kaputt gehen. IRC, Spiele, E-Mails, Nachrichten und Backups könnten wahrscheinlich sicher entfernt werden (es sei denn, Sie verwenden diese über das System, nicht über einen Browser). Den Rest überlasse ich Ihren Suchmaschinenfähigkeiten.
Dies ist jedoch Ubuntu / Bodhi Linux, und andere Systeme haben möglicherweise weniger Extras. Alle diese anderen sollen jedoch verhindern, dass alles als Root ausgeführt werden muss. Ich stelle mir vor, dass es möglich ist, ein System zu erstellen, in dem jede Datei nur von einem der Systembenutzer (Balkenstamm) gelesen / geschrieben / ausgeführt werden kann, aber ich bin nicht sicher, ob es versucht wurde.
Ausführen ist die Berechtigung zum Ausführen von Code. Lesen ist die Erlaubnis, nur zu schauen (und zu kopieren?).
quelle