pivot_root(2) - wariua/manpages-ko GitHub Wiki

NAME

pivot_root - ๋ฃจํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ฐ”๊พธ๊ธฐ

SYNOPSIS

int pivot_root(const char *new_root, const char *put_old);

์ฃผ์˜: ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•œ glibc ๋ž˜ํผ๊ฐ€ ์—†๋‹ค. NOTES ์ฐธ๊ณ .

DESCRIPTION

pivot_root()๋Š” ํ˜ธ์ถœ ํ”„๋กœ์„ธ์Šค์˜ ๋ฃจํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๋””๋ ‰ํ„ฐ๋ฆฌ put_old๋กœ ์˜ฎ๊ธฐ๊ณ  new_root๋ฅผ ํ˜ธ์ถœ ํ”„๋กœ์„ธ์Šค์˜ ์ƒˆ ๋ฃจํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ๋งŒ๋“ ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ pivot_root()๋ฅผ ์“ฐ๋Š” ๊ณณ์ด ์‹œ์Šคํ…œ ์‹œ๋™ ๋•Œ์ธ๋ฐ, ์‹œ์Šคํ…œ์—์„œ ์ž„์‹œ ๋ฃจํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ(๊ฐ€๋ น initrd)์„ ๋งˆ์šดํŠธ ํ•˜๊ณ ์„œ ์‹ค์ œ ๋ฃจํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๋งˆ์šดํŠธ ํ•œ ๋‹ค์Œ ์ตœ์ข…์ ์œผ๋กœ ํ›„์ž๋ฅผ ๋ชจ๋“  ๊ด€๋ จ ํ”„๋กœ์„ธ์Šค ๋‚ด์ง€ ์Šค๋ ˆ๋“œ์˜ ํ˜„์žฌ ๋ฃจํŠธ๋กœ ๋ฐ”๊พผ๋‹ค.

์ด์ „ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์“ฐ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์ง€ ์Šค๋ ˆ๋“œ์˜ ํ˜„์žฌ ๋ฃจํŠธ ๋ฐ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ pivot_root()์—์„œ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ๊ณ  ๋ฐ”๊พธ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. pivot_root()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„  ์ด์ „ ๋ฃจํŠธ๋ฅผ ๋ฃจํŠธ๋‚˜ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋А ๊ฒฝ์šฐ์—๋„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๊ฑธ ๋ณด์žฅํ•˜๋Š” ์†์‰ฌ์šด ๋ฐฉ๋ฒ• ํ•˜๋‚˜๋Š” pivot_root() ํ˜ธ์ถœ ์ „์— ๊ทธ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ๋ฃจํŠธ ๋ฐ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ new_root๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‹ค.

์œ„ ๋ฌธ๋‹จ์€ ์˜๋„์ ์œผ๋กœ ๋ชจํ˜ธํ•˜๊ฒŒ ์ž‘์„ฑ๋๋Š”๋ฐ, pivot_root() ๊ตฌํ˜„์ด ํ–ฅํ›„์— ๋ฐ”๋€” ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ž‘์„ฑ ์‹œ์  ํ˜„์žฌ๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค ๋‚ด์ง€ ์Šค๋ ˆ๋“œ์˜ ๋ฃจํŠธ ๋ฐ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์ด์ „ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์œผ๋ฉด ๊ทธ๊ฑธ pivot_root()์—์„œ new_root๋กœ ๋ฐ”๊พผ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด ์ฃผ์–ด์•ผ ์ „ํ˜€ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผ๋„ ํ•˜์ง€ ์•Š๋Š” ์ปค๋„ ์Šค๋ ˆ๋“œ๊ฐ€ ์ด์ „ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ž๊ธฐ ๋ฃจํŠธ ๋ฐ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์žก์•„์„œ ๊ณ„์† ์‚ฌ์šฉ ์ค‘์ด๋„๋ก ํ•˜๋Š” ๊ฑธ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค. ํ–ฅํ›„์—๋Š” ์ปค๋„ ์Šค๋ ˆ๋“œ์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ์„ ํฌ๊ธฐํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์–ด์„œ ๊ฝค ์นจ์Šต์ ์ธ ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ pivot_root()์—์„œ ์—†์•จ ์ˆ˜ ์žˆ๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

