問題タブ [chroot]

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.

0 投票する
2 に答える
1736 参照

eclipse-cdt - Eclipse CDTを使用してchrootにビルドする方法は?

makeを使用して複雑なC++プロジェクトを構築するために必要なすべてを備えたchroot環境があります(特定のLinuxディストリビューション用です)。

このプロジェクトではEclipseCDT(chroot環境の外部)を使用したいのですが、Eclipseがビルド時にchroot環境に入り、そこにビルドされるようにします。

出来ますか?

0 投票する
3 に答える
1739 参照

php - PHP で chroot を呼び出す

セキュリティ上の理由から、一部のアプリケーションは chroot 環境で分離されています。PHP スクリプトを介してこのアプリケーションを呼び出す必要があります。そんな感じ :

rootを使用する必要がありますchroot。PHP マニュアルには chroot() がありますが、この関数にも root 権限が必要です

chrootでは、 PHP で ed コマンドを使用するにはどうすればよいでしょうか。

0 投票する
1 に答える
1992 参照

android - samsung galaxy s2でadbシェル(Windows上)を使用してスーパーユーザーモードに入る

携帯電話に chroot ubuntu をインストールしようとしましたが、galaxy s2 (ストック カーネル、ループ デバイスをサポート) では失敗しました。問題は、adbシェルにスーパーユーザー権限が付与されていないことだと思います(私の電話はルート化されており、スーパーユーザーがインストールされています)。adb シェルで su と入力しても、携帯電話のスーパーユーザー アプリから何も通知されません。

0 投票する
1 に答える
327 参照

python - chroot環境で実行されたPythonスクリプトのデバッグ

私のマシンにインストールされているeclipseによってchroot内で実行され、chrootがそれを認識しないPythonスクリプトをデバッグする方法はありますか?chroot内にeclipseをインストールすることは許可されていません。

0 投票する
2 に答える
875 参照

c - C:chroot内のsystem()呼び出し

私はCで書かれたプログラムを持っています。これは、刑務所内でchrootされて実行され、いくつかのシステムコールを実行しますsystem ( "ls" )。問題は、刑務所内でプログラムを実行すると、プログラムがシステムコールを実行しないことです。実行可能ファイルに必要なすべてのライブラリ(lddbashコマンドで見つけたもの)と、bash実行可能ファイル(/bin/bash)、およびそのライブラリ(で見つけたものldd)を含めました。何かが足りないようです。誰かがそれについて考えを持っていますか?

0 投票する
1 に答える
148 参照

windows - Windows-特定の環境用のプライベートhostsファイル

アプリケーションを開発サーバーで実行し、Oracleインスタンスをホストしているdev-dbに接続しています。

今、私はprod/prod-dbマシンにデプロイしています

dev-dbのURLはJavaコード内にハードコーディングされているため、コピーされたばかりのバイナリは引き続きdev-dbを指します。簡単なウォーカラウンドとして、prodのWindows Hostファイルに行を追加して、dev-dbがprod-dbのIPアドレスを指すようにしました。それはうまくいきましたが、私はこのグローバルスコープのソリューションにあまり満足していません。

特定の環境でhostsファイルを「プライベート」にする方法を終了するかどうか疑問に思いました。実行中のアプリケーションのスコープ内でのみ有効

0 投票する
1 に答える
5204 参照

c - LD_PRELOADを使用して別のlibc関数から呼び出されたlibc関数をオーバーライドします

Ubuntu Lucid x86_64で、大量の仮想ホスティング(10,000を超える仮想ホスト)用にchrootされたphp-cgiを実行することを目的としたプロジェクトがあり、各仮想ホストには独自のchrootがあります。

/ dev / null、/ dev / zero、ロケール、アイコンなど、chrootの外部で実行されていると考えているphpモジュールが必要とする可能性のあるものについては、各chroot内に必要な環境を作成しないようにします。

目標は、php-cgiをchroot内で実行することですが、それらのファイルが(ほとんどの場合)読み取り専用モードで許可リスト(/ dev /)で開かれている限り、chroot外のファイルにアクセスできるようにします。ログ、/ dev / zero、/ dev / null、ロケールへのパス...)

