問題タブ [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.
windows - MS Windows プラットフォームでは、Unix ベースのプラットフォームの SUID に相当するものとして、どのような選択肢がありますか?
私が何を求めているのかを理解するには、Unix での SUID のいくつかの用途と区別することが重要です。
プロジェクトが所有し、SUID ビットが設定されているユーザーの PATH で実行可能ファイルを使用するプロジェクトがあります。このように、実行すると、呼び出し元のユーザーではなく、ファイルの所有者のコンテキストで実行されます。このようにして、ユーザーがアクセスできないものにアクセスできるため、これらのものは通常のファイルシステム保護によってユーザーから保護されます。これはかなりうまく機能します。プロジェクトをクライアント サーバー アーキテクチャに移行する計画ですが、それにはしばらく時間がかかります。それまでの間、Windows システムでこの種の動作を再現するにはどうすればよいですか?
プロジェクトの実行可能ファイルは SETUID ライブラリ呼び出しを呼び出さないことに注意してください。率直に言って、プロジェクトの機能を考えると、これは追加するのに最適な機能です。プロジェクトには、システムのルート権限は必要ありません。最初のセキュリティ上の懸念は、ユーザー (ファイル所有者以外の任意のユーザー) から独自のファイルを保護する必要があることであり、ファイルにアクセスするために「ユーザー コンテキスト」に切り替える機能があれば非常に便利です。あたかも呼び出し元のユーザーであるかのようにシステム。(このようにして、プロジェクトが触れてもよいものとそうでないものをより簡単に判断できます。)
プロジェクトは C と Java の組み合わせで書かれています - SUID が設定された C プログラムは Java コードを呼び出します...
私はそのようなメカニズムをすべて知りたいと思っており、特に次のようなメカニズムに焦点を当てています。
- C および Java に適しています。
- Windows 以外のプログラマーでも簡単に実装できます。
- Windows に固有の最小限のコーディングが必要です。
いくつかの解決策が優れている場合は、この点に関してあなたが知っていることについてあなたの考えを共有してください.
ノート:
- LogonUser: プレーン テキストのパスワードが必要です。それがどうして答えになるのでしょうか。
- RunAs: PROMPT でパスワードを入力する必要があります。... LogonUser の場合と同様に、さらに悪いことです。これがどのように答えているのかわかりません。
ubuntu - suid を使用できるようにシェル スクリプトをコンパイルします。
権限の少ないユーザーがスクリプトを実行できるように、スクリプトを suid する必要があります。スクリプトを suid することはできず、実行可能ファイルしか suid できないため、汎用スクリプト コンパイラ「shc」を使用して実行可能ファイルを作成し、その実行可能ファイルの suid ビットを設定したいと考えました。唯一の問題は、ubuntu jaunty で shc が見つからないか、apt-get install shc を実行すると、見つからないとして返されることです。shc を使用する代わりの方法はありますか (独自の C プログラムを作成する場合を除く)、それとも apt-get が見つけられるように、追加できるリポジトリに含まれていますか?
python - Python PAMモジュールのセキュリティ上の懸念はありますか?
Unixログイン用の一般的な認証メカニズムを利用するPAMモジュールを作成することに興味があります。私の過去のプログラミング経験のほとんどはPythonでのものであり、私が対話しているシステムにはすでにPythonAPIがあります。グーグルで調べてみたところ、 pam_pythonが見つかりました。これにより、PAMモジュールがpython intrepreterを呼び出すことができるため、PAMモジュールを基本的にPythonで記述できるようになります。
ただし、SUID Pythonスクリプトなど、ユーザー自身よりも高いアクセスレベルで実行されるPythonコードをユーザーが呼び出すことを許可すると、セキュリティ上のリスクがあることを読みました。これらの懸念はPythonPAMモジュールにも当てはまりますか?
c++ - C++ プログラム内から Linux を再起動する方法は?
ユーザーがコンピューターの再起動を選択できるドロップダウンメニューにオプションが必要なQt 4 GUIがあります。これは、他の方法でコンピューターを再起動する機能と冗長に思えるかもしれませんが、選択肢はそこにとどまる必要があります。system() を使用して以下を呼び出してみました:
- suid-root シェルスクリプト
- 非 suid シェルスクリプト
- suid-root バイナリ プログラム
そして、それらすべてが原因です
刷する。system() を使用して再起動を直接呼び出すと、同じことが行われます。これを行うために system() を使用することに特に執着しているわけではありませんが、それが最も直接的な選択のように思えました。GUI からシステムを再起動するにはどうすればよいですか?
perl - taint-mode perl:system()を介して外部プログラムを実行するときにsuidを保持します
従来のスクリプトに機能を追加しようとしています。スクリプトはsuidであり、セキュリティを強化するためにperl -T(taintモード:man perlsec)を使用します。追加する必要のある機能はPythonで実装されています。
私の問題は、環境とコマンドラインをどれだけ洗濯しても、perlsecにsuid権限を保持するように説得できないことです。
これは、他のバイナリ(/ bin / idなど)のsuidを保持するため、イライラします。/ usr / bin / perlに文書化されていない特別なケースはありますか?これはありそうもないようです。
誰かがこれを機能させる方法を知っていますか?(現状のまま:このすべてを再構築するためのリソースがありません。)
解決策: (@gbaconによる)
望ましい結果が得られます!
これが私のスクリプトの縮小版ですが、それでも私の問題が示されています。
そして、これが出力です:
linux - ユーザーとしてgdb(Eclipse)からrootとして実行する必要があるプログラムをデバッグする方法(gdb suid rootを設定しますか?)
LinuxでEclipse(gdb)を使用してプログラムをデバッグする必要があります。プログラムはrootとして実行され、非常に大きくなります。デバッグシンボルのあるバイナリは約250MBの大きさで、起動後に60を超える実行中のスレッドがあります。
私は最良の解決策について考えています:
- gdbserverを使用する
- ルートとしてEclipseを実行する
- gdbsuidを設定します
1番(gdbserver)が最善の解決策だと思いますが、残念ながら信頼性は高くありません。gdbとgdbserver間の接続が失われます。Eclipse <-> gdb<->gdbserver間で転送される大量のデータに問題があると思います。
2番目(Eclipseをrootとして実行)は、すべてのプロセスをrootとして実行することを意味し、Eclipseプラグインはバージョン管理されたファイルを変更するために私の代わりにrootユーザーを使用するため、バージョン管理システムにも干渉します。
3番(suid gdb)は試しませんでした。あなたはそれについてどう思いますか?それはまったく機能しますか?suid root gdbは、root-Passwordがまったくないのと同じくらい安全であることを知っていますが、マシンは私だけが開発とデバッグに使用します。そしてもちろん、必要な場合にのみsuidビットを設定する「有効化/無効化」スクリプトが存在する可能性があります。
他に何か提案はありますか?
permissions - ファイルにSUIDフラグを設定しますか?
SUIDフラグを設定したいPythonファイルがあります。そのため、通常のユーザーが実行すると、rootとして実行されます。これはセキュリティの問題ですが、SUIDフラグを設定する必要があります。
python - SUIDのセマンティクス(Set-User-ID)
SUIDビットのセマンティクスを理解するのに問題があるようです。おそらく誰かが状況を明確にするのを手伝ってくれるでしょう。
SUIDビットのセマンティクスについての私の理解は次のとおりです。ファイルでSUIDビットを設定すると、ファイルはファイルの呼び出し元ではなく、ファイルの所有者として実行されます。したがって、この動作をテストするために、次のPythonスクリプトを作成しました。
その後、対応するグループ「testuser」で「testuser」という名前のユーザーを作成し、ファイルのアクセス許可(chown testuserファイル、chgrp testuserファイル、chmod u + s、g + xファイル)を調整しました。次に、メインユーザーを「testuser」グループに追加して、グループのメンバーとしてファイルを実行できるようにしました。結局のところ、ファイルのアクセス許可は次のようになりました。
したがって、テストユーザーとしてログインすると、スクリプトによって次の出力が生成されます。
...そして、メインユーザーとしてスクリプトを実行すると、スクリプトは次のように出力します。
私の理解では、スクリプトは、後者の実行でuid 1001(ファイルの所有者)を持つユーザーとして実行されているはずです。コンセプト全体が間違っているのでしょうか、それともどこが間違っているのでしょうか。
c - seteuid/geteuid: プログラムには常にルート ID があります
現在、SUID ビットと対応する関数 seteuid および geteuid がどのように機能するかを理解しようとしています。だから私はこの小さなプログラムを書いた:
それをコンパイルし、その所有者をルートに変更し、ファイルの所有者の s ビットを変更しました。
しかし、生成された出力は次のようになります。
そして、これは私が理解していないものです。geteuid の最初の呼び出しは、実際にはこのプログラムの呼び出し元のユーザー ID (つまり、chris - 私の ID は 1000 になります) を返すはずですが、プログラムは有効なユーザー ID として root を表示します。なぜこれが事実なのか、誰かが私に説明できますか?
objective-c - NSTask、コマンド ライン ツール、ルート
私は dd を使用する必要があるアプリに取り組んでいます (アプリ自体からパラメーターを収集し、いくつかのチェックを行ってから dd を起動する、アプリ バンドル内のシェル スクリプトを使用してこれを行います)。
この操作を行うには、ルートで dd を呼び出す必要があります。StackOverflow でいくつかのソリューションを既に見ました。実装するのが最も簡単なのは、これhttp://www.sveinbjorn.org/STPrivilegedTaskのように思えました
問題は、私の NSTask がいくつかの複雑な読み取り/書き込み操作を行い (STPrivilegedTask には存在しない)、すべての特権を必要としないことです。
そこで、アプリから正しいパラメーターを使用してスクリプトを呼び出す小さなヘルパー ツールを c で作成しました。私が考えた解決策は、STPrivilegedTask を使用して、小さなヘルパー ツールをフライしたら SUID にすることです。これにより、root でそれ (およびスクリプトと dd) を起動し、起動が成功した直後に、ヘルパー ツールを非 SUID に戻します (エラーが発生した場合、アプリの終了時、アプリの開始時など、より安全にするために同じことを行います)。
完全ではないかもしれませんが、すべてがバンドル内にあり、起動のためだけに SUID のヘルパー ツールを使用することは十分に安全だと思います。
何かご意見は?
ありがとう!