Warum brauche ich im Dateimodus auf Unix-Dateisystemen ein Ausführungsbit?

5

Wenn ich eine ausführbare Datei mit Leseberechtigung (Lesen und Ausführen im Stammverzeichnis) habe, kann ich sie immer in mein Ausgangsverzeichnis kopieren, in dem ich die Vollzugriffsberechtigung habe. Dann stelle ich die neue Datei zum Lesen und Ausführen ein. Okay, ich kann es ausführen.

Ist es für einen Dateimodus wirklich notwendig? Ich weiß, für Verzeichnisse bedeutet es anders.

Waldungen
quelle

Antworten:

2

Ich bin überrascht, dass niemand Binaries erwähnt hat, die mit besonderen Privilegien laufen. Wireshark hat hier einen realen Anwendungsfall: Eine seiner Hauptfunktionen ist das Erfassen des Netzwerkverkehrs, was normalerweise nur Root kann. Es ist sinnvoll, dass Sie bestimmten Benutzern erlauben möchten, Datenverkehr mit Wireshark zu erfassen, ohne ihnen vollständigen Root-Zugriff dumpcapgewähren zu müssen. Daher wird Wireshark mit einer Binärdatei ausgeliefert , die die erforderlichen Funktionen (CAP_NET_RAW und CAP_NET_ADMIN) aktiviert hat. Diese Binärdatei ist 0754 (rwxr-xr--) und die zugehörige GID ist eine spezielle Gruppe, die Wireshark installiert. Auf diese Weise kann jeder Benutzer in der Gruppe die Binärdatei ausführen (im Allgemeinen über Wireshark), um den Datenverkehr zu erfassen, und sie wird mit den dazu erforderlichen Berechtigungen ausgeführt. Ich habe keine Ausführungserlaubnis. Sie könnten es immer noch in ihr Home-Verzeichnis kopieren, aber für ihre Kopie wären nicht die erforderlichen Funktionen festgelegt, sodass tatsächlich kein Datenverkehr erfasst werden kann.

flarn2006
quelle
Vielen Dank für die Beantwortung meiner Frage! Ich habe gerade einige Zeit damit verbracht, meine Frage zu überprüfen, die ich vor 6 Jahren hatte, und all die Antworten hier und ich habe das Gefühl, dass dies ziemlich genau das ist, was ich wollte. Ich habe gerade erfahren, dass die Funktionen einer Binärdatei auf einem bestimmten Pfad zugeordnet sind und nicht zusammen mit dem Kopieren von Binärinhalten kopiert werden können.
Woodings
1
"Fähigkeiten" gab es nicht, als Unix-Berechtigungen erfunden wurden. Die klassische Unix-Analogie ist das setuid-Bit. Ebenso wie diese Funktionen wird das Setuid-Bit nicht an eine Kopie weitergegeben. Wenn Sie eine ausführbare Datei kopieren, die sich im Besitz von root befindet, gehört sie Ihnen. Sie können das setuid-Bit setzen, aber dann wird diese Datei wie Sie ausgeführt, nicht als root. Niemand erwähnte setuid oder irgendetwas davon, weil es sich um die Ausführungserlaubnis handelt.
Kaz
11

Weil * nix nicht gehirnschädigend genug ist, um eine Datei "binär ausführbar" zu machen, wenn Sie sie ".exe" nennen, oder "Skript ausführbar", wenn Sie sie ".bat" nennen.

Unter Linux spielt der Name der Datei keine Rolle.

Und die Berechtigungen , die Sie eine Datei geben Sie wichtig sind .

Welche Art von macht Sinn. MEINER BESCHEIDENEN MEINUNG NACH...

paulsm4
quelle
6
Sie können auch anders herum argumentieren, dass Unix es Ihnen ermöglicht, eine ausführbare Datei ohne visuellen Anhaltspunkt festzulegen. Alles, was neu ist, funktioniert sowieso mit ACLs.
JOTN
4

Das Ausführungsbit ist etwas verwechselt zwischen einer Berechtigung und einer Objekttypkennung.

Und nein, Sie können die Datei nicht immer in Ihr Home-Verzeichnis "kopieren": Nur wenn sie für Sie lesbar ist.

Dateien können für Sie ausführbar, aber nicht lesbar sein.

Sie haben Recht, wenn eine Datei für Sie lesbar, aber nicht für Sie ausführbar ist, können Sie sie kopieren und das Ausführungsbit umdrehen und verwenden. Könnte sein. Aber es könnte nicht funktionieren. Die ausführbare Datei hängt möglicherweise davon ab, wo sie installiert ist. Oder die Datei hängt von ihrem setuid-Root-Bit ab.

Ich würde ein Berechtigungssystem nicht so entwerfen, wenn ich von einer leeren Tafel ausgehe. es macht nicht ganz Sinn. Die Berechtigung zum Ausführen ist von einem Attribut des ausführbaren Typs getrennt, und die Berechtigung zum Ausführen wird nicht mit der Suchberechtigung überladen (selbst wenn sie auf diese Weise gespeichert wurde; die API würde sie nicht auf Bitmaskenebene anzeigen).

