Ein alter Bash - Skript , die ich getestet habe , um zu sehen , ob ein Benutzer war root
durch den Anblick , wenn /etc/passwd
beschreibbar war. In MacOS High Sierra kehrte es für wahr root
und für alle anderen falsch zurück. Aber in macOS Mojave gibt der Test sogar für false zurück root
.
Wenn ich diesen Test [ -w File ]
für andere Dateien mit denselben Berechtigungen und Inhabern durchführe, z. B. /etc/hosts
, gibt er root
für alle anderen Benutzer in Mojave und High Sierra korrekt "Wahr" und "Falsch" zurück. Ich sehe keine speziellen Dateiflaggen oder erweiterten Attribute an /etc/passwd
.
Das Skript ist kein Problem zu beheben, aber ich möchte wissen, wie / warum dieser Test in dieser Datei anders ist als in anderen Dateien und warum dies nur in Mojave ist. Wenn dies mit SIP zu tun hat, möchte ich wissen, wie man testen kann, ob eine Datei oder ein Verzeichnis irgendwie durch SIP geschützt ist.
Update: Ich habe festgestellt, dass das Deaktivieren von SIP dazu geführt hat, dass die Dinge wie erwartet funktionieren. Für einen Root-Benutzer wäre der Bash-Test "-w / etc / passwd" wahr. SIP wieder aktiviert und alles funktioniert wie erwartet. Ich weiß nicht, ob ich diese Frage löschen oder lassen soll, falls jemand auf ein ähnliches Problem stößt. Wenn Sie "ls -O / etc / passwd" ausführen, wird die Datei nicht als eingeschränkt angezeigt.
[[ -w /etc/passwd ]] && echo "yes"
kehren Sieyes
für den Root-Benutzer sowohl unter High Sierra als auch unter Mojave zurück.yes
für mich auf Mojave zurück, mit vorher laufensudo -i
odersudo bash
whoami; [[ -w /etc/passwd ]] && echo "yes"
führt zuroot yes
Antworten:
Das Überprüfen, ob eine Datei "beschreibbar" ist, um festzustellen, ob ein Benutzer berechtigt ist,
root
ist eine schlechte Methode zum Überprüfen von Berechtigungen. Zum Beispiel....Sie können einen Benutzer zu einer Gruppe hinzufügen
wheel
, die über Schreibberechtigungen für eine Datei verfügt, deren Eigentümer normalerweise root istEine Datei kann so gekennzeichnet werden, dass sie selbst dann keine Schreibrechte besitzt
root
, wenn Sie über Root-Zugriff verfügen.Möglicherweise wurden die Berechtigungen einer Datei von root in "Nicht beschreibbar" geändert (absichtlich oder nicht).
Der SIP- oder Systemintegritätsschutz (wie Sie bereits festgestellt haben) verhindert, dass auch der
root
Benutzer in Systemdateien schreibt.Überprüfen Sie die Benutzer-ID
Stattdessen sollten Sie sich die UID eines bestimmten Benutzers mit der Funktion ansehen
id
Ein
root
Benutzer wird eine ID von 0 haben.Informationen dazu, wie Sie dies in einem Skript verwenden können, um nach
root
Berechtigungen zu suchen, finden Sie in der Antwort im Beitrag Ausführen eines Skripts mit Administratorrechten .SIP überprüfen
Das ist eigentlich ganz einfach ....
Wenn es jedoch aktiviert ist, müssen Sie in den Wiederherstellungsmodus booten, um SIP zu deaktivieren . Dies können Sie in einer normalen Sitzung nicht über die Befehlszeile (oder über ein Skript) tun. Es ist viel einfacher, einfach
UID
wie oben beschrieben zu testen .quelle
/etc/passwd
ist nicht durch SIP geschützt,ls -O /etc/passwd
zur Überprüfung ausführen .