์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๋ฅผ ์œ„ํ•œ SELinux ์น˜ํŠธ ์‹œํŠธ: ์ค‘์š”ํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ 42๊ฐ€์ง€ ๋‹ต๋ณ€

์ด ๊ธฐ์‚ฌ์˜ ๋ฒˆ์—ญ์€ ์ฝ”์Šค์˜ ํ•™์ƒ๋“ค์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "๋ฆฌ๋ˆ…์Šค ๊ด€๋ฆฌ์ž".

์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๋ฅผ ์œ„ํ•œ SELinux ์น˜ํŠธ ์‹œํŠธ: ์ค‘์š”ํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ 42๊ฐ€์ง€ ๋‹ต๋ณ€

์—ฌ๊ธฐ์„œ๋Š” ํ–ฅ์ƒ๋œ ๋ณด์•ˆ์„ ํ†ตํ•ด Linux์˜ ์‚ถ, ์šฐ์ฃผ ๋ฐ ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"์‚ฌ๋ฌผ์ด ํ•ญ์ƒ ๋ณด์ด๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅด๋‹ค๋Š” ์ค‘์š”ํ•œ ์ง„์‹ค์€ ์ƒ์‹์ž…๋‹ˆ๋‹ค..."

-๋”๊ธ€๋Ÿฌ์Šค ์• ๋ค์Šค, ์€ํ•˜์ˆ˜๋ฅผ ์—ฌํ–‰ํ•˜๋Š” ํžˆ์น˜ํ•˜์ด์ปค๋ฅผ์œ„ํ•œ ์•ˆ๋‚ด์„œ

์•ˆ์ „. ์‹ ๋ขฐ์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ์น˜. ์ •์ฑ…. ๋ฌต์‹œ๋ก ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž์˜ ๋„ค ๊ธฐ์ˆ˜. ๋ชจ๋‹ˆํ„ฐ๋ง, ๋ฐฑ์—…, ๊ตฌํ˜„, ๊ตฌ์„ฑ, ์—…๋ฐ์ดํŠธ ๋“ฑ ์ผ์ƒ์ ์ธ ์ž‘์—… ์™ธ์—๋„ ์‹œ์Šคํ…œ ๋ณด์•ˆ์— ๋Œ€ํ•œ ์ฑ…์ž„๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒ€์‚ฌ ๊ณต๊ธ‰์ž๊ฐ€ ๊ฐ•ํ™”๋œ ๋ณด์•ˆ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋„๋ก ๊ถŒ์žฅํ•˜๋Š” ์‹œ์Šคํ…œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ผ ๊ฐ™์€ ๋Š๋‚Œ ์—๋‹จ ํ—ŒํŠธ '๋ฏธ์…˜ ์ž„ํŒŒ์„œ๋ธ”'์—์„œ.

์ด๋Ÿฌํ•œ ๋”œ๋ ˆ๋งˆ์— ์ง๋ฉดํ•œ ์ผ๋ถ€ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ์น˜๋ฅผ ์ทจํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ๋ž€ ์•Œ์•ฝ, ๊ทธ๋“ค์€ ์ธ์ƒ, ์šฐ์ฃผ, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ํฐ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์„ ๊ฒฐ์ฝ” ์•Œ ์ˆ˜ ์—†์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ ๋ชจ๋‘ ์•Œ๊ณ  ์žˆ๋“ฏ์ด ๊ทธ ๋Œ€๋‹ต์€ 42์ž…๋‹ˆ๋‹ค.

์€ํ•˜์ˆ˜๋ฅผ ์—ฌํ–‰ํ•˜๋Š” ํžˆ์น˜ํ•˜์ด์ปค๋ฅผ ์œ„ํ•œ ์•ˆ๋‚ด์„œ์˜ ์ •์‹ ์— ๋”ฐ๋ผ ์ œ์–ด ๋ฐ ์‚ฌ์šฉ์— ๊ด€ํ•œ ์ค‘์š”ํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ 42๊ฐ€์ง€ ๋‹ต๋ณ€์ด ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. SELinux๋ฅผ ๊ท€ํ•˜์˜ ์‹œ์Šคํ…œ์—.

