
我使用一個程式(yay
在 archlinux 中)用於sudo
提升權限。但是,如果它找不到sudo
,它將切換到su
,這就是我想要它做的,因為我的用戶不是 sudoer,但我確實已經sudo
安裝了(因為即使運行時還有另一個程式需要sudo
安裝) root,我知道這很愚蠢)。
現在的問題是,我怎麼能運行這個程式(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