Wir haben RH-basierte Linux-Images. auf die ich ein "spezielles Archiv" "anwenden" muss, um sie auf die neueste Entwicklungsversion unseres Produkts zu aktualisieren.
Die Person, die das Archiv erstellt hat, hat festgestellt, dass in unserem Basis-Image einige Berechtigungen falsch sind. Also wurde uns gesagt, wir sollen rennen
sudo chgrp -R nobody /whatever
Wir haben das gemacht; und später, wenn unsere Anwendung ausgeführt wird, traten dunkle Probleme auf.
Was ich später auf: der Aufruf an chgrp wird klar die setuid Bit Informationen über unsere Programme in / was auch immer.
Und das eigentliche Problem ist: Einige unserer Binärdateien müssen dieses Setuid-Bit gesetzt haben, um richtig zu funktionieren.
Lange Rede, kurzer Sinn: Gibt es eine Möglichkeit, diesen "chgrp" -Befehl auszuführen, ohne meine Setuid-Bits zu töten?
Ich habe gerade Folgendes auf meinem lokalen Ubuntu ausgeführt: was zum gleichen Ergebnis führt:
mkdir sticky
cd sticky/
touch blub
chmod 4755 blub
ls -al blub
-> zeigt mir den Dateinamen mit rotem Hintergrund -> also, yep, setuid
chgrp -R myuser .
ls -al blub
-> zeigt mir den Dateinamen ohne roten Hintergrund -> setuid ist weg
4XXX
Bit heißt setuid bit (s
) und ist nicht klebrig. Sticky ist dast
bisschen und sein Zweck ist ein wenig anders: en.wikipedia.org/wiki/Sticky_bitsetuid
Bit, nicht dassticky
Bit. (2) Löschen Sie dassetuid
Bit nicht, wenn Sie ein Sicherheitsproblem habenchgrp
oder dieschown
wäre.Antworten:
Wenn Sie Ihre implementieren möchten,
chgrp -R nobody /whatever
während Sie das setuid-Bit beibehalten, können Sie diese beidenfind
Befehle verwendenDie
find ... -perm 04000
Option nimmt Dateien mit gesetztem Setuid-Bit auf. Der erste Befehl wendet dann daschgrp
und dann achmod
an, um das abgeschlagene Setuid-Bit wiederherzustellen. Die zweite giltchgrp
für alle Dateien, die kein Setuid-Bit haben.In jedem Fall möchten Sie keine Symlinks aufrufen
chgrp
oder aufrufen,chmod
da dies sich stattdessen auf deren Ziele auswirken würde, daher die! -type l
.quelle
chgrp
auch das Setgid-Bit (und die Funktionen unter Linux) gelöscht werden, das möglicherweise ebenfalls wiederhergestellt werden muss.find
find
Aufruf tun können . Ich mag die langen Zeilen in SE nicht, wenn Sie den Text scrollen müssen. Mein Hinzufügen der! -Typ Ich habe es über den Rand gebrachtfind
Ansatz mit-exec +
kann schwierig sein, wenn dies dazu führt, dass diechmod
/chgrp
s in mehrere Aufrufe aufgeteilt werden.find . ! -type l -exec chgrp nobody {} + \( -perms -6000 -exec chmod gu+s {} + -o -perms -4000 -exec chmod u+s {} + -o -perms -2000 -exec chmod g+s {} + \)
sollte OK sein. Da diechgrp
Übereinstimmungen für mehr Dateien gelten, sollte dies für jede Datei vor demchmod
s erfolgen.Das Löschen von SUID- und SGID-Bits auf
chgrp
(oderchown
) ist durchaus sinnvoll. Es ist eine Sicherheitsmaßnahme, um Sicherheitsprobleme zu vermeiden. Für SGID (auf ausführbaren Dateien, nehme ich an) bedeutet , dieses Programm mit der effektiven Gruppe des Gruppenbesitzers auszuführen .Wenn Sie den Gruppeneigentümer ändern, ist dies in Bezug auf Sicherheit und Zugriffskontrolle etwas völlig anderes, dh anstatt mit einer effektiven Gruppe ausgeführt zu werden, wird
uvw
das Programm jetzt mit einer effektiven Gruppe ausgeführtxyz
.Daher müssen Sie das SUID- oder SGID-Bit bei einem Eigentümerwechsel explizit wiederherstellen.
Nachtrag: Zu der Behauptung, dass chgrp (oder chown) nur SGID (bzw. SUID) löschen sollte.
Durch Ändern
chown
oderchgrp
Ändern ändern Sie die Sicherheitseinstellung für eine ausführbare Datei. Dies ist ein ausreichender Grund, um alle Attribute zur Erhöhung von Berechtigungen zu löschen. Die Leistungsfähigkeit von Unix beruht auf konzeptioneller Einfachheit, und die Unix-Sicherheit ist bereits recht schwierig. Zu diesem Zweck ist das Entfernen von SUID und SGID bei jedem Eigentümerwechsel lediglich ein Sicherheitsnetz - schließlich gab es in der Geschichte von Unix / Linux einige Sicherheitslücken aufgrund fehlgeleiteter SUID- oder SGID-Einstellungen.Es gibt also keinen tieferen Grund, warum sich Unix so verhält, es ist nur eine konservative Designentscheidung.
quelle
uvw
das Programm jetzt nicht mit einer effektiven Gruppe ausgeführt wirdxyz
, sondern mit einer effektiven Gruppe ", gilt dies jedoch nicht für den diskutierten Fall.chown
oderchgrp
Ändern ändern Sie die Sicherheitseinstellung. Dies ist ein ausreichender Grund, um Attribute zur Erhöhung von Berechtigungen zu löschen. Die Chancen stehen gut, dass dies sonst die Unachtsamen trifft.Das Löschen der
setuid
,setgid
Bit (zumindest unter Linux) auf nicht-Verzeichnissen wird vom Kernel auf dem getanchown()
Systemaufruf durch getanchgrp
, nicht vonchgrp
selbst. Die einzige Möglichkeit besteht darin, es anschließend wiederherzustellen.Außerdem werden die Sicherheitsfunktionen gelöscht.
Also, unter GNU Linux:
Und laufe (as
root
):um die Gruppe zu ändern, während versucht wird, die Berechtigungen beizubehalten.
Rekursiv könnten Sie tun:
(Das alles setzt voraus, dass nichts gleichzeitig die Dateien durcheinander bringt).
quelle
Wie bei der Verwaltung üblich, gibt es viele Möglichkeiten.
Die Lösung, die ich eingeführt habe, sieht folgendermaßen aus:
quelle