SELinux์ AppArmor
SELinux์ AppArmor¶
ํ์ต ๋ชฉํ¶
์ด ๋ฌธ์๋ฅผ ํตํด ๋ค์์ ํ์ตํฉ๋๋ค:
- ํ์ ์ ๊ทผ ์ ์ด(MAC)์ ๊ฐ๋ ๊ณผ ํ์์ฑ
- SELinux ๋ชจ๋์ ์ ์ฑ ๊ด๋ฆฌ
- AppArmor ํ๋กํ์ผ ์์ฑ ๋ฐ ๊ด๋ฆฌ
- ๋ณด์ ๋ชจ๋ ํธ๋ฌ๋ธ์ํ
๋์ด๋: โญโญโญโญ (๊ณ ๊ธ)
๋ชฉ์ฐจ¶
- ํ์ ์ ๊ทผ ์ ์ด ๊ฐ์
- SELinux ๊ธฐ์ด
- SELinux ์ ์ฑ ๊ด๋ฆฌ
- SELinux ํธ๋ฌ๋ธ์ํ
- AppArmor ๊ธฐ์ด
- AppArmor ํ๋กํ์ผ
- ์ค๋ฌด ์๋๋ฆฌ์ค
1. ํ์ ์ ๊ทผ ์ ์ด ๊ฐ์¶
DAC vs MAC¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์ ๊ทผ ์ ์ด ๋น๊ต โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ DAC (Discretionary Access Control) โ
โ - ์ ํต์ ์ธ Unix ๊ถํ ๋ชจ๋ธ โ
โ - ํ์ผ ์์ ์๊ฐ ๊ถํ ๊ฒฐ์ โ
โ - chmod, chown์ผ๋ก ๊ด๋ฆฌ โ
โ - root๋ ๋ชจ๋ ์ ํ ์ฐํ ๊ฐ๋ฅ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ MAC (Mandatory Access Control) โ
โ - ์์คํ
์ ์ฑ
์ด ์ ๊ทผ ๊ฒฐ์ โ
โ - ์ฌ์ฉ์๊ฐ ์ ์ฑ
๋ณ๊ฒฝ ๋ถ๊ฐ โ
โ - SELinux, AppArmor๋ก ๊ตฌํ โ
โ - root๋ ์ ์ฑ
์ ์ํด ์ ํ๋จ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๋ณด์ ๋ชจ๋ ๋น๊ต¶
| ํน์ฑ | SELinux | AppArmor |
|---|---|---|
| ๊ธฐ๋ฐ ๋ฐฐํฌํ | RHEL/CentOS/Fedora | Ubuntu/Debian/SUSE |
| ์ ๊ทผ ๋ฐฉ์ | ๋ ์ด๋ธ ๊ธฐ๋ฐ | ๊ฒฝ๋ก ๊ธฐ๋ฐ |
| ๋ณต์ก๋ | ๋์ | ๋ฎ์ |
| ์ธ๋ฐํจ | ๋งค์ฐ ์ธ๋ฐ | ์ค๊ฐ |
| ํ์ต ๊ณก์ | ๊ฐํ๋ฆ | ์๋ง |
| ๊ธฐ๋ณธ ์ ์ฑ | ํฌ๊ด์ | ์ ํ์ |
2. SELinux ๊ธฐ์ด¶
SELinux ๋ชจ๋¶
# ํ์ฌ ๋ชจ๋ ํ์ธ
getenforce
# Enforcing, Permissive, ๋๋ Disabled
# ์์ธ ์ํ ํ์ธ
sestatus
# ์์ ๋ชจ๋ ๋ณ๊ฒฝ (์ฌ๋ถํ
์ ๋ณต์)
sudo setenforce 0 # Permissive
sudo setenforce 1 # Enforcing
์๊ตฌ์ ๋ชจ๋ ๋ณ๊ฒฝ¶
# /etc/selinux/config ํธ์ง
# RHEL/CentOS
sudo vi /etc/selinux/config
# /etc/selinux/config
SELINUX=enforcing # enforcing, permissive, disabled
SELINUXTYPE=targeted # targeted, minimum, mls
SELinux ์ปจํ ์คํธ¶
๋ชจ๋ ํ์ผ, ํ๋ก์ธ์ค, ํฌํธ์ ๋ณด์ ์ปจํ ์คํธ๊ฐ ํ ๋น๋ฉ๋๋ค:
์ฌ์ฉ์:์ญํ :ํ์
:๋ ๋ฒจ
user_u:role_r:type_t:s0
# ํ์ผ ์ปจํ
์คํธ ํ์ธ
ls -Z /var/www/html/
# -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
# ํ๋ก์ธ์ค ์ปจํ
์คํธ ํ์ธ
ps -eZ | grep httpd
# system_u:system_r:httpd_t:s0 12345 ? 00:00:01 httpd
# ์ฌ์ฉ์ ์ปจํ
์คํธ ํ์ธ
id -Z
# unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
์ฃผ์ ํ์ ¶
| ํ์ | ์ค๋ช |
|---|---|
httpd_t |
Apache ์น ์๋ฒ ํ๋ก์ธ์ค |
httpd_sys_content_t |
์น ์ฝํ ์ธ ํ์ผ |
mysqld_t |
MySQL ํ๋ก์ธ์ค |
sshd_t |
SSH ๋ฐ๋ชฌ |
user_home_t |
์ฌ์ฉ์ ํ ๋๋ ํ ๋ฆฌ |
tmp_t |
์์ ํ์ผ |
3. SELinux ์ ์ฑ ๊ด๋ฆฌ¶
ํ์ผ ์ปจํ ์คํธ ๋ณ๊ฒฝ¶
# ์์ ๋ณ๊ฒฝ (์ฌ๋ ์ด๋ธ๋ง ์ ๋ณต์)
chcon -t httpd_sys_content_t /var/www/custom/index.html
# ๋๋ ํ ๋ฆฌ ์ฌ๊ท์ ๋ณ๊ฒฝ
chcon -R -t httpd_sys_content_t /var/www/custom/
# ๋ค๋ฅธ ํ์ผ์ ์ปจํ
์คํธ ๋ณต์ฌ
chcon --reference=/var/www/html/index.html /var/www/custom/index.html
์๊ตฌ์ ์ปจํ ์คํธ ์ค์ ¶
# ์ ์ฑ
์ ์ปจํ
์คํธ ๊ท์น ์ถ๊ฐ
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?"
# ์ ์ฑ
์ ์ฉ
sudo restorecon -Rv /srv/www
# ์ปจํ
์คํธ ๊ท์น ๋ชฉ๋ก ํ์ธ
sudo semanage fcontext -l | grep httpd
# ๊ท์น ์ญ์
sudo semanage fcontext -d "/srv/www(/.*)?"
SELinux ๋ถ๋ฆฌ์ธ¶
๋ถ๋ฆฌ์ธ์ SELinux ์ ์ฑ ์ ํน์ ๊ธฐ๋ฅ์ ์ผ๊ณ ๋๋ ์ค์์น์ ๋๋ค:
# ๋ชจ๋ ๋ถ๋ฆฌ์ธ ๋ชฉ๋ก
getsebool -a
# ํน์ ๋ถ๋ฆฌ์ธ ํ์ธ
getsebool httpd_can_network_connect
# ์์ ๋ณ๊ฒฝ
sudo setsebool httpd_can_network_connect on
# ์๊ตฌ ๋ณ๊ฒฝ (-P ์ต์
)
sudo setsebool -P httpd_can_network_connect on
# ๋ถ๋ฆฌ์ธ ๊ฒ์
getsebool -a | grep httpd
์ฃผ์ ๋ถ๋ฆฌ์ธ ์์¶
# ์น ์๋ฒ ๊ด๋ จ
httpd_can_network_connect # ์ธ๋ถ ๋คํธ์ํฌ ์ฐ๊ฒฐ ํ์ฉ
httpd_can_network_connect_db # DB ์ฐ๊ฒฐ ํ์ฉ
httpd_can_sendmail # ๋ฉ์ผ ์ ์ก ํ์ฉ
httpd_enable_homedirs # ์ฌ์ฉ์ ํ ๋๋ ํ ๋ฆฌ ์ ๊ทผ
# FTP ๊ด๋ จ
ftpd_anon_write # ์ต๋ช
์ฐ๊ธฐ ํ์ฉ
ftpd_full_access # ์ ์ฒด ํ์ผ์์คํ
์ ๊ทผ
# ๊ธฐํ
samba_enable_home_dirs # Samba ํ ๋๋ ํ ๋ฆฌ ๊ณต์
ํฌํธ ์ปจํ ์คํธ¶
# ํฌํธ ๋ ์ด๋ธ ํ์ธ
sudo semanage port -l | grep http
# http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
# ์ ํฌํธ ์ถ๊ฐ
sudo semanage port -a -t http_port_t -p tcp 8080
# ํฌํธ ์ญ์
sudo semanage port -d -t http_port_t -p tcp 8080
# ํฌํธ ์์
sudo semanage port -m -t http_port_t -p tcp 8888
4. SELinux ํธ๋ฌ๋ธ์ํ ¶
๊ฐ์ฌ ๋ก๊ทธ ํ์ธ¶
# SELinux ๊ฑฐ๋ถ ๋ก๊ทธ ํ์ธ
sudo ausearch -m avc -ts recent
# ํน์ ์๋น์ค ๊ด๋ จ ๋ก๊ทธ
sudo ausearch -m avc -c httpd
# ์ฝ๊ธฐ ์ฌ์ด ํ์์ผ๋ก ๋ณํ
sudo ausearch -m avc -ts recent | audit2why
audit2why ์ฌ์ฉ¶
# ๊ฑฐ๋ถ ์ด์ ๋ถ์
sudo cat /var/log/audit/audit.log | audit2why
# ์์ ์ถ๋ ฅ:
# type=AVC msg=audit(...): avc: denied { read } for pid=1234
# comm="httpd" name="index.html" dev="sda1" ino=12345
# scontext=system_u:system_r:httpd_t:s0
# tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file
#
# Was caused by:
# Missing type enforcement (TE) allow rule.
audit2allow๋ก ์ ์ฑ ์์ฑ¶
# ํ์ฉ ๊ท์น ์์ฑ (ํ์ธ๋ง)
sudo ausearch -m avc -ts recent | audit2allow
# ๋ก์ปฌ ๋ชจ๋๋ก ์ปดํ์ผ
sudo ausearch -m avc -ts recent | audit2allow -M mypolicy
# ๋ชจ๋ ์ค์น
sudo semodule -i mypolicy.pp
# ์ค์น๋ ๋ชจ๋ ํ์ธ
sudo semodule -l | grep mypolicy
# ๋ชจ๋ ์ ๊ฑฐ
sudo semodule -r mypolicy
sealert ์ฌ์ฉ (GUI/์์ธ ๋ถ์)¶
# setroubleshoot ํจํค์ง ํ์
sudo yum install setroubleshoot-server
# ๋ถ์ ์คํ
sudo sealert -a /var/log/audit/audit.log
# ์ค์๊ฐ ์๋ฆผ ํ์ธ
sudo sealert -l "*"
์ผ๋ฐ์ ์ธ ๋ฌธ์ ํด๊ฒฐ¶
# ๋ฌธ์ : ์น ์๋ฒ๊ฐ ํ์ผ์ ์ฝ์ง ๋ชปํจ
# 1. ์ปจํ
์คํธ ํ์ธ
ls -Z /var/www/html/problem_file
# 2. ์ปจํ
์คํธ ์์
sudo restorecon -v /var/www/html/problem_file
# ๋ฌธ์ : ์ปค์คํ
ํฌํธ ์ฌ์ฉ ๋ถ๊ฐ
# 1. ํ์ฌ ํฌํธ ๋ ์ด๋ธ ํ์ธ
sudo semanage port -l | grep 8080
# 2. ํฌํธ ์ถ๊ฐ
sudo semanage port -a -t http_port_t -p tcp 8080
# ๋ฌธ์ : ๋คํธ์ํฌ ์ฐ๊ฒฐ ๊ฑฐ๋ถ
# 1. ๊ด๋ จ ๋ถ๋ฆฌ์ธ ํ์ธ
getsebool -a | grep httpd_can_network
# 2. ๋ถ๋ฆฌ์ธ ํ์ฑํ
sudo setsebool -P httpd_can_network_connect on
5. AppArmor ๊ธฐ์ด¶
AppArmor ์ํ ํ์ธ¶
# Ubuntu/Debian
sudo aa-status
# ๋๋
sudo apparmor_status
์์ ์ถ๋ ฅ:
apparmor module is loaded.
38 profiles are loaded.
36 profiles are in enforce mode.
/snap/snapd/19457/usr/lib/snapd/snap-confine
/usr/bin/evince
...
2 profiles are in complain mode.
/usr/sbin/cups-browsed
/usr/sbin/cupsd
AppArmor ๋ชจ๋¶
# Enforce ๋ชจ๋: ์ ์ฑ
์๋ฐ ์ฐจ๋จ
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
# Complain ๋ชจ๋: ์๋ฐ ๋ก๊น
๋ง (์ฐจ๋จ ์ ํจ)
sudo aa-complain /etc/apparmor.d/usr.sbin.nginx
# ํ๋กํ์ผ ๋นํ์ฑํ
sudo aa-disable /etc/apparmor.d/usr.sbin.nginx
# ํ๋กํ์ผ ๋ค์ ๋ก๋
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx
ํ๋กํ์ผ ์์น¶
# ์์คํ
ํ๋กํ์ผ
ls /etc/apparmor.d/
# ์ฃผ์ ํ์ผ๋ค
/etc/apparmor.d/usr.sbin.nginx # Nginx ํ๋กํ์ผ
/etc/apparmor.d/usr.sbin.mysqld # MySQL ํ๋กํ์ผ
/etc/apparmor.d/abstractions/ # ๊ณต์ ๊ท์น
/etc/apparmor.d/tunables/ # ๋ณ์ ์ ์
6. AppArmor ํ๋กํ์ผ¶
ํ๋กํ์ผ ๊ตฌ์กฐ¶
#include <tunables/global>
/path/to/program {
#include <abstractions/base>
# ํ์ผ ์ ๊ทผ ๊ท์น
/etc/myapp.conf r,
/var/log/myapp.log w,
/usr/lib/myapp/** r,
# ๋คํธ์ํฌ ๊ท์น
network inet stream,
# ์คํ ๊ท์น
/usr/bin/helper ix,
}
๊ถํ ํ๋๊ทธ¶
| ํ๋๊ทธ | ์๋ฏธ |
|---|---|
r |
์ฝ๊ธฐ |
w |
์ฐ๊ธฐ |
a |
์ถ๊ฐ |
k |
ํ์ผ ์ ๊ธ |
l |
๋งํฌ |
m |
๋ฉ๋ชจ๋ฆฌ ๋งต ์คํ |
x |
์คํ |
ix |
๋์ผ ํ๋กํ์ผ๋ก ์คํ |
px |
๋ค๋ฅธ ํ๋กํ์ผ๋ก ์คํ |
ux |
์ ํ ์์ด ์คํ |
Px |
px + ํ๊ฒฝ ์ ๋ฆฌ |
Ux |
ux + ํ๊ฒฝ ์ ๋ฆฌ |
ํ๋กํ์ผ ์์ฑ ์์¶
# /etc/apparmor.d/usr.local.bin.myapp
#include <tunables/global>
/usr/local/bin/myapp {
#include <abstractions/base>
#include <abstractions/nameservice>
# ์ค์ ํ์ผ ์ฝ๊ธฐ
/etc/myapp/** r,
# ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ
/var/lib/myapp/ r,
/var/lib/myapp/** rw,
# ๋ก๊ทธ ํ์ผ
/var/log/myapp/ r,
/var/log/myapp/** rw,
owner /var/log/myapp/*.log w,
# ๋ฐํ์ ํ์ผ
/run/myapp.pid rw,
/run/myapp.sock rw,
# ๋ผ์ด๋ธ๋ฌ๋ฆฌ
/usr/lib/myapp/** rm,
# ๋คํธ์ํฌ ์ ๊ทผ
network inet tcp,
network inet udp,
# ์์คํ
ํธ์ถ ์ ํ
deny @{PROC}/** w,
deny /sys/** w,
# ์์ ํ๋ก์ธ์ค
/usr/bin/logger Px,
}
์๋ ํ๋กํ์ผ ์์ฑ¶
# aa-genprof๋ก ํ๋กํ์ผ ์์ฑ
sudo aa-genprof /usr/local/bin/myapp
# ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ์ผ๋ฐ์ ์ธ ์์
์ํ
# aa-genprof๊ฐ ์ ๊ทผ์ ๋ชจ๋ํฐ๋งํ๊ณ ํ๋กํ์ผ ์์ฑ
# aa-logprof๋ก ๊ธฐ์กด ํ๋กํ์ผ ์
๋ฐ์ดํธ
sudo aa-logprof
Abstractions ์ฌ์ฉ¶
# /etc/apparmor.d/abstractions/ ๋ด ๊ณตํต ๊ท์น
# base - ๊ธฐ๋ณธ ์์คํ
์ ๊ทผ
# nameservice - DNS, NSS ๋ฑ
# authentication - PAM, shadow ๋ฑ
# apache2-common - Apache ๊ณตํต ๊ท์น
# mysql - MySQL ํด๋ผ์ด์ธํธ ์ ๊ทผ
# php - PHP ๊ด๋ จ ์ ๊ทผ
ํ๋กํ์ผ์์ ์ฌ์ฉ:
#include <abstractions/base>
#include <abstractions/nameservice>
7. ์ค๋ฌด ์๋๋ฆฌ์ค¶
์๋๋ฆฌ์ค 1: ์น ์๋ฒ ์ปค์คํ ๋๋ ํ ๋ฆฌ (SELinux)¶
# ๋ฌธ์ : /data/www์์ ์น ์ฝํ
์ธ ์ ๊ณต ์ 403 ์๋ฌ
# 1. ํ์ฌ ์ปจํ
์คํธ ํ์ธ
ls -Zd /data/www
# drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /data/www
# 2. ์ฌ๋ฐ๋ฅธ ์ปจํ
์คํธ ์ค์
sudo semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
sudo restorecon -Rv /data/www
# 3. ํ์ธ
ls -Zd /data/www
# drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /data/www
์๋๋ฆฌ์ค 2: PHP ์ ํ๋ฆฌ์ผ์ด์ DB ์ฐ๊ฒฐ (SELinux)¶
# ๋ฌธ์ : PHP์์ ์๊ฒฉ MySQL ์ฐ๊ฒฐ ์คํจ
# 1. ๋ก๊ทธ ํ์ธ
sudo ausearch -m avc -c httpd | audit2why
# 2. ๋ถ๋ฆฌ์ธ ํ์ธ
getsebool httpd_can_network_connect_db
# httpd_can_network_connect_db --> off
# 3. ๋ถ๋ฆฌ์ธ ํ์ฑํ
sudo setsebool -P httpd_can_network_connect_db on
์๋๋ฆฌ์ค 3: Nginx ์ปค์คํ ํฌํธ (AppArmor)¶
# /etc/apparmor.d/local/nginx
# ๋ก์ปฌ ์ปค์คํฐ๋ง์ด์ง์ฉ ํ์ผ
# ์ถ๊ฐ ํฌํธ ํ์ฉ
network inet stream,
# ์ถ๊ฐ ๊ฒฝ๋ก ํ์ฉ
/data/nginx/** r,
/var/log/nginx-custom/ rw,
/var/log/nginx-custom/** rw,
# ํ๋กํ์ผ ๋ฆฌ๋ก๋
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx
์๋๋ฆฌ์ค 4: Docker์ SELinux¶
# Docker ์ปจํ
์ด๋์์ ํธ์คํธ ๋ณผ๋ฅจ ๋ง์ดํธ
# ๋ฐฉ๋ฒ 1: z ์ต์
(๊ณต์ ๋ ์ด๋ธ)
docker run -v /data:/data:z myimage
# ๋ฐฉ๋ฒ 2: Z ์ต์
(์ ์ฉ ๋ ์ด๋ธ)
docker run -v /data:/data:Z myimage
# ๋ฐฉ๋ฒ 3: ์๋ ๋ ์ด๋ธ ์ง์
sudo chcon -Rt svirt_sandbox_file_t /data
docker run -v /data:/data myimage
์๋๋ฆฌ์ค 5: ์ ์๋น์ค ํ๋กํ์ผ ์์ฑ (AppArmor)¶
# 1. complain ๋ชจ๋๋ก ์์
sudo aa-complain /usr/local/bin/newservice
# 2. ์๋น์ค ์คํ ๋ฐ ๋ชจ๋ ๊ธฐ๋ฅ ํ
์คํธ
# 3. ๋ก๊ทธ์์ ํ๋กํ์ผ ์
๋ฐ์ดํธ
sudo aa-logprof
# 4. enforce ๋ชจ๋๋ก ์ ํ
sudo aa-enforce /usr/local/bin/newservice
# 5. ํ
์คํธ
์ฐ์ต ๋ฌธ์ ¶
๋ฌธ์ 1: SELinux ์ปจํ ์คํธ¶
๋ค์ ์ํฉ์์ ์ด๋ค ๋ช
๋ น์ ์ฌ์ฉํด์ผ ํ ๊น์?
- /opt/webapp ๋๋ ํ ๋ฆฌ๋ฅผ ์น ์๋ฒ ์ฝํ
์ธ ๋ก ์๊ตฌ ์ค์
- Apache๊ฐ 8443 ํฌํธ๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฉ
- httpd๊ฐ ์ฌ์ฉ์ ํ ๋๋ ํ ๋ฆฌ์ ์ ๊ทผํ๋๋ก ํ์ฉ
๋ฌธ์ 2: AppArmor ํ๋กํ์ผ¶
/usr/local/bin/backup.sh ์คํฌ๋ฆฝํธ๊ฐ ๋ค์ ์์
์ ์ํํฉ๋๋ค:
- /etc/ ์ฝ๊ธฐ
- /var/backup/์ ์ฐ๊ธฐ
- rsync ์คํ
- TCP 22๋ฒ ํฌํธ ๋คํธ์ํฌ ์ ๊ทผ
์ด ์คํฌ๋ฆฝํธ์ AppArmor ํ๋กํ์ผ์ ์์ฑํ์ธ์.
๋ฌธ์ 3: ํธ๋ฌ๋ธ์ํ ¶
SELinux Enforcing ๋ชจ๋์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ํ์ง ์์ต๋๋ค: 1. ๋ฌธ์ ๋ฅผ ์ง๋จํ๋ ๋จ๊ณ๋ฅผ ๋์ดํ์ธ์ 2. ์ด๋ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น์?
์ ๋ต¶
๋ฌธ์ 1 ์ ๋ต¶
# ์น ์ฝํ
์ธ ์ค์
sudo semanage fcontext -a -t httpd_sys_content_t "/opt/webapp(/.*)?"
sudo restorecon -Rv /opt/webapp
# ํฌํธ ์ถ๊ฐ
sudo semanage port -a -t http_port_t -p tcp 8443
# ํ ๋๋ ํ ๋ฆฌ ์ ๊ทผ ํ์ฉ
sudo setsebool -P httpd_enable_homedirs on
๋ฌธ์ 2 ์ ๋ต¶
#include <tunables/global>
/usr/local/bin/backup.sh {
#include <abstractions/base>
#include <abstractions/bash>
# ์ค์ ์ฝ๊ธฐ
/etc/** r,
# ๋ฐฑ์
๋๋ ํ ๋ฆฌ
/var/backup/ r,
/var/backup/** rw,
# rsync ์คํ
/usr/bin/rsync Px,
# SSH ๋คํธ์ํฌ
network inet stream,
network inet6 stream,
}
๋ฌธ์ 3 ์ ๋ต¶
# 1. SELinux ๋ก๊ทธ ํ์ธ
sudo ausearch -m avc -ts recent
# 2. ์์ธ ๋ถ์
sudo ausearch -m avc -ts recent | audit2why
# 3. ์์ธ ๋ถ์ (setroubleshoot ์ค์น ์)
sudo sealert -a /var/log/audit/audit.log
# 4. ํด๊ฒฐ์ฑ
์ ์ฉ
# - ์ปจํ
์คํธ ๋ฌธ์ : restorecon, semanage fcontext
# - ๋ถ๋ฆฌ์ธ ๋ฌธ์ : setsebool
# - ํฌํธ ๋ฌธ์ : semanage port
# - ์ ์ฑ
ํ์: audit2allow๋ก ์ปค์คํ
๋ชจ๋ ์์ฑ
๋ค์ ๋จ๊ณ¶
- 18_Log_Management.md - journald, rsyslog, logrotate ํ์ต
์ฐธ๊ณ ์๋ฃ¶
- SELinux User Guide (Red Hat)
- AppArmor Wiki
- SELinux Project Wiki
man semanage,man restorecon,man audit2whyman apparmor,man aa-status,man apparmor.d