๋ณด์•ˆ ์ •์ฑ… ๊ด€๋ฆฌ

semanage๋Š” SELinux ์˜ ๋ณด์•ˆ ์ •์ฑ…์„ ์กฐํšŒํ•˜๊ณ  ์ถ”๊ฐ€/๋ณ€๊ฒฝ/์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ นํ–‰ ๊ธฐ๋ฐ˜์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ์ž…๋‹ˆ๋‹ค.


SELinux ๋Š” ํŒŒ์ผ, ๋„คํŠธ์›Œํฌย ํฌํŠธ, ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋“ฑ์„ ๋ณ„๋„์˜ ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์„œ๋น„์Šค ๋ฐ๋ชฌ์„ SELinux ์—์„œ ๋ฌธ์ œ์—†์ด ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋„คํŠธ์›Œํฌ ํฌํŠธ์™€ ํŒŒ์ผ ์ปจํ…์ŠคํŠธ๋ฅผ ์ดํ•ดํ•˜๊ณ  semanage ๋กœ ์ปจํ…์ŠคํŠธ๋ฅผ ๋‹ค๋ฃฐ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


semanage ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ํŒจํ‚ค์ง€๋กœ Red Hat์˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ์œ ํ‹ธ๋ฆฌํ‹ฐ์ฒ˜๋Ÿผ python ์œผ๋กœ ์ž‘์„ฑ๋˜์–ด์„œ python ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋‹ค์Œ yum ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ sudo yum install -y policycoreutils-python  
semanage ์„ค์น˜


ํฌํŠธ ์ปจํ…์ŠคํŠธ

SELinux ๋Š” ๋„คํŠธ์›Œํฌ ๋ฐ๋ชฌ๋งˆ๋‹ค ๋ช…์‹œ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์„ค๋ น root ๋กœ ๊ตฌ๋™ํ•œ ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋ผ๋„ย ํ—ˆ์šฉ๋œ ํฌํŠธ ์ด์™ธ์—๋Š” ์ฐจ๋‹จํ•ด ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

์ด๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์›น ์„œ๋ฒ„๋‚˜ ๋ฉ”์ผ ์„œ๋ฒ„๋“ฑ ์ธํ”„๋ผ ํ”„๋กœ์„ธ์Šค์˜ ์ทจ์•ฝ์ ์ด๋‚˜ ์ž˜๋ชป๋œ ์„ค์ •์„ ํ•ดํ‚นํ•˜์—ฌ ์‰˜์„ ์–ป์€ ํ›„์— ssh ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€ ๋ง์œผ๋กœ ๋‹ค์‹œ ์นจํˆฌํ•˜๋Š” 2์ฐจ ํ”ผํ•ด๋ฅผ ๋ฐฉ์ง€ํ•ด ์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ well known ์ด ์•„๋‹Œ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋“ฑ์˜ ๋ณ€๊ฒฝ์ด ์žˆ์„ ๊ฒฝ์šฐ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


์ด๋Ÿฐ ๋‚ด์šฉ์„ ๋ชจ๋ฅธ๋‹ค๋ฉด SELinux ๊ฐ€ ์„œ๋ฒ„์˜ ํฌํŠธ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•˜์—ฌ SELinux ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋น„์Šค ์šด์˜์ด ํž˜๋“ค๋‹ค๋Š” ์ƒ๊ฐ์„ ๊ฐ–๊ฒŒ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํฌํŠธ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด ๋ฐ˜๋“œ์‹œ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


ํฌํŠธ๋ฅผ ๋‹ค๋ฃจ๋ ค๋ฉดย semangeย ๋ช…๋ น์–ด ๋’ค์— port ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๊ณ  ๋’ค์— ์˜ต์…˜์„ ์ฃผ๋ฉด ๋˜๋ฉฐ ์กฐํšŒ๋ฅผ ํ•  ๊ฒฝ์šฐ -l ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ๋ช…๋ น์€ SELinux ์— ๋“ฑ๋ก๋œ ์ „์ฒด ํฌํŠธ ์ปจํ…์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉฐ ์ฒซ ๋ฒˆ์งธ ํ–‰์€ ํฌํŠธ ์œ ํ˜•, ๋‘ ๋ฒˆ์งธ๋Š” ํ”„๋กœํ† ์ฝœ, ์„ธ ๋ฒˆ์งธ๋Š” ํฌํŠธ ๋ฒˆํ˜ธ์ด๋ฉฐ ์ฒซ๋ฒˆ์งธ ํฌํŠธ ์œ ํ˜•์€ ํ”„๋กœํ† ์ฝœ:ํฌํŠธ๋ฒˆํ˜ธ์— ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

