スクリプトがsudoingを実行するのを防ぐ

スクリプトがsudoingを実行するのを防ぐ

2日ごとにユーティリティを実行するスクリプトがあります。このユーティリティは私のシステムでいくつかのことをしました。非常によく知られ、広く使用されているオープンソースソフトウェアです。

#!/usr/bin/env bash

#...do stuff here
utility

時々(常にそうではない)、utility作業を完了するにはパスワードを入力する必要があります。私は実行を見なかったし、utility何の結果も見なかった1>/dev/null。だから私はすべての試みが自動的に失敗したいとutility思いますsudo。後で手動で実行して、スーパーユーザーアクセスが必要なタスクを確認できます。

問題は、これが私がsudoしているスクリプトではありませんが、定期的に更新されるのでutility編集utilityしたくないということです。 SUDO_ASKPASSを役に立たないように設定するsudoと有望に-A見えますがutilityutilityマニュアルページやオンラインドキュメントにも「sudoブロック」の方法はなく、Googleで「システム全体のsudoブロック」を検索したことがありません。

私はこれを使うつもりですfake-sudo-test.bash

#!/usr/bin/env bash

FAKE_SUDO="/usr/local/bin/sudo"
echo "echo 'no sudo for you $0' && exit 1" > $FAKE_SUDO
chmod u+x $FAKE_SUDO
sudo echo "I got superuser access"
\rm $FAKE_SUDO

私の$ PATH/usr/local/binの前に/usr/bin

より良い方法を知っていますか?

PS: utilityはいbrew、macOSのHomebrandパッケージマネージャです。私はbrew upgrade問題のパッケージマネージャを使用しています。質問をもっと一般的なものにすることで、もっと役に立つと思います。

$ sudo -V
Sudo version 1.8.17p1
    Sudoers policy plugin version 1.8.17p1
    Sudoers file grammar version 45
    Sudoers I/O plugin version 1.8.17p1

ベストアンサー1

Linuxでは、このフラグを有効にして、プロセスおよびここで開始された他のすべてのプロセスに対するsetuidビットの影響を無効にすることができますno_new_privs(参考文献を参照prctl(2))。シェルスクリプトでは、setprivパッケージ内のユーティリティを使用して次のことができますutil-linux

$ setpriv --no-new-privs sudo -v
sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?

したがって、上記の騒々しいエラーメッセージに耐えることができる限り、スクリプトを修正して代わりにsetpriv --no-new-privs utility実行すると、アクションが実行されます。utility

brew(残念ながら、これはmacOSでは機能しないかもしれませんが、他の人には役に立つかもしれないと言いました。)

おすすめ記事