SELinux
정책
strict: 전문가용
target: 일반 (자주 문제되는 부분만 우선 적용, 나머지는 표준 리눅스보안과 동일)
dhcpd, httpd, named, nscd, ntpd, portmap, snmpd, squid, syslogd
보안문맥해석
ex) -rw-r–r– root root system_u:object_r:selinux_config_t config
system_u: 사용자, object_r: 역할, selinux_config_t: 타입
설정상태 확인
# sestatus -v
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: disabled
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
Process contexts:
Current context: unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Init context: system_u:system_r:init_t:s0
/usr/sbin/sshd system_u:system_r:sshd_t:s0-s0:c0.c1023
File contexts:
Controlling terminal: unconfined_u:object_r:user_devpts_t:s0
/etc/passwd system_u:object_r:passwd_file_t:s0
/etc/shadow system_u:object_r:shadow_t:s0
/bin/bash system_u:object_r:shell_exec_t:s0
/bin/login system_u:object_r:login_exec_t:s0
/bin/sh system_u:object_r:bin_t:s0 -> system_u:object_r:shell_exec_t:s0
/sbin/agetty system_u:object_r:getty_exec_t:s0
/sbin/init system_u:object_r:bin_t:s0 -> system_u:object_r:init_exec_t:s0
/usr/sbin/sshd system_u:object_r:sshd_exec_t:s0
/lib/libc.so.6 system_u:object_r:lib_t:s0 -> system_u:object_r:lib_t:s0
/lib/ld-linux.so.2 system_u:object_r:lib_t:s0 -> system_u:object_r:ld_so_t:s0
설정파일
파일위치: /etc/sysconfig/selinux
파일을 직접수정할 수도 있지만 setenforce 명령어로 변경할 수도 있다.
SELINUX: 사용모드
disabled: selinux를 사용하지 않음
enforcing: selinux를 완전히 활성화 시킴. 허가가 없는 사용자가 특정파일이나 프로그램에 접근 거부
permissive: 허가되지 않은 접근이면 거부 메시지와 로그는 남지만 실행은 된다. 확인용으로 사용할 때 주로 쓴다.
SELINUXTYPE: 유형
targeted: 미리 선언된 주로 문제되는 부분만 적용 됨
strict: 모든 부분에 selinux 적용됨 (전문가용)
관련 명령어
setenforce: 설정변경
# setenforce 0
: SELINUX=permissive 와 같다.
# setenforce 1
: SELINUX=enforcing 과 같다.
setenforce 명령은 sysadm_r 권한을 가지고 수행해야 한다. (즉, 관리자 권한)
getenforce: 설정확인
chcon: 보안문맥 변경명령
예) # chcon -R -t httpd_user_content_t /home/myhome/www
유틸리티
restorecon
: 현재 디렉토리에 잘못된 컨텍스트가 있으면 올바른 컨텍스트로 초기화 해 줌
ex) restore -R
matchpathcon
: 현재 디렉토리에 어떤 보안 컨텍스트를 부여해야 하는지 알려줌
ex) matchpathcon /var/log/
추가로 설치해야할 유틸리티
설치방법
# yum install -y policycoreutils-python
semanage
: SELinux 보안정책의 조회/추가/변경/삭제 할 수 있는 유틸리티
포트추가
semanage port -a -p tcp -t [보안컨텍스트] [포트]
ex) semanage port -a -p tcp -t http_port_t 800
포트삭제
# semanage port -d -p tcp [포트]
ex) semanage port -d -p tcp 800
컨텍스트 목록 보기
semanage [option] -l
ex) 파일컨텍스트 목록 보기
# semanage fcontext -l
ex) 포트컨텍스트 목록 보기
# semanage port -l
파일 컨텍스트에 새로운 경로 추가하기
ex) semanage fcontext -a -t http_sys_content_t “/data/www/(/.*)?”
파일 컨텍스트에 경로 삭제하기
ex) semanage fcontext -d “/data/www(/.*)?”
audit2why
:audit.log 파일에서 SELinux가 왜 차단되었는지 보여준다.
# audit2why < /var/log/audit/audit.log
…
Was caused by:
Was caused by:
The boolean httpd_unified was set incorrectly.
Description:
Allow httpd to unified
audit2allow
새로운 허용 정책을 추가할 수 있는 유틸리티이다.
setroubleshoot-server
: audit2why 보다 더 친절하게 설명해 준다. 처리방법까지 알려준다.
설치
# yum -y install setroubleshoot-server
# service messagebus restart
-> setroubleshoot-server 는 message bus 라는 데몬을 사용하기 때문에 설치 후 재시작 해 주는게 좋다
문제가 발생하면 /var/log/messages 파일에 기록된다.