如果使用 root,则忽略 bash 脚本中的 sudo

Mit*_*ril 2 permissions bash root sudo scripts

此问题与 bash 脚本中Ignore sudo不重复


我正在制作一个基于 Ubuntu 14.04 docker 镜像的 docker 镜像。如您所知,root 是 docker 中的默认用户。当我运行 bash 脚本来安装软件时,得到

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
Run Code Online (Sandbox Code Playgroud)

我试过了chown root /usr/lib/sudo/sudoers.so,但它不起作用。


这种行为很奇怪:

ls    (everyone can do this)
sudo ls   (you can't do this even if you are root)
Run Code Online (Sandbox Code Playgroud)

因为我正在构建一个docker镜像,所以我不想安装不相关的包来让sudo支持root。但是sudo在一些 bash 脚本中有一堆,所以简单地替换sudo为空可能不是一个好的选择。

所以我想知道是否有什么方法可以只sudo在你是 root 时忽略

mur*_*uru 5

在你的脚本中,一开始,定义sudo为一个函数,sudo如果需要,它会调用实际:

sudo ()
{
    [[ $EUID = 0 ]] || set -- command sudo "$@"
    "$@"
}
Run Code Online (Sandbox Code Playgroud)

command sudo foo bar告诉 bash 使用实际sudo命令而不是函数或别名。$EUID是有效的用户 ID,可能与 不同$UID