6

実行にroot権限を必要とするシェルスクリプト(bashではなく/ bin / sh)があります。

通常のユーザーが実行している場合は、rootアクセスを取得して自分自身を再実行するために、ユーザーにパスワードを要求する必要があります。

現在、次のコードを使用しています。

if [ $(id -u) -ne 0 ]; then su root -- $0 $@ ; ... fi

これは問題なく動作しますが、UbuntuのようにrootパスワードがまったくないOSもあります。一方、多くのシステムはroot権限にsudoを使用します。

問題は、スクリプトがユーザーにパスワードの入力を要求しすぎるかどうかをどのように検出できるかということです(たとえばsu、失敗した場合はパスワードを入力してください-run )。sudosudosu

4

6 に答える 6

6

すべきではありません。スクリプトにroot権限が必要な場合は、rootとして実行する必要があります。su、sudo、またはその他のメカニズムを使用して、ユーザーがそれをどのように達成するかはユーザーの仕事です。

セキュリティの問題に関心があり、rootからすべてを実行したくない場合は、それらの部分のroot権限を削除できます。

于 2010-10-04T22:01:21.187 に答える
3

これを行うための防弾の方法はありません。どのディストリビューションでも、任意の方法でファイルを配置できるからです。たとえば、DebianとUbuntuは、システムファイルをRedHat以外のディレクトリに配置することがよくあります。インストールされているOSのスクリプトをカスタマイズする方がはるかに簡単です。

于 2010-10-04T15:13:08.003 に答える
2

/ etc / sudoersで、sudoのパスワードを必要としないようにアカウントを設定できます。

yourusername ALL=(ALL) NOPASSWD: ALL

それをしたくない場合は、rootとしてスクリプトを実行するように強制することができます。シェルスクリプトの先頭に次のようなものを追加します。

if [ "$UID" -ne 0 ]; then
    echo "You must be root to run this script"
    exit 1
fi

このようにして、ユーザーは選択した方法(suまたはsudo)でrootになることができます。

于 2010-10-04T15:06:11.583 に答える
1

このファイルからもう1つの.shファイルを作成し、次の.shように元のファイルを呼び出します-

su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh
于 2017-06-08T12:05:31.030 に答える
0

sudoインストールされているかどうかを確認します

SU='su'
which sudo > /dev/null && SU='sudo'
于 2010-10-04T15:14:54.657 に答える
0

これはあなたの質問に完全には答えませんが、以下を使用してsudoパッケージがインストールされているかどうかを確認できることに注意してください。

Debianベースのシステム:

dpkg -s sudo

RPMベースのシステム:

rpm -q sudo
于 2010-10-04T15:29:53.570 に答える