pivot_root(2) - wariua/manpages-ko GitHub Wiki
pivot_root - ๋ฃจํธ ํ์ผ ์์คํ ๋ฐ๊พธ๊ธฐ
int pivot_root(const char *new_root, const char *put_old);์ฃผ์: ์ด ์์คํ ํธ์ถ์ ๋ํ glibc ๋ํผ๊ฐ ์๋ค. NOTES ์ฐธ๊ณ .
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๋ฅผ ๋ด์ ํ์ผ ์์คํ
์ ๋ง์ดํธ ์ง์ ์ ๋ฃจํธ(/)๋ก ๋ณด์ฌ ์ฃผ๊ฒ ๋๋ค.
์ฑ๊ณต ์ 0์ ๋ฐํํ๋ค. ์ค๋ฅ ์ -1์ ๋ฐํํ๋ฉฐ errno๋ฅผ ์ ์ ํ ์ค์ ํ๋ค.
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์ญ๋ฅ์ ๊ฐ์ง๊ณ ์์ง ์๋ค.
๋ฆฌ๋
์ค 2.3.41์์ pivot_root()๊ฐ ๋์
๋๋ค.
pivot_root()๋ ๋ฆฌ๋
์ค ์ ์ฉ์ด๋ฏ๋ก ์ด์์ฑ์ด ์๋ค.
glibc์์ ์ด ์์คํ ํธ์ถ์ ๋ํผ๋ฅผ ์ ๊ณตํ์ง ์๋๋ค. syscall(2)์ ์ด์ฉํด ํธ์ถํด์ผ ํ๋ค.
rootfs(์ด๊ธฐ ramfs)๋ฅผ pivot_root() ํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ๋ฃจํธ ํ์ผ ์์คํ
์ ๋ฐ๊พธ๋ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ rootfs์์ ๋ชจ๋ ๊ฑธ ์ง์ฐ๊ณ , ์ root๋ก rootfs๋ฅผ ๋ฎ์ด์ ๋ง์ดํธ ํ๊ณ , ์ /dev/console์ stdin/stdout/stderr๋ฅผ ๋ถ์ด๊ณ , ์ init(1)์ exec ํ๋ ๊ฒ์ด๋ค. ์ด ๊ณผ์ ์ ์ํ ํฌํผ ํ๋ก๊ทธ๋จ๋ค์ด ์กด์ฌํ๋ค. switch_root(8) ์ฐธ๊ณ .
pivot_root()๊ฐ ์์คํ
๋ด ๋ค๋ฅธ ๋ชจ๋ ํ๋ก์ธ์ค๋ค์ ๋ฃจํธ ๋ฐ ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ๋ฅผ ๋ฐ๊ฟ์ผ ํด์๋ ์ ๋๋ค.
๋ ๋ช
ํํ pivot_root() ์ฌ์ฉ ๋ฐฉ์ ๋ช ๊ฐ์ง๋ ๋น ๋ฅด๊ฒ ์ฌ๋์ ๋๊ฒ ๋ง๋ค ์ ์๋ค.
chdir(2), chroot(2), mount(2), stat(2), initrd(4), pivot_root(8), switch_root(8)
2019-08-02