GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie verhindert man, dass chgrp das „setuid bit“ löscht?

Wenn Sie Ihren chgrp -R nobody /whatever implementieren möchten Unter Beibehaltung des Setuid-Bits können Sie diese beiden find verwenden Befehle

find /whatever ! -type l -perm -04000 -exec chgrp nobody {} + \
                                      -exec chmod u+s {} +
find /whatever ! -type l ! -perm -04000 -exec chgrp nobody {} +

Die find ... -perm 04000 Option nimmt Dateien mit gesetztem setuid-Bit auf. Der erste Befehl wendet dann die chgrp an und dann ein chmod um das abgeschlagene setuid-Bit wiederherzustellen. Der zweite gilt chgrp auf alle Dateien, die kein setuid-Bit haben.

Auf keinen Fall möchten Sie chgrp anrufen oder chmod auf Symlinks, da dies stattdessen ihre Ziele beeinflussen würde, daher der ! -type l .


Löschen von SUID- und SGID-Bits auf chgrp (oder chown ) ist vollkommen in Ordnung. Dies ist eine Sicherheitsmaßnahme, um Sicherheitsproblemen vorzubeugen. Für SGID (bei ausführbaren Dateien, nehme ich an) bedeutet dieses Programm mit der effektiven Gruppe des Gruppenbesitzers ausführen .

Wenn Sie den Gruppenbesitzer ändern, dann ist das in Bezug auf Sicherheit und Zugriffskontrolle etwas ganz anderes, d.h. statt mit der effektiven Gruppe uvw zu laufen das Programm läuft jetzt mit der effektiven Gruppe xyz .

Daher müssen Sie das SUID- oder SGID-Bit bei einem Eigentümerwechsel explizit wiederherstellen.

Nachtrag:Zur Behauptung, dass chgrp (oder chown) nur SGID (bzw. SUID) löschen soll

Mit chown oder chgrp Wenn Sie die Sicherheitseinstellung für eine ausführbare Datei ändern, ist dies ein ausreichender Grund, alle berechtigungserhöhenden Attribute zu löschen. Die Stärke von Unix liegt in der konzeptionellen Einfachheit, und die Unix-Sicherheit ist bereits ziemlich schwierig. Zu diesem Zweck ist das Entfernen von SUID und SGID bei jedem Eigentümerwechsel nur ein Sicherheitsnetz - schließlich gab es in der Geschichte von Unix/Linux einige Schwachstellen aufgrund fehlgeleiteter SUID- oder SGID-Einstellungen.

Es gibt also keinen tieferen Grund, warum Unix sich so verhält, es ist nur eine konservative Designentscheidung.


Die Räumung der setuid , setgid Bit (zumindest unter Linux) auf Nicht-Verzeichnissen wird vom Kernel auf chown() ausgeführt Systemaufruf erfolgt durch chgrp , nicht von chgrp selbst. Die einzige Möglichkeit besteht also darin, es danach wiederherzustellen.

Es löscht auch die Sicherheitsfunktionen.

Also unter GNU Linux:

chown_preserve_sec() (
  newowner=${1?}; shift
  for file do
    perms=$(stat -Lc %a -- "$file") || continue
    cap=$(getfattr -m '^security\.capability$' --dump -- "$file") || continue
    chown -- "$newowner" "$file" || continue
    [ -z "$cap" ] || printf '%s\n' "$cap" | setfattr --restore=-
    chmod -- "$perms" "$file"
  done
)

Und ausführen (als root ):

chown_preseve_sec :newgroup file1 file2...

die Gruppe zu ändern, während versucht wird, die Berechtigungen beizubehalten.

Rekursiv könnten Sie Folgendes tun:

# save permissions (and ACLs). Remove the "# owner" and "# group" lines
# to prevent them being restored!
perms=$(getfacl -RPn . | grep -vE '^# (owner|group): ')
# save capabilities
cap=$(getfattr -Rhm '^security\.capability$' --dump .)

chgrp -RP nobody .

# restore permissions, ACLs and capabilities
printf '%s\n' "$perms" | setfacl --restore=-
[ -z  "$cap" ] || printf '%s\n' "$cap" | setfattr -h --restore=-

(Das ist alles vorausgesetzt, dass nichts gleichzeitig die Dateien durcheinander bringt).


Linux
  1. Journalctl:Wie verhindert man, dass Text im Terminal abgeschnitten wird?

  2. Wie kann man verhindern, dass `ls` die Ausgabe sortiert?

  3. Verhindern, dass Sigint untergeordnete Prozesse erreicht?

  4. chgrp-Befehlsbeispiele in Linux

  5. Linux NFLOG - Dokumentation, Konfiguration von C

Einführung in die Linux-Befehle chgrp und newgrp

Chgrp-Befehl in Linux (Gruppe ändern)

Linux-Chgrp-Befehl für Anfänger (5 Beispiele)

Linux Chgrp-Befehl mit Beispielen

Lernen Sie die Verwendung des Befehls chgrp (Change Group) in Linux

Verhindern, dass die Konsole den Bildschirm löscht?