su et dans un sudo script shell
Question
Il y a un script shell (/ bin / sh, bash pas) qui nécessite des autorisations root pour l'exécution.
Si elle est RAN par un utilisateur normal, il doit demander à l'utilisateur un mot de passe pour obtenir un accès root et se re-exécuter.
Maintenant, il utilise le code suivant:
if [ $(id -u) -ne 0 ]; then su root -- $0 $@ ; ... fi
Cela fonctionne très bien, mais il y a des OS comme Ubuntu qui n'a pas de mot de passe root du tout. D'autre part, beaucoup de systèmes utilisent des autorisations de sudo racine.
La question est:. Comment le script peut détecter si l'utilisation su
ou sudo
sans demander à l'utilisateur d'entrer des mots de passe trop (par exemple entrer le mot de passe de sudo
, si elle échoue - terme su
)
La solution
Il n'y a pas moyen de l'épreuve des balles de le faire, parce que toute distribution peut déposer des fichiers de toute façon qu'il veut. Debian et Ubuntu placent souvent des fichiers système dans des répertoires autres que Red Hat, par exemple. Il est beaucoup plus facile de personnaliser le script pour le système d'exploitation, il est installé.
Autres conseils
Il ne devrait pas. Si script requiert les privilèges root, il doit être exécuté en tant que root. Il est l'affaire comment il va accomplir cela de l'utilisateur -. Utilisant su, ou sudo un autre mécanisme
Si vous êtes concernés par les questions de sécurité et ne veulent pas faire tout de la racine, vous pouvez déposer les privilèges root pour les parties.
Vous pouvez configurer le compte de ne pas besoin d'un mot de passe pour sudo / etc / sudoers:
yourusername ALL=(ALL) NOPASSWD: ALL
Si vous ne voulez pas le faire, vous pouvez les forcer à exécuter le script en tant que root. Ajouter quelque chose comme ça en haut de votre script shell:
if [ "$UID" -ne 0 ]; then
echo "You must be root to run this script"
exit 1
fi
De cette façon, l'utilisateur peut arriver à être cependant ils choisissent racine (su ou sudo).
Créer un fichier plus .sh de ce fichier appelez votre fichier original comme .sh
-
su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh
Vérifiez si sudo
est installé
SU='su'
which sudo > /dev/null && SU='sudo'
Bien que cela ne pas pleinement répondre à votre question, il convient de noter que vous pouvez vérifier si le paquet sudo est installé en utilisant ce qui suit:
systèmes basés sur Debian:
dpkg -s sudo
systèmes à base de RPM:
rpm -q sudo