tail head cat sleep
QR code linking to this page

Man page  — CHROOT

명칭

chroot – 루트 디렉토리를 변경한다

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <unistd.h>

int
chroot(const char *dirname);

해설

dirname (은)는, ASCII 의 눌 캐릭터로 종료하는 디렉토리의 패스명의 주소입니다. chroot() (은)는, dirname (을)를 루트 디렉토리, 즉, ‘/’ 그리고 개시하는 패스명의 패스 검색의 개시점으로 합니다.

디렉토리가 루트 디렉토리가 되기 위해서(때문에)는, 프로세스에 그 디렉토리에의 실행 (검색) 허가가 없으면 안됩니다.

chroot() (은)는 프로세스의 현재의 디렉토리에 영향을 주지 않는 것에 주의할 필요가 있습니다.

이 함수를 호출할 수 있는 것은 슈퍼 유저만입니다.

디렉토리를 참조하는 오픈 파일 기술자가 존재하는 경우, chroot() 호출은 sysctl 변수 ‘kern.chroot_allow_open_directories’ 의 설정에 따라, 다음과 같이 실패합니다:

kern.chroot_allow_open_directories’ 하지만 0 으로 설정되어 있는 경우, 디렉토리가 오픈되고 있으면 chroot() (은)는 항상 EPERM 그리고 실패합니다.

kern.chroot_allow_open_directories’ 하지만 1 에 세트 되고 있는 경우 (디폴트), 디렉토리가 오픈되고 있어, 그 프로세스가 chroot() 호출의 영향을 받는 경우, EPERM 그리고 실패합니다.

kern.chroot_allow_open_directories’ 하지만 다른 값의 경우, 오픈 디렉토리의 체크는 되지 않습니다.

정상적으로 완료하면(자), 값 0 이 돌려주어집니다. 그렇지 않은 경우는, 값 -1 이 돌려주어 에러를 나타내기 위해서(때문에) errno 하지만 설정됩니다.

에러

chroot() (은)는, 다음의 경우, 처리에 실패해, 루트 디렉토리는 변경되지 않습니다.
[ENOTDIR]
  패스의 원가요소중에 디렉토리 이외의 것이 포함되어 있습니다.
[EPERM]
  실효 유저 ID 가 슈퍼 유저가 아닙니다. 또는 디렉토리가 1 개(살) 이상의 파일 기술자에 의해 오픈되고 있습니다.
[ENAMETOOLONG]
  패스명의 원가요소가 255 캐릭터를 넘고 있는지, 또는 패스명 전체가 1023 캐릭터를 넘고 있습니다.
[ENOENT]
  지정의 디렉토리가 존재하지 않습니다.
[EACCES]
  지정된 패스에는, 검색이 허가되어 있지 않은 디렉토리가 포함되어 있습니다.
[ELOOP]
  패스명을 변환할 경우에 검출된 기호 연결이 너무 많습니다.
[EFAULT]
  path (은)는, 프로세스에 할당할 수 있었던 address 공간의 범위외를 가리키고 있습니다.
[EIO] 파일 시스템에 읽고 쓰기하고 있는 동안에 입출력 에러가 발생했습니다.

관련 항목

chdir(2), jail(2)

역사

chroot() 함수는 BSD 4.2 그리고 등장했습니다.

CHROOT (2) June 4, 1993

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

UNIX has been evolving feverishly for close to 30 years, sort of like bacteria in a cesspool — only not as attractive
— John Levine, "Unix for Dummies"