Por qué los bits de modo S_ISUID y S_ISGID se borran cuando un usuario sin privilegios cambia el propietario o el grupo de un archivo ejecutable

Por qué los bits de modo S_ISUID y S_ISGID se borran cuando un usuario sin privilegios cambia el propietario o el grupo de un archivo ejecutable

Estaba leyendo la manpágina de chown. No entiendo por qué S_ISUIDel S_ISGIDmodo debe borrarse cuando la función regresa correctamente.

Respuesta1

Creo que estás señalando esto desde la página de manual:

Cuando un usuario sin privilegios cambia el propietario o grupo de un archivo ejecutable, los bits de modo S_ISUID y S_ISGID se borran.

Entonces, ¿por qué están absueltos ahora? Verá, solo se borran en caso de unaejecutablearchivo. Porque cuando se establece uno de los bits (SUID/SGID), el usuario sin privilegios puede ejecutar el archivo como el nuevo propietario del archivo. Sería una enorme brecha de seguridad.

Respuesta2

Creo que has leído mal man 2 chown:no es necesario borrar S_ISUIDy S_ISGID, se borrarán automáticamente cuando utilice esa función como usuario sin privilegios. Si su programa se está ejecutando, rootel comportamiento (en Linux) depende de la versión del kernel.

Si necesita configurar los bits, simplemente vuelva a aplicarlos (asumiendo que la cuenta que intenta configurarlos tiene los privilegios para hacerlo).

Desde la página de manual:

  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().

información relacionada