$ sudo semanage port  -l

SELinux Port Type              Proto    Port Number
afs_bos_port_t                 udp      7007
afs_client_port_t              udp      7001
afs_fs_port_t                  tcp      2040
...


zebra_port_t                   udp      2600-2604, 2606
zented_port_t                  tcp      1229
zented_port_t                  udp      1229
zope_port_t                    tcp      8021
ํฌํŠธ ์ปจํ…์ŠคํŠธ ํ™•์ธ

์ฆ‰ ๋งˆ์ง€๋ง‰ ์ค„์˜ย zope_port_t tcp 8021 ๋Š” zope_port_t ๋ผ๋Š” ํฌํŠธ ์œ ํ˜•์€ tcp:8021 ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์šฐ๋ฆฌ์˜ ๊ด€์‹ฌ์‚ฌ๋Š” ์›น ์„œ๋ฒ„์ด๋ฏ€๋กœ http ์— ๊ด€ํ•œ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•˜๋ฉฐย semanage ๋ช…๋ น์—์„œ ํƒ€์ž…๋ณ„๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํŠน์ • ํƒ€์ž…๋งŒ ํ™•์ธํ•  ๊ฒฝ์šฐ grep ์œผ๋กœ ๋ถ„๋ฅ˜๋ฅผ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” http ๊ฐ€ ๋“ค์–ด๊ฐ„ ์ „์ฒด ํฌํŠธ ์ปจํ…์ŠคํŠธ ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

$ sudo semanage port  -l | grep http


http_cache_port_t              tcp      3128, 8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 443, 8009, 8080


TODO http_port_t ์ง„ํ•˜๊ฒŒ

ํฌํŠธ ์ปจํ…์ŠคํŠธ ํ™•์ธ


http_cache_port_t ๋Š” squid ๊ฐ™์€ ์›น ์บ์‹œ ์„œ๋ฒ„๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํฌํŠธ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์›น ์„œ๋ฒ„๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํฌํŠธ ์ปจํ…์ŠคํŠธ์˜ ์ด๋ฆ„์€ย http_port_t ย ํƒ€์ž…์œผ๋กœ ์ง€์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.ย 


๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์›น ์„œ๋ฒ„๋Š” http_port_t ์— ํ• ๋‹น๋œ 4๊ฐœ์˜ ํฌํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต ์›น ์„œ๋ฒ„๋Š” 80, 443์„ ๋ฆฌ์Šจํ•˜๋Š”๋ฐ 8009 ๋‚˜ 8080 ์ด ์žˆ๋Š” ๊ฒƒ์ด ์˜์•„ํ•œ ๋…์ž๋“ค์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


http_port_t ์— ์ง€์ •ํ•˜๋Š” ํฌํŠธ๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ๋ฆฌ์Šจํ•˜๋Š” ํฌํŠธ๋งŒ์ด ์•„๋‹ˆ๋ผ ์ปค๋„ฅํŠธํ•˜๋Š” ํฌํŠธ๊นŒ์ง€ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•˜๋ฉฐ 8009, 8080 ๋Š” ์•„ํŒŒ์น˜ ํ†ฐ์บฃ์ด ๋ฆฌ์Šจํ•˜๋Š” ํฌํŠธ์ด๋ฏ€๋กœ ์›น ์„œ๋ฒ„๊ฐ€ ํ†ฐ์บฃ์— ์—ฐ๊ฒฐํ•  ๋•Œ ํ•„์š”ํ•˜๋ฏ€๋กœ ์„ค์ •ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋กœ ์›น ์„œ๋ฒ„๋ฅผ PHP ์˜ WAS ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋Š” php-fpm ๊ณผ ๋„คํŠธ์›Œํฌ ์†Œ์ผ“ ๋ฐฉ์‹์œผ๋กœ ์—ฐ๋™ํ•œ๋‹ค๋ฉด php-fpm ์ด ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ(๊ธฐ๋ณธ: 9000) ๋ฅผ http_port_t ์— ๋“ฑ๋กํ•ด ์ฃผ์ง€ ์•Š์œผ๋ฉด SELinux ๋Š” ์›น ์„œ๋ฒ„์˜ 9000 ๋ฒˆ ํฌํŠธ ์—ฐ๊ฒฐ์„ ์ฐจ๋‹จํ•ด ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