์ฐธ๊ณ ๋กœ ํ˜ธ์ถœ ํ”„๋กœ์„ธ์Šค์—๋„ ์œ„ ์‚ฌํ•ญ์ด ์ ์šฉ๋œ๋‹ค. ์ฆ‰ pivot_root()๊ฐ€ ํ˜ธ์ถœ ํ”„๋กœ์„ธ์Šค์˜ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜๋„ ์žˆ๊ณ  ์ฃผ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ pivot_root() ์งํ›„์— chdir("/")์„ ํ˜ธ์ถœํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค.

new_root์™€ put_old์— ๋‹ค์Œ ์ œ์•ฝ๋“ค์ด ์ ์šฉ๋œ๋‹ค.

  • ๋””๋ ‰ํ„ฐ๋ฆฌ์—ฌ์•ผ ํ•œ๋‹ค.

  • new_root์™€ put_old๊ฐ€ ํ˜„์žฌ ๋ฃจํŠธ์™€ ๊ฐ™์€ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์— ์žˆ์–ด์„  ์•ˆ ๋œ๋‹ค.

  • put_old๊ฐ€ new_root ์•„๋ž˜์— ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰ put_old๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž์—ด์— /..๋ฅผ 1๊ฐœ ์ด์ƒ ๋ง๋ถ™์—ฌ์„œ new_root์™€ ๋™์ผํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ๋‚˜์™€์•ผ ํ•œ๋‹ค.

  • put_old์— ๋‹ค๋ฅธ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋งˆ์šดํŠธ ๋ผ ์žˆ์–ด์„  ์•ˆ ๋œ๋‹ค.

๋” ๋งŽ์€ ์‚ฌ์šฉ๋ก€๋Š” pivot_root(8)๋ฅผ ๋ณด๋ผ.

ํ˜„์žฌ ๋ฃจํŠธ๊ฐ€ (๊ฐ€๋ น chroot(2)๋‚˜ pivot_root()๋ฅผ ํ˜ธ์ถœํ•œ ํ›„์—, ์•„๋ž˜ ์ฐธ๊ณ ) ๋งˆ์šดํŠธ ์ง€์ ์ด ์•„๋‹ˆ๋ฉด ์ด์ „ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ทธ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋งˆ์šดํŠธ ์ง€์ ์ด put_old์— ๋งˆ์šดํŠธ ๋œ๋‹ค.

new_root๊ฐ€ ๋งˆ์šดํŠธ ์ง€์ ์ด์–ด์•ผ ํ•œ๋‹ค. (์•„๋‹ˆ๋ผ๋ฉด new_root์— ์Šค์Šค๋กœ๋ฅผ ๋ฐ”์ธ๋“œ ๋ฐ”์šดํŠธ ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.)

new_root์™€ ๊ทธ ๋ถ€๋ชจ ๋งˆ์šดํŠธ์˜ ์ „ํŒŒ ์œ ํ˜•์ด MS_SHARED์—ฌ์„  ์•ˆ ๋œ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ put_old๊ฐ€ ๊ธฐ์กด ๋งˆ์šดํŠธ ์ง€์ ์ธ ๊ฒฝ์šฐ ๊ทธ ์ „ํŒŒ ์œ ํ˜•์ด MS_SHARED์—ฌ์„  ์•ˆ ๋œ๋‹ค.

new_root๊ฐ€ ๊ผญ ๋งˆ์šดํŠธ ์ง€์ ์ผ ํ•„์š”๋Š” ์—†๋‹ค. ๊ทธ ๊ฒฝ์šฐ์—๋Š” /proc/mounts์—์„œ new_root๋ฅผ ๋‹ด์€ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋งˆ์šดํŠธ ์ง€์ ์„ ๋ฃจํŠธ(/)๋กœ ๋ณด์—ฌ ์ฃผ๊ฒŒ ๋œ๋‹ค.

RETURN VALUE

์„ฑ๊ณต ์‹œ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์˜ค๋ฅ˜ ์‹œ -1์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ errno๋ฅผ ์ ์ ˆํžˆ ์„ค์ •ํ•œ๋‹ค.

