IT/linux

SELinux 설정 : semanage

울티마 2022. 6. 10. 14:39

- 개발 환경부터 SELinux enable 환경에서 App 설정을 진행해야

 운영 환경 전환 시 SELinux에 의한 오류를 미리 해결할 수 있음
 
1. Selinux 비활성화 필요 시
# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing

(1) 온라인 중 disabled 설정
# setenforce 0 ← 현재 온라인 중 상태 변경
# sestatus
SELinux status: enabled <- 리부팅 후 다시 enable 됨
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive

(2) 영구적인 selinux 해제
# vi /etc/sysconfig/selinux
#SELINUX=enforcing
SELINUX=disabled
#SELINUX=permissive
SELINUXTYPE=targeted

리부팅 후 다시 확인

2. SELinux 관리용 툴 설치 (semanage 등)

# yum install policycoreutils-python
Or
# dnf install policycoreutils-python-utils

3. semanage 사용 - port 수준
(1) 등록된 포트 컨텍스트 확인
# semanage port -l
http_cache_port_t tcp 8080, 8118, 8123, 10001–10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000

(2) http 포트 추가 (위의 http_port_t 그룹에 900번 추가)
# semanage port -a -p tcp -t http_port_t 900 → 신규 추가
# semanage port -m -p tcp -t http_port_t 900 → 기존에 등록되어 있어 변경이 필요할 경우

설정 완료 후 http_port_t에 900 추가되었나 확인
# semanage port -l | grep http_port_t

위와 같이 서비스 수준의 selinux 설정을 추가하지 않으면 방화벽을 개방하더라도
(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
와 같은 에러 발생

(3) 포트 제거 : -a 옵션 대신 -d 사용
# semanage port -d -p tcp 900

4. semanage 사용 - 파일 수준
(1) 등록된 파일 컨텍스트 확인
# semanage fcontext -l

(2) 예시 - mysql을 위한 신규 데이터 저장소 등록 (예: /opt/mysql)
# semanage fcontext -l | grep mysqld_db_t
/var/lib/mysql(-files|-keyring)?(/.*)? all files system_u:object_r:mysqld_db_t:s0
→ /var/lib/mysql 밑에 자유롭게 데이터베이스 파일 추가 가능

데이터베이스 파일 복사/이동 후 해당 저장소만 명시적으로 등록 (chcon 사용)
# chcon -R -t mysqld_db_t /opt/mysql → 향후 신규 데이터베이스는 허용되지 않음


새로운 파일 컨텍스트 부여 : 해당 디렉토리 밑으로 자유롭게 신규 데이터베이스 추가 가능
# semanage fcontext -a -t mysqld_db_t “/opt/mysql(/.*)?”
# restorecon -R -v /opt/mysql
# semanage fcontext -l|grep mysqld_db_t
/var/lib/mysql(-files|-keyring)?(/.*)? all files system_u:object_r:mysqld_db_t:s0
/opt/mysql(/.*)? all files system_u:object_r:mysqld_db_t:s0 ← 새로 추가됨

(3) 파일 컨텍스트 제거 : -d 옵션 사용
# semanage fcontext -d “/opt/mysql(/.*)?”