GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿por qué no funciona Setuid?

Esta pregunta ya tiene respuestas aquí :Permitir setuid en scripts de shell

(10 respuestas)
Cerrado hace 6 años.

Quiero asegurarme de que mi programa solo pueda ser ejecutado por el usuario xyz utilizando el privilegio de root. Para hacer esto, configuro el bit setuid con:

chmod u+s program1.sh
ls -l program1.sh
rwsr-x--- 1 root house 1299 May 15 23:54 program1.sh

Además, agregué al usuario xyz a la house grupo para que solo xyz y root puede ejecutar program1.sh.

En program1.sh hay

id -u

para que me muestre el ID efectivo.

Ejecutando program1.sh como root, muestra root . Pero corriendo con el xyz cuenta, muestra xyz . Parece que no se ejecutó con privilegios de root. No sé qué está mal aquí.

Respuesta aceptada:

Al ejecutar secuencias de comandos de shell que tienen el bit setuid (por ejemplo, permisos de rwsr-xr-x), las secuencias de comandos se ejecutan como el usuario que las ejecuta, no como el usuario que las posee. Esto es contrario a cómo se maneja setuid para los archivos binarios (por ejemplo, /usr/bin/passwd), que se ejecutan como el usuario que los posee, independientemente del usuario que los ejecute.

Consulte esta página:https://access.redhat.com/site/solutions/124693

Esta es una medida de seguridad tomada por el sistema operativo. Deberías usar tu script con sudo en su lugar.

Si realmente necesita usar setuid en su script, puede crear un binario que haga el trabajo. Cree un nuevo archivo “program.c” y copie el siguiente código:

   #include <stdio.h>
   #include <stdlib.h>
   #include <sys/types.h>
   #include <unistd.h>
     
   int main()
   {
     setuid(0);
     system("./program.sh"); #This line is dangerous: It allows an attacker to execute arbitrary code on your machine (even by accident).
     return 0;
   }

Compile y ejecute el código usando los siguientes comandos:

$ gcc program.c -o program
$ sudo chown root.root program
$ sudo chmod 4755 program
$ ./program

De esta manera funcionará. El setuid funciona para el archivo compilado, y este archivo puede ejecutar otros archivos como root.


Linux
  1. ¿Por qué find -exec mv {} ./target/ + no funciona?

  2. ¿Por qué Tomcat funciona con el puerto 8080 pero no con el 80?

  3. ¿Por qué no funciona la edición de javascript en Chrome Developer Tools?

  4. ¿Por qué 'dd' no funciona para crear un USB de arranque?

  5. ¿Por qué el puente de Linux no funciona?

¿Por qué la expresión regular funciona en X pero no en Y?

Linux:¿por qué usamos Su y no solo Su?

Linux – Arch Linux:¿Pacman no funciona al hacer chroot?

Linux – ¿Por qué Locale Es_mx funciona pero no Es?

Linux:¿por qué Rsync en Linux no conserva todas las marcas de tiempo (hora de creación)?

¿Cómo funciona el intercambio de memoria en Linux?