Kaz
quelle
Es ist sinnvoll, es als Objekttypkennung anstelle eines Berechtigungsbits zu betrachten. Dann wäre es wirklich verwirrend, eine Datei für einige Benutzer als ausführbar und für den Rest der Benutzer als nicht ausführbar festzulegen.
Woodings
Das Kopieren in Ihr Home-Verzeichnis ist auch dann nicht sinnvoll, wenn / home mit der Option noexec gemountet wurde.
Zoredache
1

Das ist ein guter Punkt, und ich glaube, ich sehe, wohin Sie damit wollen.

So interpretieren Sie Ihre Frage neu: Trifft die folgende Behauptung zu: "Das Festlegen einer ausführbaren Datei im nicht ausführbaren Modus für einen Benutzer schränkt die Funktionen des Benutzers nicht ein."

Ich glaube es ist wahr.

  1. Kopieren Sie die Datei in ein anderes Verzeichnis.
  2. Exec Perms ändern.
  3. Führen Sie pwd (insbesondere das ursprüngliche Verzeichnis) aus, indem Sie den vollständigen Pfad zur neuen Kopie der ausführbaren Datei mit beliebigen Befehlszeilenargumenten angeben.

Ich glaube nicht, dass noch etwas fehlt, das Sie haben würden, wenn Sie die Exec-Perm der Originaldatei aktiviert hätten.

Mit pwd meine ich jetziges Arbeitsverzeichnis.

Parakram Majumdar
quelle
Was Sie vermissen, ist, dass eine Datei ausführbar, aber nicht lesbar sein kann.
Keith Thompson
1

Es gibt viele Gründe, warum Sie eine Datei als lesbar, aber nicht ausführbar markieren möchten, insbesondere für bestimmte Benutzer oder Gruppen. Folgendes berücksichtigen:

# /usr/local/sbin/foo.sh
-rwxr--r-- 1 root root 890 2012-02-17 21:09 /usr/local/sbin/foo.sh

# ~/bin/foo.sh
-rwxr-xr-x 1 user user 890 2012-02-17 21:09 /home/bin/foo.sh

Dies kann sinnvoll sein, wenn:

  1. Die Dateien unterscheiden sich - vielleicht haben Sie jede Instanz von "root" durch "user" im Skript ersetzt - aber Ihr Pfad enthält /usr/local/sbin:/home/user/bin. Durch die Berechtigungen wird sichergestellt, dass foo.shdie geänderte Kopie des Benutzers ausgeführt wird, auch wenn die Kopie von root im Suchpfad an erster Stelle steht, wenn das Ausführungsbit gesetzt ist.
  2. Die Dateien sind identisch, unterscheiden sich jedoch zur Laufzeit in Bezug auf den Basisnamen, das übergeordnete Verzeichnis, das Basisverzeichnis des aufrufenden Benutzers oder einen anderen cleveren Programmiertrick. In solchen Fällen möchten Sie, dass Benutzer die Datei vor dem Ausführen an eine andere Stelle kopieren. Viele Beispielskripte entfernen das Ausführungsbit, um Benutzer zum Kopieren und Anpassen zu zwingen.

Letztendlich hindert Sie nichts daran, Dateien zu kopieren, die Sie lesen können, oder sie einfach direkt mit auszuführen sh /path/to/file. Das fehlende Ausführungsbit für Ihren Benutzer oder Ihre Gruppe verhindert lediglich, dass Sie dies versehentlich tun . Es ist keine Sicherheitsmaßnahme und sollte nicht für eine genommen werden.

CodeGnome
quelle
0

Nach meinem Verständnis möchten Sie wissen, warum eine schreibgeschützte, von Ihnen nicht ausführbare Datei in Ihr Ausgangsverzeichnis kopiert werden kann, in dem Sie sie ausführbar machen und ausführen können, wodurch die Illusion entsteht, dass das "ausführbare" Bit nicht benötigt wird.

In Ihrem Fall kann dies hilfreich sein, da die ausführbare Datei möglicherweise nur am ursprünglichen Speicherort ausgeführt werden kann. Wenn Sie sie also an einen neuen Speicherort kopieren, schlägt die Ausführung fehl.

Auf der anderen Seite gibt Ihnen ein eigenes Home-Verzeichnis mit vollem Zugriff bereits ein gewisses Maß an Vertrauen in das System. Es gibt viele Situationen, in denen Benutzer nur Lesezugriff haben. In diesem Fall können Sie die ausführbare Datei lesen, sie jedoch in keiner Weise ausführen

Schocker
quelle
Lesen, aber nicht ausführen scheint keine sehr nützliche Kombination für eine ausführbare Datei zu sein, aber Ausführen und Nicht-Lesen ist nützlich. Es gibt keine Möglichkeit, weniger als zwei Bits ausführen und nicht lesen zu lassen, also ...
Kaz