1. SELinux๋Š” ๊ฐ•์ œ ์•ก์„ธ์Šค ์ œ์–ด ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์—๋Š” ๋ ˆ์ด๋ธ”์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํŒŒ์ผ, ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฐ ์‹œ์Šคํ…œ ๊ฐœ์ฒด์—๋„ ๋ ˆ์ด๋ธ”์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์ฑ… ๊ทœ์น™์€ ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ํ”„๋กœ์„ธ์Šค์™€ ๊ฐœ์ฒด ๊ฐ„์˜ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ปค๋„์€ ์ด๋Ÿฌํ•œ ๊ทœ์น™์„ ์‹œํ–‰ํ•ฉ๋‹ˆ๋‹ค.

2. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ ˆ์ด๋ธ”๋ง โ€” ํ‘œ์‹œ(ํŒŒ์ผ, ํ”„๋กœ์„ธ์Šค, ํฌํŠธ ๋“ฑ) ๋ฐ ์œ ํ˜• ์‹œํ–‰ (์œ ํ˜•์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„œ๋กœ ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค).

3. ์˜ฌ๋ฐ”๋ฅธ ๋ผ๋ฒจ ํ˜•์‹ user:role:type:level (์„ ํƒ ๊ณผ๋ชฉ).

4. ๋‹ค๋‹จ๊ณ„ ๋ณด์•ˆ ์ œ๊ณต ๋ชฉ์ (๋‹ค๋‹จ๊ณ„ ๋ณด์•ˆ - MLS)๋Š” ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ์˜ ๋ณด์•ˆ ์ˆ˜์ค€์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค(๋„๋ฉ”์ธ)๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋น„๋ฐ€ ํ”„๋กœ์„ธ์Šค๋Š” ์ผ๊ธ‰ ๋น„๋ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

5. ๋‹ค์ค‘ ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด์•ˆ ๋ณด์žฅ(๋‹ค์ค‘ ๋ฒ”์ฃผ ๋ณด์•ˆ - MCS)์€ ์œ ์‚ฌํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„œ๋กœ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ๊ฐ€์ƒ ๋จธ์‹ , OpenShift ์—”์ง„, SELinux ์ƒŒ๋“œ๋ฐ•์Šค, ์ปจํ…Œ์ด๋„ˆ ๋“ฑ).

6. ๋ถ€ํŒ… ์‹œ SELinux ๋ชจ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•œ ์ปค๋„ ์˜ต์…˜:

  • autorelabel=1 โ†’ ์‹œ์Šคํ…œ์ด ๋ผ๋ฒจ ์žฌ์ง€์ •์„ ์‹คํ–‰ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • selinux=0 โ†’ ์ปค๋„์ด SELinux ์ธํ”„๋ผ๋ฅผ ๋กœ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • enforcing=0 โ†’ ํ—ˆ์šฉ ๋ชจ๋“œ๋กœ ๋กœ๋”ฉ

7. ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๋ ˆ์ด๋ธ”์„ ๋‹ค์‹œ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ:

# touch /.autorelabel
#reboot

์‹œ์Šคํ…œ ํ‘œ์‹œ์— ๋งŽ์€ ์ˆ˜์˜ ์˜ค๋ฅ˜๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ๋ฆฌ๋งˆํ‚น์ด ์„ฑ๊ณตํ•˜๋ ค๋ฉด ํ—ˆ์šฉ ๋ชจ๋“œ๋กœ ๋ถ€ํŒ…ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

8. SELinux๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด: # getenforce

9. SELinux๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด: # setenforce [1|0]

10. SELinux ์ƒํƒœ ํ™•์ธ: # sestatus

11. ๊ตฌ์„ฑ ํŒŒ์ผ: /etc/selinux/config

12. SELinux๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”? ๋‹ค์Œ์€ Apache ์›น ์„œ๋ฒ„์— ๋Œ€ํ•œ ํ‘œ์‹œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

  • ๋ฐ”์ด๋„ˆ๋ฆฌ ํ‘œํ˜„: /usr/sbin/httpdโ†’httpd_exec_t
  • ๊ตฌ์„ฑ ๋””๋ ‰ํ„ฐ๋ฆฌ: /etc/httpdโ†’httpd_config_t
  • ๋กœ๊ทธ ํŒŒ์ผ ๋””๋ ‰ํ„ฐ๋ฆฌ: /var/log/httpd โ†’ httpd_log_t
  • ์ฝ˜ํ…์ธ  ๋””๋ ‰ํ† ๋ฆฌ: /var/www/html โ†’ httpd_sys_content_t
  • ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ: /usr/lib/systemd/system/httpd.service โ†’ httpd_unit_file_d
  • ํ”„๋กœ์„ธ์Šค : /usr/sbin/httpd -DFOREGROUND โ†’ httpd_t
  • ํฌํŠธ: 80/tcp, 443/tcp โ†’ httpd_t, http_port_t

