Ein Nicht-Sudo-Benutzer erhält die Meldung „rm: schreibgeschützte normale leere Datei entfernen“ statt „Berechtigung verweigert“

Ein Nicht-Sudo-Benutzer erhält die Meldung „rm: schreibgeschützte normale leere Datei entfernen“ statt „Berechtigung verweigert“

Ich habe einem Linux-Server eine zusätzliche Festplatte hinzugefügt.

Ich habe der fstab folgende Zeile hinzugefügt:

UUID=e277f402-bbac-4830-bc1d-5a849ffe7f9c /disk1          ext4    defaults 0 0

Ich habe dann einen Einhängepunkt /disk1 erstellt und ihn eingehängt

 sudo mkdir /disk1
 sudo mount /disk1

Ich habe dann eine leere Datei touch1.txt als Benutzer "hari" erstellt und die Berechtigungen waren wie folgt

sudo touch test1.txt

-rw-rw-r-- 1 hari hari     0 Sep 12 18:23 test1.txt

Wenn ich mich jetzt als anderer Benutzer anmelde und die Datei test1.txt lösche, werde ich tatsächlich gefragt und dann abgelehnt, anstatt zu sagen „Zugriff verweigert“. Warum ist das so? Und wie kann ich dafür sorgen, dass es sich wie „normal“ verhält?

hari2@UBUNTU01:/disk1$ rm test2.txt
rm: remove write-protected regular empty file ‘test2.txt’? y
rm: cannot remove ‘test2.txt’: Operation not permitted

Antwort1

Unix-Berechtigungen sind beim Entfernungsvorgang etwas seltsam.

Zunächst einmal bedeutet das Löschen einer Datei, dass man den Link zu der Datei aus einem Verzeichnis entfernt. Da die meisten Unix-Dateisysteme Hardlinks zulassen, ist es möglich, dass die Datei von mehr als einem Verzeichnis aus verlinkt ist, sodass mehr als ein Link existiert. Und wenn Sie einen Link entfernen, wird die Datei nicht gelöscht, sofern keine anderen Links zu ihr existieren.

Aus diesem Grund heißt der eigentliche Systemaufruf zum „Entfernen“ einer Datei unlink. Das Shell-Befehlsdienstprogramm, das die Aufhebung der Verknüpfung durchführt, heißt jedoch rm, was eine Mnemonik für „remove“ (entfernen) ist.

Da der Vorgang zum Aufheben der Verknüpfung dieVerzeichnis(durch Entfernen des Verzeichniseintrags) und nicht der Datei, ist für den Vorgang die Schreibberechtigung erforderlichim VerzeichnisDie Berechtigungen für die Datei selbst sind irrelevant.

Es stellt sich jedoch heraus, dass es ein häufiger Fehler ist, eine Datei aus einem Verzeichnis zu löschen, für das Sie Schreibrechte haben und die Ihnen eigentlich gar nicht gehört. (Genauer gesagt ist diese Situation nicht alltäglich, aber in den Fällen, in denen sie vorkommt, kommt es recht häufig vor, dass Sie fälschlicherweise versuchen, die Datei zu löschen.)

Um zu verhindern, dass sich Systemadministratoren ins eigene Fleisch schneiden, rmüberprüft das Dienstprogramm zunächst, ob die Person, die es aufruft, Schreibberechtigung für denDatei, obwohl diese Berechtigung zum Aufheben der Verknüpfung der Datei nicht erforderlich ist. Aus offensichtlichen Gründen wird diese Prüfung vor dem Versuch durchgeführt, die Datei zu löschen.

Das rmDienstprogrammnichtÜberprüfen Sie, ob der Benutzer die Verknüpfung der Datei aufheben darf, da „vor der Aktion prüfen“ im Allgemeinen als schlechter Stil gilt. Stattdessen führt es die gewünschte Aktion aus und meldet einen Fehler, wenn das Betriebssystem einen Fehler zurückgibt. In diesem Fall meldet das Betriebssystem EACCES, da der Benutzer keinen Schreibzugriff auf das Verzeichnis hat.

Die unglückliche Konsequenz ist, dass Sie beim Versuch, eine Datei aus einem Verzeichnis ohne Schreibberechtigung zu löschen, für das Sie keine Schreibberechtigung haben, rmeher vergeblich gefragt werden, ob Sie fortfahren möchten, und dann ein Fehler gemeldet wird.

verwandte Informationen