在我的单用户工作站上,我进行了配置sudoers(5)
,以便无需密码即可执行某些命令。具体来说,这是一个条目的示例:
$ cat /etc/sudoers.d/apt-get
my_user_name ALL=(ALL) NOPASSWD: /usr/bin/apt-get
但是,我需要运行此命令sudo -i apt-get install
(即和选项-i
)。
是否可以以某种方式修改配置文件,以便即使我简单地运行-i
(即,sudo
sudo apt-get install
没有 -i
)?
(操作系统是 Ubuntu 14.04,但我认为这个问题并不特定于特定的 Linux 发行版。)
答案1
答案2
我假设您的交互式根外壳是/bin/bash
(但要注意,也许您/etc/passwd
设置了其他内容,例如/bin/dash
)。
那么您真正想要的是从 运行 root 登录 shell sudo
。正如我所说,我相信您通常不需要它。您还可以通过文件取消设置一些环境变量,或将它们设置为适当的默认值/etc/sudoers.d/apt-get
。
但调用 Bash说
-l
使该 shell 的行为就像是通过登录直接调用的一样。当 shell 是交互式的时,这相当于使用 启动登录 shell
exec -l bash
。当 shell 非交互式时,将执行登录 shell 启动文件。exec bash -l
或者exec bash --login
将用 Bash 登录 shell 替换当前 shell。有关登录 shell 的特殊行为的描述,请参阅 Bash 启动文件。
然后
登录 shell 的参数零的第一个字符是
-
,或者使用该--login
选项调用。
因此,您可能可以编写一个 shell 脚本(或 C 语言的包装程序)来调用bash
或-l
,--login
并在/etc/sudoers.d/apt-get
也许跑步/bin/bash -l -c "/usr/bin/apt-get $*"
就足够了。
另请注意,sudoers(5)
提到env_reset
和env_keep
也许您只想删除一些环境变量,例如DBUS_SESSION_BUS_ADDRESS
......
(我可能是错的,从来没有尝试过这个)