์ปจํ…์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค httpd_t, ๋ผ๋ฒจ์ด ๋ถ™์€ ๊ฐ์ฒด์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค httpd_something_t.

13. ๋งŽ์€ ๋ช…๋ น์ด ์ธ์ˆ˜๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. -Z ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณด๊ณ , ๋งŒ๋“ค๊ณ , ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š”.

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

์ปจํ…์ŠคํŠธ๋Š” ์ƒ์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ์ผ์ด ์ƒ์„ฑ๋  ๋•Œ ์„ค์ •๋ฉ๋‹ˆ๋‹ค(์ผ๋ถ€ ์˜ˆ์™ธ ์žˆ์Œ). RPM์€ ์„ค์น˜ ์ค‘์— ์ปจํ…์ŠคํŠธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

14. SELinux ์˜ค๋ฅ˜์—๋Š” ๋„ค ๊ฐ€์ง€ ์ฃผ์š” ์›์ธ์ด ์žˆ์œผ๋ฉฐ, ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ 15~21ํ•ญ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ผ๋ฒจ๋ง ๋ฌธ์ œ
  • SELinux๊ฐ€ ์•Œ์•„์•ผ ํ•  ์‚ฌํ•ญ ๋•Œ๋ฌธ์—
  • SELinux ์ •์ฑ…/์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ค๋ฅ˜
  • ๊ท€ํ•˜์˜ ์ •๋ณด๊ฐ€ ์†์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

15. ๋ผ๋ฒจ๋ง ๋ฌธ์ œ: ํŒŒ์ผ์ด ๋‹ค์Œ ์œ„์น˜์— ์žˆ๋Š” ๊ฒฝ์šฐ /srv/myweb ์ž˜๋ชป ํ‘œ์‹œ๋˜๋ฉด ์•ก์„ธ์Šค๊ฐ€ ๊ฑฐ๋ถ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ผ๋ฒจ์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • ๋™๋“ฑํ•œ ํ‘œ์‹œ๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ:
    # semanage fcontext -a -e /srv/myweb /var/www
  • ์ปจํ…์ŠคํŠธ ๋ณต์›(๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘):
    # restorecon -vR /srv/myweb

16. ๋ผ๋ฒจ๋ง ๋ฌธ์ œ: ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๋Œ€์‹  ์ด๋™ํ•˜๋ฉด ํŒŒ์ผ์€ ์›๋ž˜ ์ปจํ…์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด:

  • ๋ ˆ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…์ŠคํŠธ ๋ช…๋ น์„ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • ๋งํฌ ๋ ˆ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…์ŠคํŠธ ๋ช…๋ น์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค(๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘). # restorecon -vR /var/www/html/

17. ๋ฉด ๋‹น์‹ ์ด ์•Œ์•„์•ผ ํ•  SELinuxHTTPD๊ฐ€ ํฌํŠธ 8585์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ์Œ์„ SELinux์— ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

# semanage port -a -t http_port_t -p tcp 8585

18. ๋‹น์‹ ์ด ์•Œ์•„์•ผ ํ•  SELinux ๋ฎ์–ด์“ฐ์—ฌ์ง€๋Š” SELinux ์ •์ฑ…์— ๋Œ€ํ•œ ์ง€์‹ ์—†์ด SELinux ์ •์ฑ…์˜ ์ผ๋ถ€๊ฐ€ ๋Ÿฐํƒ€์ž„ ์‹œ ๋ณ€๊ฒฝ๋˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๋ถ€์šธ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, httpd๊ฐ€ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๋„๋ก ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค. # setsebool -P httpd_can_sendmail 1

