SELinux๋ ๋ชจ๋ ์ ๊ทผ ๊ฒฐ์ ์ ์ฃผ์ฒด ๋ณด์ ์ปจํ ์คํธ(Subject Context), ๊ฐ์ฒด ๋ณด์ ์ปจํ ์คํธ(Target Context), ํด๋์ค(Object Class)๋ฅผ ์ธ๋ฑ์ค๋ก ์ผ์ ์ด๊ณ ์ ์ธ๋ฉ๋ชจ๋ฆฌ ์บ์์ธ **AVC(Access Vector Cache)**๋ฅผ ๋จผ์ ์กฐํํฉ๋๋ค. ์บ์ ๋ฏธ์ค ์ ์ปค๋ ๋ด Security Server๊ฐ ์ ์ฑ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํํ์ฌ ํ์ ์ ๋ด๋ฆฝ๋๋ค.
# Type Enforcement ํต์ฌ ๊ท์น ์์
# ๋ฌธ๋ฒ: allow [์ฃผ์ฒด_๋๋ฉ์ธ] [๊ฐ์ฒด_ํ์
]:[ํด๋์ค] { [๊ถํ๋ชฉ๋ก] };
allow httpd_t httpd_sys_content_t:file { read open getattr ioctl };
allow httpd_t httpd_log_t:file { create write append };
# ๊ฑฐ๋ถ ๊ธฐ๋ณธ ์ ์ฑ
(Neverallow ์์น)
neverallow httpd_t shadow_t:file { read write execute };
ํ๋ก์ธ์ค๊ฐ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ์คํ(execve)ํ ๋, ๊ณต๊ฒฉ์๊ฐ ์์์ ๊ณ ๊ถํ ๋๋ฉ์ธ์ผ๋ก ์์นํ์ง ๋ชปํ๋๋ก
3๊ฐ์ง ํ์ ์กฐ๊ฑด์ด ๋ง์กฑ๋์ด์ผ๋ง ์์ ํ๊ฒ ๋๋ฉ์ธ์ด ์ ์ด๋ฉ๋๋ค.
MLS(๋ค์ค ๋ ๋ฒจ ๋ณด์)๋ ์ ๋ถ ๋ฐ ๊ตญ๋ฐฉ ๋ฑ๊ธ์ ์๊ฒฉํ ๊ธฐ๋ฐ์ฑ์ ์ ์งํ๊ธฐ ์ํด Bell-LaPadula ์ํ์ ๋ณด์ ์ ๋ฆฌ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
์ฃผ์ฒด๋ ์์ ๋ณด๋ค ๋์ ๋ฏผ๊ฐ๋ ๋ฑ๊ธ์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์ ๋ ์ฝ์ ์ ์์ต๋๋ค.
์ฃผ์ฒด (Clearance: s0 - ์ผ๋ฐ) โโโ ์ฝ๊ธฐ ์๋ โโโบ ๊ฐ์ฒด (Level: s0) [ํ์ฉ: GRANTED] โโโ ์ฝ๊ธฐ ์๋ โโโบ ๊ฐ์ฒด (Level: s1:c0) [์ฐจ๋จ: -EACCES No Read Up!]
๋์ ๋ณด์ ๋ฑ๊ธ์ ๊ฐ์ง ์ฃผ์ฒด๋ ๋ฎ์ ๋ฑ๊ธ์ ๊ฐ์ฒด๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ถ(์ฐ๊ธฐ)ํ ์ ์์ต๋๋ค.
์ฃผ์ฒด (Clearance: s1:c0 - ๊ทน๋น) โโโ ์ฐ๊ธฐ ์๋ โโโบ ๊ฐ์ฒด (Level: s1:c0) [ํ์ฉ: GRANTED] โโโ ์ฐ๊ธฐ ์๋ โโโบ ๊ฐ์ฒด (Level: s0) [์ฐจ๋จ: -EACCES No Write Down!]
| ๋น๊ต ํญ๋ชฉ | ์ ํต์ DAC | SELinux (๋ ์ด๋ธ ๊ธฐ๋ฐ MAC) | AppArmor (๊ฒฝ๋ก ๊ธฐ๋ฐ MAC) |
|---|---|---|---|
| ๋ณด์ ํต์ ๊ธฐ์ค | ์์ ์ UID/GID | ์์ด๋ ธ๋ ๋ณด์ ์ปจํ ์คํธ (xattr ๋ ์ด๋ธ) | ์ ๊ทํ๋ ํ์ผ ์ ๋ ๊ฒฝ๋ก๋ช |
| ์ ๊ทผ ํต์ ๋ชจ๋ธ | ์์์ ์ ๊ทผ ์ ์ด | Type Enforcement (TE) + MLS/MCS | ๊ฒฝ๋ก ์์ผ๋์นด๋ ํ์ดํธ๋ฆฌ์คํธ |
| ํ๋๋งํฌ ๋ณ์กฐ ๋ฐฉ์ด | ์ทจ์ฝ | ์๋ฒฝ (์์ด๋ ธ๋์ ๋ ์ด๋ธ์ด ์ง์ ๊ท์) | ๋ณดํต (๊ฒฝ๋ก๋ช ๋ณ๊ฒฝ ์ ์๋ก์ด ํ๋กํ ๋งค์นญ) |
| ์ด์ ๋ฐ ํ๋ ๋ณต์ก๋ | ๋งค์ฐ ๋ฎ์ | ๋์ (audit2allow, setsebool, chcon ํ์) | ๋ฎ์ ~ ๋ณดํต (aa-genprof, aa-logprof) |
| ์ปค๋ ์บ์ ์์ง | dcache | AVC (Access Vector Cache) | DFA (Deterministic Finite Automaton) |
| ์ฃผ์ ์ฑํ ์ํ๊ณ | ๋ชจ๋ ๋ฆฌ๋ ์ค/์ ๋์ค | RHEL, CentOS, Fedora, Android, NSA | Ubuntu, Debian, SUSE |