작성자 : 기술지원부 최보근 milkissu@nextline.net
SELInux(Security-Enhanced Linux)
SELinux 란 미국가보안국(U.S. National Security Agency) 오픈 소스 커뮤니티에 릴리즈한 Linux의 보안 강화 버전(코드 포함)으로서 리눅스 보안 모듈 구조체(Linux Security Modules(LSM) framework)를 이용하여 리눅스 커널에 의무 접근 제어(Mandatory Access Control - MAC)를 구현하는 것입니다. Fedora Core3부터 기본으로 적용되기 시작하였고, 현재 대부분의 최신 리눅스 배포판에서 지원되고 있습니다.
SELinux 정책
SELinux 정책은 사용자, 프로그램, 프로세스 그리고 이들의 동작 대상인 파일과 디바이스를 포함한 시스템 전체, 즉, 모든 주체와 객체에 대한 접근 허가(access permissions)를 포함한 패키지를 말합니다. 페도라에서 사용 가능한 정책 패키지는 strict , targeted 두 가지가 있습니다.
페도라코어에서 SELinux 정책으로 strict policy 를 적용함으로 인해, 많은 문제점을 야기시켰습니다.(일반사용자들이 SELinux를 사용하기 위해서는 수준 높은 전문기술이 필요합니다) 현재 RHEL4 에서는 targeted policy에서 자주 문제시되는 부분들만 우선적으로 적용시키고, 나머지는 표준 리눅스 보안과 동일하게 운영되도록 적용한 정책으로 보다 완화된 정책패키지 targeted policy 를 설치 시 기본으로 제공합니다.
SELinux 장단점
SELinux를 사용하면 프로그램 실행에 대한 세세한 곳까지 제어가 가능하다는 장점이 있지만 일반적인 리눅스식 자유재량 접근 제어 방식에 비해 설정하기가 까다롭고 새로운 개념을 익혀야 한다는 단점이 있습니다.
SELinux 설치여부 확인
"system_u" 사용자, "object_r" 역할, "selinux_config_t" 타입을 확인할 수 있습니다. 이런 문맥으로 SELinux의 정책에 비교해서 허용하거나 거부하게 되므로 문맥이 확인 가능하다면 SELinux 를 사용 중입니다.
RedHat 의 SELinux 패키지 경우에는 sestatus -v 라는 명령을 이용해서 현재 SELinux의 사용상태를 아래와 같이 확인할 수 있습니다.
RedHat 의 SELinux 패키지 경우에는 sestatus -v 라는 명령을 이용해서 현재 SELinux의 사용상
태를 아래와 같이 확인할 수 있습니다.
SELinux 기본설정
SELinux의 설정 파일은 /etc/sysconfig/selinux 에서 확인 하실 수 있습니다.
disabled - SELinux 보안 제어를 사용하지 않으려면 disalbed 옵션을 선택합니다. disalbed 설정은 보안 제어 기능을 끄고 시스템이 보안 정책을 사용하지 않도록 설정합니다. disabled 옵션은 시스템 부팅시에 부트로더의 파라미터로 selinux=0 으로 설정하시고 부팅하는 것과 같은 설정을 나타냅니다.
permissive - 이것을 선택하면 서비스 거부 메시지를 통보 받을 수 있습니다. permissive 상태로 설정하면 자료와 프로그램에 이름을 할당한 후 로그를 기록하지만 보안 정책을 사용하지는 않습니다. permissive 상태는 SELinux를 처음 접하는 경우 처음부터 이 기능을 완전히 활성화하지 않고 우선 이 정책을 사용해서 일반 시스템 작업 시 어떠한 영향을 미치는지 알아보려는 경우 좋은 시작점이 될 수 있으나 경고 옵션을 선택 시 가끔씩 보안경고 대상이 아닌 것을 경고 대상으로 탐지하는 오류(false positive)나 경고 대상인 것을 탐지하지 않는 오류(false negative)가 발생할 가능성도 있으니 주의가 필요합니다. Permissive 옵션은 setenforce 0 명령어와 같은 결과를 나타냅니다.
enforcing - SELinux를 완전히 활성화하는 옵션입니다. enforcing 옵션을 선택하면 추가 시스템 보안을 위해 모든 보안 정책 (예, 허가가 없는 사용자가 특정한 파일이나 프로그램에 접근하는 것을 거부하기)이 사용됩니다. SELinux가 완전히 실행되어도 아무런 지장을 받지 않고 일반적인 시스템 작업을 수행할 수 있다고 확인이 되는 경우 이 옵션을 설정하시길 권장합니다. 또한 enforcing 옵션은 setenforce 1 명령어와 같은 결과를 나타냅니다.
SELinux 서비스 설정
chcon - SELinux 의 보안문맥을 변경해야 하는 경우에 사용하는 명령
아파치를 사용 중에 분명히 디렉토리를 생성했는데도 에러가 난다면 아래처럼 http_user_content_t 를 해당 DocumentRoot 에 적용해줌으로 해결해 줄 수 있습니다.
setsebool - SELinux 설정 값의 각 항목을 설정하는 명령
/etc/selinux/targeted/Booleans (설정 파일)
-P 옵션은 /etc/selinux/targeted/booleans 파일의 설정이 변경되어 시스템 리부팅후에도 지속적으로 적용이 되나, -P 옵션을 사용하지 않으면 설정파일은 변경되지 않고 현재의 설정만 바뀌게 됩니다. 또한 system-config-securitylevel-tui 을 사용하여 변경하는 방법도 있습니다.
SELinux 정책결정
현재 사용중인 시스템에 정책을 적용 시키는 경우 많은 문제를 야기 시킬수 있습니다. 그러므로 정책을 적용 시키기 전에 면밀한 테스트와 정책 적용 문제를 충분히 고려해야 합니다. 정책 교체 방법은 system-config-securitylevel을 사용하여 정책을 바꾸고 재명명(relabel)하도록 파일 시스템을 설정하면 됩니다.