์๊ฐ์์ ์ํด ์ค๋นํ ๊ธฐ์ฌ ๋ฒ์ญ
SELinux ๋๋ Security Enhanced Linux๋ ์
์์ ์ธ ์นจ์
์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฏธ๊ตญ NSA(๊ตญ๊ฐ ์๋ณด๊ตญ)์์ ๊ฐ๋ฐํ ํฅ์๋ ์ก์ธ์ค ์ ์ด ๋ฉ์ปค๋์ฆ์
๋๋ค. ๊ธฐ์กด์ ์์(๋๋ ์ ํ) ๋ชจ๋ธ(English Discretionary Access Control, DAC) ์์ ๊ฐ์ (๋๋ ํ์) ์ก์ธ์ค ์ ์ด ๋ชจ๋ธ(English Mandatory Access Control, MAC), ์ฆ ์ฝ๊ธฐ, ์ฐ๊ธฐ, ์คํ ๊ถํ์ ๊ตฌํํฉ๋๋ค.
SELinux์๋ ์ธ ๊ฐ์ง ๋ชจ๋๊ฐ ์์ต๋๋ค.
- ์ํ โ ์ ์ฑ ๊ท์น์ ๋ฐ๋ผ ์ก์ธ์ค๊ฐ ๊ฑฐ๋ถ๋ฉ๋๋ค.
- ๊ด๋ํ โ ์ํ ๋ชจ๋์์๋ ๊ธ์ง๋๋ ์ ์ฑ ์ ์๋ฐํ๋ ํ์์ ๋ํ ๋ก๊ทธ๋ฅผ ์ ์งํฉ๋๋ค.
- ์ฅ์ ์ธ โ SELinux๋ฅผ ์์ ํ ๋นํ์ฑํํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. /etc/selinux/config
SELinux ๋ชจ๋ ๋ณ๊ฒฝ
ํ์ฌ ๋ชจ๋๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ค์์ ์คํํ์ธ์.
$ getenforce
๋ชจ๋๋ฅผ ํ์ฉ์ผ๋ก ๋ณ๊ฒฝํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ญ์์ค.
$ setenforce 0
๋๋ ๋ชจ๋๋ฅผ ๋ค์์์ ๋ณ๊ฒฝํ๋ ค๋ฉด ๊ด๋ ํ ์ ์ํ, ์คํํ๋ค
$ setenforce 1
SELinux๋ฅผ ์์ ํ ๋นํ์ฑํํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ตฌ์ฑ ํ์ผ์ ํตํด์๋ง ์ํํ ์ ์์ต๋๋ค.
$ vi /etc/selinux/config
๋นํ์ฑํํ๋ ค๋ฉด SELINUX ๋งค๊ฐ๋ณ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ์ญ์์ค.
SELINUX=disabled
SELinux ์ค์
๊ฐ ํ์ผ๊ณผ ํ๋ก์ธ์ค๋ ์ฌ์ฉ์, ์ญํ , ์ ํ ๋ฑ๊ณผ ๊ฐ์ ์ถ๊ฐ ์ ๋ณด๊ฐ ํฌํจ๋ SELinux ์ปจํ ์คํธ๋ก ํ์๋ฉ๋๋ค. SELinux๋ฅผ ์ฒ์ ํ์ฑํํ๋ ๊ฒฝ์ฐ ๋จผ์ ์ปจํ ์คํธ์ ๋ ์ด๋ธ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ๋ ์ด๋ธ๊ณผ ์ปจํ ์คํธ๋ฅผ ํ ๋นํ๋ ํ๋ก์ธ์ค๋ฅผ ํ๊ทธ ์ง์ ์ด๋ผ๊ณ ํฉ๋๋ค. ํ์๋ฅผ ์์ํ๋ ค๋ฉด ๊ตฌ์ฑ ํ์ผ์์ ๋ชจ๋๋ฅผ ๋ค์์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. ๊ด๋ ํ.
$ vi /etc/selinux/config
SELINUX=permissive
๋ชจ๋๋ฅผ ์ค์ ํ ํ ๊ด๋ ํ, ๋ฃจํธ์ ๋ค์ ์ด๋ฆ์ ๋น ์จ๊ฒจ์ง ํ์ผ์ ๋ง๋ญ๋๋ค. autorelabel
$ touch /.autorelabel
๊ทธ๋ฆฌ๊ณ ์ปดํจํฐ๋ฅผ ๋ค์ ์์ํ์ธ์
$ init 6
์ฐธ๊ณ : ์ฐ๋ฆฌ๋ ๋ชจ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค ๊ด๋ ํ ๋งํน์ฉ, ๋ชจ๋ ์ฌ์ฉ ์ดํ ์ํ ์ฌ๋ถํ ํ๋ ๋์ ์์คํ ์ด ์ถฉ๋ํ ์ ์์ต๋๋ค.
์ผ๋ถ ํ์ผ์์ ๋ค์ด๋ก๋๊ฐ ์ค๋จ๋๋ ๊ฒฝ์ฐ ํ์ํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค. ํ์๊ฐ ์๋ฃ๋๊ณ ์์คํ ์ด ๋ถํ ๋๋ฉด ๊ตฌ์ฑ ํ์ผ๋ก ์ด๋ํ์ฌ ๋ชจ๋๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค ์ํ๋ํ ๋ค์์ ์คํํฉ๋๋ค.
$ setenforce 1
์ด์ ์ปดํจํฐ์์ SELinux๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ํ์ฑํํ์ต๋๋ค.
๋ก๊ทธ ๋ชจ๋ํฐ๋ง
ํ์ํ๋ ๋์์ด๋ ์์คํ
์ด ์คํ๋๋ ๋์ ์ผ๋ถ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. SELinux๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํ๊ณ ํฌํธ, ์ ํ๋ฆฌ์ผ์ด์
๋ฑ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ฐจ๋จํ์ง ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ก๊ทธ๋ฅผ ์ดํด๋ด์ผ ํฉ๋๋ค. SELinux ๋ก๊ทธ๋ ๋ค์ ์์น์ ์์ต๋๋ค. /var/log/audit/audit.log
, ๊ทธ๋ฌ๋ ์ค๋ฅ๋ฅผ ์ฐพ๊ธฐ ์ํด ์ ์ฒด ๋ด์ฉ์ ์ฝ์ ํ์๋ ์์ต๋๋ค. audit2why ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๋ค์ ๋ช
๋ น์ ์คํํ์ญ์์ค.
$ audit2why < /var/log/audit/audit.log
๊ฒฐ๊ณผ์ ์ผ๋ก ์ค๋ฅ ๋ชฉ๋ก์ ๋ฐ๊ฒ ๋ฉ๋๋ค. ๋ก๊ทธ์ ์ค๋ฅ๊ฐ ์์ผ๋ฉด ๋ฉ์์ง๊ฐ ํ์๋์ง ์์ต๋๋ค.
SELinux ์ ์ฑ ๊ตฌ์ฑ
SELinux ์ ์ฑ ์ SELinux ๋ณด์ ๋ฉ์ปค๋์ฆ์ ๊ด๋ฆฌํ๋ ๊ท์น ์งํฉ์ ๋๋ค. ์ ์ฑ ์ ํน์ ํ๊ฒฝ์ ๋ํ ๊ท์น ์งํฉ์ ์ ์ํฉ๋๋ค. ์ด์ ๊ธ์ง๋ ์๋น์ค์ ๋ํ ์ ๊ทผ์ ํ์ฉํ๋ ์ ์ฑ ์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์์ ๋ณด๊ฒ ์ต๋๋ค.
1. ๋ ผ๋ฆฌ๊ฐ(์ค์์น)
์ค์์น(๋ถ์ธ)๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ ์ฑ ์ ์์ฑํ ํ์ ์์ด ๋ฐํ์ ์ ์ ์ฑ ์ ์ผ๋ถ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. SELinux ์ ์ฑ ์ ์ฌ๋ถํ ํ๊ฑฐ๋ ๋ค์ ์ปดํ์ผํ์ง ์๊ณ ๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์
FTP ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ํตํด ์ฌ์ฉ์์ ํ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ ค๊ณ ํ๊ณ ์ด๋ฏธ ๊ณต์ ํ์ง๋ง ์ก์ธ์คํ๋ ค๊ณ ํ๋ฉด ์๋ฌด๊ฒ๋ ํ์๋์ง ์๋๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ SELinux ์ ์ฑ
์ด FTP ์๋ฒ๊ฐ ์ฌ์ฉ์์ ํ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ๋๋ฌธ์
๋๋ค. FTP ์๋ฒ๊ฐ ํ ๋๋ ํฐ๋ฆฌ์ ์ก์ธ์คํ ์ ์๋๋ก ์ ์ฑ
์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. ๋ค์์ ์ํํ์ฌ ์ด๋ฅผ ์ํ ์ค์์น๊ฐ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
$ semanage boolean -l
์ด ๋ช ๋ น์ ํ์ฌ ์ํ(์ผ์ง ๋๋ ๊บผ์ง) ๋ฐ ์ค๋ช ๊ณผ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅํ ์ค์์น๋ฅผ ๋์ดํฉ๋๋ค. FTP ์ ์ฉ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์ผ๋ ค๋ฉด grep์ ์ถ๊ฐํ์ฌ ๊ฒ์์ ๊ตฌ์ฒดํํ ์ ์์ต๋๋ค.
$ semanage boolean -l | grep ftp
๊ทธ๋ฆฌ๊ณ ๋น์ ์ ๋ค์์ ์ฐพ์ ๊ฒ์ ๋๋ค
ftp_home_dir -> off Allow ftp to read & write file in user home directory
์ด ์ค์์น๋ ๋นํ์ฑํ๋์ด ์์ผ๋ฏ๋ก ๋ค์์ ์ฌ์ฉํ์ฌ ํ์ฑํํ๊ฒ ์ต๋๋ค. setsebool $ setsebool ftp_home_dir on
์ด์ ์ฐ๋ฆฌ์ ftp ๋ฐ๋ชฌ์ ์ฌ์ฉ์์ ํ ๋๋ ํ ๋ฆฌ์ ์ ๊ทผํ ์ ์์ ๊ฒ์
๋๋ค.
์ฐธ๊ณ : ๋ค์์ ์ํํ์ฌ ์ค๋ช
์์ด ์ฌ์ฉ ๊ฐ๋ฅํ ์ค์์น ๋ชฉ๋ก์ ์ป์ ์๋ ์์ต๋๋ค. getsebool -a
2. ๋ผ๋ฒจ๊ณผ ๋งฅ๋ฝ
์ด๋ SELinux ์ ์ฑ ์ ๊ตฌํํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ชจ๋ ํ์ผ, ํด๋, ํ๋ก์ธ์ค ๋ฐ ํฌํธ๋ SELinux ์ปจํ ์คํธ๋ก ํ์๋ฉ๋๋ค.
- ํ์ผ ๋ฐ ํด๋์ ๊ฒฝ์ฐ ๋ ์ด๋ธ์ ํ์ผ ์์คํ
์ ํ์ฅ ์์ฑ์ผ๋ก ์ ์ฅ๋๋ฉฐ ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋ณผ ์ ์์ต๋๋ค.
$ ls -Z /etc/httpd
- ํ๋ก์ธ์ค ๋ฐ ํฌํธ์ ๊ฒฝ์ฐ ๋ ์ด๋ธ ์ง์ ์ ์ปค๋์์ ๊ด๋ฆฌ๋๋ฉฐ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฌํ ๋ ์ด๋ธ์ ๋ณผ ์ ์์ต๋๋ค.
๋ฐฉ๋ฒ
$ ps โauxZ | grep httpd
ํญ๊ตฌ
$ netstat -anpZ | grep httpd
์
์ด์ ๋ ์ด๋ธ๊ณผ ์ปจํ
์คํธ๋ฅผ ๋ ์ ์ดํดํ๊ธฐ ์ํด ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋๋ ํ ๋ฆฌ ๋์ ์น ์๋ฒ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. /var/www/html/ ะธัะฟะพะปัะทัะตั /home/dan/html/
. SELinux๋ ์ด๋ฅผ ์ ์ฑ
์๋ฐ์ผ๋ก ๊ฐ์ฃผํ์ฌ ์นํ์ด์ง๋ฅผ ๋ณผ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด๋ HTML ํ์ผ๊ณผ ๊ด๋ จ๋ ๋ณด์ ์ปจํ
์คํธ๋ฅผ ์ค์ ํ์ง ์์๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ธฐ๋ณธ ๋ณด์ ์ปจํ
์คํธ๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํ์ญ์์ค.
$ ls โlz /var/www/html
-rw-rโrโ. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
์ฌ๊ธฐ ์์ด์ httpd_sys_content_t
HTML ํ์ผ์ ์ปจํ
์คํธ๋ก. ํ์ฌ ๋ค์ ์ปจํ
์คํธ๊ฐ ์๋ ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ๋ํด ์ด ๋ณด์ ์ปจํ
์คํธ๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
-rw-rโrโ. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ์ ๋ณด์ ์ปจํ ์คํธ๋ฅผ ํ์ธํ๋ ๋์ฒด ๋ช ๋ น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ semanage fcontext -l | grep '/var/www'
๋ํ ์ฌ๋ฐ๋ฅธ ๋ณด์ ์ปจํ ์คํธ๋ฅผ ์ฐพ์ผ๋ฉด semanage๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์คํธ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. /home/dan/html์ ์ปจํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ญ์์ค.
$ semanage fcontext -a -t httpd_sys_content_t โ/home/dan/html(/.*)?โ
$ semanage fcontext -l | grep โ/home/dan/htmlโ
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html
semanage๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ
์คํธ๊ฐ ๋ณ๊ฒฝ๋ ํ, Restorecon ๋ช
๋ น์ ํ์ผ ๋ฐ ๋๋ ํฐ๋ฆฌ์ ๋ํ ๊ธฐ๋ณธ ์ปจํ
์คํธ๋ฅผ ๋ก๋ํฉ๋๋ค. ์ด์ ์น ์๋ฒ๊ฐ ํด๋์์ ํ์ผ์ ์ฝ์ ์ ์์ต๋๋ค. /home/dan/html
์ด ํด๋์ ๋ณด์ ์ปจํ
์คํธ๊ฐ ๋ค์์ผ๋ก ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์
๋๋ค. httpd_sys_content_t
.
3. ๋ก์ปฌ ์ ์ฑ ๋ง๋ค๊ธฐ
์ ๋ฐฉ๋ฒ์ด ์์ฉ์ด ์๊ณ audit.log์ ์ค๋ฅ(avc/denial)๊ฐ ๋ฐ์ํ๋ ์ํฉ์ด ์์ ์ ์์ต๋๋ค. ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋ฉด ๋ก์ปฌ ์ ์ฑ ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์์์ ์ค๋ช ํ ๋๋ก audit2why๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ค๋ฅ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ก์ปฌ ์ ์ฑ ์ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด httpd(apache) ๋๋ smbd(samba)์ ๊ด๋ จ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ค๋ฅ๋ฅผ ํ์ ํ๊ณ ์ด์ ๋ํ ์ ์ฑ ์ ๋ง๋ญ๋๋ค.
apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy
์ฌ๊ธฐ์ http_policy
ะธ smb_policy
์ฐ๋ฆฌ๊ฐ ๋ง๋ ๋ก์ปฌ ์ ์ฑ
์ ์ด๋ฆ์
๋๋ค. ์ด์ ์์ฑ๋ ๋ก์ปฌ ์ ์ฑ
์ ํ์ฌ SELinux ์ ์ฑ
์ ๋ก๋ํด์ผ ํฉ๋๋ค. ์ด ์์
์ ๋ค์๊ณผ ๊ฐ์ด ์ํํ ์ ์์ต๋๋ค.
$ semodule โI http_policy.pp
$ semodule โI smb_policy.pp
๋ก์ปฌ ์ ์ฑ ์ด ๋ค์ด๋ก๋๋์์ผ๋ฏ๋ก ๋ ์ด์ audit.log์์ avc ๋๋ denail์ ์์ ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ SELinux๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ ์ฃผ๊ธฐ ์ํ ๋์ ์๋์์ต๋๋ค. ์ด ๊ธฐ์ฌ๋ฅผ ์ฝ์ ํ์๋ SELinux์ ๋ํด ์ข ๋ ์ต์ํด์ง๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ถ์ฒ : habr.com