これはハッシュ爆発を実行する方法の完全な問題ではありません。スクリプト。
この場合、そのu+s
権限がある(必ずしもそうではない)ハッシュ爆発スクリプトがあります。代わりに、インタプリタにはあり、u+s
スクリプトはそのインタプリタを指定します#!/path/to/interpreter
。
Mac OSでは、この場合は指定されたインタプリタそれ自体暗黙の setuid が付与されていません。私自身直接実行するのと同様に、許可ビットです。実際の実効ユーザーIDは、ハッシュバンクスクリプトを実行しているユーザーのIDです。
解決策はありますか?通訳者の再実行を含めませんか?
ジョブを再実行します。
Kazs-Mac-Pro:txr kaz$ uname -a Darwin Kazs-Mac-Pro.local 11.0.0 Darwin カーネルバージョン 11.0.0: 2011 年 4 月 8 日金曜日 20:29:42 PDT ルート: xnu-1699.22.36~1/RELEASE_X86_64 x86_64 Kazs-Mac-Pro:txr kaz$ 猫 setuid.tl #!./txr --reexec (入力行 `gids:@(getegid)@(getgid)`) (入力行 `uids:@(geteuid)@(getuid)`) (入力行 `groups:@(getgroups)`) (seteuid 0);;できない場合は投げる Kazs-Mac-Pro:txr kaz$ ls -l txr setuid.tl -rwsr-xr-x 1ルートチャクラ163 5月5日、15:18 setuid.tl -rwsr-xr-x 1 ルートチャクラ 1334500 5月5日 15:17 txr Kazs-Mac-Pro:txr kaz$ ./setuid.tl 行数: 20 20 UID: 0 501 グループ:20 402 401 12 33 61 79 80 81 98 100 204
することは--reexec
呼び出しプログラムexecvp
のパス名と--reexec
、 poof, setuid 権限が戻ってきただけです。しかし、醜いです。
そうでない場合、--rexec
動作は次のようになります。
Kazs-Mac-Pro:txr kaz$ ./setuid.tl 行数: 20 20 ユーザーID:501 501 グループ:20 402 401 12 33 61 79 80 81 98 100 204 ./txr: 未処理のシステムエラータイプ例外: ./txr: seteuid 失敗: 1/"操作は許可されません" ./txr: ./setuid.tl:4 フォーム評価中 (seteuid 0)
(u+s
システムの観点からは、スクリプトの内容は関係ありません。通訳者はスクリプトの所有権と組み合わせてスクリプト setuid を実行するか、権限を永久に削除して実行するかを決定します。もちろん、タスクのインタプリタ私はこれらのタスクを実行し、実行が要求されたすべてのコードに盲目的に高い権限を与えることを知らず、setuidを使用したくありません。
答え1
セキュリティ上の理由から、ほとんどのUnixバリアントはスクリプトでsetuidを無効にします。詳細については、次を参照してください。シェルスクリプトでsetuid設定を許可する
以前のバージョンのOS Xにはsetuidスクリプトを許可する設定がありましたがsysctl kernl.sugid_scripts=1
、10.9 では文書は表示されません。。まだ存在するかどうかはわかりませんが、文書化されておらず、まだ存在する場合は安全かどうかわかりません。
setuidスクリプトを実行する一般的な方法はを使用することですsudo
。これは、setuidスクリプトのいくつかのセキュリティ問題、特に環境クリーンアップを解決することができます。 sudoルールを追加します(visudo
sudo config編集を実行)。
ALL ALL = (target_user : target_group) /path/to/script
これにより、誰でも(すべてのパラメータを使用して)実行できますsudo -u target_user -g target_group /path/to/script …
。最初の項目をメンバーにのみ許可ALL
に置き換えます。%original_group
origininal_group
これを透明にするには、sudo
必要に応じて呼び出されるラッパースクリプトを作成します。
#!/bin/sh
exec sudo -u target_user -g target_group /path/to/script "$@"