为什么我的代码在没有 chroot 功能的情况下工作,但在 chroot 功能下却失败了?
Why my code works without chroot function, but fail with chroot function?
我尝试让我的代码在 chroot('/root/test1')
下工作,但它无法正常工作。
但是当我删除chroot('/root/test1')
,并将execl("/test2", "test2", NULL)
修改为execl("/root/test1/test2", "test2", NULL)
时,它会像预期的那样工作得很好。这是为什么?
另外请问,如果我设置fp
重定向到stdin
,然后使用execl
函数运行另一个程序,子程序会得到输入在 fp
是否?
'/root/test1/'中的文件:
test2
test2.cpp
test3
test3.cpp
execl函数的值return为-1,errno为2。
test3.cpp
int main() {
FILE *fp;
errno = 0;
fp = fopen("log.txt", "r");
dup2(fileno(fp), fileno(stdin));
cout << chdir("/root/test1") << endl;
cout << chroot("/root/test1") << endl;
DIR *dir = opendir("/");
dirent *list;
while ((list = readdir(dir)) != NULL) {
cout << list -> d_name << " ";
}
cout << endl;
closedir(dir);
errno = 0;
cout << execl("/test2", "test2", NULL) << endl;
cout << errno << endl;
cout << strerror(errno) << endl;
return 0;
}
test2.cpp
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int a,b;
cin >> a;
scanf("%d",&b);
cout << a+b << endl;
printf("%d",a+b);
return 0;
}
log.txt
111 222
输出*
0
0
. test3.cpp test3 .. test2 test2.cpp log.txt
-1
2
No such file or directory
复制 /usr /lib /lib64 和 /bin/bash 到 /root/test1
我尝试让我的代码在 chroot('/root/test1')
下工作,但它无法正常工作。
但是当我删除chroot('/root/test1')
,并将execl("/test2", "test2", NULL)
修改为execl("/root/test1/test2", "test2", NULL)
时,它会像预期的那样工作得很好。这是为什么?
另外请问,如果我设置fp
重定向到stdin
,然后使用execl
函数运行另一个程序,子程序会得到输入在 fp
是否?
'/root/test1/'中的文件:
test2
test2.cpp
test3
test3.cpp
execl函数的值return为-1,errno为2。
test3.cpp
int main() {
FILE *fp;
errno = 0;
fp = fopen("log.txt", "r");
dup2(fileno(fp), fileno(stdin));
cout << chdir("/root/test1") << endl;
cout << chroot("/root/test1") << endl;
DIR *dir = opendir("/");
dirent *list;
while ((list = readdir(dir)) != NULL) {
cout << list -> d_name << " ";
}
cout << endl;
closedir(dir);
errno = 0;
cout << execl("/test2", "test2", NULL) << endl;
cout << errno << endl;
cout << strerror(errno) << endl;
return 0;
}
test2.cpp
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int a,b;
cin >> a;
scanf("%d",&b);
cout << a+b << endl;
printf("%d",a+b);
return 0;
}
log.txt
111 222
输出*
0
0
. test3.cpp test3 .. test2 test2.cpp log.txt
-1
2
No such file or directory
复制 /usr /lib /lib64 和 /bin/bash 到 /root/test1