su e sudo in uno script di shell
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
)
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