Domanda

C'è uno script di shell (/ bin / sh, non bash) che richiede i permessi di root per l'esecuzione.

Se è stato eseguito da un utente normale dovrebbe chiedere all'utente una password per ottenere l'accesso come root ed eseguire di sé.

Ora si utilizza il seguente codice:

if [ $(id -u) -ne 0 ]; then su root -- $0 $@ ; ... fi

Questo funziona bene, ma ci sono alcuni OS come Ubuntu che non ha password di root a tutti. D'altra parte, un sacco di sistemi di usare sudo per i permessi di root.

La domanda è:. Come può lo script di rilevare se utilizzare o su sudo senza chiedere all'utente di inserire troppe password (ad esempio inserire la password sudo, se non riesce - run su)

È stato utile?

Soluzione

Non c'è un modo a prova di proiettile di fare questo, perché qualsiasi distribuzione può porre i file in alcun modo che vuole. Debian e Ubuntu spesso posto i file di sistema in directory diverse da Red Hat, per esempio. E 'molto più facile da personalizzare la sceneggiatura per il sistema operativo è installato su.

Altri suggerimenti

Non dovrebbe. Se script richiede i privilegi di root, dovrebbe essere eseguito come root. E 'di business dell'utente come ha intenzione di realizzare questo -. Usando su, sudo o qualche altro meccanismo

Se siete interessati con problemi di sicurezza e non si vuole fare tutto dalla radice, è possibile eliminare i privilegi di root per quelle parti.

È possibile impostare l'account non ha bisogno di una password per sudo in / etc / sudoers:

yourusername ALL=(ALL) NOPASSWD: ALL

Se non si vuole fare questo, si può costringerli a eseguire lo script come root. Aggiungere qualcosa di simile per la parte superiore del vostro script di shell:

if [ "$UID" -ne 0 ]; then
    echo "You must be root to run this script"
    exit 1
fi

In questo modo, l'utente può arrivare a essere radice però scelgono (su o sudo).

Creare un file più Sh da questo file chiamare il file .sh originale come -

su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh

Verificare se è installato sudo

SU='su'
which sudo > /dev/null && SU='sudo'

Anche se questo non risponde pienamente alla tua domanda, vale la pena di notare che è possibile controllare se il pacchetto sudo è installato utilizzando la seguente:

sistemi basati su Debian:

dpkg -s sudo

sistemi basati su RPM:

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