๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Back-end/CS ์ง€์‹

[Linux] SELinux์˜ ๊ฐœ๋… ๋ฐ ๋ณด์•ˆ ์„ค์ • ๋ฐฉ๋ฒ•

728x90
๋ฐ˜์‘ํ˜•

๐ŸŸก SELinux ๋ž€?

 

๊ด€๋ฆฌ์ž๊ฐ€ ์‹œ์Šคํ…œ ์—‘์„ธ์Šค ๊ถŒํ•œ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” Linux ์‹œ์Šคํ…œ์šฉ ๋ณด์•ˆ ์•„ํ‚คํ…์ฒ˜์ด๋‹ค. SELinux๋Š” ์‹œ์Šคํ…œ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ํ”„๋กœ์„ธ์Šค, ํŒŒ์ผ์— ๋Œ€ํ•œ ์—‘์„ธ์Šค ์ œ์–ด๋ฅผ ์ •์˜ํ•˜๊ณ  ์ •์ฑ…์—์„œ ํ—ˆ์šฉ๋œ ์—‘์„ธ์Šค๋งŒ์„ ์‹คํ–‰ํ•œ๋‹ค. 

 

์ „ํ†ต์ ์œผ๋กœ Linux์™€ UNIX ์‹œ์Šคํ…œ์€ DAC(Discretionary Access Control)๋ฅผ ์‚ฌ์šฉํ•ด์™”์ง€๋งŒ, SELinux๋Š” Linux์šฉ MAC(Mandatory Access Control) ์‹œ์Šคํ…œ์˜ ์˜ˆ์‹œ์ด๋‹ค. DAC์˜ ๊ฒฝ์šฐ์—๋Š” ํŒŒ์ผ๊ณผ ํ”„๋กœ์„ธ์Šค์— ์†Œ์œ ์ž๊ฐ€ ์žˆ๊ณ  ๋ฃจํŠธ ์‚ฌ์šฉ์ž๊ฐ€ DAC ์‹œ์Šคํ…œ์œผ๋กœ ์ „์ฒด ์—‘์„ธ์Šค ์ œ์–ด ๊ถŒํ•œ์„ ๊ฐ–๋Š”๋‹ค. ํ•˜์ง€๋งŒ SELinux์™€ ๊ฐ™์€ MAC ์‹œ์Šคํ…œ์—์„œ๋Š” ์—‘์„ธ์Šค ๊ด€๋ จ ๊ด€๋ฆฌ ์ •์ฑ…์ด ์„ค์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ์˜ DAC ์„ค์ •์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋””๋ ‰ํ† ๋ฆฌ์— ์—‘์„ธ์Šค ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋˜์–ด์žˆ๋‹ค. 

 

 

 

 

 

 

* SELinux ์˜ ๊ธฐ๋ณธ *

Security-Enhanced Linux์˜ ์ค„์ž„๋ง๋กœ ๋ณด์•ˆ์ด ํ–ฅ์ƒ๋œ ๋ฆฌ๋ˆ…์Šค๋ผ๊ณ  ์ •์˜๋˜์–ด ์žˆ๋‹ค. SELinux ์ƒ์—์„œ๋Š” ๊ฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ์„ค์ • ํŒŒ์ผ์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํด๋”์˜ ์œ„์น˜์— ๋Œ€ํ•ด์„œ ๊ถŒํ•œ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, httpd ํ”„๋กœ์„ธ์Šค๊ฐ€ php๋ฅผ ํ†ตํ•ด์„œ ํŠน์ • ๊ฒฝ๋กœ์— ํŒŒ์ผ์„ write ํ•˜๋Š” ๊ฒƒ๋„ SELinux context type์ด ๋งž์•„์•ผ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

SELinux๋Š” enforcing, permissive, disabled ์„ธ ๊ฐ€์ง€ ์ •์ฑ…์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. enforcing์˜ ๊ฒฝ์šฐ ๋ณด์•ˆ ์ •์ฑ…์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ณ , permissive์˜ ๊ฒฝ์šฐ๋Š” ๊ฒฝ๊ณ ๋งŒ ๋ณด์—ฌ์ฃผ๊ณ , disabled๋Š” ์•„์˜ˆ ๋กœ๋”ฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

 

โœ… SELinux ์„ค์ • ๋ฐฉ๋ฒ•

1. SELinux ๊ธฐ๋ณธ, ํ˜„์žฌ ์„ค์ • ํ™•์ธ ๋ฐ ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•
getenforce		# ํ˜„์žฌ ์„ค์ • ํ™•์ธ

# ์ž„์‹œ ์„ค์ • ๋ณ€๊ฒฝ
setenforce 0	# permissive
setenforce 1	# enforcing

# ์˜๊ตฌ์ ์ธ ์„ค์ • ๋ณ€๊ฒฝ
vi /etc/selinux/config

 

2. chcon์„ ์ด์šฉํ•œ context type ๋ณ€๊ฒฝ
# php ํ”„๋กœ์„ธ์Šค๊ฐ€ httpd ์ƒ์—์„œ ํŒŒ์ผ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ํ•„์š”ํ•  ๋•Œ (์›ํ•˜๋Š” ๊ฒฝ๋กœ์— ์„ค์ •)

chcon -t httpd_sys_rw_content_t -R /var/www/html/phpfile

=> SELinux๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์„ค์ •์— ๋ฌธ์ œ๋Š” ์‚ฌ๋ผ์ง€๊ฒ ์ง€๋งŒ ๋ณด์•ˆ์ด ์•ฝํ•ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, SELinux๋ฅผ ์ ์šฉํ•œ ์ƒํƒœ์—์„œ ํŠน์ • ํด๋” or ํŒŒ์ผ์˜ context type์„ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‘๋ฉด ์ข‹์€ ๊ฒƒ์ด๋‹ค.

 

3. SELinux ์„ค์ •๊ฐ’ ํ™•์ธ ๋ฐ ๋ณ€๊ฒฝ
getsebool htttpd_can_network_connect on
getsebool htttpd_can_network_connect 1

# ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ
getsebool htttpd_can_network_connect off

=> ๋ถ€์šธ(boolean)์ด๋ž€ SELinux์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ์„ค์ •์ด๋‹ค. SELinux ๊ธฐ๋Šฅ์„ ์ผœ๊ฑฐ๋‚˜ ๋Œ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ฐฑ ๊ฐ€์ง€ ์„ค์ •์ด ์žˆ์œผ๋ฉฐ, ์ด ์ค‘ ๋‹ค์ˆ˜๋Š” ์ด๋ฏธ ์‚ฌ์ „ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ httpd ํ”„๋กœ์„ธ์Šค์—์„œ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ํ—ˆ์šฉ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•