明らかな方法は、chrootの外部で信頼できるopen()パスをフックしてリダイレクトできるカーネルモジュールを作成する(または存在する場合は使用する)ようです。しかし、私はそれが最も簡単な方法ではないと思います:

  • カーネルモジュールを実行したことがないので、難易度を正しく見積もることができません。
  • ファイルを「開く」(開く、接続する、mmapなど)フックする複数のシステムコールがあるようですが、ファイルを開くことに関連するすべてに共通のカーネル関数があると思います。

プラットフォームを最新の安定したPHPリリースに更新するたびに必要な作業量を最小限に抑えるために(したがって、アップストリームのPHPリリースからより頻繁かつ迅速に更新するために)、phpまたはそのモジュールへのパッチの数を最小限に抑えたいので、 PHPの動作に外部からパッチを適用する方が良いと思います(特定の設定があるため、PHPにパッチを適用してアップストリームにパッチを提案することは関係ありません)。

代わりに、私は現在ユーザーランドの解決策を試しています。LD_PRELOADを使用してlibc関数をフックします。これはほとんどの場合うまく機能し、実装が非常に高速ですが、単独では解決できない問題が発生しました。(アイデアは、chrootの外部で実行されているデーモンと通信し、ioctl SENDFDおよびRECVFDを使用してデーモンからファイル記述子を取得することです)。

(最初にopenlog()を使用せずに)syslog()を呼び出すと、syslog()はconnect()を呼び出してファイルを開きます

例:

これまでのところ、libcのconnect()関数をフックしようとしましたが、成功しませんでした。また、プリロードライブラリの_init()関数内のdlopen()にいくつかのフラグを設定して、それらのいくつかがこの機能を実行できるかどうかをテストしようとしましたが、成功しませんでした

これが私のプリロードライブラリの関連コードです:

しかし、libcのconnect()関数はまだ私のものよりも優先されます:

syslog()のコード(apt-get source libc6、glibc-2.13 / misc / syslog.c)を見ると、openlog_internalを呼び出しているようで、misc / syslog.cの386行目で__connect()を呼び出しています。

objdumpは、libcの動的シンボルテーブルでconnectと__connectを表示します。

しかし、動的再配置エントリに接続シンボルがないため、openlog_internal()で使用されるconnect()を正常にオーバーライドできない理由を説明していると思います。おそらく、動的シンボル再配置を使用せず、おそらく__connect()のアドレスを持っています。ハードで機能します(相対的な-fPICオフセット?)。

connectは__connectの弱いエイリアスです:

gdbは、libcのlibc接続シンボルでブレークポイントを設定できます。

もちろん、自分でopenlog()を実行することで、この特定の問題を完全にスキップすることもできますが、他のいくつかの関数でも同じタイプの問題が発生すると思います。

openlog_internalが動的シンボル再配置を使用して__connect()を呼び出さない理由、および単純なLD_PRELOADメカニズムを使用してこの__connect()呼び出しをフックすることさえ可能かどうか、私は本当に理解していません。

私がそれをどのように行うことができるかを見る他の方法:

  • dlopenを使用してLD_PRELOADからlibc.soをロードし、dlsym()を使用してlibcの__connectのアドレスを取得してから、関数にパッチを適用して(ASMに関して)フックを機能させます。それは本当にやり過ぎでエラーが発生しやすいようです。
  • PHP用に変更されたカスタムlibcを使用して、これらの問題をソースで直接修正します(open / connect / mmap関数...)
  • LKMをコーディングして、ファイルアクセスを必要な場所にリダイレクトします。長所:ioctl(SENDFD)の必要はなく、chrootの外部にデーモンもありません。

可能であれば、openlog_internalによって発行された__connect()の呼び出し、提案、またはsyscallのフックとリダイレクトに関連するカーネルドキュメントへのリンクをフックする方法を学びたいと思います。

「hooksyscalls」に関連する私のグーグル検索では、LSMへの参照がたくさん見つかりましたが、「yes」または「no」に答えるACLのみが許可され、open()パスのリダイレクトは許可されないようです。

読んでくれてありがとう。

0 投票する
5 に答える
2928 参照

linux - perlスクリプト内でchrootを終了するには?

