клон: операция не разрешена с использованием C - PullRequest
0 голосов
/ 11 января 2020

Я использую Clone (), чтобы изолировать процесс, который оказывается персонализированной оболочкой, которая выполняет простые команды (ls, echo ..). В моем основном я использую функцию Clone (), которой я передаю флаги пространства имен. Теперь он компилируется, но выдает мне эту ошибку в оболочке, которая является результатом написанного мной кода. :

клон: Операция не разрешена.

Это код:

#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sched.h>
#include <sys/types.h>
#include <errno.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/fcntl.h>
#include <sys/mount.h>

int child(void *args)
{
printf("pid as seen in the child: %lu\n", (unsigned long)getpid());
// unmount all
// chroot (bind mount/pivot root dance)
// mount /proc (make /dev?)
// remove capabilities? or switch user
spawn_bash();
}

int spawn_bash(void)
{
char *newargv[] = { "/bin/bash", NULL };

execv("/bin/bash", newargv);
perror("exec");
exit(EXIT_FAILURE);
}

int main()
{
int namespaces = CLONE_NEWUTS|CLONE_NEWPID|CLONE_NEWIPC|CLONE_NEWNS|CLONE_NEWNET;
pid_t p = clone(child, malloc(4096) + 4096, SIGCHLD|namespaces, NULL);
if (p == -1) {
perror("clone");
exit(1);
}
printf("child pid: %lu\n", p);
waitpid(p, NULL, 0);
return 0;
}

Я уже искал, но все, что я нашел, был еще один пользователь, который работал с Docker, что не в моем случае. Любая помощь будет оценена. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...