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.
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
.