仮想マシン (Xen pv) のセットアップを完全に自動化するための perl スクリプトを作成しているときに、非常に単純な小さな問題に遭遇しました。

perl のchroot 機能を使用してゲスト ファイル システムで作業を行った後、最初の実際のルートに戻る必要があります。どうやってそれをするの?

スクリプト例:

終了を試みました。しかし明らかにそれはスクリプト全体を終了します。

chroot を終了する方法を探していると、すでにセットアップされている chroot (権限昇格) を終了することを目的としたスクリプトがいくつか見つかりました。ここで chroot を行うため、これらの方法は適用されません。

次のようなクレイジーなことを試しました:

しかし、行きません。

更新 考慮すべきいくつかの点:

  • スクリプトを複数のファイルに分割することはできません。(ばかげた理由ですが、実際にはできません)
  • chroot された部分では、スクリプトによって以前に (chroot の前に) 収集された大量のデータを使用する必要があるため、chroot 内で別のスクリプトを実行する必要がなくなります。
  • open、system、または backticks を使用するのは良くありません。コマンドを実行し、出力 (終了コードではなく、実際の出力) に基づいて他のことを行う必要があります。
  • chroot の後の手順は、chroot の内部で何が行われたかによって異なります。したがって、内部、外部で定義または変更したすべての変数が必要です。
  • fork は可能ですが、子との間の情報の受け渡しを正しく処理する良い方法がわかりません。
0 投票する
1 に答える
1725 参照

php - PHP が chroot された MySQL ソケットに接続できませんか?

そこで、CentOS に MySQL の chroot をセットアップしました。MySQL は事実上 /opt/chroot/mysql/ に限定されており、すべてが正常に動作するように /etc/init.d/mysqld ファイルを変更しました。次のコマンドを発行して、(ルートとして) ソケットに接続できます。

現時点では、単純にするために、MySQL root ユーザーのパスワードはありません。

ただし、何らかの理由で PHP (Apache で実行) は同じソケットに接続できません。接続中に完全なソケット パスを参照するだけでなく、php.ini で MySQL のデフォルト ソケット変数を更新しようとしましたが、常に同じエラーが発生します。

ソケット '/opt/chroot/mysql/var/lib/mysql/mysql.sock' を介してローカルの MySQL サーバーに接続できません (13)

何か案は?

更新:自分で解決策を見つけました。SELinux が有効になっており、Apache によるすべての接続をブロックしていました。

0 投票する
1 に答える
2765 参照

ubuntu - chrootはダイナミックリンクにどのように影響しますか?

これが私が持っているシナリオです:

debootstrap ubuntu maverick(64ビット)環境を作成しました。私はそれを/env/mav/私のubuntu(64ビット)lucidシステムに配置しました。私は異端者のシステムに完全にchroot入ることができ、それを利用することができます。/env/mav

私は、chrootされた環境の外でも、明快なプログラムをうまく使用することができます。それが/env/mav/bin/ls実行されます。

しかし、 [1][2]に変更LD_LIBRARY_PATHすると気づきました/env/mav/lib

私が実行するすべてのプログラム(lucidとmaverickの両方)は即座にクラッシュします。(たとえば、lsはセグメンテーション違反になります)。kern.logは次のことを示しています。

ただし、明らかに、私がにchroot入る/env/mavと、すべてのプログラムが正常に実行されています。そして、すべてのライブラリがjailed(/env/mav)から読み取られているだけではありません/libか?では、このコンテキストでのchroot変更と変更の違いは何ですか?LD_LIBRARY_PATH

さらに、私が:

その後chroot /env、に設定LD_LIBRARY_PATHしても/env/mav/lib、すべてが正常に実行されます。

私はここで内部的に起こっていることに途方に暮れています。どこかに保存されている古い内部構造はありますか?chrootは魔法のようなことをしますか?

[1]ユースケースは、マーベリック刑務所の外にあるマーベリックダイナミックリンクライブラリに正しくバインドされたマーベリック環境からプログラムを実行することです。

[2]これは単なる簡略化された例です。実際/usr/libには、などがすべて含まれています。異端者の環境の/libを含めるとすべてが「毒」になります。他のマーベリックライブラリディレクトリを使用しても問題はありません。