Supongo que un archivo ejecutable con el conjunto de bits SetUID debería ejecutarse como su propietario, pero realmente no puedo reproducirlo. Intenté lo siguiente.
$ cat prepare.sh cp / bin / bash. chown root.root bash chmod 4770 bash # verificado $ sudo sh prepare.sh $ ./bash $ id -u 1000 $ salida PS
$ cat test.c
#include <stdio.h>
#include <unistd.h>
int main () {
printf ("% d,% d \ n", getuid (), geteuid ());
devuelve 0;
}
$ gcc -o test test.c
$ chmod 4770 test # verificado
$ sudo chown root.root test
$ ./test
1000,1000
$ # ¿Por qué?
sin embargo
$ su # ./bash # id -u 0 0 # ./prueba 0,0 # salida # salida PS
Nota: El punto de montaje no tiene nosuidni noexecestablecido.
¿Alguien puede explicar por qué no funciona en Ubuntu 16.04 LTS?

sudo? Sin embargo, hay un error o un error tipográfico en el quechmodfalta un nombre de archivo.Respuestas:
Para el ejecutable compilado, de
man 2 chown:Invertir el orden
chownychmodfunciona para mí:fuente
En su primer caso, es Bash a quien no le gusta que se ejecute como setuid.
Ver: Manual de Bash sobre archivos de inicio , también el bit Setuid parece no tener efecto en bash .
En el segundo caso, es el orden de
chmody lochownque importa, como muru ya respondió . Cambiar el propietario restablece el bit setuid.fuente
También podría ser que el sistema de archivos que contiene el ejecutable de prueba se haya montado con la
nosuidopción ; He escuchado que las distribuciones más nuevas lo harán de forma predeterminada para/tmp, y también hay buenos argumentos para aplicarlo/home.nosuidhace que el núcleo ignore los bits setuid y setgid en todos los ejecutables dentro del sistema de archivos. (Lo que no está relacionado que sucede cuando crea un directorio setgid no se ve afectado).fuente