問題タブ [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.
linux - $ORIGIN と suid アプリケーションの使用方法
setcap CAP_NET_RAW を有効にして Python を使用しています。私の python スクリプトは、RPATH に $ORIGIN を持つ共有ライブラリをインポートします。私の python は現在 suid アプリであるため、 $ORIGIN は評価されず、ライブラリは正しく読み込まれません (これはglibc で見つかったセキュリティ リークが原因です)。私のライブラリパスが安全であることをリンカに伝え、ライブラリをロードする方法はありますか?
さらにいくつかのメモ:
- この機能は開発段階でのみ必要です。私は生産ソリューションを探していません。
- ルートとして作業すると、すべてが機能します。
- 私はルートとして働きたくありません。
ありがとう、デイブ
shell - gdb は suid root プログラムをデバッグできますか?
setuid(0) と execve("/bin/bash",NULL,NULL) を呼び出すプログラムを作成しました。
それから私はやったchown root:root a.out && chmod +s a.out
実行する./a.out
と、ルート シェルが表示されます。ただし、gdb a.out
通常のユーザーとしてプロセスを開始し、ユーザーシェルを起動します。
それで... suided root プログラムをデバッグできますか?
php - PHP/Apache から、ルートとして exec() または system() プログラム: 「sudo: 監査システムを開けません: 許可が拒否されました」
私はこれを理解しようと半日を費やしており、多くの調査を行ってきました。また、このトピックに関する既存の議論の多くにも精通しています。たとえば、次のようなものです: How to run PHP exec() as root?
残念ながら、私が見つけた提案はどれも私にはうまくいかないようです。
まず第一に、私は仕様に何かを書いているので、これを避けることはできません。また、すべてのマシンは、インターネットに接続されていないプライベート ネットワーク上に存在します。ある程度のセキュリティを確保することは重要ですが、ほとんどの場合、間違いを防ぐ必要があります。私の目的は、いくつかの「シンサーバー」を構成することです。PHP スクリプトを使用して、ネットワーク構成 (静的または DHCP) を変更し、ネットワークを再起動できるようにする必要があります。
私が最初に試みたのは、SUID ルートである C プログラムを作成することでした。ネットワーク構成ファイルの読み取り、変更、および書き込みを行います。通常のユーザーとして実行すると、問題なく動作し、ルートが所有するファイルにアクセスして変更できます。しかし、PHP スクリプトから実行すると、アクセス エラーが発生します。どうやら Apache が SUID root を何らかの形で防いでいるようです。
他の議論からの提案に基づいて、「sudo」メソッドを試しました。一時的に、これを /etc/sudoers に追加しました: apache ALL=(ALL) NOPASSWD: ALL
私が得るエラーはこれです:sudo:監査システムを開くことができません:許可が拒否されました
ロシア語のこのページによると、これは、RHEL (私は Fedora を使用しています) などのシステムがデフォルトで sudoers に対して requiretty になっているために発生しています。そこで、次の行を /etc/sudoers に追加しました: Defaults !requiretty
それでも同じエラーが発生します。sudo: 監査システムを開くことができません: 権限が拒否されました
私はここで完全に困惑しています。つまり、Apache 自体を root で実行したい場合を除き、何よりも不便です。
誰でもここで何か提案できますか? 自分のやろうとしていることがおかしいことに気づきます。また、Fedora マシンをリモートで構成するための既存のシステムを教えてくれる人もいるでしょう (思いついたので、今すぐ調べてみます)。
ところで、私は SELinux を実行しています。これは、Fedora 15 がデフォルトで構成されているためです。
ありがとう。
編集:
このチュートリアルを見つけました:
http://www.cyberciti.biz/faq/howto-disable-httpd-selinux-security-protection/
残念ながら、「setsebool httpd_disable_trans 1」を実行すると、次のエラーが表示されます:
アクティブなブール値を変更できませんでした: ブール値が無効です
また、存在しない「/etc/selinux/targeted/booleans」を直接編集してapacheを再起動してみましたが、やはりダメでした。
macos - Mac OS Xで権限はどのように伝播しますか?
したがって、Macでプログラムsuid rootを作成し、そのプログラムが/ bin / shでexecを実行する場合、シェルはrootではありませんが、Linuxで同じことを行うと、シェルはrootになります。MacはLinuxと同じようにパーミッションを伝播しませんか?それとも、suidビットで何か違うことが起こっているのでしょうか?私の理解では、suidrootを使用するプログラムはroot権限で実行されます。また、/ bin / shを呼び出すルートシェルは別のルートシェルを作成するので、/ bin / shでexecを呼び出すsuidルートプログラムはルートシェルを作成するべきではありませんか?
c - Apache で SUID C スクリプトを実行する
私はこれと同じcgiスクリプトをcに持っています:
コンパイルして SUID を設定した後:
これをシェルで実行すると、すべて問題ないようです。
しかし、apache と cgi-bin で実行すると、ファイルを開くことができないと彼は言います。EUIDは問題ないようですが:
ありがとう!
python - これは (Python) スクリプトの安全な suid/capability ラッパーですか?
(注: Linux を念頭に置いていますが、問題は他のプラットフォームにも当てはまる可能性があります。)
問題: Linux は #! で suid を実行しません。スクリプトの「Linux 機能」を有効にすることもありません。
なぜ私たちはこの問題を抱えているのでしょうか? スクリプトを実行するためのカーネル インタープリターのセットアップ中に、攻撃者がそのファイルを置き換えた可能性があるためです。どのように?以前信頼されていた suid/capability-enabled スクリプト ファイルは、管理者が制御できるディレクトリにある可能性があります (たとえば、所有されていない信頼されたファイルを削除したり、ファイルが実際に所有しているシンボリック リンクである場合)。
適切な解決策: 次の場合に、カーネルで suid/cap スクリプトを許可するようにします。a) 呼び出し元がスクリプト ファイルに対して権限を持っていないことが明らかな場合、または他のいくつかのオペレーティング システムが行うように、b) スクリプトを /dev/fd/ として渡します。 x、最初にカーネルで開かれた信頼できるファイルを参照します。
私が探している答え:これを実行できないカーネル (すべての Linux) については、安全な「今」のソリューションが必要です。
私は何を考えていますか?カーネルが実行しないことを安全な方法で実行するバイナリ ラッパー。
私はしたいと思います
- Linux の機能を渡す (Python) スクリプトの確立されたラッパーから聞いて、スクリプト ファイルからインタープリターに suid してそれらを有効にする可能性があります。
- 以下で提案された私のラッパーにコメントを得る
sudo に関する問題: sudo は適切なラッパーではありません。これは、先ほど説明した「スクリプトが置き換えられた」というトラップにカーネルが陥らないようにするのに役立たないためです (警告の下の「man sudo」はそう言っています)。
提案されたラッパー
- 実際には、ラッパーを生成する小さなプログラムが必要です
- コマンドライン、例: sudo suid_capability_wrapper ./script.py
- script.py には既に suid ビットと機能が設定されています (機能はなく、情報のみ)
- ジェネレータ suid_capability_wrapper が行う
- C(?) ソースを生成してコンパイルする
- 出力を次のようにコンパイルします: default:
basename script.py .py
、または引数 -o - ラッパーの所有者、グループ、suid を script.py のように設定します
- script.py のような許可された機能を設定し、継承可能な有効なキャップを無視します
- インタープリター (例: /usr/bin/python) の継承可能なセットに対応するキャップがない場合に警告します (これはシステムの制限です: それ以外の場合、suid-root なしでケーパビリティーを渡す方法はありません)。
- 生成されたコードは次のことを行います。
- ファイル記述子 0、1、および 2 が開いているかどうかを確認し、そうでない場合は中止します (あまりにもクレイジーな環境条件のチェックを追加する可能性があります)。
- コンパイルされたターゲット スクリプトが相対パスでコンパイルされている場合、/proc/self/exe を介して自分自身の場所を特定します
- 自分のパスとスクリプトへの相対パスを組み合わせて見つけます
- ターゲット スクリプトの所有者、グループ、パーミッション、caps、suid がオリジナル (コンパイル済み) のままかどうかを確認します [これは、含めたい唯一の不要な安全チェックです: それ以外の場合は、そのスクリプトを信頼します]
- 許可された機能のセットと等しい継承された機能のセットを設定します
- execve() インタープリターはカーネルと同様ですが、既知のスクリプトパスと取得した環境を使用します (スクリプトは環境を処理する必要があります)。
suid_capability_wrapper によって一連のメモと警告が出力され、ユーザーに次の情報が表示される場合があります。
- 誰もスクリプトを操作できないようにする (例: 誰でも書き込み可能)
- suid/capabilities はラッパーから取得されることに注意してください。スクリプト ファイルの suid/xattr マウントについては何も気にしません。
- インタープリター (python) が execve() され、ここからダーティな環境が取得されます
- また、それを通過する標準プロセス環境の残りの部分も取得します。これは ... ... ... (最初に exec のマンページを読んでください)
- #!/usr/bin/python -E を使用して、環境変数から Python インタープリターを免疫化します
- スクリプトで自分で環境をきれいにするか、これらの変数のいくつかを気にする副作用として実行するコードがたくさんあることに注意してください
gnu-screen - マルチユーザーモードを機能させる唯一の方法は、GNU Screen suid root を実行することですか?
Ubuntu 11.10 と GNU Screen バージョン「4.00.03jw4」を実行しており、マルチユーザー モードを使用しようとしています。
次のプロセスは私にとってはうまくいきます:
これは憂鬱です。一生懸命探しましたが、良い方法が見つかりません。ありますか?
maven - サーバーと Maven 展開用のローカルの間の異なるオブジェクト
Maven と weblogic-maven-plugin 2.8.0-SNAPSHOT を使用して、weblogic サーバー (8.1) に .war をデプロイします。
しかし、私はこの問題に直面しています:
ObjectName のバージョンがサーバーとローカルで異なることは理解していますが、これを変更する方法がわかりません。
ありがとう。
linux - Linux SUID 構成により、バイナリ ファイルの実行に失敗する
statfs 関数を呼び出すときにルート権限が必要なバイナリ ファイル (名前は bmu) が 1 つあります。
OS はSuSE Linux 2.6.16.60-0.21-smp
bmu を実行するユーザーであり、root 以外のユーザーであるテストです。
3種類のシナリオをテストしました。
--->シナリオ 1
bmu が SUID で構成されていない場合、bmu は実行できますが、呼び出しは失敗します。
--->シナリオ 2
bmu が SUID で構成されている場合、bmu をテストで実行すると、「DBMS API ライブラリ 'libclntsh.so' の読み込みに失敗しました」というプロンプトが表示されて失敗します。
--->シナリオ 3
bmu を root で実行すると、正常に実行されます。もちろん、SUID が構成されているかどうかは関係ありません。
シナリオ 2 からは構成の問題のように見えますLD_LIBRARY_PATH
が、シナリオ 1 からは、これはLD_LIBRARY_PATH
構成の問題ではないことがわかります。シナリオ 3 から、bmu が root によって実行可能であることがわかります。
問題があるのはシナリオ 2 だけなので、誰か提案をいただけますか? ありがとう!
python - 異なる権限でPythonを実行する
シェルのないシステムユーザーでもある他のユーザー(rootではない)としてPythonスクリプトを実行しようとしています。スクリプトにsuidフラグを直接設定できないことを理解しているので、C++ラッパーを作成しました。
wrapper.cpp
そして、以下の権限を設定します
最後に、試してみるために、Pythonスクリプトがあります
それがまったく重要な場合は、次の権限が必要です
これをユーザー「テスト」として実行すると、次のように表示されます。
ご覧のとおり、有効なユーザーはまだ「テスト」です。すでにいくつかの例を見ていて、それらはすべてほぼ同じことを示しているように見えるので、誰かが私が間違っていることを指摘してもらえますか?