chown löscht setuid bit: Bug oder Feature?

14

Schritte zum Reproduzieren:

germar@host:~$ cd /tmp/
germar@host:/tmp$ touch test && chmod u+s test && ls -la test
-rwSr--r-- 1 germar germar 0 Nov  2 20:11 test
germar@host:/tmp$ chown germar:germar test && ls -la test
-rw-r--r-- 1 germar germar 0 Nov  2 20:11 test

Getestet mit Debian Squeeze und Ubuntu 12.04

Germar
quelle
Gilt das auch für Fedora 17.
BenjiWiebe
1
feature
mikeserv

Antworten:

17

Kein Fehler gemäß der Chown-Dokumentation:

$ info coreutils 'chown invocation'

   The `chown' command sometimes clears the set-user-ID or set-group-ID
permission bits.  This behavior depends on the policy and functionality
of the underlying `chown' system call, which may make system-dependent
file mode modifications outside the control of the `chown' command.
For example, the `chown' command might not affect those bits when
invoked by a user with appropriate privileges, or when the bits signify
some function other than executable permission (e.g., mandatory
locking).  When in doubt, check the underlying system behavior.
jlliagre
quelle
Danke jlliagre. Ich wusste es info coreutilsvorher nicht. Ich habe nur die Manpage gelesen und im Web gesucht.
Germar
12

Dies ist beabsichtigt und das Standardverhalten. Zitieren des POSIX-Standards :

Sofern chown nicht von einem Prozess mit entsprechenden Berechtigungen aufgerufen wird, werden die Bits set-user-ID und set-group-ID einer regulären Datei nach erfolgreichem Abschluss gelöscht. Die Bits set-user-ID und set-group-ID anderer Dateitypen können gelöscht werden.

( sIst setuid (oder setgid in der Gruppenspalte), übrigens nicht klebrig.)

Dieses Verhalten folgt dem des zugrunde liegenden Systemaufrufs (mit der Ausnahme, dass auf einigen Systemen die setxid-Bits nur für ausführbare Dateien gelöscht werden).

Der Grund für das Entfernen des setuid-Bits besteht darin, dass durch das Ändern des Besitzers auch geändert wird, welcher Benutzer die effektive Benutzer-ID des Prozesses ist. Insbesondere auf Systemen, auf denen ein Benutzer eine Datei verschenken kann, cp /bin/sh foo; chmod u+s foo; chown joe foowürde eine Setuid-Programmdatei von Joe erstellt, eine riesige Sicherheitslücke.

Gilles 'SO - hör auf böse zu sein'
quelle
Upvoting für den Nitpick! SUID / SGID sind nicht das "klebrige" Bit!
Jim Dennis
Großartiger Punkt zu den Sicherheitsaspekten der Beibehaltung von SUID / SGID. Das Verhalten störte mich, bis ich diesen Satz las. Ich würde jedoch hinzufügen, dass ich noch nie gesehen habe , wie die Bits nicht gelöscht wurden, selbst wenn ich als root lief. Ich bin gespannt, was "angemessene Privilegien" bedeuten würden.
Sehr überlegener Mann
1
@vastlysuperiorman Auf einer klassischen Unix-Plattform bedeutet "entsprechende Berechtigungen" die Benutzer-ID 0. Mit POSIX können Systeme jedoch ihre eigenen Sicherheitsrichtlinien definieren. Beispielsweise werden für viele Operationen unter Linux "entsprechende Berechtigungen" als eine Funktion implementiert (die standardmäßig nur Root erhält). Unterdrückt in diesem speziellen Fall setxid-Bits bei chown unabhängig von Berechtigungen, wie die meisten, wenn nicht alle Unix-Varianten. Eine POSIX-Ebene unter Windows funktioniert jedoch möglicherweise anders.
Gilles 'SO - hör auf böse zu sein'