特定のユーザーがsudoのみを使用できるようにしたいと思います/sbin/iptables
。
iptablesを設定するbashスクリプトがあります。問題は、これを/sbin/iptables
sudo対応に設定するだけでは十分ではないということです。スクリプト自体もsudo可能でなければなりません。
問題は、このファイルをユーザーが編集できる(設定を変更できる)、rootですべてのコマンドを実行できることです。
この問題を解決する正しい方法は何ですか?
答え1
2つのアプローチを見ることができます。
ユーザーに無制限の
/sbin/iptables
使用を許可しsudo
(これは危険です。これはユーザーを何とか信頼するという意味です)、ユーザーの権限でスクリプトを実行します。このスクリプトは必要sudo
に応じて呼び出されます。/sbin/iptables
これは最終的に定期的にいくつかのパスワードを入力する必要があるため、スクリプトがすばやく実行されると仮定します。- 利点:スクリプトへの信頼は必要ありません。
- 欠点:すでに述べたように、
/sbin/iptables
ユーザーに無制限のアクセスを提供する危険性があります。
スクリプトを呼び出さなければユーザーを許可しません
sudo
。- 利点:
/sbin/iptables
スクリプトによって使用が制限されます。 - 短所:スクリプトは完璧でなければなりません。
- 利点:
上記の質問に関連して:スクリプト所有者がsayでroot
一般的な権限を持っている場合rwxr-xr-x
、他のユーザーはそれを変更することはできず、実行することができます(最終的にはsudo
より多くの権限を取得する必要があります)。
回避策2の場合、シェルスクリプト(より強力なバイナリ/プログラム)の場合は、スクリプトの実行を変更できる環境変数といくつかの外部要因に注意してください。 sudo構成が潜在的に有害な各変数の定義を正しくリセットしていることを確認してください。
- 1.実際に必要に応じて
設定sudo
できますNOPASSWD
。
答え2
ウィキペディアから:
setuidとsetgid(それぞれ「実行時のユーザーIDの設定」および実行時のグループIDの設定」の略)[1]は、ユーザーが実行可能ファイルの所有者またはグループの権限で実行可能ファイルを実行できるようにするUnixアクセスフラグです。コンピュータシステムのユーザーが一時的に昇格した権限でプログラムを実行して特定のタスクを実行できるようにするために、しばしば使用されます。
これを試してください。
stefan@linux-ulsk:/usr/bin> zypper up
Root privileges are required for updating packages.
linux-ulsk:~ # whereis zypper
zypper: /usr/bin/zypper /usr/bin/X11/zypper /usr/include/zypper /usr/share/zypper /usr/share/man/man8/zypper.8.gz
linux-ulsk:~ # chmod u+s /usr/bin/zypper
linux-ulsk:~ # exit
stefan@linux-ulsk:/usr/bin> zypper up
Retrieving repository ...
以前は不可能だったroot権限なしでzypperを起動できます。
setuidとsetgidに注意してください!いくつかの本の引用:
シェルスクリプトに setuid 権限を付与しないでください。それらを破壊するいくつかの技術が知られている。
答え3
ファイルのグループ所有者を変更し、ユーザーをグループに追加してみることができます。その後、chmod
ファイルにグループ権限を割り当てることで、必要な操作を実行できます。
これは不安定な解決策ですが、うまくいきます。
答え4
あなた(または適切なアカウント)がファイルの所有者であることを確認し、グループではなくあなただけがファイルを書き込むように設定してください。したがって、ユーザーが正しいグループにあると仮定すると、権限は750に似ています。
実行できますがファイルに書き込めない場合は、そのコマンドをsudoリストに安全に追加できます。