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 nosuid
ni noexec
establecido.
¿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 quechmod
falta un nombre de archivo.Respuestas:
Para el ejecutable compilado, de
man 2 chown
:Invertir el orden
chown
ychmod
funciona 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
chmod
y lochown
que 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
nosuid
opció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
.nosuid
hace 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