¿Por qué el bit suid no está configurado después de la modificación del archivo?

¿Por qué el bit suid no está configurado después de la modificación del archivo?

Tengo un archivo (s|g)uid que se puede escribir en todo el mundo:

ls -lh suid_bin.sh
-rwsr-srwx 1 root root 168 mai   23 16:46 suid_bin.sh

ha iniciado sesión con una cuenta de usuario no root. Utilizo vi (u otro editor) para modificar "suid_bin.sh". Después de guardar el nuevo contenido, los bits (s|g)uid se desarman:

ls -lh suid_bin.sh 
-rwxr-xrwx 1 root root 168 mai   23 16:46 suid_bin.sh

¿Por qué? ¿Hay alguna manera de conservar los bits fluidos (s|g) después de la modificación?

Respuesta1

Los permisos de Unix permiten escribir en un archivo si accidentalmente alguien establece un bit de escritura mundial o de grupo en un archivo setuid, pero no permiten que extraños cambien los ID de propietario y grupo de dichos archivos.

Entonces, después de la modificación, el kernel elimina los bits setuid/setgid del archivo para garantizar que no se haya escrito ningún código malicioso en el archivo.

El usuario root, por supuesto, puede restaurar el bit setuid, pero el usuario normal, si por error de alguien obtuvo acceso de escritura al ejecutable privilegiado, no podrá explotarlo.

Y, conociendo partes del kernel en esa área, no estoy seguro de que se pueda desactivar sin editar el código fuente del kernel y volver a compilarlo.

Tenga en cuenta que los scripts setuid en Linux no obtienen el estado setuid después de la ejecución porque en realidad el kernel inicia el intérprete del script, sin estado setuid, con la ruta completa al script como último argumento analizado, y luego el intérprete lee el script como un archivo normal. Pero esto puede variar en otros sistemas Unix.

información relacionada