(10 risposte)
Chiuso 6 anni fa.
Voglio assicurarmi che il mio programma possa essere eseguito solo dall'utente xyz
usando il privilegio di root. Per fare ciò, ho impostato il bit setuid con:
chmod u+s program1.sh
ls -l program1.sh
rwsr-x--- 1 root house 1299 May 15 23:54 program1.sh
Inoltre, ho aggiunto l'utente xyz
alla house
gruppo in modo che solo xyz
e root può eseguire program1.sh.
Nel programma1.sh c'è
id -u
in modo che possa mostrarmi l'ID effettivo.
Esecuzione di program1.sh
come root, mostra root
. Ma in esecuzione con xyz
account, mostra xyz
. Sembra che non sia stato eseguito con il privilegio di root. Non so cosa c'è che non va qui.
Risposta accettata:
Quando si eseguono script di shell che hanno il bit setuid (ad esempio, perms di rwsr-xr-x), gli script vengono eseguiti come l'utente che li esegue, non come l'utente che li possiede. Ciò è contrario al modo in cui setuid viene gestito per i binari (ad es. /usr/bin/passwd), che vengono eseguiti come l'utente che li possiede, indipendentemente dall'utente che li esegue.
Controlla questa pagina:https://access.redhat.com/site/solutions/124693
Questa è una misura di sicurezza adottata dal sistema operativo. Dovresti usare il tuo script con sudo invece.
Se hai davvero bisogno di usare setuid o il tuo script puoi creare un binario che farà il lavoro. Crea un nuovo file “programma.c” e copia il seguente codice:
#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;
}
Compila ed esegui il codice usando i seguenti comandi:
$ gcc program.c -o program
$ sudo chown root.root program
$ sudo chmod 4755 program
$ ./program
In questo modo funzionerà. Il setuid funziona per il file compilato e questo file può eseguire altri file come root.