Warum haben Programme wie su Zugriff auf / etc / shadow

7

Normalerweise kann nur root darauf zugreifen /etc/shadow. Aber Programme mögen suund sudokönnen Passwörter überprüfen, ohne als root ausgeführt zu werden. Die Frage ist also: Warum können diese Programme /etc/shadowohne Berechtigungen zugreifen ? Ich habe versucht, mit dem spwdModul ohne Berechtigungen über Python darauf zuzugreifen , aber ich habe keinen Zugriff erhalten (wie erwartet). Welchen Mechanismus verwenden diese Programme?

Kritzefitz
quelle
1
sudound su Sie als root ausführen. Informationen zu den Interna finden Sie unter unix.stackexchange.com/questions/11285/how-does-sudo-work .
Strugee

Antworten:

10

Warum haben Programme wie su Zugriff auf / etc / shadow

Weil Programme mögen suund eingestellt passwdhaben SetUID. Sie können Folgendes überprüfen:

[root@tpserver tmp]#  ls -l /usr/bin/passwd
-r-s--x--x  1 root root 21200 Aug 22  2013 /usr/bin/passwd

Wenn Sie sich in Ihrer Dateiberechtigung umschauen, sehen Sie "s". Wenn jemand versucht, das passwdProgramm auszuführen , übernimmt er standardmäßig das Privileg des Eigentümers (hier root) der Datei. Dies bedeutet, dass jeder Benutzer das Root-Recht erhalten kann, das passwdProgramm auszuführen , da nur der Root-Benutzer das Programm bearbeiten oder aktualisieren /etc/passwdund /etc/shadowarchivieren kann. Andere Benutzer können nicht. Wenn der normale Benutzer das passwdProgramm auf seinem Terminal ausführt, wird das passwdProgramm als "root" ausgeführt, da die effektive UID auf "root" gesetzt ist. So kann der normale Benutzer die Datei problemlos aktualisieren.

Sie können den chmodBefehl mit den Argumenten u+soder verwenden g+s, um die Bits setuid und setgid für eine ausführbare Datei festzulegen


Lange Antwort: Set-User_Id (SUID): Power für einen Moment:

Wenn ein Benutzer eine Datei ausführt, verfügt der Prozess, der zu dieser Ausführung führt, standardmäßig über dieselben Berechtigungen wie der Benutzer. Tatsächlich erbt der Prozess seine Standardgruppen- und Benutzeridentifikation.

Wenn Sie das SUID-Attribut für eine ausführbare Datei festlegen, verwendet der Prozess, der zu seiner Ausführung führt, nicht die Benutzeridentifikation, sondern die Benutzeridentifikation des Dateieigentümers.

Der von Dennis Ritchie erfundene SUID-Mechanismus ist ein potenzielles Sicherheitsrisiko. Es ermöglicht einem Benutzer, verborgene Kräfte zu erlangen, indem er eine solche Datei ausführt, die root gehört.

$ ls -l /etc/passwd /etc/shadow /usr/bin/passwd
-rw-r--r-- 1 root root 2232 Mar 15 00:26 /etc/passwd
-r-------- 1 root root 1447 Mar 19 19:01 /etc/shadow

Die Auflistung zeigt, dass passwd für alle lesbar ist, Schatten jedoch für Gruppen und andere nicht lesbar. Wenn ein Benutzer, der das Programm ausführt, zu einer dieser beiden Kategorien gehört (wahrscheinlich zu anderen), schlägt der Zugriff im Lesetest für Schatten fehl. Angenommen, ein normaler Benutzer möchte sein Passwort ändern. Wie kann er das machen? Er kann das tun, indem er rennt /usr/bin/passwd. Viele UNIX / Linux-Programme verfügen über einen speziellen Berechtigungsmodus, mit dem Benutzer vertrauliche Systemdateien aktualisieren können - /etc/shadowähnlich wie etwas, das sie nicht direkt mit einem Editor tun können. Dies gilt für das passwdProgramm.

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 22984 Jan 6 2007 /usr/bin/passwd

Der Buchstabe s in der Benutzerkategorie des Berechtigungsfelds stellt einen speziellen Modus dar, der als set-user-id (SUID) bezeichnet wird. In diesem Modus verfügt ein Prozess während der Instanz des Programms über die Berechtigungen des Eigentümers der Datei. Wenn also ein nicht privilegierter Benutzer passwd ausführt, ist die effektive UID des Prozesses nicht die des Benutzers, sondern die des Stamms - des Eigentümers des Programms. Dieses SUID-Privileg wird dann von passwd zum Bearbeiten verwendet /etc/shadow.

Referenzlink

Rahul Patil
quelle
Vielen Dank! Jetzt habe ich endlich auch bekommen, was das S-Ausführungsbit macht.
Kritzefitz
2
Sist eigentlich anders als s. sbedeutet: execute + setuid, während Snur setuid ohne execute bedeutet. Dadurch wird sichergestellt, dass Sie feststellen können, ob der jeweilige Benutzer noch über die Ausführungsberechtigung verfügt, da das Flag s/ Sden von dem xFlag normalerweise verwendeten Speicherplatz verwendet .
Martin von Wittich
Das Großbuchstaben S gibt an, dass für die Datei ein Setuid-Bit gesetzt ist, diese jedoch nicht ausführbar ist.
Rahul Patil
Überprüfen Sie mehr mitinfo ls "What information is listed"
Rahul Patil