我使用一个用于提升权限的程序( yay
archlinux 中的 , ) 。sudo
但是,如果它没有找到sudo
,它将切换到su
,这就是我想要它做的,因为我的用户不是 sudoer,但我确实安装了(因为即使运行时sudo
还有另一个程序需要安装sudo
根,我知道这很愚蠢)。
现在的问题是,我怎样才能运行这个程序(yay
),同时让它认为sudo
不存在?
请注意,这yay
是一个包管理器(AUR 助手),它还从源代码构建和安装包,出于安全原因,您不能以 root 身份进行这些构建,这很公平。
另请注意,我已经在's repo 上打开了一个问题yay
,但是虽然这个问题正在修复,但我希望有一个替代解决方案。
在不修改自身的情况下,我能想到的唯一解决方法
yay
是拥有一个包装脚本,您将以 root 身份启动该脚本,并sudo
在启动前将其暂时删除yay
:不过,这会要求您输入两次 root 密码。另一种选择是以 root 身份运行脚本,然后在脚本中
su
用于切换到另一个用户:然后,您可以将其运行为:
这在您的情况下应该是安全的,因为您实际上并没有使用
sudo
,但我仍然会制作一份副本,/sbin/sudo
以便如果出现问题,您可以轻松地将其取回,以防万一。绕过此问题的最简单方法是使用该
--sudo=su
选项。tl; dr - 运行
yay --sudo=su -Syu
以达到预期的效果。解释为什么
yay --sudo=su
没有按照您的预期进行如下。问题在于
yay
处理 CLI 参数的方式。从文档:如果没有提供参数
yay -Syu
(完整系统更新),但--sudo=su
算作参数,所以 yay 选择-Y
操作(列出与查询匹配的包,在这种情况下为空,因此命令立即退出)。这是负责的代码:https ://github.com/Jguer/yay/blob/next/pkg/settings/parser/parser.go#L618