리눅스

Linux SELinux 끄기 및 임시 비활성화 방법

SELinux (보안 강화 리눅스, Security-Enhanced Linux)는 근래의 리눅스에 도입된 보안 정책을 강화시켜 접근 권한에 대해 쉽게 제어하지 못하도록 관리하는 보안 모듈입니다.

리눅스 커널 2.6 이상인 대부분의 리눅스 배포판에는 SELinux가 기본적으로 적용되어 있습니다. 심지어 안드로이드의 최신 버전에도 SE Android 라는 이름의 보안 강화 리눅스가 포함되어 있습니다.

 

SELinux 정책의 필요성


SELinux의 보안 정책으로 인해 특정 서비스의 구동이 원활하지 않거나 권한상의 문제가 발생하여 에러를 발생시키는 경우가 있습니다. 대부분의 경우 에러 로그에 SELinux의 문제임을 나타내는 표시조차 없어 SELinux가 켜져있을 경우 대부분의 사람들은 이를 강제로 끈 후에 시도했을 때 비로소 문제가 해결되는 케이스가 종종 있습니다. (사실 SELinux의 로그 파일은 /var/log/audit/audit.log 파일로 따로 저장됩니다.)

 

그러나 먼저 짚고 넘어가야 할 점은, SELinux는 가급적이면 끄지 않고 활성화하는 것이 좋습니다.

SELinux는 특정 서비스에 대한 권한을 필요한 만큼만 허용하고 이외에는 모두 차단하는 정책을 가지고 있습니다. 따라서 특정 서비스의 취약성을 이용한 공격이 발생해도 관계된 프로세스나 파일 시스템에 쉽게 접근하지 못하도록 사전에 차단합니다.

이러한 정책으로 외부 침입자의 공격이 발생해도가적인 데이터 손실이나 노출건에 대한 큰 피해를 막을 수 있다는 장점이 있습니다. 따라서 SELinux를 끄는 것보다는, SELinux의 성격을 잘 파악해서 사용할 수 있도록 노력하는 것이 중요합니다.

 

Linux SELinux 끄기 및 비활성화


기존 리눅스를 사용하시는 분들에게는 SELinux가 아직 친숙하지 않거나 보안에 대한 다른 솔루션을 찾아볼 수도 있습니다. 또는 문제가 발생했는데 발생 원인이 SELinux임이 의심이 되어 SELinux를 잠시 비활성화 해보고 싶다면, 아래 방법을 사용해보세요.

 

주의 : 위에서도 언급했듯이 SELinux를 끄거나 비활성화하는 것은 보안상 적합하지 않습니다. 문제 확인용으로만 임시로 사용해주시고 이외에는 신중하게 고려해주시기 바랍니다.

 

먼저 SELinux는 다음과 같은 동작 모드가 있습니다.

  • Enforcing (기본값) – SELinux가 켜져있고 정책에 위반된 모든 작업을 차단함
  • Permissive – SELinux가 켜져있지만 정책에 위반된 사항에 대해 경고만 하도록 함 (audit 로그에 기록만 하는 상태)
  • Disable – SELinux가 완전히 꺼진 상태

기본값은 Enforcing이며 임시로 비활성화하게되면 Permissive 상태가 됩니다. SELinux를 완전히 끄게(Disable) 되면 시스템 재부팅 작업이 필요하며 이후 켜게 될 때도 마찬가지입니다.

 

SELinux 활성화 여부 확인

현재 SELinux가 켜져있는지 확인하려면 아래 명령어를 사용해보세요.

[root@localhost ~]# getenforce 
Enforcing

위에서 언급한 Enforcing 모드로 실행 중에 있습니다.

 

이번에는 자세한 상태를 알아보겠습니다.

[root@localhost ~]# sestatus 
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

여기서도 SELinux status 항목의 ‘enabled’, Current mode 항목의 ‘enforcing’ 으로 되어 있는 것을 확인할 수 있습니다.

 

SELinux 임시 비활성화

이제 Permissive 상태로 임시 전환해보겠습니다. 이 상태는 간단한 명령어를 통해 전환이 가능하며 서비스 재시작이나 재부팅을 요구하지 않습니다.

# setenforce 0

Permissive 모드는 0 으로, 다시 Enforcing 모드는 1 로 지정하여 setenforce 명령어를 사용해주시면 됩니다.

 

SELinux 완전히 끄기 (비권장)

완전히 SELinux를 꺼버리고 싶을 때는 아래 방법을 사용해보세요.

먼저 아래 파일을 편집기로 엽니다.

# vim /etc/sysconfig/selinux

그러면 아래와 같은 내용의 파일이 열립니다.

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

여기에서 SELINUX=enforcingdisabled 로 변경해주시면 됩니다.

파일을 저장한 후 시스템을 재부팅하게 되면 SELinux는 완전히 종료될 것입니다.

 

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

[iOS] Xcode ‘You do not have required contracts to perform an operation’ 해결

Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…

1개월 ago

[안드로이드] INSTALL_FAILED_INSUFFICIENT_STORAGE 해결

INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…

7개월 ago

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

9개월 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

9개월 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

9개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

9개월 ago