`sudo` が存在しないと認識させながらコマンドを実行する

`sudo` が存在しないと認識させながらコマンドを実行する

私は権限を昇格するために を使用するプログラム ( yayArchLinux では )を使用していますsudo。ただし、 が見つからない場合はsudoに切り替わりますsu。これは、ユーザーが sudoer ではないため、私が望んでいる動作ですが、 はsudoインストールされています ( sudoroot として実行する場合でもインストールする必要がある別のプログラムがあるため、これはばかげていることはわかっています)。

ここで問題となるのは、このプログラム ( ) を、存在しないyayと思わせながら実行するにはどうすればよいかということです。sudo

は、ソースからパッケージをビルドしてインストールするパッケージ マネージャー (AUR ヘルパー) であり、セキュリティ上の理由から、root としてこれらのビルドを実行することはできないことに注意してくださいyay。これは当然のことです。

また、私はすでに問題を提起していることに注意してくださいここのリポジトリにありyayますが、修正されるまでの間、別の解決策をいただければ幸いです。

答え1

それ自体を変更せずに考えられる唯一の回避策は、yayルートとして起動し、sudo起動前に一時的に削除するラッパー スクリプトを用意することですyay

#!/bin/sh

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

ただし、ルート パスワードを 2 回要求されます。別の方法としては、スクリプトをルートとして実行し、スクリプト内で を使用して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期待どおりに動作しなかった理由については、以下で説明します。


この問題は、CLI 引数の処理方法に起因しますyay。ドキュメントより:

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

関連情報