Добрый день!
Собирать так: «gcc main.c --static»
#define _GNU_SOURCE
#include <sched.h>
int main() {
if(unshare(CLONE_NEWUSER)!=0) {printf("unshare ERR\n"); return -1;};
if (chroot("./")!=0) {printf("chroot ERR\n"); return -5;};
chdir("/");
sleep(5);
return 0;
}
#define _GNU_SOURCE
#include <sched.h>
int main() {
if (chroot("./")!=0) {printf("chroot ERR\n"); return -5;};
chdir("/");
if(unshare(CLONE_NEWUSER)!=0) {printf("unshare ERR\n"); return -1;};
sleep(5);
return 0;
}
Первый вариант работает, а второй - нет (unshare возвращает -1 EPERM (Operation not permitted)).
В манах такое поведение не описано. Чем это обусловленно? У кого нибудь возникали такие ошибки?