私はどのような認証も必要とせず、実行しているユーザーに関係なく、Debianでrootとして実行されるbashスクリプトを作成する方法(可能な場合)を知りたいです。
このファイルはrootユーザーのようにすべてのコマンドを実行しますが、実際のrootユーザーだけが読み書きできます。
、、などswapoff
のコマンドを実行したいので、これが必要ですが、他のアプリケーションを介してパスワードを要求しないようにします。swapon
apt
これらのコマンドは変更される予定です(このルートコマンドは入力ではなくファイルに引数を持ちます)。したがって、セキュリティ関連の問題は心配されませんが、説明は可能です。
答え1
setuid を実行する bash スクリプトを作成できません。ただし、sudo
root権限で実行するには(または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回考えてください。大きな力には大きな責任があります。
答え2
プログラムが常に特定のUIDで実行されるようにする低レベルの方法は、バイナリのsetuidビットです。たとえば、通常の使用で正常に実行されたにもかかわらず、sudo
root権限を取得する方法です。su
しかし、通常、Unixシリーズシステムはsetuidをサポートしていません。スクリプト、望むより:シェルスクリプトでsetuid設定を許可する
sudo
ただし、ユーザーが特定の特定のファイルを適切な権限で実行できるように設定したり、他の同様のツールを設定したりできます。たとえば、次のように、名前付きユーザーが認証なしですべてのパラメータを使用してviceadmin
実行できるようにします。/usr/local/bin/sudoswapon
viceadmin ALL = NOPASSWD:/usr/local/bin/sudoswapon
これで、sudo
権限自体を変更することが含まれるので、これはsudoswapon
シェルスクリプトになる可能性があります。
スクリプトがコマンドライン引数を処理する方法に注意する必要があることは正しいです。みんなシェル言語のトラップが適用されます。幸い、オプションが設定されているsudo
場合は、ほとんどの環境変数がフィルタリングされます。env_reset
答え3
setuidスクリプトは、克服できないセキュリティ上の問題(簡単になりすまし)を引き起こすことがずっと前に認識されたため、IFS
スクリプトを使用しなくなりました。 setuidスクリプトを避けるためにLinuxが変更されました。
sudo
あなたはあなたの願いを実現するために使用することができますNOPASSWD
。読むman sudoers sudo
。