1

chroot jail 内でのシェル コマンドの実行に問題があります。次に例を示します。

#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>

int main()
{
   if (geteuid() == 0)    // check root privileges
   {
      chroot("/bin");
      chdir("/");

      execl("/ls", "ls", "-l",  (char *) NULL); // "/ls" should be equivalent to "/bin/ls"
      perror(strerror(errno));
   }

   else
      printf("Permission denied\n");

   return 0;
}

問題はexecです。errnoによると、エラーは「そのようなファイルまたはディレクトリはありません」です。exec("/bin/ls", ...) を使用すると、同じエラーが表示されます

chroot監獄のため、「ls」は必要な共有ライブラリを使用できないと思います。

この問題を解決するための提案はありますか?

4

1 に答える 1

1

共有ライブラリにアクセスできないことについては、おそらく正しいでしょう。chroot jail を設定するには、通常/bin、 、/usr/bin/lib、およびの一部を/usr/lib並列ディレクトリ構造にコピーする必要があります。

より簡単な代替手段は、静的にリンクされた実行可能ファイルのみを使用することです。busybox多くの Linux システムでは、 を含む多くの Unix コマンドの基本機能を提供する、と呼ばれる静的にリンクされた実行可能ファイルがありますls。このように呼び出すと、chroot 監獄の外にある追加の共有ライブラリにアクセスする必要なくbusybox ls -l、通常のプログラムと同様の出力が得られます。ls

于 2012-07-06T20:29:36.740 に答える