外部依存関係をインストールするスクリプト(実際にはスクリプトと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コマンドが追加するユーザーを知ることができます。