外部依存関係をインストールするスクリプト(実際にはスクリプトとmakefileの組み合わせ)を書いています:apt-get
コマンド、git
クローン、ビルド、インストール、グループへのユーザーの追加、...
これらのスクリプトの操作には、スーパーユーザー権限が必要なものとそうでないものがあります。
これまで、sudoを使用してmakeプロセス全体を実行しましたが、いくつかの欠点があります。
git
クローンroot
を所有者として取得するリポジトリ、つまり、sudo
またはchown
- ユーザーをグループに追加するスクリプトは、
whoami
戻るためにどのユーザーを追加するかを知りませんroot
スーパーユーザーとしてそれを必要とするコマンドのみを実行する最良の方法は何ですか?理想的には、このプロセスではsudo
パスワードを入力する必要がありますが、インストールプロセスの最初の1回だけです。それは最後にそれを忘れますが、それまでずっとそれを保ちます(それは数時間かかることがあります)。
私がオンラインで見つけた解決策は次のとおりです。
sudo -v
スクリプトの冒頭で、しかし、私が正しく理解すれば、これはタイムアウトします。スクリプトが数時間実行される可能性があります- でスクリプトを実行しますが
sudo
、スーパーユーザーを必要としないコマンドはで実行しますsudo -u $(logname) <command>
。これは私が今やっていることですが、それは逆のはずだと感じています。
理想的には、スクリプトで次のことを行います。
- スーパーユーザーの資格情報を要求する
- ログインしたユーザーとして通常のコマンドを実行する
- 手順1で入力した資格情報でsudoコマンドを実行します
sudo -k
スーパーユーザーセッションを閉じる
...またはすべてをルート
—
-Rmano
su $SUDO_USER -c command
として実行し、通常のユーザーとして実行するコマンドに使用します。
SUDO_USER
環境変数をチェックできます。存在する場合、sudoを呼び出すユーザーのユーザー名が含まれます。したがって、(ルートとして)$ SUDO_USER:$ SUDO_GID $ your_filesをchownできます。同様に、これらの変数をチェックして、adduserコマンドが追加するユーザーを知ることができます。