19. ๋‹น์‹ ์ด ์•Œ์•„์•ผ ํ•  SELinux SELinux ์„ค์ • ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”๋ฅผ ์œ„ํ•œ ๋…ผ๋ฆฌ ๊ฐ’:

  • ๋ชจ๋“  ๋ถ€์šธ ๊ฐ’์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. # getsebool -a
  • ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋ณด๋ ค๋ฉด: # semanage boolean -l
  • ๋ถ€์šธ ๊ฐ’์„ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. # setsebool [_boolean_] [1|0]
  • ์˜๊ตฌ ์„ค์น˜์˜ ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. -P. ์˜ˆ : # setsebool httpd_enable_ftp_server 1 -P

20. SELinux ์ •์ฑ…/์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ๋‹ค์Œ์„ ํฌํ•จํ•œ ์˜ค๋ฅ˜๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋น„์ •์ƒ์ ์ธ ์ฝ”๋“œ ๊ฒฝ๋กœ
  • ๊ตฌ์„ฑ
  • ํ‘œ์ค€ ์ถœ๋ ฅ ๋ฆฌ๋””๋ ‰์…˜
  • ํŒŒ์ผ ์„ค๋ช…์ž ๋ˆ„์ถœ
  • ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ
  • ์ œ๋Œ€๋กœ ๊ตฌ์ถ•๋˜์ง€ ์•Š์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์˜คํ”ˆ ํ‹ฐ์ผ“(Bugzilla์— ๋ณด๊ณ ์„œ๋ฅผ ์ œ์ถœํ•˜์ง€ ๋งˆ์„ธ์š”. Bugzilla์—๋Š” SLA๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค).

21. ๊ท€ํ•˜์˜ ์ •๋ณด๊ฐ€ ์†์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค๋„๋ฉ”์ธ์ด ์ œํ•œ๋œ ๊ฒฝ์šฐ:

  • ์ปค๋„ ๋ชจ๋“ˆ ๋กœ๋“œ
  • ๊ฐ•์ œ SELinux ๋ชจ๋“œ ๋น„ํ™œ์„ฑํ™”
  • ์— ์“ฐ๊ธฐ etc_t/shadow_t
  • iptables ๊ทœ์น™ ๋ณ€๊ฒฝ

22. ์ •์ฑ… ๋ชจ๋“ˆ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ SELinux ๋„๊ตฌ:

# yum -y install setroubleshoot setroubleshoot-server

์žฌ๋ถ€ํŒ… ๋˜๋Š” ๋‹ค์‹œ ์‹œ์ž‘ auditd ์„ค์น˜ ํ›„.

23. ์‚ฌ์šฉ

journalctl

๊ด€๋ จ๋œ ๋ชจ๋“  ๋กœ๊ทธ ๋ชฉ๋ก์„ ํ‘œ์‹œํ•˜๋ ค๋ฉด setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24. ์‚ฌ์šฉ journalctl ํŠน์ • SELinux ํƒœ๊ทธ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. SELinux ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. setroubleshoot ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

26. ๋กœ๊น…: SELinux๋Š” ์—ฌ๋Ÿฌ ์œ„์น˜์— ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

  • / var / log / messages
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. ๋กœ๊น…: ๊ฐ์‚ฌ ๋กœ๊ทธ์—์„œ SELinux ์˜ค๋ฅ˜ ๊ฒ€์ƒ‰:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28. ํŠน์ • ์„œ๋น„์Šค์— ๋Œ€ํ•œ SELinux AVC(์•ก์„ธ์Šค ๋ฒกํ„ฐ ์บ์‹œ) ๋ฉ”์‹œ์ง€๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

# ausearch -m avc -c httpd

