In einem MacOS Mojave-Bash-Skript ist „-w / etc / passwd“ sogar für root falsch

1

Ein alter Bash - Skript , die ich getestet habe , um zu sehen , ob ein Benutzer war rootdurch den Anblick , wenn /etc/passwdbeschreibbar war. In MacOS High Sierra kehrte es für wahr rootund 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 rootfü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.

Marnix A. van Ammers
quelle
1
Aber [[ -w /etc/passwd ]] && echo "yes"kehren Sie yesfür den Root-Benutzer sowohl unter High Sierra als auch unter Mojave zurück.
David Anderson
@ David Anderson, dein Test gibt auf High Sierra nur "yes" zurück, wenn ich es tue. Gibt auf meinem Mojave-System nichts zurück (in beiden Fällen wird es von root ausgeführt).
Marnix A. van Ammers
@ MarnixA.vanAmmers Es kehrt yesfür mich auf Mojave zurück, mit vorher laufen sudo -iodersudo bash
Yoric
Es ist für mich immer noch fehlgeschlagen, aber als ich SIP ausgeschaltet habe, war es erfolgreich. Bedeutet "csrutil status" "disabled" auf Ihren Systemen?
Marnix A. van Ammers
Arbeiten für mich wie bei SIP erwartet aktiviert: whoami; [[ -w /etc/passwd ]] && echo "yes"führt zuroot yes
nohillside

Antworten:

2

Das Überprüfen, ob eine Datei "beschreibbar" ist, um festzustellen, ob ein Benutzer berechtigt ist, rootist 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 ist

  • Eine 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 rootBenutzer in Systemdateien schreibt.

Überprüfen Sie die Benutzer-ID

Stattdessen sollten Sie sich die UID eines bestimmten Benutzers mit der Funktion ansehen id

$ id -u

Ein rootBenutzer wird eine ID von 0 haben.

Informationen dazu, wie Sie dies in einem Skript verwenden können, um nach rootBerechtigungen zu suchen, finden Sie in der Antwort im Beitrag Ausführen eines Skripts mit Administratorrechten .

SIP überprüfen

Das ist eigentlich ganz einfach ....

$ csrutil status

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 UIDwie oben beschrieben zu testen .

Allan
quelle
/etc/passwdist nicht durch SIP geschützt, ls -O /etc/passwdzur Überprüfung ausführen .
Nohillside
Mir ist eigentlich alles bekannt. Ich habe nur versucht, eine Erklärung dafür zu finden, warum der Test "-w / etc / passwd" in meinem Mojave falsch ist, wenn ich SIP aktiviert habe, und wahr, wenn ich SIP deaktiviert habe, und warum dies für andere Mojave-Installationen nicht zutrifft. Verrückte Sache ist, das ist gerade klar geworden. Ein Neustart hat es nicht geschafft. Das Deaktivieren und erneute Aktivieren von SIP hat dies nicht getan. Irgendwie ist es jetzt klar und alles funktioniert wie erwartet.
Marnix A. van Ammers
Möglicherweise wurde SIP erneut aktiviert . Ich habe nicht sofort bemerkt, dass das Problem klar wurde. Nur einige Stunden später bemerkte ich. Vielleicht werde ich verrückt. Ich habe meine Frage aktualisiert.
Marnix A. van Ammers