GNU/Linux >> Linux Esercitazione >  >> Linux

Linux – Perché Setuid non funziona??

Questa domanda ha già risposte qui :Consenti setuid su script di shell

(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.


Linux
  1. Perché l'espressione regolare funziona in X ma non in Y?

  2. Linux Setuid non funziona?

  3. Linux:perché Rsync su Linux non conserva tutti i timestamp (ora di creazione)?

  4. Perché Tomcat funziona con la porta 8080 ma non con la 80?

  5. Perché Windows non riconosce i file all'interno delle partizioni Linux?

Come funziona la memoria di scambio in Linux?

Perché 'dd' non funziona per la creazione di USB avviabile?

perché il bridge linux non funziona

Perché questa espressione regolare non funziona su Linux?

ZFS sotto Linux, funziona?

Perché usiamo su - e non solo su?