アカウント名:
パスワード:
pledge は流行ると思いますか?
まず pledge がどういうものかを説明します。プログラムって、最初は設定ファイルを読んだり一時ファイルを開いたりするけど、その後メインループに入ったら権限を殆ど必要としないことが多いですよね。だから、 コマンドラインオプション等に応じて [openbsd.org] メインループ直前で権限を落とすという仕組みなんです。
だから最初は tame (調教する [openbsd.org]) という名前の関数でした。獰猛な野獣 (いったん任意のコマンド実行を許す脆弱性があると何でもできちゃう) を手なずける (脆弱性があっても殆どのシステムコールが実行不可能) という感じですね。
現在では主語が変
(完全に余談です)
従来どおりのアクセス制限の範疇になりますが、Windowsでも「落とす」方向の作りは珍しくありません。Windowsサービスで可能です。
具体的にはこういう風にします。サービスの実行ユーザーをLocalSystemアカウント(これは例えるならroot、強い権限を持っている)にします。このプロセスから、弱い権限のアカウントを実引数としてImpersonate系関数(seteuid/setegidで一時的に落とす感じ)やCreateProcessAsUser関数(forkしてsetuid/setgidしてexecする感じ)を呼び出します。
Impersonateはseteuid/setegid同様に戻り値で成功したことの確認が必須です。一方、CreateProcessAsUserは失敗したらプロセスの作成が行われないので、最悪エラーチェックなしでも幾分安全と言えると思います(もちろん、しなくていいとは言っていない)。
#seteuid/setegidやsetuid/setgidでの例えが正しいのか不安。
IISがやっているのがまさにそれですね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
クラックを法規制強化で止められると思ってる奴は頭がおかしい -- あるアレゲ人
pledge (スコア:5, 興味深い)
pledge は流行ると思いますか?
まず pledge がどういうものかを説明します。
プログラムって、最初は設定ファイルを読んだり一時ファイルを開いたりするけど、
その後メインループに入ったら権限を殆ど必要としないことが多いですよね。
だから、 コマンドラインオプション等に応じて [openbsd.org]
メインループ直前で権限を落とすという仕組みなんです。
だから最初は tame (調教する [openbsd.org]) という名前の関数でした。
獰猛な野獣 (いったん任意のコマンド実行を許す脆弱性があると何でもできちゃう) を
手なずける (脆弱性があっても殆どのシステムコールが実行不可能) という感じですね。
現在では主語が変
Re: (スコア:0)
> プログラムの途中で権限を落としていくというのは、前例があるんでしょうか。
「落とす」ではなくて、プログラム上の必要な箇所だけ「上げる」というのは、Winodws NTがそうなってますね。
基本ポリシーとして Unix (TrustedUnix系を除く) は、全権限を持つものを根にして、子供が権限を落としていくという方法ですけど Windows は、全く権限の無い状態から、必要な箇所だけ認証して権限を上げるという方向です。
旧Unix 的な方式では、子供の不具合で親にロールバックした場合に権限が上がってしまうというアーキテクチャとしての欠陥があるので Windows 型の方式になった TrustedUnix というのが出てきたわけです。
Re:pledge (スコア:1)
(完全に余談です)
従来どおりのアクセス制限の範疇になりますが、Windowsでも「落とす」方向の作りは珍しくありません。Windowsサービスで可能です。
具体的にはこういう風にします。サービスの実行ユーザーをLocalSystemアカウント(これは例えるならroot、強い権限を持っている)にします。このプロセスから、弱い権限のアカウントを実引数としてImpersonate系関数(seteuid/setegidで一時的に落とす感じ)やCreateProcessAsUser関数(forkしてsetuid/setgidしてexecする感じ)を呼び出します。
Impersonateはseteuid/setegid同様に戻り値で成功したことの確認が必須です。一方、CreateProcessAsUserは失敗したらプロセスの作成が行われないので、最悪エラーチェックなしでも幾分安全と言えると思います(もちろん、しなくていいとは言っていない)。
#seteuid/setegidやsetuid/setgidでの例えが正しいのか不安。
Re: (スコア:0)
IISがやっているのがまさにそれですね。