Domanda

Voglio essere in grado di verificare rapidamente se entrambi ho accesso sudo e la mia password è già autenticata. Non sono preoccupato di avere l'accesso sudo specificamente per l'operazione che sto per eseguire, ma sarebbe un bel bonus.

In particolare, ciò che sto cercando di utilizzare per questo è uno script che voglio essere eseguibile da una serie di utenti. Alcuni hanno accesso sudo. Tutti conoscono la password di root.

Quando eseguono il mio script, voglio che utilizzi le autorizzazioni sudo senza richiedere una password, se possibile, e altrimenti tornerò a chiedere la password root (perché potrebbero non avere accesso sudo).

Il mio primo tentativo non funzionante è stato il fork di sudo -S true con STDIN chiuso o la lettura di / dev / null. Ma ciò richiede ancora la password e attende un paio di secondi.

Ho provato diverse altre cose, tra cui aspettare 0.3 secondi per vedere se è riuscito immediatamente, ma tutto ciò che provo finisce per fallire in qualche situazione. (E non perché il mio timeout è troppo breve.) È difficile capire cosa succede, perché non riesco a camminare come faccio normalmente.

Una cosa che so non funziona è chiudere STDIN o collegarlo a una pipe prima di eseguire sudo -S true . Speravo che la richiesta della password fallisse immediatamente, ma richiede e si comporta in modo strano. Penso che potrebbe desiderare un terminale.

È stato utile?

Soluzione

Con le versioni più recenti di sudo c'è un opzione a questo scopo:

sudo -n true

Uso true qui per una no-op, ma puoi usare qualsiasi comando.

Altri suggerimenti

Non so quale sia il motivo ultimo per cui è necessario farlo, ma penso che forse potresti aver bisogno di ripensare qualunque sia il motivo principale. Cercare di fare cose complicate e inusuali con autorizzazioni porta spesso a buchi di sicurezza.

Più specificamente, qualunque cosa stia cercando di fare lo script potrebbe essere fatto meglio con setuid invece che con sudo. (Dovrei anche chiedermi perché così tante persone hanno la password di root. Sudo è lì appositamente per evitare di dare alle persone la password di root.)

getent group admin | grep $particular_user

Puoi usare whoami per ottenere l'utente corrente.

Modifica: ma questo non ti aiuta a trovare se sei ancora autorizzato a fare compiti sudo ... Hmm ..

Esecuzione

sudo -S true < /dev/null &>/dev/null

sembra funzionare, sebbene ritardi per un secondo prima di fallire.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top