Wer sind "andere" in Linux-Berechtigungen und was bedeutet "ausführen"?

13

Ich konnte die Antworten auf diese drei Fragen nicht finden:

  • 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/wwwzuweisen apacheund chown auf setzen und eingeben chmod 700, sollte es funktionieren, oder?

  • Was ist der Unterschied zwischen "Ausführen" und "Lesen"?

  • Was sind die Standarddateiberechtigungen für das gesamte System nach einer Neuinstallation (z. B. in Ubuntu)?

randomKek
quelle

Antworten:

16

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/wwwzuweisen apacheund 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 -lund ä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 chmodeine 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 600Berechtigungen. Für Apache kann dies sogar zu anderen Problemen führen, abgesehen von der Tatsache, dass Sie mit Ihrem normalen Benutzerkonto keine Dateien /var/wwwmehr bearbeiten können .

Im Allgemeinen sollten Sie also keine Leseberechtigungen ( x00) für andere entfernen müssen .

Sie könnten apachedas /var/wwwVerzeichnis 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-usersGruppe hinzuzufügen und dann Dateien in /var/wwwzu ä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 rootihnen 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.

slhck
quelle
Danke, du hast mir wirklich sehr geholfen! Ich kann Ihnen nicht genug danken, noch eine Frage: Wo ist die Grenze zwischen "Datei" und "ausführbar"? Werden beispielsweise PHP-Dateien von Apache ausgeführt oder gelesen? Nochmals vielen Dank!
randomKek
.phpDateien sind normalerweise nicht ausführbar. Sie werden einfach nur von Apache gelesen, wenn Sie beispielsweise auf Ihren Browser http://example.com/file.phpzeigen. 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 unserer testDatei getan haben , aber dies wird selten verwendet.
Slhck
5

Ich möchte nur hinzufügen, dass die Ausführungsberechtigung für Verzeichnisse unterschiedliche effektive Bedeutungen hat:

Für Dateien :

  • Lesen: Wenn der Dateiinhalt gelesen werden kann
  • Schreiben: Wenn Benutzer oder Prozess in die Datei schreiben können (Inhalt ändern)
  • Ausführen: Wenn die Datei ausgeführt werden kann

Für Ordner :

  • Lesen Sie: Wenn die Verzeichnisliste abgerufen werden kann
  • Schreiben: Wenn Benutzer oder Prozess den Verzeichnisinhalt irgendwie ändern können: Erstellen Sie neue oder löschen Sie vorhandene Dateien im Verzeichnis oder benennen Sie Dateien um.
  • Ausführen: Wenn Benutzer oder Prozess auf das Verzeichnis zugreifen können, gehen Sie zu diesem Verzeichnis (machen Sie es zum aktuellen Arbeitsverzeichnis).

Nein, es gibt keine separate Löschberechtigung für Verzeichnisse.

(Habe diese Informationen hier .)

LawrenceC
quelle
0

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.

Mike L.
quelle
0

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:

+--------------------------------------------------+
| Execute Yes (./file.sh) | Read Yes (vim file.sh) |
|--------------------------------------------------|
| Execute Yes (./file.sh) | Read No (ERROR)        |
|--------------------------------------------------|
| Execute No (ERROR)      | Read Yes (vim file.sh) |
|--------------------------------------------------|
| Execute No (ERROR)      | Read No (ERROR)        |
+--------------------------------------------------+

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.

new123456
quelle
0

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?).

verschwörerisch
quelle