Warum die Modusbits S_ISUID und S_ISGID gelöscht werden, wenn der Besitzer oder die Gruppe einer ausführbaren Datei von einem nicht privilegierten Benutzer geändert wird

Warum die Modusbits S_ISUID und S_ISGID gelöscht werden, wenn der Besitzer oder die Gruppe einer ausführbaren Datei von einem nicht privilegierten Benutzer geändert wird

manIch habe die Seite von gelesen chown. Ich verstehe nicht, warum S_ISUIDund S_ISGIDder Modus gelöscht werden sollten, wenn die Funktion erfolgreich zurückgegeben wird.

Antwort1

Ich glaube, Sie verweisen auf Folgendes aus der Manpage:

Wenn der Besitzer oder die Gruppe einer ausführbaren Datei von einem nicht privilegierten Benutzer geändert wird, werden die Modusbits S_ISUID und S_ISGID gelöscht.

Warum werden sie jetzt gelöscht? Sie sehen, sie werden nur gelöscht, wennausführbarDatei. Denn wenn eines der Bits (SUID/SGID) gesetzt ist, kann der nicht privilegierte Benutzer die Datei als neuer Besitzer der Datei ausführen. Das wäre ein großes Sicherheitsverstoß.

Antwort2

Ich glaube, Sie haben es falsch gelesen man 2 chown:Dumüssen S_ISUIDund nicht gelöscht werden S_ISGID, sie werden automatisch gelöscht, wenn Sie diese Funktion als nicht privilegierter Benutzer verwenden. Wenn Ihr Programm als ausgeführt wird, roothängt das Verhalten (unter Linux) von der Kernelversion ab.

Wenn die Bits gesetzt werden müssen, wenden Sie sie einfach erneut an (vorausgesetzt, das Konto, das versucht, sie zu setzen, verfügt über die entsprechenden Berechtigungen).

Aus der Manpage:

  When  the  owner  or  group  of  an  executable file are changed by an
  unprivileged user the S_ISUID  and  S_ISGID  mode  bits  are  cleared.
  POSIX  does not specify whether this also should happen when root does
  the chown(); the Linux behavior depends on  the  kernel  version.   In
  case  of  a non-group-executable file (i.e., one for which the S_IXGRP
  bit is not set) the S_ISGID bit indicates mandatory  locking,  and  is
  not cleared by a chown().

verwandte Informationen