๋˜ ํ•˜๋‚˜์˜ ์‚ฌ๋ก€๋กœ ์•„ํŒŒ์น˜ ์›น ์„œ๋ฒ„๋ฅผ 900 ํฌํŠธ๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ํ•ด์•ผ ํ•  ์ผ์ด ์ƒ๊ฒผ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ์ƒˆ๋กœ์šด ํฌํŠธ ์ถ”๊ฐ€๋Š” ์•„ํŒŒ์น˜์˜ ์„ค์ • ํŒŒ์ผ(CentOS์˜ ๊ฒฝ์šฐย /etc/httpd/conf/httpd.conf)์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ๋ฅผ ์ง€์ •ํ•˜๋Š” Listen ํ•ญ๋ชฉ์—์„œ 900 ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์•„ํŒŒ์น˜ ์›น์„œ๋ฒ„๋ฅผย ์žฌ์‹œ์ž‘ํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


Listen 80
Listen 900
httpd ํฌํŠธ ์ถ”๊ฐ€

nginx ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ ์„ค์ •์˜ server ๋ธ”๋ก์— listen 900; ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

server {
	listen 80;
	listen 900;



์—๋Ÿฌ ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด 900 ๋ฒˆ ํฌํŠธ์— ๋ฐ”์ธ๋“œํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์›น ์„œ๋ฒ„๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๊ตฌ๋™๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ sudo systemctl restart httpd


(13)Permission denied: make_sock: could not bind to address [::]:900
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:900
httpd ๊ตฌ๋™ ์—๋Ÿฌ


์ด๋Š” ์•„ํŒŒ์น˜ ์›น ์„œ๋ฒ„๊ฐ€ ๋ฃจํŠธ๋กœ ๊ตฌ๋™๋˜์ง€๋งŒ ๋ถ€์—ฌ๋œ ์ปจํ…์ŠคํŠธ์ธ http_port_t ๋Š” ์œ„์—์„œ ๋ณธ 8๊ฐœ ํฌํŠธ์ด์™ธ์—๋Š” ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์ด๋ฉฐ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด http_port_t ์ปจํ…์ŠคํŠธ๊ฐ€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํฌํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํฌํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์˜ต์…˜์ธ -a ์™€ ์‚ฌ์šฉํ•  ํ”„๋กœํ† ์ฝœ, ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ, ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.ย 


HTTP ๋Š” tcp ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœย -p tcpย ์˜ต์…˜๊ณผ ย ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ๋ฅผ ์ง€์ •ํ•˜๋Š”ย -t http_port_tย ๊ทธ๋ฆฌ๊ณ  ํ—ˆ์šฉํ•  ํฌํŠธ ๋ฒˆํ˜ธ 900 ์„ ์ง€์ •ํ•˜์—ฌ ์ตœ์ข… ์‹คํ–‰ํ•  semanage ๋ช…๋ น์–ด๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$ sudo semanage port -a -p tcp -t http_port_t 900 
ํฌํŠธ ์ถ”๊ฐ€

๋งŒ์•ฝ "Port tcp/900 already defined" ๊ฐ™์ด ์ด๋ฏธ ํฌํŠธ๊ฐ€ ์ง€์ •๋˜์–ด ์žˆ๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์ถ”๊ฐ€ ์˜ต์…˜์ธ -a ๋Œ€์‹  ๋ณ€๊ฒฝ ์˜ต์…˜์ธ -m ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


$ sudo semanage port -m -p tcp -t http_port_t 900 


์ •์ƒ์ ์œผ๋กœ ์„ค์ •์ด ๋๋‚ฌ๋‹ค๋ฉด ํฌํŠธ ๋ชฉ๋ก์„ ๋‹ค์‹œ ํ™•์ธํ•ด ๋ด…์‹œ๋‹ค.

$ sudo semanage port -l | grep http_port_t


http_port_t                    tcp      80, 443, 8009, 8080, 900

TODO 900 ์ง„ํ•˜๊ฒŒ

ํฌํŠธ ๋ชฉ๋ก ํ™•์ธ


์›น ์„œ๋ฒ„๋Š” DMZ ๊ตฌ๊ฐ„์— ์œ„์น˜ํ•˜๊ณ  WAS ์™€๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ฝ์‹œ๋กœ ์—ฐ๊ฒฐํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ€ ์ปค์งˆ ๊ฒฝ์šฐ WAS ๋ฅผ ์ˆ˜ํ‰/์ˆ˜์ง ์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ๊ณผ ๋”๋ถˆ์–ด ๋ณด์•ˆ๋„ ๊ฒฌ๊ณ ํ•ด ์ง€๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ WAS ๋ฅผ ํ•œ ์„œ๋ฒ„์— ๋ณ„๋„์˜ ํฌํŠธ๋กœ ์ถ”๊ฐ€ ๊ตฌ์„ฑํ•˜๋Š” ์ˆ˜์ง ํ™•์žฅ์˜ ๊ฒฝ์šฐ ํฌํŠธ ๋ฒˆํ˜ธ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค๋ฉด ๊ผญ semanage port ๋ช…๋ น์œผ๋กœ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ WAS ์˜ ํฌํŠธ๋ฅผ ๋“ฑ๋กํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


์ถ”๊ฐ€๋œ ํฌํŠธ ์ปจํ…์ŠคํŠธ๋Š” -d ์˜ต์…˜์œผ๋กœ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ํฌํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ -p ๋กœ tcp ์ธ์ง€ udp ์ธ์ง€ ์ง€์ •ํ•ด ์ฃผ๊ณ  ์‚ญ์ œํ•  ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•ด ์ฃผ๋ฉด ๋˜๋ฉฐ ์•„๋ž˜ ๋ช…๋ น์–ด๋Š” http_port_t ์— ์ถ”๊ฐ€ํ•œ 900 ๋ฒˆ ํฌํŠธ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

$ sudo semanage port -d -p tcp 900
ํฌํŠธ ์‚ญ์ œ


๋ช…๋ น์–ด๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋œ ํ›„์— ํฌํŠธ ๋ชฉ๋ก์„ ์กฐํšŒํ•ด ๋ณด๋ฉด 900 ๋ฒˆ์ด ์‚ฌ๋ผ์ง„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ sudo semanage port -l | grep http_port_t


http_port_t                    tcp      80, 443, 8009, 8080
ํฌํŠธ ๋ชฉ๋ก ํ™•์ธ



ํŒŒ์ผ ์ปจํ…์ŠคํŠธย 

/var/www/htmlย ํด๋” ๋ฐ‘์— cp ๋กœ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ๋˜๋Š” ์—๋””ํ„ฐ๋“ฑ์œผ๋กœ ํŒŒ์ผ์„ ์ƒˆ๋กœ ๋งŒ๋“ค๋ฉด ์ž๋™์œผ๋กœ httpd_sys_content_t ย ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ถ€์—ฌ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ restorecon ์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ„์น˜์— ๋งž๋Š” ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณต๊ตฌํ•ด ์ค€๋‹ค๋Š” ๊ฒƒ๋„ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์ด๊ฒŒ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ผ๊นŒ์š”?ย 


SELinux ๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ์ผ์ผ์ด ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ์ฃผ์š” ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ํŠน์ • ์ปจํ…์ŠคํŠธ๋ฅผ ๋ถ€์—ฌํ•˜๋„๋ก ์‚ฌ์ „ ํƒ‘์žฌ ์ •์ฑ…์—ย ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. semange ์˜ ย ํŒŒ์ผ ์ปจํ…์ŠคํŠธ ๊ธฐ๋Šฅ์€ ๋ฐ”๋กœ ์ด๋Ÿฐ SELinux ์˜ ์„ค์ •์„ ํ™•์ธํ•˜๊ณ  ์ถ”๊ฐ€/๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์œผ๋กœย semanage ๋ช…๋ น์–ด ๋’ค์— fcontext ์˜ต์…˜์„ ์ฃผ๊ณ  ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๋จผ์ € ์„ค์ •๋œ ํŒŒ์ผ ์ปจํ…์ŠคํŠธ์˜ ๋ชฉ๋ก์„ ํ‘œ์‹œํ•˜๋Š” ์˜ต์…˜์ธ -l ์„ ์‚ฌ์šฉํ•ด ๋ด…์‹œ๋‹ค. ๋งŽ์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋ฏ€๋กœ ์–ด๋–ค ๊ฒฝ๋กœ์— ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœย httpd_sys_content_t ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ถ€์—ฌ๋˜๋Š”์ง€ grep ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„ํ„ฐ๋ง์„ ํ•ฉ๋‹ˆ๋‹ค.


$ sudo semanage fcontext -l|grep httpd_sys_content_t 


/srv/([^/]*/)?www(/.*)?                            all files          system_u:object_r:httpd_sys_content_t:s0 
/var/www(/.*)?                                     all files          system_u:object_r:httpd_sys_content_t:s0 
/etc/htdig(/.*)?                                   all files          system_u:object_r:httpd_sys_content_t:s0 
httpd_sys_content_t ๋ถ€์—ฌ ๊ฒฝ๋กœ ํ™•์ธ


๊ฒฝ๋กœ๋Š” ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ /var/www(/.*)?ย ๋Š” /var/www ํ•˜์œ„์˜ ๋ชจ๋“  ํŒŒ์ผ๊ณผ ํด๋”๋ฅผ ์˜๋ฏธํ•˜๋ฏ€๋กœ /var/www/html ์ด๋‚˜ /var/www/mywebapp ๋ชจ๋‘ httpd_sys_content_t๊ฐ€ ๋ถ™๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋‹ค ๋ณด๋ฉด MySQL ๋ฐ์ดํƒ€๊ฐ€ ๋Š˜์–ด๋‚˜์„œ ๊ธฐ๋ณธ ๊ฒฝ๋กœ์ธ /var/lib/mysql ์— ์žˆ๋Š” ๋ฐ์ดํƒ€ ๋ฒ ์ด์Šค ํŒŒ์ผ์„ ๋‹ค๋ฅธ ํŒŒํ‹ฐ์…˜(์˜ˆ:ย /opt/mysql)์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


MySQL ๋„ ์ค‘์š”ํ•œ ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค์ด๋ฏ€๋กœ SELinux ์— ์‚ฌ์ „ ํƒ‘์žฌ ์ •์ฑ…์ด ์žˆ๊ณ  MySQL ์˜ ๋ฐ์ดํƒ€๋ฒ ์ด์Šค ํŒŒ์ผ๋„ ๋Œ€์ƒ์ด๋ฏ€๋กœ MySQL ์„ค์ • ํŒŒ์ผ์— datadir=/opt/mysql ๋กœ ์„ค์ •ํ•˜๊ณ  ์žฌ๋ถ€ํŒ…ํ•˜๋ฉด ๊ธฐ๋ณธ ์„ค์ •์—์„œ ์–ด๊ธ‹๋‚˜๋ฏ€๋กœ SELinux ๊ฐ€ ์ฐจ๋‹จํ•˜์—ฌ ์ •์ƒ์ ์œผ๋กœ ๊ตฌ๋™๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


๋จผ์ € MySQL ์ด ๋ฐ์ดํƒ€๋ฒ ์ด์Šค ํŒŒ์ผ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉ๋œ ํƒ€์ž…์ธ mysqld_db_t ๋ฅผ ํŒŒ์ผ ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธํ•ด ๋ด…์‹œ๋‹ค.

$ sudo semanage fcontext -l|grep mysqld_db_t


/var/lib/mysql(/.*)?                               all files          system_u:object_r:mysqld_db_t:s0 
/var/lib/squeezeboxserver(/.*)?                    all files          system_u:object_r:mysqld_db_t:s0 
httpd_sys_content_t ๋ถ€์—ฌ ๊ฒฝ๋กœ ํ™•์ธ

/var/lib/mysql ๊ณผ /var/lib/squeezeboxserver ํ•˜์œ„์˜ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ž๋™์œผ๋กœ mysql_db_t ๊ฐ€ ๋ถ™์ง€ ์•Š์•„์„œ ๋ฌธ์ œ๊ฐ€ ๋ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.


1.chcon ์œผ๋กœ ํƒ€์ž… ๋ถ€์—ฌ

MySQL ๋ฐ์ดํƒ€๋ฅผ ์ƒˆ๋กœ์šด ํด๋”๋กœ ์ด๋™ํ•œ ํ›„์— ์•„๋ž˜ ๋ช…๋ น์œผ๋กœ ํƒ€์ž…์„ ๋ถ€์—ฌํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.ย 

$ sudo chcon -R -t mysqld_db_t /opt/mysql

์ด ๋ฐฉ๋ฒ•์˜ ๋‹จ์ ์€ ์ƒˆ๋กœ์šด database ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ mysqld_db_t ๊ฐ€ ์ž๋™์œผ๋กœ ๋ถ€์—ฌ๋˜์ง€ ์•Š์•„์„œ ์˜ค์ž‘๋™ ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.


2. ์ƒˆ๋กœ์šดย ๊ฒฝ๋กœ์— ์ปจํ…์ŠคํŠธ ์„ค์ •


port ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์„๋•Œ ์ฒ˜๋Ÿผ ๊ฒฝ๋กœ์— ์ž๋™์œผ๋กœ ์ ์ ˆํ•œ ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ถ€์—ฌ๋  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์— ์—†๋Š” ์œ„์น˜์ด๋ฏ€๋กœ -aย ์˜ต์…˜์œผ๋กœ ์ถ”๊ฐ€๋ฅผ ํ•˜๊ณ  -t ์˜ต์…˜์— ๋ถ€์—ฌํ•  ์ปจํ…์ŠคํŠธ๋ฅผ ์ ๊ณ  ์ •๊ทœ์‹์œผ๋กœ ์„ค์ •ํ•  ๊ฒฝ๋กœ๋ฅผ ์ ์–ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.๋‹ค.


๋‹ค์Œ์€ /opt/mysql ํ•˜๋‹จ์— ์ƒ๊ธฐ๋Š” ๋ชจ๋“  ํŒŒ์ผ๊ณผ ํด๋”์— mysqld_db_t ๋ฅผ ์ž๋™์œผ๋กœ ๋ถ€์—ฌํ•˜๋Š” semanage ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

$ sudo semanage fcontext -a -t mysqld_db_t "/opt/mysql(/.*)?"
mysqld_db_t ์ปจํ…์ŠคํŠธ ๋ถ€์—ฌ

์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ๊ฒฝ๋กœ์— ์ •์ฑ…์ด ๋ฐ˜์˜๋˜๋„๋ก restorecon ์„ ์‹คํ–‰ํ•ด ์ค๋‹ˆ๋‹ค.

$ sudo restorecon -R -v /opt/mysql
mysqld_db_t ์ปจํ…์ŠคํŠธ ๋ถ€์—ฌ

์ •์ฑ…์— ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด์ œ ์ƒˆ๋กœ์šด MySQL ๋ฐ์ดํƒ€๋ฒ ์ด์Šค ํŒŒ์ผ์ด ์ƒ๊ฒจ๋„ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.


์„ค์ •์ด ๋ณ€๊ฒฝ๋˜์–ด ํŒŒ์ผ ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ญ์ œํ•  ๊ฒฝ์šฐ ํฌํŠธ์˜ ๊ฒฝ์šฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ -d ์˜ต์…˜์œผ๋กœ ์ถ”๊ฐ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋“ฑ๋กํ•  ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ญ์ œํ•  ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ sudo semanage fcontext -d "/opt/mysql(/.*)?" 
mysqld_db_t ์ปจํ…์ŠคํŠธ ๋ถ€์—ฌ


์ด์ œ SELinux ์˜ ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ์—์„œ ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์š”์†Œ์ธ ํŒŒ์ผ๊ณผ ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ๋ฅผ ์ดํ•ดํ•˜๋ฉด ํฐ ๋ฌธ์ œ์—†์ด SELinux ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.