ERRORS

stat(2)์ด ๋ฐ˜ํ™˜ํ•˜๋Š” ์˜ค๋ฅ˜๋“ค์„ pivot_root()๊ฐ€ (errno๋กœ) ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”๋ถˆ์–ด ๋‹ค์Œ์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

EBUSY
ํ˜„์žฌ ๋ฃจํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์— new_root๋‚˜ put_old๊ฐ€ ์žˆ๊ฑฐ๋‚˜ put_old์— ์ด๋ฏธ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋งˆ์šดํŠธ ๋ผ ์žˆ๋‹ค.
EINVAL
new_root๊ฐ€ ๋งˆ์šดํŠธ ์ง€์ ์ด ์•„๋‹ˆ๋‹ค.
EINVAL
put_old๊ฐ€ new_root ์•„๋ž˜์— ์žˆ์ง€ ์•Š๋‹ค.
EINVAL
ํ˜„์žฌ ๋ฃจํŠธ๊ฐ€ rootfs(์ดˆ๊ธฐ ramfs) ํŒŒ์ผ ์‹œ์Šคํ…œ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์— ์žˆ๋‹ค.
EINVAL
new_root์˜ ๋งˆ์šดํŠธ ์ง€์ ์ด๋‚˜ ๊ทธ ๋งˆ์šดํŠธ ์ง€์ ์˜ ๋ถ€๋ชจ ๋งˆ์šดํŠธ๊ฐ€ ์ „ํŒŒ ์œ ํ˜•์ด MS_SHARED๋‹ค.
EINVAL
put_old๊ฐ€ ์•„๋ฌธํŠธ ์ง€์ ์ด๊ณ  ์ „ํŒŒ ์œ ํ˜•์ด MS_SHARED๋‹ค.
ENOTDIR
new_root๋‚˜ put_old๊ฐ€ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค.
EPERM
ํ˜ธ์ถœ ํ”„๋กœ์„ธ์Šค๊ฐ€ CAP_SYS_ADMIN ์—ญ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค.

VERSIONS

๋ฆฌ๋ˆ…์Šค 2.3.41์—์„œ pivot_root()๊ฐ€ ๋„์ž…๋๋‹ค.

CONFORMING TO

pivot_root()๋Š” ๋ฆฌ๋ˆ…์Šค ์ „์šฉ์ด๋ฏ€๋กœ ์ด์‹์„ฑ์ด ์—†๋‹ค.

NOTES

glibc์—์„œ ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์˜ ๋ž˜ํผ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. syscall(2)์„ ์ด์šฉํ•ด ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

rootfs(์ดˆ๊ธฐ ramfs)๋ฅผ pivot_root() ํ•  ์ˆ˜ ์—†๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฃจํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๋ฐ”๊พธ๋Š” ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ rootfs์—์„œ ๋ชจ๋“  ๊ฑธ ์ง€์šฐ๊ณ , ์ƒˆ root๋กœ rootfs๋ฅผ ๋ฎ์–ด์„œ ๋งˆ์šดํŠธ ํ•˜๊ณ , ์ƒˆ /dev/console์— stdin/stdout/stderr๋ฅผ ๋ถ™์ด๊ณ , ์ƒˆ init(1)์„ exec ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๊ณผ์ •์„ ์œ„ํ•œ ํ—ฌํผ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์กด์žฌํ•œ๋‹ค. switch_root(8) ์ฐธ๊ณ .

BUGS

pivot_root()๊ฐ€ ์‹œ์Šคํ…œ ๋‚ด ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค์˜ ๋ฃจํŠธ ๋ฐ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

๋œ ๋ช…ํ™•ํ•œ pivot_root() ์‚ฌ์šฉ ๋ฐฉ์‹ ๋ช‡ ๊ฐ€์ง€๋Š” ๋น ๋ฅด๊ฒŒ ์‚ฌ๋žŒ์„ ๋Œ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

SEE ALSO

chdir(2), chroot(2), mount(2), stat(2), initrd(4), pivot_root(8), switch_root(8)


2019-08-02

โš ๏ธ **GitHub.com Fallback** โš ๏ธ