LINUX.ORG.RU

unshare(CLONE_NEWUSER) после chroot() сходит с ума (возвращает EPERM)

 , ,


0

1

Добрый день!

Собирать так: «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)).

В манах такое поведение не описано. Чем это обусловленно? У кого нибудь возникали такие ошибки?

В манах такое поведение не описано.

Ну конечно.

http://man7.org/linux/man-pages/man2/unshare.2.html

EPERM (since Linux 3.9) CLONE_NEWUSER was specified in flags and the caller is in a chroot environment (i.e., the caller's root directory does not match the root directory of the mount namespace in which it resides).

utf8nowhere ★★★
()
Ответ на: комментарий от vzzo

ОООО, опа, опять надо перестраивать свое представление))))

cyber_eagle
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.