問題タブ [setuid]
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.
perl - SIGHUPシグナルをPerlのプロセスに送信します
私はUNIXデーモンを持っています。これはSIGHUPがデータを更新するのを待ちます。Proc :: Killall( "killall('HUP'、'mydaemon');")によってPerlスクリプト(同じサーバー上のApache www-data:www-dataの下)からシグナルを送信しようとしましたが、ありません。適切な権限。suidビットも機能しません。シェルの「kill-nHUP」が機能しています。
これを行うためのアイデアはありますか?
python - setuid()関数を使用して特権を削除しているときに「操作は許可されていません」
os.setuid()/ gid()を使用するこの単純なプログラムが失敗するのはなぜですか?Pythonで書かれていますが、それは言語の相対的な問題ではないと思います(最後にはすべて同じposixシステムコールです):
次の例外を返します。
エラーは何ですか?
gtk - GTK+ で setuid
プログラムを作成し、それを Gtk+ で構築された gui と統合しようとしています。ただし、GUI によって呼び出される exe には setuid ビットが設定されています。ただし、gtk では、この exe を gtk コミュニティの指定どおりに実行することはできません。しかし、別のヘルパー プログラムとすべてを作成する必要があると彼らは言います。それが何を意味するのか本当にわかりません。この問題を克服する方法を教えてください。私は本当に即時の解決策が必要です。
perl - cgi-bin として使用するときに、setuid() で Perl スクリプトを正常に実行する方法は?
Apache 経由またはコマンドラインで呼び出される Perl スクリプトがあります。
テスト目的で、Perl スクリプトで操作するユーザー名を渡しPOSIX::setuid
、uid
.
コマンド ラインからスクリプトを実行すると、uid
適切に設定されます。
コマンドライン出力には、スクリプトの実行を開始したテスト アカウントではなくuid
、指定された正しい が表示されます。$username
uid
Apache 経由でスクリプトを呼び出すとuid
、ユーザーの ID に設定されたままになり、変更さapache
れることはありません。
ドキュメントをsuExec
読んだ後:
http://www.example.com/~username
このスクリプトのコピーをfor everyに入れることはできません$username
。スクリプトは 1 つの場所から実行する必要がありuid
、スクリプト内で from を指定する必要があります。Apache 構成ファイルの仮想ホスト ディレクティブで一度指定された単一のユーザー名としてではなく、実行時に指定されたユーザー名としてスクリプトを実行する必要があります。新しいユーザーがこのスクリプトを実行するたびに、この構成ファイルを変更して Apache を再起動するのは現実的ではありません。
uid
を使用しているときに、Perl スクリプトを cgi-bin として実行して正しく変更するにはどうすればよいsetuid()
ですか?
clearcase - クリアケース:SUIDプログラムがビューで機能するかどうかを制御する方法は?
ClearCaseを実行している2台のマシン(検討中)があります-ClearCaseの異なるバージョンです。それ以外の点では、セットアップはほぼ同じです。同じLinux x86/64カーネルなどです。
1台のマシンでは、ビュー内のSUIDルートプログラムはSUIDルートプログラムとして機能します。
他のマシンでは、ビュー内のSUIDルートプログラムがSUID特権で機能しないため、予期しない結果が発生します。
これまでに見つけた唯一の違いは次のとおりです。
- 作業ビュー:CC 7.0.1
- 動作しないビュー:CC 7.1.1.1
重要な場合は完全な出力を提供できますが、cleartool -version
そうではないと思います。これらはリストされている最初のバージョンです。
質問
- これはClearCaseのバージョン間の既知の違いですか、それとも構成アイテムか何か他のものですか?
- SUIDルートプログラムが「適切に」実行できるように、新しいバージョンのClearCase(MVFS)を構成することは可能ですか?
- 構成可能である場合、構成を変更して、新しいバージョンでSUIDプログラムを許可するにはどうすればよいですか?
多くの異なるプラットフォームでClearCaseを実行している無数のマシンがあります。一部のマシンでは、SUIDソフトウェアを「ビュー外」で実行して動作させる必要があるという噂があります。今、誰かがバグを報告していました-そして、違いを絞り込むのに一日のほとんどを要しました。質問で扱われた問題はもっともらしい説明のようです。それが何か他のものであるなら、そうです。今日また失った髪がまだ必要です!
追加情報
すべてのビューは動的であり、スナップショットではありません。
これは、cleartool lsview -l -full -pro -cview
ClearCase 7.0.1を実行している、SUIDプログラムが機能するマシンでの出力です。
これは、ClearCase 7.1.1.1を実行している、SUIDプログラムが「機能しない」マシンでの出力です。
SUIDプログラムが機能していないことの検出
問題は、SUIDプログラムの実行に関するオペレーティングシステムからのエラーメッセージがあることではありません。問題は、プログラムがsetuid rootであるように見えても、実行すると、プログラムが実際にはsetuidではないことです。
これは、asroot
SUIDroot権限でインストールされていない場合の出力です。他のマシンの場合:
これは多かれ少なかれ、プログラムがSUIDroot権限でインストールされている場合に期待する出力です。
マウント情報
2つの主要なVOBは、tristarpとtristarmです。SUIDがOKのマシン(スクロールバーを避けるために手動でラッピングが行われる):
SUIDがOKでないマシンの場合:
そして、悪党がいます!(そして、私は情報を見たと思いましたmount
。明らかに。私は十分に正確に見ていなかったか、1台のマシン(動作中のマシン)か何かでしか見ていませんでした。)これら2つのVOBの1つだけがnosuid
;でマウントされているのは奇妙です。非常に奇妙な。
理由があります!
ありがとう、VonC。
探検
スクリプトには、 SUIDが許可されるかどうかを制御するためにファイルを使用するためのスクリプト/etc/init.d/clearcase
と/etc/clearcase
プログラムが用意されています。root:root:000の権限を持つ空のファイルとして、両方のマシンに存在します。しかし、ここに潜んでいる重要な他のいくつかの違いがあるかもしれません-私はこれについて居住者のClearCaseGuruに尋ねました。ただし、バージョン固有の機能変更よりも、2台のマシンの構成に違いがある可能性が高いようです。どちらのバージョンもそのオプションを表面的にサポートしていますが、7.1.1.1バージョンが7.0.1バージョンではない場合にそれを呼び出すことができていることを除いて、どちらもそのオプションを自明に呼び出していません。/opt/rational/clearcase
/var/adm/rational/clearcase/suid_mounts_allowed
nosuid
svn - svnアップデートラッパーのsetuidが機能していませんか?
ユーザー「foo」に属し、Apacheを介してアクセスされるsvnリポジトリがあり、同じくfooが所有するディレクトリで、post-commitフックからsvnupdateを実行しようとしています。
http://subversion.apache.org/faq.html#website-auto-updateで提案されているように、fooが所有するCラッパーを作成し、suidビットを設定しました。これは、コミット後のスクリプトによって呼び出されます。ユーザーwww-dataによる。
それでも、(空の環境で)ユーザーwww-dataからラッパーを実行すると、実際にはユーザーfooとしてsvn updateが呼び出されますが、不可解なことに、ユーザーwww-dataのパスワードを要求するsvnによってプロンプトが表示されます。
svnupdater.cと呼ばれるラッパーのコードは、公式のよくある質問で提案されているものと同じです(もちろん正しいパスを使用しています)。これは、ユーザーfooによって作成およびコンパイルされます。suidビットを設定した後、/hooks内のls-lが表示されます。
次に、「su www-data」を実行し、「env-./svnupdater」(shまたはbashから)を実行すると、psauxは正しく次のように表示されます。
しかし、それでも私はsvnupdateが私に次のように促しているのを見ることができます:
そしてもちろん、ポストコミットがそれを呼び出すとき、すべてが機能するわけではありません。
この戦略は公式に提案されたものであるため、問題がどこにあるのか本当に理解できないようですが、svn updateはsetuidをバイパスし、実際のユーザーを使用しているようです...
c - seteuid/geteuid: プログラムには常にルート ID があります
現在、SUID ビットと対応する関数 seteuid および geteuid がどのように機能するかを理解しようとしています。だから私はこの小さなプログラムを書いた:
それをコンパイルし、その所有者をルートに変更し、ファイルの所有者の s ビットを変更しました。
しかし、生成された出力は次のようになります。
そして、これは私が理解していないものです。geteuid の最初の呼び出しは、実際にはこのプログラムの呼び出し元のユーザー ID (つまり、chris - 私の ID は 1000 になります) を返すはずですが、プログラムは有効なユーザー ID として root を表示します。なぜこれが事実なのか、誰かが私に説明できますか?
core - nscd でコア ダンプ ファイルを生成するにはどうすればよいですか?
コア ダンプ ファイルなしで nscd サービスがクラッシュしました。
ulimit -c は無制限です。
/etc/nscd.conf で "server-user" が設定されている場合、nscd は "setuid" を使用するためだという人もいます。
次に、/etc/nscd.conf の「server-user」行の先頭に「#」を追加して削除し、サービスを再起動しました。
現在、「ps -ef | grep nscd」で確認できるルートとして実行されます。
ただし、次のコマンドでは nscd でコア ダンプ ファイルを生成できませんでした: kill -ABRT nscd-pid または kill -s SIGSEGV nscd-pid
誰が理由と方法を教えてくれますか? 前もって感謝します!
linux - root 以外のプロセスからのジェイルキットの実行
ラテックスインタープリター(Pythonで書かれたもの)を頻繁に生成するWebサーバーがあります。このインタプリタは、jailkit を使用して作成された chroot 刑務所内にあるため、root として開始する必要があります。
サーバーを root として実行したくないので、bash スクリプトを setuid できません。スクリプトを呼び出す setuid c プログラムを作成することはできますが、それが大きなセキュリティ ホールにつながることは確かです。
私がこれまでに思いついた最善の方法は、インタープリター プロセスを生成することだけを行う別の Web サーバーをルートとして実行することです。
これを行う正しい方法は何ですか?
java - JNI + setuid 質問
ユーザーwwwとして実行するWebアプリケーションがあります。ただし、ある時点で、ユーザー Alice と Bob に代わって Linux ファイルシステムからファイルを読み取る必要があります。
これを行う 1 つの方法は、シェル (Runtime.exec()) を起動し、C の setuid 実行可能ファイルを呼び出してユーザー ID を変更し、ファイルを読み取ることです。
JNI でこれを達成する方法はありますか (Web アプリは root ではなく www として実行する必要があります)。Linux でネイティブ メソッドを呼び出す Java JNI プログラムを作成しようとしました (ルートがこれらのネイティブ メソッドを所有し、setuid ビットを設定しました)。しかし、Java プログラムを root として実行しない限り、ユーザー ID を切り替えることはできません。私が見逃しているものはありますか?これを達成する方法はありますか?
ありがとう!