29. ๊ณต์ต ์‚ฌ์—… audit2allow ๊ธˆ์ง€๋œ ์ž‘์—… ๋กœ๊ทธ์—์„œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•œ ๋‹ค์Œ SELinux ๊ถŒํ•œ ์ •์ฑ… ๊ทœ์น™์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

  • ์•ก์„ธ์Šค๊ฐ€ ๊ฑฐ๋ถ€๋œ ์ด์œ ์— ๋Œ€ํ•ด ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์„ค๋ช…์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. # audit2allow -w -a
  • ๊ฑฐ๋ถ€๋œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ์œ ํ˜• ์ ์šฉ ๊ทœ์น™์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. # audit2allow -a
  • ์‚ฌ์šฉ์ž ์ •์˜ ๋ชจ๋“ˆ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด: # audit2allow -a -M mypolicy
  • ์˜ต์…˜ -M ์ง€์ •๋œ ์ด๋ฆ„์œผ๋กœ ์œ ํ˜• ์ ์šฉ ํŒŒ์ผ(.te)์„ ์ƒ์„ฑํ•˜๊ณ  ๊ทœ์น™์„ ์ •์ฑ… ํŒจํ‚ค์ง€(.pp)๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. mypolicy.pp mypolicy.te
  • ์‚ฌ์šฉ์ž ์ •์˜ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜๋ ค๋ฉด: # semodule -i mypolicy.pp

30. ํ—ˆ์šฉ ๋ชจ๋“œ์—์„œ ์ž‘๋™ํ•˜๋„๋ก ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค(๋„๋ฉ”์ธ)๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. # semanage permissive -a httpd_t

31. ๋„๋ฉ”์ธ์„ ๋” ์ด์ƒ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š”. # semanage permissive -d httpd_t

32. ๋ชจ๋“  ํ—ˆ์šฉ ๋„๋ฉ”์ธ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด: # semodule -d permissivedomains

33. MLS SELinux ์ •์ฑ… ํ™œ์„ฑํ™”: # yum install selinux-policy-mls
ะฒ /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

SELinux๊ฐ€ ํ—ˆ์šฉ ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. # setenforce 0
์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ fixfiles๋‹ค์Œ ์žฌ๋ถ€ํŒ… ์‹œ ํŒŒ์ผ์˜ ๋ ˆ์ด๋ธ”์ด ๋‹ค์‹œ ์ง€์ •๋˜๋„๋ก ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š”.

# fixfiles -F onboot # reboot

34. ํŠน์ • MLS ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. # useradd -Z staff_u john

๋ช…๋ น ์‚ฌ์šฉ useradd, ์ƒˆ ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ์กด SELinux ์‚ฌ์šฉ์ž์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ staff_u).

35. SELinux์™€ Linux ์‚ฌ์šฉ์ž ๊ฐ„์˜ ๋งคํ•‘์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”. # semanage login -l

36. ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ํŠน์ • ๋ฒ”์œ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. # semanage login --modify --range s2:c100 john

37. ์‚ฌ์šฉ์ž์˜ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ ˆ์ด๋ธ”์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด(ํ•„์š”ํ•œ ๊ฒฝ์šฐ): # chcon -R -l s2:c100 /home/john

38. ํ˜„์žฌ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋ณด๋ ค๋ฉด: # chcat -L

39. ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ž์‹ ๋งŒ์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์„ธ์š”.

/etc/selinux/_<selinuxtype>_/setrans.conf

40. ํŠน์ • ํŒŒ์ผ, ์—ญํ•  ๋ฐ ์‚ฌ์šฉ์ž ์ปจํ…์ŠคํŠธ์—์„œ ๋ช…๋ น์ด๋‚˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t ํŒŒ์ผ ์ปจํ…์ŠคํŠธ
  • -r ์—ญํ•  ๋งฅ๋ฝ
  • -u ์‚ฌ์šฉ์ž ์ปจํ…์ŠคํŠธ

41. SELinux๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ์ƒํƒœ๋กœ ์‹คํ–‰๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ:

  • ํฌ๋“œ๋งจ: # podman run --security-opt label=disable โ€ฆ
  • ๋„์ปค : # docker run --security-opt label=disable โ€ฆ

42. ์ปจํ…Œ์ด๋„ˆ์— ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ „์ฒด ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ:

  • ํฌ๋“œ๋งจ: # podman run --privileged โ€ฆ
  • ๋„์ปค : # docker run --privileged โ€ฆ

๊ทธ๋ฆฌ๊ณ  ์ด์ œ ๋‹น์‹ ์€ ์ด๋ฏธ ๋‹ต์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ๋‹นํ™ฉํ•˜์ง€ ๋ง๊ณ  SELinux๋ฅผ ํ™œ์„ฑํ™”ํ•˜์‹ญ์‹œ์˜ค.

๋งํฌ :

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€