問題タブ [suid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
permissions - OpenBSD で SUID ビットを設定すると、有効で保存された UID が実行可能ファイルの所有者に設定されないのはなぜですか?
Parallels for Mac のゲスト OS として OpenBSD 5.3 の新規インストールを使用しています。
驚いたことに、root が所有し、SUID ビットが設定されたバイナリ ファイルは、SUID が設定されていないかのように UID で実行されます。つまり、UID 1000 がそのようなプログラムを実行すると、プログラムは次の状態で開始されます。
状態ではありません:
予想通り。
これはなぜですか?
問題を見つけた方法に関する詳細は次のとおりです。
さまざまな Unix システムでの setuid の動作を評価するための対話型 C プログラム ( setuid_min.binとしてコンパイル) を作成しました。このプログラムは UID 1000 のホーム ディレクトリのサブディレクトリにあり、sudoコマンドを使用して所有権と SUID を変更します。次に、プログラムが実行され、uidを入力して、プロセスの実際の、有効な、保存された UID を報告します。
上記のsome_pidはsetuid_min.binプロセスの pid であることに注意してください。プログラムは、次のシェル コマンドの出力を報告することによって、実際の UID、有効な UID、および保存された UID を報告します。
my_pidはgetpid()によって報告される pidです。これが当てはまる理由についての私の唯一の推測は、OpenBSD には、setuid_min.binが存在するディレクトリの所有権/アクセス権を使用している、または権限のないユーザーがsudoでファイルのパーミッションを変更します。
php - C ラッパーを使用したスクリプトの setuid
このチュートリアルのような C ラッパーで root 権限を持つ php スクリプトを使用したいだけです。
ls -l :
createConfig.c :
test.php :
index.php :
しかし、ブラウザで index.php を実行すると、次のエラーが発生しました。
ありがとう
c - 「set-user root」プログラムからの root コマンド
「set-user root」プログラムから root コマンドを開始したいので、次の C サンプル プログラムを作成しました。
Debian 6 (64 ビット) でテストしたところ、引数として渡すと、次の場合でも"/bin/sh"
常に が得られることに気付きました。ROOT SHELL
argc == 2
Slackware 14 (32 ビット) では、動作が異なります。
引数として「/usr/bin/dolphin」を指定すると、別の動作もあります。
Debian では動作しません:
Slackware では の場合のみ動作するargc == 2
ため、root で dolphin を起動できません。
なんで?
perl - Debian wheezy で suidperl を有効にする方法は?
root が所有し、setuid を持つ Perl スクリプトがあります。
このスクリプトでは、引数として渡されたファイルの所有者を変更しています。
しかし、このスクリプトを実行すると、
setuid が有効になっている場合、デフォルトで suidperl で実行されるスクリプトを誰かが教えてくれました。
しかし、私の場合はそうではないと思います。
誰でもこの問題で私を助けることができますか? Debian wheezy を使用しています。Perl のバージョンは 5.14.2 です。私は試した
しかし、うまくいきませんでした。
Perl の suid に関連する候補はありませんでした。
これは私のPerlプログラムです
macos - DMG を介して suid ビットが設定された OSX プログラムを配布する方法は?
小さな診断 OSX プログラム (小さなメニュー トレイ アプリ) があり、これを顧客に提供する必要があります。プログラムは dtrace を使用します。そのため、MacOS ディレクトリに、suid ビットが設定され、所有権が root:wheel に設定された補助実行可能ファイルがあります。ヘルパーの唯一の役割は、含まれている dtrace スクリプトを使用して dtrace にすぐに exec() を実行することです。
私の問題は、これを顧客に届ける良い方法がわからないことです。素朴に .zip アーカイブに入れると、すべての特別なアクセス許可が消去されました。
DMG に入れようとすると、root:wheel の所有権が私のもの (ted:staff) にリセットされました。ファイルオブジェクトの所有権設定を尊重し始めるには、DMG で todiskutil
を使用する必要があることがわかりました。enableOwnership
これで、DMG 内で、ヘルパー プログラムに必要な root:wheel および +s suid 権限が設定されていることがわかります。
しかし、アプリ バンドルを DMG からデスクトップにドラッグ アンド ドロップすると、権限が再びリセットされることがわかりました。さらに、DMG からアプリケーションを実行しようとすると、ヘルパー プログラムに suid ビットが設定されていないかのように動作します。
これを少し振り返ると、なぜこれが機能するのかまったくわかりません。開発者がこのように suid ビットを設定したアプリ バンドルを配布できるようにすることは、厄介で非常に明白なセキュリティ ホールのようです。
では、これはどのように行われるのでしょうか。パッケージインストーラーは必要ですか? それはsuidビットを保持しますか?誰かがこれがどのように機能するかを教えてくれますか?
python - 適切な権限で pycharm と scapy を実行します
PyCharm を使用して python 用の scapy ネットワーク パッケージで開発したいと考えています。特定のパケットを作成し、特定のポートを通過するには、ルート アクセスが必要です。現在、ルートとして PyCharm を実行していますが、これを行うためのより安全な方法があるかどうか疑問に思っています。おそらく悪いSUIDでpythonを設定しようとしましたが、scapyはまだ実行されません。任意の提案をいただければ幸いです。
google-chrome - SUIDサンドボックスの問題により、Chromiumのコンパイルと実行に失敗しました
私がやろうとしていること:
Ubuntu 13.10 で Chromium ソース コードをコンパイルして実行する
私が取った手順:
問題 :
ソースコードを取得し、問題なくコンパイルします。ただし、クロムを実行すると、以下のエラーが発生します
通常実行
--no-sandbox で実行
私が問題を解決しようとした手順:
- https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopmentに行きました
- それを読んで
- chrome_sandbox を使用して chrome を再度ビルドしました
ninja -C out/Debug chrome chrome_sandbox
build/update-linux-sandbox.sh
再実行~/.bashrc
以下の行がある かどうかを再度確認しますexport CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox
私が知りたいこと:
- 上記の状況でChromeを実行するにはどうすればよいですか?
--no-sandbox
そのオプションが機能しなかった理由は何ですか?
どんな入力でも大歓迎です。
若い。
c++ - CAP_NET_RAW 機能を使用して、ロードされた共有ライブラリの $ORIGIN をプログラムに解釈させることは可能ですか?
Python と C++ の両方のライブラリを持つアプリケーションを作成しています。Python 部分は未加工のパケットを送受信する必要があるため、Python 実行可能ファイルにCAP_NET_RAW
機能を与えています。
同じプログラムで、Cython を使用して C++ 共有ライブラリもロードします。依存関係の相対パスを使用して共有ライブラリをコンパイルしたい - つまり、$ORIGIN
特別な変数を使用します。
ただし、Python にはCAP_NET_RAW
機能があるため、Linux はプログラムとして扱い、共有ライブラリの依存関係定義内の文字列setuid
を無視するため、読み込みに失敗します。$ORIGIN
$ORIGIN
セキュリティ上の理由から、ダイナミック リンカでは、set-user および set-group ID プログラムで置換シーケンスを使用することはできません。DT_RUNPATH
動的配列エントリによって指定された文字列内に現れるそのようなシーケンスの場合、そのシーケンスを含む特定の検索パス$ORIGIN
は無視されます (ただし、同じ文字列内の他の検索パスは処理されます)。パラメータとして渡され$ORIGIN
たエントリまたはパス内のシーケンスは、エラーとして扱われます。拡張セキュリティ メカニズムがインストールされているシステムでは、最小限以上の権限を持つプロセスにも同じ制限が適用される場合があります。DT_NEEDED
dlopen()
このセキュリティ機能は、私たちに多くの苦痛をもたらします。共有ライブラリをコンパイルする必要があり、完全なパスの依存関係があり、開発マシン間で移植することはできません。
Linux でこのセキュリティ機能を無効にし$ORIGIN
て、追加の機能を持つプログラムで解釈されるようにする方法はありますか?