2日ごとにユーティリティを実行するスクリプトがあります。このユーティリティは私のシステムでいくつかのことをしました。非常によく知られ、広く使用されているオープンソースソフトウェアです。
#!/usr/bin/env bash
#...do stuff here
utility
時々(常にそうではない)、utility
作業を完了するにはパスワードを入力する必要があります。私は実行を見なかったし、utility
何の結果も見なかった1>/dev/null
。だから私はすべての試みが自動的に失敗したいとutility
思いますsudo
。後で手動で実行して、スーパーユーザーアクセスが必要なタスクを確認できます。
問題は、これが私がsudoしているスクリプトではありませんが、定期的に更新されるのでutility
編集utility
したくないということです。 SUDO_ASKPASSを役に立たないように設定するsudo
と有望に-A
見えますがutility
。utility
マニュアルページやオンラインドキュメントにも「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では機能しないかもしれませんが、他の人には役に立つかもしれないと言いました。)