systemd-devel ์ ๋ํ ํ ๋ก ( 6์ ๋ฐ 8์ )์ ์ํด ์ด๋ฐ๋์์ต๋๋ค.
systemd-nspawn์ ํ์ดํธ๋ฆฌ์คํธ์ ์๋ ์์คํ
ํธ์ถ์ ๋ํด EPERM
๋ฅผ ๋ฐํํ๋๋ก ์ ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ openat2
์ ๊ฐ์ ๊ฒฝ์ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ฌ๊ธฐ์ libc๋ ENOSYS
๋ฅผ ํ์ธํ๊ณ ๋ค๋ฅธ ๊ตฌํ์ผ๋ก ๋์ฒดํฉ๋๋ค.
'๋๋ถ๋ถ ์ฌ๋ฐ๋ฅธ' ์๋ฃจ์
์ syscall ๋ฒํธ๊ฐ seccomp๊ฐ ๋น๋๋ ๋ ์กด์ฌํ๋ ์ ์๋ syscall ๋ฒ์ ๋ด์ ์๋์ง ํ์ธํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ์ฝ๋ ์ผ์ด์ค๊ฐ ์๋ค๊ณ ํ์ ํ์ง๋ง(์ผ๋ถ ์์น๊ฐ ์ด์ํ ์ผ์ ํ๋ค๋ ๊ฒ์ ์๊ณ ์์), syscalls.csv
๋ฑ์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋๊ตฌ๊ฐ ์๋ ค์ง ์ต๋ ์์คํ
ํธ์ถ ๋ฒํธ์ ๋ํด ๊ฐ๋จํ #define
๋ฅผ ์์ฑํ ์ ์๋ค๋ฉด ์ ์ฉํ?
์๋ ํ์ธ์ @srd424์ ๋๋ค. ๋๋ ๋น์ ์ด ์ด ๋ฌธ์ ์์ ๋ฌด์์ ์๊ตฌํ๋์ง ์ดํดํ๊ณ ์๋์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค ... ํน์ ์์คํ ํธ์ถ์ด ํด๋น ์์น์ ๊ตฌํ๋์๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด libseccomp๊ฐ ์ฃผ์ด์ง ์์คํ ํธ์ถ์ ๋ํด "์๊ณ ์๋์ง" ์ฌ๋ถ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์๊ณ ์ถ์ดํ๋ ๊ฒ ๊ฐ์ต๋๋ค. /ABI ๋ค?
๊ทธ๋ ๋ค๋ฉด seccomp_syscall_resolve_name(...)
๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐํ ๊ฐ์ด __NR_SCMP_ERROR
์ด๋ฉด ์์คํ
ํธ์ถ์ด libseccomp์ ์๋ ค์ง์ง ์๊ณ , ์์์ด๋ฉด ๊ธฐ๋ณธ ์์น/ABI์ ์์คํ
ํธ์ถ์ด ์กด์ฌํ๊ณ , ์์์ด๋ฉด ๊ธฐ๋ณธ ์์น/์ ์์คํ
ํธ์ถ์ด ์กด์ฌํ์ง ์์ต๋๋ค. ์๋น. ๊ทธ๊ฒ ๋น์ ์ ์ํด ์๋ํฉ๋๊น?
๊ทธ๊ฒ์ ํํฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค .. ์ฅํฉํฉ๋๋ค!
๋ด๊ฐ ํ๊ณ ์ถ์๋ ๊ฒ์ ํํฐ ๊ท์น์ด ์์คํ
ํธ์ถ ๋ฒํธ๋ฅผ ์๋ ค์ง ๊ฐ์ฅ ๋์ ๋ฒํธ์ ๋น๊ตํ๋๋ก ํ๊ณ , ๋ ํฌ๋ฉด ENOSYS
๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด EPERM
๋ฐํํ๋ ๊ฒ์
๋๋ค(ํ์ดํธ๋ฆฌ์คํธ์ ์๋ ์์คํ
ํธ์ถ์ด ์ฒ๋ฆฌ๋์๋ค๊ณ ๊ฐ์ ์ด์ ๊ท์น์ ๋ฐ๋ผ.)
๊ทธ๋ฌ๋ seccomp_rule_add
์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ณด๋ฉด ์๋ํ๋์ง ํ์ ํ ์ ์์ต๋๋ค. syscall ๋ฒํธ๋ ํน๋ณํ ์ฒ๋ฆฌ๋ฉ๋๋ค. ์์ bpf ํํฐ๊ฐ ์ด๋ฅผ ์ํํ๋๋ก ๊ตฌ์ฑ๋ ์ ์์ง๋ง ์ด๋ libseccomp์ ๋ํ ๋ณด๋ค ์นจ์
์ ์ธ ๋ณ๊ฒฝ์ ์๋ฏธํ ๊ฒ์
๋๋ค. ์๋ง๋ ์ ๊ธ์ฌ ๋ฑ๊ธ๋ณด๋ค ๋์ ๊ฒ์
๋๋ค!
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ๋ฌ ์ฌ์ฉ์์๊ฒ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ libseccomp์ ์ถ๊ฐํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋ฅ์ผ ์๋ ์๊ณ ๊ทธ๋ ์ง ์์ ์๋ ์์ต๋๋ค. ์ฝ๊ฐ ๋ ์ ๊ตํ ๊ธฐ๋ณธ ์์ ์ ์์ฑํ๋ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค(๊ทธ๋ฅ?).
๊ทธ๊ฒ์ ํํฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค .. ์ฅํฉํฉ๋๋ค!
๋ฌด์จ ๋ง์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค...? seccomp_syscall_resolve_name(...)
๋ํ ํธ์ถ์ ์ค์ ๋ก ํํฐ์ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๋ด๋ถ libseccomp syscall db๋ฅผ ์ฟผ๋ฆฌํ์ฌ syscall ํด๊ฒฐ์ ์ํํฉ๋๋ค. ํ ๋ฒ, ์ฒ ๋ฒ ๋๋ ์ ๋ ํธ์ถํ์ง ์์ ์ ์์ผ๋ฉฐ ํํฐ๋ ์ ํํ ๋์ผํฉ๋๋ค. :)
๋ด๊ฐ ํ๊ณ ์ถ์๋ ๊ฒ์ ํํฐ ๊ท์น์ด ์์คํ ํธ์ถ ๋ฒํธ๋ฅผ ์๋ ค์ง ๊ฐ์ฅ ๋์ ๋ฒํธ์ ๋น๊ตํ๋๋ก ํ๊ณ , ๋ ํฌ๋ฉด ENOSYS๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด EPERM์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค(ํ์ดํธ๋ฆฌ์คํธ์ ์๋ ์์คํ ํธ์ถ์ด ์ด์ ๊ท์น์ ์ํด ์ฒ๋ฆฌ๋์๋ค๊ณ ๊ฐ์ ).
์๊ฒ ์ต๋๋ค. ์ด์ ๋น์ ์ด ๋ฌด์์ ์๊ตฌํ๋์ง ์ดํดํ๊ธฐ ์์ํ ๊ฒ ๊ฐ์ต๋๋ค. ์์คํ
ํธ์ถ์ด libseccomp์ ๋ํด ์ ์ ์๋ ๊ฒฝ์ฐ ์์ฉ ํ๋ก๊ทธ๋จ ์ฝ๋๊ฐ ์๋ ํํฐ ์์ฒด๊ฐ ํน์ ์์
์ ์ํํ๊ธฐ๋ฅผ ์ํฉ๋๋ค(์์ ์์์ ENOSYS
๋ฐํ). ๊ธฐ๋ณธ์ ์ผ๋ก ๊ทธ๊ฒ ๋ค์ผ, ์๋๋ฉด ๋ด๊ฐ ๋ค์ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์๋ ๊ฑธ๊น?
์์์ ์ธ๊ธํ ๋ ๋ฒ์งธ ์ค๋ ๋์ ์ด ๋๊ธ ์ ์ ๋ฅผ ์๊ฒ ๋ง๋ค์์ต๋๋ค :+1:
๋๋ libseccomp์์ ENOSYS ์ฒ๋ฆฌ์ ๋ํ ํ ๋ก ์ ์ด๋ ค๊ณ ์๋ํ์ต๋๋ค.
https://github.com/seccomp/libseccomp/issues/286 , ํ์ง๋ง ์๋ง ์๋ ๊ฒ์ ๋๋ค
๋งค์ฐ ์ผ๊ด์ฑ์ด ์์ต๋๋ค..
๋น์ ์ด ์ธ๊ธํ ์ค๋ ๋๋ฅผ ์ฝ์ ํ, ๋๋ ๊ฐ์ ํ์ด์ง์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๊ตฐ๊ฐ(libseccomp, nspawn, whoever)๊ฐ ENOSYS
๋ฐํํ ์ ์์ผ๋ฉด glibc๋ ์๋ก์ด ์์คํ
ํธ์ถ(์: openat2
)์์ ์ด์ ์์คํ
ํธ์ถ(์: openat
๋ก ํด๋ฐฑ์ ์๋ํฉ๋๋ค. EPERM
๋ฅผ glibc์ ๋ฐํํ๋ฉด glibc๋ ํธ์ถ์ด ํ์ฉ๋์ง ์์๋ค๊ณ ์๊ฐํ๊ณ glibc๋ ํฌ๊ธฐํฉ๋๋ค. ์ด๊ฒ์ด ์ด ํธ์ ์ด๊ธฐ ๋
ผํ์ ๊ณต์ ํ๊ฒ ๋ฐ๊พธ์ด ์ด ๊ฒ์
๋๊น?
๋๋ ๊ทธ ์๊ตฌ๊ฐ ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํ๋ค. libseccomp๊ฐ ์ด๋ฌํ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ ์ ์๋์ง ๋ ์๊ฐํด์ผ ํ์ง๋ง ํ์ฌ๋ก์๋ ์ด์๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ต์ข ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ ์ ์๋ ๊ธฐํ๊ฐ ๋ถ๋ช ํ ์์ต๋๋ค.
RFE์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋๊ตฐ๊ฐ(libseccomp, nspawn, whoever)๊ฐ
ENOSYS
๋ฐํํ ์ ์์ผ๋ฉด glibc๋ ์๋ก์ด ์์คํ ํธ์ถ(์:openat2
)์์ ์ด์ ์์คํ ํธ์ถ(์:openat
๋ก ํด๋ฐฑ์ ์๋ํฉ๋๋ค.EPERM
๋ฅผ glibc์ ๋ฐํํ๋ฉด glibc๋ ํธ์ถ์ด ํ์ฉ๋์ง ์์๋ค๊ณ ์๊ฐํ๊ณ glibc๋ ํฌ๊ธฐํฉ๋๋ค. ์ด๊ฒ์ด ์ด ํธ์ ์ด๊ธฐ ๋ ผํ์ ๊ณต์ ํ๊ฒ ๋ฐ๊พธ์ด ์ด ๊ฒ์ ๋๊น?
๋ค, ๋ง์ต๋๋ค. systemd ์ฌ๋๋ค์ ์๊ฒฌ์ EPERM์ด ๊ฑฐ๋ถ๋ ์์คํ ํธ์ถ์ ๋ํด ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํฉ๋ฆฌ์ ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์๋ง๋ ์ต์ข ์ฌ์ฉ์/๊ด๋ฆฌ์์๊ฒ "ํ์ฉ๋์ง ์์"์ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ "์"์ "์ด์ " ์์คํ ํธ์ถ์ ๊ตฌ๋ณํ๊ณ ์ธ์ํ ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋ํด ENOSYS๋ฅผ ์ํํ๋ ์์ด๋์ด์ ๋๋ค. ์ฑ๋ฅ์์ ์ด์ ๋ก BPF์ ๋ชจ๋ ๋จ์ผ ์์คํ ํธ์ถ์ ์ด๊ฑฐํ๊ณ ํ ์คํธํ๊ณ ์ถ์ง ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ํคํ ์ฒ๋น ์๋ ค์ง ์์คํ ํธ์ถ ์์ ๋ํ ์์ ์ํฐ๋งํฌ๋ฅผ ์ถ์ ํ๋ ๊ฒ์ด "์ต์ ์ ๋ ธ๋ ฅ" ๋ฐฉ๋ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค.
docker, podman, lxc ๋ฑ์ด seccomp ํํฐ๋ง์ ์ฌ์ฉํ์ฌ ์ด์ ์ ์ป์ ์ ์๋์ง ์์๋ณด๋ ๊ฒ์ด ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์ ๋ seccomp ์ด๋ฒคํธ์ ๋ก๊น ์ ํ์ฉํ๋ nspawn์ฉ ํจ์น๋ฅผ PRํ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋๋ฒ๊น ์ด ์กฐ๊ธ ๋ ์ฌ์์ง ๊ฒ์ ๋๋ค.
๋๋ ๊ทธ ์๊ตฌ๊ฐ ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํ๋ค. libseccomp๊ฐ ์ด๋ฌํ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ ์ ์๋์ง ๋ ์๊ฐํด์ผ ํ์ง๋ง ํ์ฌ๋ก์๋ ์ด์๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ต์ข ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ ์ ์๋ ๊ธฐํ๊ฐ ๋ถ๋ช ํ ์์ต๋๋ค.
RFE์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
@drakenclimber ์ ๋์ํฉ๋๋ค. ์ด ์์ฒญ์ ํฉ๋ฆฌ์ ์ผ๋ก ๋ค๋ฆฝ๋๋ค. ๊ฐ๋ฅํ ์๋ฃจ์ ์ ๋ํด ์๊ฐํ ์๊ฐ์ด ๋ ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. :)
์์ฃผ ๊ธฐ๋ณธ์ ์ธ ์์ค์์ ์ด๊ฒ์ RFE #11๊ณผ ์ ์ฌํ๋ฉฐ ๊ฒฐ๊ตญ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋์ฐํ์ง ์์ ๋ฐฉ์์ผ๋ก ์ด๊ฒ์ ๊ตฌํํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ผ ์ ์์ต๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ ์ง์๋๋ ์ต๋ ์ปค๋ API ๋ฒ์ ์ ์ง์ ํ ์ ์์ต๋๋ค. v5.8(๋ถ๋ช ํ ํ ํฐํ๋จ)๋ฟ๋ง ์๋๋ผ ๊ทธ ์ด์์ ๋ํ ์ฃผ์ด์ง ์์ ๊ณผ libseccomp๊ฐ ๋๋จธ์ง๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. @srd424 ์ฌ๋ฌ๋ถ์๊ฒ ํจ๊ณผ๊ฐ ์์ต๋๊น?
์๋ ํ์ธ์, ์ด๊ฒ์ https://github.com/systemd/systemd/pull/16739 ์์๋ ๋ ผ์๋์์ต๋๋ค
์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์๋๋ ์ต๋ ์ปค๋ API ๋ฒ์ (์: v5.8(๋ถ๋ช ํ ํ ํฐํ๋จ))๊ณผ ๊ทธ ์ด์์ ๋ํด ์ฃผ์ด์ง ์์ ์ ์ง์ ํ ์ ์์ผ๋ฉฐ ๋๋จธ์ง๋ libseccomp๊ฐ ์ฒ๋ฆฌํฉ๋๋ค.
์ด๊ฒ์ ์ ์๋ํฉ๋๋ค. systemd/systemd-nspawn์์ ๋ช ์์ ์ผ๋ก ํ์ฉ ๋ชฉ๋ก ๋ฐ ๊ฑฐ๋ถ ๋ชฉ๋ก์ ์๋ ๋ชจ๋ ์์คํ ํธ์ถ์ ๋ํด ์ฌ์ฉ์ ์ง์ errno๋ฅผ ๋ฐํํ๊ณ "์ง์๋๋ ์ปค๋ API ๋ฒ์ "์ ๋ค๋ฅธ ์์คํ ํธ์ถ์ ๋ํด์๋ EPERM์ ๋ฐํํ๊ณ ์ ๋ฒ์ ์ ๋ํด์๋ ENOSYS๋ฅผ ๋ฐํํ๊ณ ์ถ์ต๋๋ค.
๊ตฌํ์ด ๋๋ฌด ๋ณต์กํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด amd64์ ๊ฒฝ์ฐ "์๋ ค์ง" ์์คํ
ํธ์ถ์ n <= 181 || 186 <= n <= 235 || 237 <= n <= 334 || 424 <= n <= 439
๋ก ํํํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ํํ์์ syscall ํ
์ด๋ธ์์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
์ค๋ ์์นจ์ ์นดํ์ธ์ด ๋ถ์กฑํ์ง๋ง ENOSYS๋ฅผ ์ฒ๋ฆฌํ๋ฉด ์ฑ๋ฅ ํฅ์์ ์ํด ํฐ ํ์ฉ ๋ชฉ๋ก์ ์์ ๊ฑฐ๋ถ ๋ชฉ๋ก์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๊น?
๊ตฌํ์ด ๋๋ฌด ๋ณต์กํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด amd64์ ๊ฒฝ์ฐ "์๋ ค์ง" ์์คํ ํธ์ถ์ n <= 181 || 186 <= n <= 235 || 237 <= n <= 334 || 424 <= n <= 439. ์ด๋ฌํ ํํ์์ ์์คํ ํธ์ถ ํ ์ด๋ธ์์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
์์ํ๋ฏ์ด ์ค์ BPF๋ ์์น/ABI์ ์ปค๋ ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์์ x86_64 ์์์ BPF๋ ๊ทธ๋ฆฌ ๋์์ง ์์ ๊ฒ์ด์ง๋ง ๋ค๋ฅธ ์์น/๋ฒ์ ์์๋ ๊ทธ๋ ๊ฒ ์ด์ด ์ข์ง ์์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , ์ด๊ฒ์ ์ด์ ๋์ผํ ๊ฒ์ ํจ๊ณผ์ ์ผ๋ก ์์ฒญํ๋ ๋ ๊ฐ์ง ๋ฌธ์ ์ด๋ฏ๋ก ์ฐ๋ฆฌ๊ฐ ํ๊ณ ์ถ์ดํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ... ๋๋ ๊ทธ๊ฒ์ด ์ผ๋ง๋ ์ฌ์ธ ๊ฒ์ธ์ง์ ๋ํด ๋ฐ์ด์ค๋ฅด๊ธฐ ์์ํ์ง ์์ ๊ฒ์ ๋๋ค. )
94๋ ๊ด๋ จ์ด ์์ ์ ์์ต๋๋ค.
์ผ์ข ์ ์, ์ผ์ข ์ ์๋์ค. ์ฌ๊ธฐ์๋ ๋ฒ์๊ฐ ํฌํจ๋์ง๋ง #94๋ ํธ์ถ์ ์ง์ ์ธ์ ๋ฒ์์ ๊ดํ ๊ฒ์ ๋๋ค(์ฌ์ ํ ์ฐ๋ฆฌ๊ฐ ํ๊ณ ์ถ์ ๊ฒ, PR์ด ์ข์ง ์์ ์๊ฐ์ ๋ค์ด์๊ณ API์ ์ฝ๊ฐ์ ์กฐ์ ์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค). ๋ฐ๋ฉด ์ฐ๋ฆฌ๊ฐ ๋งํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด์ ์ํด ์์ฑ๋๋ ์์์ ์ผ๋ก ์์ฑ๋ syscall ๋ฒ์.
์ค๋ ์์นจ์ ์นดํ์ธ์ด ๋ถ์กฑํ์ง๋ง ENOSYS๋ฅผ ์ฒ๋ฆฌํ๋ฉด ์ฑ๋ฅ ํฅ์์ ์ํด ํฐ ํ์ฉ ๋ชฉ๋ก์ ์์ ๊ฑฐ๋ถ ๋ชฉ๋ก์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๊น?
์๋ฅผ ๋ค์ด systemd์ ๊ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ ๊ด์ ์์ "์๋ก์ด" ์์คํ ํธ์ถ์ ์ฐจ๋จํ๋ ค๋ ๊ฒฝ์ฐ ์ ... ์ฐ๋ฆฌ๊ฐ ๊ฐ์ ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์๋ค๊ณ ๊ฐ์ ํ๋ฉด :)
๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ๋ฉด .. ํ์ฌ ํน์ ์์คํ ํธ์ถ์ _๋ณด์์ ์ผ๋ก_ ์ฐจ๋จํ๋ ค๋ ์ฌ๋์ ๋๊ตฌ๋ ํ์ฉ ๋ชฉ๋ก์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์๋ํ๋ฉด ์ต์ ์ปค๋์์ ์ด๋ค ์์คํ ํธ์ถ์ ์ถ๊ฐํ ์ง ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ์ ์๋ ์์คํ ํธ์ถ์ ์๋์ผ๋ก ์ฐจ๋จํ๋๋ก libseccomp๋ฅผ ์์ฒญํ ์ ์๋ค๋ฉด ์ด๋ ๋์ ์์ ๊ฑฐ๋ถ ๋ชฉ๋ก์ผ๋ก ์์ ํ๊ฒ ์ ํํ ์ ์๋ค๋ ์๋ฏธ์ ๋๊น?
๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ๋ฉด .. ํ์ฌ ํน์ ์์คํ ํธ์ถ์ _๋ณด์์ ์ผ๋ก_ ์ฐจ๋จํ๋ ค๋ ์ฌ๋์ ๋๊ตฌ๋ ํ์ฉ ๋ชฉ๋ก์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์๋ํ๋ฉด ์ต์ ์ปค๋์์ ์ด๋ค ์์คํ ํธ์ถ์ ์ถ๊ฐํ ์ง ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ์ ์๋ ์์คํ ํธ์ถ์ ์๋์ผ๋ก ์ฐจ๋จํ๋๋ก libseccomp๋ฅผ ์์ฒญํ ์ ์๋ค๋ฉด ์ด๋ ๋์ ์์ ๊ฑฐ๋ถ ๋ชฉ๋ก์ผ๋ก ์์ ํ๊ฒ ์ ํํ ์ ์๋ค๋ ์๋ฏธ์ ๋๊น?
์ ๋ง ๋ฉ์ง ๊ธฐ๋ฅ์ด ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ๊ฑฐ๊ธฐ์ ๋๋ฌํ ์ ์๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ๋ฐ๋๋๋ค. ์๋ฅผ ๋ค์ด Docker๋ ํ์ฌ ํ์ฉ ๋ชฉ๋ก์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ
์ด๋ ๊ฒ ํฐ ๋ชฉ๋ก์ด ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ด๋ง์ด๋งํ ์ ์์ต๋๋ค. v2.5์์ ์ถ๊ฐํ ์ด์ง ํธ๋ฆฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋ค์ ์ํ๋ ์ ์์ต๋๋ค.
๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ๋ฉด .. ํ์ฌ ํน์ ์์คํ ํธ์ถ์ _๋ณด์์ ์ผ๋ก_ ์ฐจ๋จํ๋ ค๋ ์ฌ๋์ ๋๊ตฌ๋ ํ์ฉ ๋ชฉ๋ก์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์๋ํ๋ฉด ์ต์ ์ปค๋์์ ์ด๋ค ์์คํ ํธ์ถ์ ์ถ๊ฐํ ์ง ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ์ ์๋ ์์คํ ํธ์ถ์ ์๋์ผ๋ก ์ฐจ๋จํ๋๋ก libseccomp๋ฅผ ์์ฒญํ ์ ์๋ค๋ฉด ์ด๋ ๋์ ์์ ๊ฑฐ๋ถ ๋ชฉ๋ก์ผ๋ก ์์ ํ๊ฒ ์ ํํ ์ ์๋ค๋ ์๋ฏธ์ ๋๊น?
์ด๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. libseccomp์ ์๋ ค์ง์ง ์๊ณ ์ฐจ๋จ ๋ชฉ๋ก ์์ฑ์์๊ฒ ์๋ ค์ง์ง ์์ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ libseccomp๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ง์๋๋ ์์คํ ํธ์ถ์ ๋ํ ๋ ๋ช ํํ ๊ทธ๋ฆผ์ ๊ฐ์ง๊ณ ์๋๋ผ๋ ๊ฐ๋ ์ ๋ฌธ์ ๊ฐ ์ฌ๋ผ์ง์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ข์ ์ - ์๋ํ๋ ค๋ฉด ์ปค๋ ๋ฒ์ ์ผ๋ก ํ๊ทธ๊ฐ ์ง์ ๋ ์ ์ ์๋ ์ธํธ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ ๋ํด ์ฝ๊ฐ ๋ ผ์ ์ค์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๊ตฌํ์ด ๋๋ฌด ๋ณต์กํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด amd64์ ๊ฒฝ์ฐ "์๋ ค์ง" ์์คํ ํธ์ถ์ n <= 181 || 186 <= n <= 235 || 237 <= n <= 334 || 424 <= n <= 439. ์ด๋ฌํ ํํ์์ ์์คํ ํธ์ถ ํ ์ด๋ธ์์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
์์ํ๋ฏ์ด ์ค์ BPF๋ ์์น/ABI์ ์ปค๋ ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์์ x86_64 ์์์ BPF๋ ๊ทธ๋ฆฌ ๋์์ง ์์ ๊ฒ์ด์ง๋ง ๋ค๋ฅธ ์์น/๋ฒ์ ์์๋ ๊ทธ๋ ๊ฒ ์ด์ด ์ข์ง ์์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , ์ด๊ฒ์ ์ด์ ๋์ผํ ๊ฒ์ ํจ๊ณผ์ ์ผ๋ก ์์ฒญํ๋ ๋ ๊ฐ์ง ๋ฌธ์ ์ด๋ฏ๋ก ์ฐ๋ฆฌ๊ฐ ํ๊ณ ์ถ์ดํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ... ๋๋ ๊ทธ๊ฒ์ด ์ผ๋ง๋ ์ฌ์ธ ๊ฒ์ธ์ง์ ๋ํด ๋ฐ์ด์ค๋ฅด๊ธฐ ์์ํ์ง ์์ ๊ฒ์ ๋๋ค. )
ํ ์ด๋ธ์ ์๋นํ ์ฐ์์ ์ ๋๋ค.
>>> l = {int(s[1]):s[0] for s in (s.split() for s in open('syscalls-x86_64').readlines()) if len(s)>1}; x = np.array(sorted(l.keys())); np.diff(x)
array([ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 90, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1])
>>> l = {int(s[1]):s[0] for s in (s.split() for s in open('syscalls-alpha').readlines()) if len(s)>1}; x = np.array(sorted(l.keys())); np.diff(x)
array([ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1,
1, 1, 1, 2, 1, 1, 1, 3, 12, 3, 3, 1, 11, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 3, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 1, 1, 1])
>>> l = {int(s[1]):s[0] for s in (s.split() for s in open('syscalls-arm').readlines()) if len(s)>1}; x = np.array(sorted(l.keys())); np.diff(x)
array([1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 2, 1, 2, 3, 4,
1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2, 3, 1, 1,
1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 3, 3, 1, 1, 2, 1, 1, 1,
1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
>>> l = {int(s[1]):s[0] for s in (s.split() for s in open('syscalls-riscv64').readlines()) if len(s)>1}; x = np.array(sorted(l.keys())); np.diff(x)
array([ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 130, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1])
https://github.com/systemd/systemd/pull/16819 ์์ systemd-nspawn์ ๋ํ "์๋ ค์ง" ์์คํ ํธ์ถ ํํฐ๋ฅผ ๊ตฌํํ์ต๋๋ค https://github.com/systemd/systemd/pull/16819/commits/158e30ffd9355a7640a7276276eb9219b6c87914 ์๋ ์ผ๋ถ libseccomp ์์ฑ ํ๋ก๊ทธ๋จ ๋คํ๊ฐ ์์ต๋๋ค. ๊ทธ ๋คํ๋ ๊ธธ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์์ ๋ฐ๋ณตํ์ง ์๊ฒ ์ง๋ง SCMP_FLTATR_CTL_OPTIMIZE๋ ํ๋ก๊ทธ๋จ์ ๋ ํจ์จ์ ์ผ๋ก ๋ง๋ค ๋ฟ๋ง ์๋๋ผ ๋ ๊ธธ๊ฒ ๋ง๋ญ๋๋ค. ๋ฒ์ ๋น๊ต๋ฅผ ์ฌ์ฉํ๋ฉด 50๋ฐฐ ๋ โโ์งง๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
๋ฐฉ๊ธ ์ด ์ค๋ ๋๋ฅผ ์ฐพ์์ต๋๋ค. ๋น์ทํ ๋ผ์ธ์ ๋ํด ์๊ฐํ๊ณ ์์ผ๋ฉฐ ์ด๊ฒ์ ํ์คํ Docker/runc๋ ํด๊ฒฐํ๊ณ ์ ํ๋ ๊ฒ์ ๋๋ค. ์ต๋ ์ปค๋ ๋ฒ์ ์ผ๋ก ์ํํ๋ ๊ฒ์ด ์๋ง๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ผ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉด ํ๋กํ ์์ฑ์(๋ฐ ์ปจํ ์ด๋ ๋ฐํ์)๊ฐ ์์์ ๋ฐ๋ผ ์ถ๊ฐ๋ ์์คํ ํธ์ถ์ด๋ ์์ฑ ๋น์ ์ต์ ์์คํ ํธ์ถ์ ์ถ์ ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ๋กํ.
์์ ๋ ผ์๋ฅผ ๋ฐํ์ผ๋ก ์ฌ๊ธฐ ์๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค(๋ชจ๋?)์ 11๋ฒ ๋ฌธ์ ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ๋ฏฟ๋ ๊ฒ ๊ฐ์ต๋๋ค. ํฅํ ํ ๋ก ์ ์๋ ๋ฌธ์ (#11)๋ก ์ฎ๊ธฐ๊ธฐ ์ํด ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ ์ฌ๋์ด ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์์ ๋ ผ์๋ฅผ ๋ฐํ์ผ๋ก ์ฌ๊ธฐ ์๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค(๋ชจ๋?)์ 11๋ฒ ๋ฌธ์ ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ๋ฏฟ๋ ๊ฒ ๊ฐ์ต๋๋ค. ํฅํ ํ ๋ก ์ ์๋ ๋ฌธ์ (#11)๋ก ์ฎ๊ธฐ๊ธฐ ์ํด ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ ์ฌ๋์ด ์์ต๋๊น?