web-dev-qa-db-fra.com

Ignorer Sudo dans le script bash si vous utilisez root

Cette question ne fait pas double emploi avec Ignore Sudo dans le script bash


Je crée une image de menu fixe à partir de l'image de menu fixe Ubuntu 14.04. Comme vous le savez, root est l’utilisateur par défaut de docker. Quand j’ai exécuté un script bash pour installer un logiciel, j’ai eu

Sudo: error in /etc/Sudo.conf, line 0 while loading plugin `sudoers_policy'
Sudo: /usr/lib/Sudo/sudoers.so must be owned by uid 0
Sudo: fatal error, unable to load plugins

J'ai essayé chown root /usr/lib/Sudo/sudoers.so, mais cela ne fonctionne pas.


Ce comportement est bizarre:

ls    (everyone can do this)
Sudo ls   (you can't do this even if you are root)

Étant donné que je construis une image de menu fixe, je ne souhaite pas installer de packages non corrélés pour que Sudo prenne en charge root. Mais il y a un tas de Sudo dans certains scripts bash, donc remplacer simplement Sudo par empty pourrait ne pas être un bon choix.

Je me demande donc s'il existe un moyen d'ignorer uniquement Sudo lorsque vous êtes root.

1
Mithril

Vers le début, dans vos scripts, définissez Sudo comme une fonction appelant le réel Sudo si nécessaire:

Sudo ()
{
    [[ $EUID = 0 ]] || set -- command Sudo "$@"
    "$@"
}

command Sudo foo bar indique à bash d'utiliser la commande réelle Sudo à la place de fonctions ou d'alias. $EUID est l'ID utilisateur effectif, qui peut être différent de $UID.

1
muru