これは皆さんのほとんどにとって素朴な話に聞こえると思いますが、私はまだ Linux の初心者なので、どうかご容赦ください。
いくつかのコマンドを自動化するためにバッチ ファイルを作成しようとしています。
それらのコマンドの 1 つは、sudo -i
ルート内のいくつかのファイルにアクセスする必要があるためです。
これまでの私のスクリプトは次のようになります。
#!/bin/bash
sudo -i
cd my-server/bin
./run-server.sh
パスワードのプロンプトが続くことはわかっているのでsudo -i
、スクリプトでそれをエミュレートできますか?
答え1
sudo
スクリプトから を削除し、ユーザーが を使用してスクリプトを呼び出すようにすることができますsudo scriptname
。
sudo -i
スクリプトから行を削除し、次の行に置き換えます。
# Must prefix with sudo when calling script
if ! [[ $(id -u) == 0 ]]; then
echo You must call this script using sudo. Aborting.
exit 99
fi
答え2
もっともな質問です。しかし、現在試みている/考えている方法では、この作業を行わないことを強くお勧めします。この方法を避けるべき理由は、他のユーザー/攻撃者が読み取ることができるテキスト ファイルにパスワードを入力する必要があるためです。このファイルを 600 の権限に設定して、ユーザー (および root) のみが読み取れるようにすることはできますが、スクリプトのサブコマンドがどこかに記録され、潜在的な攻撃者がパスワードを再び利用できる状態になるかどうかはわかりません。本当の質問は、なぜスクリプトで自動的に root としてログインする必要があるのか、ということだと思います。
これは自動化されたプロセスですか、それともスクリプトをそのまま実行したときに表示されるパスワードプロンプトに単純に応答できない他の理由がありますか? 自動化されたプロセスの場合は、単にsudo行を削除し、スクリプト呼び出しをルートユーザーのcronに追加する必要があります。cronジョブの設定方法に関するドキュメントは、Google検索で簡単に入手できますが、これ)
さらに、これは単に別のスクリプトを呼び出すスクリプトです。run-server.sh を root のみが実行できるようにし、 を使用してsudo su
root にログインし、 で実行するようにするとよいでしょう/my-server/bin/run-server.sh
。繰り返しますが、スケジュールに従って自動化する必要がある場合は、これを root の cron に追加できます。
警告:これをスクリプト化しないでください。特にコマンドラインに入力しないでください(ログに記録されます)
echo 'PASSWORD' | sudo -S /my-server/bin/run-server.sh