2016-10-30 4 views
0

私はUNIX環境でC言語を使ってWebサーバーを開発しています。現在、私はプロセスを投獄しましたが、syslogを使用してファイルオプションにログすることはできません。基本的には、変更されたルートパスが原因です。chroot()からエスケープする

プログラムの新しいルートパスは、そのディレクトリです。これらの関数を使って刑務所のルートパスに戻ってくるために、実際のルート "/"にそれから逃げることはできませんでした。

これに代わる方法や解決策はありますか?

答えて

4

chroot()を使用している全体の点は、実際のルートにアクセスできないようにするため、簡単な公式です。それを壊すことができれば、それは必要ありません。

したがって、chroot環境からsyslogにアクセスできるようにする必要があります。どうやって? chroot()の前にちょうどopenlog()。その後はsyslog()になりますが、openlog()にはもうアクセスできません。

+0

ありがとう、私はそれを考えることができませんでした!今は修正されています。 – Atik

+0

時には、最も簡単な解決策の目隠しがあります; –

+0

こんにちは、私は別の問題があります。彼らは関連していると思います。ローカルタイムゾーンが変更されたとき。私は/ etc/timeフォルダをchrootのパスなどにリンクすることについて何かを読んだ。しかし確かではない。 – Atik

0

rootが作業ディレクトリの場合は、chrootを使用せず、使用するすべての相対パスを選択して '/'を削除するか、 '。'を追加してください。この前に '/'。 chrootは、システムルートであるかのように完全に動作させたい場合にのみ使用してください。

0

両方のenvが同じファイルシステム上にある場合、ハードリンクを使用することができます。そのため、chrootされたenvの下にファイルが「外側」に表示されます。すべてを動作させるように構成するのは簡単ではないかもしれませんが、可能です。あなたの視点を変えてください:chrootから脱出しようとしないでください。

関連する問題