質問
実行にルートアクセス許可を必要とするシェルスクリプト(/bin/sh、bashではなく、sh)があります。
通常のユーザーによって実行された場合は、ユーザーにパスワードを依頼してルートアクセスを取得し、自体を再実行する必要があります。
これで、次のコードを使用します。
if [ $(id -u) -ne 0 ]; then su root -- $0 $@ ; ... fi
それは正常に機能しますが、ルートパスワードがまったくないUbuntuのようなOSがあります。一方、多くのシステムは、ルート許可にSudoを使用しています。
問題は次のとおりです。スクリプトはどのように使用するかを検出できますか su
また sudo
ユーザーにパスワードを入力しすぎるように頼むことなく(例: sudo
パスワードが失敗した場合 - 実行します su
).
解決
これを行うための防弾の方法はありません。なぜなら、どんな配布も望む方法でファイルを敷設できるからです。 DebianとUbuntuは、たとえばRed Hat以外のディレクトリにシステムファイルを配置することがよくあります。インストールされているOSのスクリプトをカスタマイズする方がはるかに簡単です。
他のヒント
そうすべきではありません。スクリプトがルート特権を必要とする場合、ルートとして実行する必要があります。 Su、Sudo、またはその他のメカニズムを使用して、彼がどのようにそれを達成するかはユーザーのビジネスです。
セキュリティの問題に関心があり、ルートからすべてを実行したくない場合は、それらの部分のルート特権を落とすことができます。
/etc /sudoersでsudoのパスワードを必要としないようにアカウントをセットアップできます。
yourusername ALL=(ALL) NOPASSWD: ALL
それをしたくない場合は、スクリプトをルートとして実行するように強制することができます。このようなものをシェルスクリプトの上部に追加します。
if [ "$UID" -ne 0 ]; then
echo "You must be root to run this script"
exit 1
fi
これにより、ユーザーは(suまたはsudo)を選択してもルートになることができます。
このファイルからもう1つの.shファイルを作成してくださいオリジナルに電話してください .sh
のようなファイル -
su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh
かどうかを確認してください sudo
ISTがインストールされています
SU='su'
which sudo > /dev/null && SU='sudo'
これはあなたの質問に完全には答えませんが、以下を使用してsudoパッケージがインストールされているかどうかを確認できることは注目に値します。
Debianベースのシステム:
dpkg -s sudo
RPMベースのシステム:
rpm -q sudo