Unionfs-fuse chroot를 사용하면 /dev/*에 액세스할 수 없습니다.

Unionfs-fuse chroot를 사용하면 /dev/*에 액세스할 수 없습니다.

나는 다른 시스템을 설치할 필요가 없도록 chroot 감옥을 만들기 위해 Unionfs-fuse를 결합했습니다.

그러나 결과 시스템의 /dev 항목은 읽을 수 없습니다. 이로 인해 /dev/random, /dev/null및 에 액세스해야 하는 프로그램에 문제가 발생할 수 있습니다 /dev/urandom.

나는 영구 파일로 구성된 디렉터리를 만들고 다음을 사용하여 mknod위 파일과 동등한 파일을 만들어 이 문제를 직접 해결하려고 했습니다.여기, 그런 다음 공용체를 만듭니다.

# unionfs-fuse -o cow /chroot/files=RW:/chroot/persistent/:/ /chroot/chroot/

그런 다음,

# chroot chroot/

그러나 시도할 때:

# head -c 10 /dev/random | hexdump -C

오류가 발생합니다.

head: cannot open `/dev/random' for reading: Permission denied

이 문제를 어떻게 해결해야 합니까?

/dev( like 또는 /dev/sd*의 다른 파일에 액세스할 필요가 없습니다 /dev/mem.)

답변1

설명은 다음과 같습니다.mount.fuse매뉴얼 페이지:

파일 시스템은 기본적으로 마운트되며 nodev,nosuid권한이 있는 사용자만 재정의할 수 있습니다.

nodev옵션을 사용하면 커널은 마운트된 파일 시스템의 장치에 대한 모든 액세스를 비활성화합니다. 이 nosuid옵션을 사용하면 커널은 setuid 및 setgid 속성을 무시합니다. 루트가 아닌 사용자가 파일 시스템을 마운트할 때 보안을 위해 두 옵션 모두 필요합니다. 그렇지 않으면 마운트하는 사용자가 파일 시스템을 우회하여 모든 디스크에 액세스할 수 있도록 허용하는 setuid 루트 쉘 또는 장치를 생성할 수 있습니다.

allow_other루트가 아닌 사용자가 파일 시스템에 액세스하려는 경우에도 이 옵션이 필요합니다.

unionfs-fuse -o cow,dev,suid,allow_other /chroot/files=RW:/chroot/persistent/:/ /chroot/chroot/

chroot에 표시되는 장치를 제한하려면 연합 마운트를 사용하는 것이 아닙니다. 대신 dev필요한 것을 포함하는 최소한의 것을 포기 하고 설치 /dev하십시오. tmpfs로 만들 수 있습니다.

unionfs-fuse -o cow,suid,allow_other /chroot/files=RW:/chroot/persistent/:/ /chroot/chroot/
mount -t tmpfs -o mode=755 chroot-dev /chroot/chroot/dev
cp -a /dev/null /dev/zero /dev/urandom /chroot/chroot/dev
mkdir /chroot/chroot/dev/pts
mount --bind /dev/pts /chroot/chroot/dev/pts

tmpfs 대신 준비된 장치가 포함된 디렉터리를 바인드 마운트할 수 있습니다. /dev/ptschroot에서 의사 터미널을 얻으려면 바인드 마운트가 필요합니다 .

관련 정보