运行命令,同时让它认为“sudo”不存在

运行命令,同时让它认为“sudo”不存在

我使用一个程序(yay在 archlinux 中)用于sudo提升权限。但是,如果它没有找到sudo,它将切换到su,这就是我想要它做的,因为我的用户不是 sudoer,但我确实已经安装了(因为即使运行时还有sudo另一个程序需要安装) sudoroot,我知道这很愚蠢)。

现在的问题是,我怎样才能运行这个程序(yay),同时让它认为sudo不存在?

请注意,它yay是一个包管理器(AUR 帮助程序),它还从源代码构建和安装包,出于安全原因,您不能以 root 身份进行这些构建,这很公平。

另请注意,我已经提出了一个问题这里onyay的存储库,但在修复该问题的同时,我希望有一个替代解决方案。

答案1

我能想到的唯一不修改yay自身的解决方法是使用一个包装脚本,您将以 root 身份启动该脚本,并sudo在启动之前暂时删除该脚本yay

#!/bin/sh

su -c "mv /sbin/sudo /sbin/sudo.old" && yay "$@"
su -c "mv /sbin/sudo.old /sbin/sudo"

不过,这会要求您输入两次 root 密码。另一种选择是以 root 身份运行脚本,然后在脚本中使用su切换到另一个用户:

#!/bin/sh

normalUser="$1"
shift

mv /sbin/sudo /sbin/sudo.old &&
su -c "yay $@" $normalUser
mv /sbin/sudo.old /sbin/sudo

然后您可以将其运行为:

su -c "/path/to/yay.wrapper.sh adrin $yayArguments" 

对于您的情况来说,这应该是安全的,因为您实际上并未使用sudo,但我仍然会制作一份副本,/sbin/sudo以便在出现问题时您可以轻松取回它,以防万一。

答案2

绕过此问题的最简单方法是使用该--sudo=su选项。

太长了;博士- 运行yay --sudo=su -Syu即可达到预期效果。

下面解释了为什么yay --sudo=su没有按照您的预期进行。


yay该问题是由于处理 CLI 参数的方式造成的。来自文档:

If no arguments are provided 'yay -Syu' will be performed.

If no operation is selected -Y will be assumed.

如果未提供参数,yay -Syu则执行(完整系统更新),但--sudo=su计为参数,因此 yay 选择操作-Y(列出与查询匹配的包,在本例中为空,因此命令立即退出)。

这是负责的代码段:https://github.com/Jguer/yay/blob/next/pkg/settings/parser/parser.go#L618

相关内容