シェルスクリプトを常にrootとして実行する方法はありますか?

シェルスクリプトを常にrootとして実行する方法はありますか?

私はどのような認証も必要とせず、実行しているユーザーに関係なく、Debianでrootとして実行されるbashスクリプトを作成する方法(可能な場合)を知りたいです。

このファイルはrootユーザーのようにすべてのコマンドを実行しますが、実際のrootユーザーだけが読み書きできます。

、、などswapoffのコマンドを実行したいので、これが必要ですが、他のアプリケーションを介してパスワードを要求しないようにします。swaponapt

これらのコマンドは変更される予定です(このルートコマンドは入力ではなくファイルに引数を持ちます)。したがって、セキュリティ関連の問題は心配されませんが、説明は可能です。

ベストアンサー1

setuid を実行する bash スクリプトを作成できません。ただし、sudoroot権限で実行するには(またはcalifeなどの同様のプログラム)を使用できます。

これを行う2つの基本的な方法があります。

スクリプトが呼び出され、次のことがreset-swap行われるとします。

#!/bin/sh
swapoff /dev/sdb
shred -n0 -z /dev/sdb
mkswap /dev/sdb
swapon /dev/sdb

オプションA:すべてのユーザーがこれらの個々のコマンドを実行できるようにし、前にsudoを付けます。

#!/bin/sh
sudo swapoff /dev/sdb
sudo shred -n0 -z /dev/sdb
sudo mkswap /dev/sdb
sudo swapon /dev/sdb

そして、/etc/sudoers誰もがこれを実行できるように一連の行を追加します。

ALL     ALL = NOPASSWD: /sbin/swapoff /dev/sdb
ALL     ALL = NOPASSWD: shred -n0 -z /dev/sdb
ALL     ALL = NOPASSWD: mkswap /dev/sdb
ALL     ALL = NOPASSWD: swapon /dev/sdb

しかし、誰もが指定されたタスクを安全に実行できますが、スクリプトがそうであるように、それほど独立していない可能性があります。たとえば、mkswap作業する前に、スワップパーティションがマウントされていないことを確認してください。しかし、shredマウントされたスワップパーティションは幸せに消去されます。

したがって、以下を使用することをお勧めします。

オプションB:sudoを使用してスクリプトを実行します。

ALL     ALL = NOPASSWD: /usr/local/bin/reset-swap

sudo reset-swapその後、代わりにとして呼び出すことができますreset-swap。必要に応じて、スクリプトがrootとして実行されていない場合は、プレフィックスを指定せずに実行する独自の権限を増やすことができますsudo

#!/bin/sh
if [ "`id -u`" -ne 0 ]; then
 echo "Switching from `id -un` to root"
 exec sudo "$0"
 exit 99
fi

swapoff /dev/sdb
shred -n0 -z /dev/sdb
mkswap /dev/sdb
swapon /dev/sdb

最後に、sudo講義のいくつかのポイントで終わります。入力する前に2回考えてください。大きな力には大きな責任があります。

おすすめ記事