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)

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top