19.2. SELinux 상태 및 모드 변경
활성화되면 SELinux를 강제 또는 허용 모드의 두 가지 모드 중 하나로 실행할 수 있습니다. 다음 섹션에서는 이러한 모드로 영구적으로 변경하는 방법을 보여줍니다.
19.2.1. SELinux 상태 및 모드의 영구 변경 링크 복사링크가 클립보드에 복사되었습니다!
SELinux 상태 및 모드에서 설명한 대로 SELinux를 활성화하거나 비활성화할 수 있습니다. 활성화되는 경우 SELinux에는 강제 및 허용 모드의 두 가지 모드가 있습니다.
getenforce
또는 sestatus
명령을 사용하여 SELinux가 실행 중인 모드를 확인합니다. getenforce
명령은 Enforcing
,Permissive
또는 Disabled
를 반환합니다.
sestatus
명령은 SELinux 상태 및 사용 중인 SELinux 정책을 반환합니다.
시스템이 허용 모드에서 SELinux를 실행하는 경우 사용자와 프로세스는 다양한 파일 시스템 오브젝트에 잘못 레이블을 지정할 수 있습니다. SELinux가 비활성화되는 동안 생성된 파일 시스템 오브젝트는 레이블로 지정되지 않습니다. 이 동작은 SELinux가 파일 시스템 오브젝트의 올바른 레이블을 사용하므로 강제 모드로 변경할 때 문제가 발생합니다.
레이블이 지정되지 않은 파일에 잘못 레이블이 지정되지 않은 파일을 방지하기 위해 SELinux는 비활성화 상태에서 허용 또는 강제 모드로 변경될 때 파일 시스템의 레이블을 자동으로 다시 지정합니다. 다음 재부팅 시 파일의 레이블을 다시 지정하려면 root로 fixfiles -F onboot
명령을 사용하여 -F
옵션이 포함된 /.autorelabel
파일을 만듭니다.
레이블을 다시 지정하기 위해 시스템을 재부팅하기 전에, 예를 들어 enforcing=0
커널 옵션을 사용하여 허용 모드로 부팅되는지 확인합니다. 이렇게 하면 selinux-autorelabel
서비스를 시작하기 전에 시스템에 systemd
에 필요한 레이블이 지정되지 않은 파일이 포함된 경우 시스템이 부팅되지 않습니다. 자세한 내용은 RHBZ#2021835 를 참조하십시오.
19.2.2. SELinux를 허용 모드로 변경 링크 복사링크가 클립보드에 복사되었습니다!
SELinux가 허용 모드로 실행 중이면 SELinux 정책이 적용되지 않습니다. 시스템이 작동 상태로 남아 있으며 SELinux는 작업을 거부하지 않고 AVC 메시지만 기록합니다. 그러면 문제 해결, 디버깅 및 SELinux 정책 개선에 사용할 수 있습니다. 각 AVC는 이 경우 한 번만 로깅됩니다.
사전 요구 사항
-
selinux-policy-targeted
,libselinux-utils
및policycoreutils
패키지가 시스템에 설치됩니다. -
selinux=0
또는enforcing=0
커널 매개 변수는 사용되지 않습니다.
절차
선택한 텍스트 편집기에서
/etc/selinux/config
파일을 엽니다. 예를 들면 다음과 같습니다.vi /etc/selinux/config
# vi /etc/selinux/config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELINUX=permissive
옵션을 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템을 다시 시작하십시오.
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
시스템이 다시 시작되면
getenforce
명령이Permissive
를 반환하는지 확인합니다.getenforce
$ getenforce Permissive
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
19.2.3. SELinux를 강제 모드로 변경 링크 복사링크가 클립보드에 복사되었습니다!
SELinux가 강제 모드에서 실행 중인 경우 SELinux 정책을 적용하고 SELinux 정책 규칙에 따라 액세스를 거부합니다. RHEL에서는 SELinux를 사용하여 처음 시스템을 설치할 때 강제 모드가 기본적으로 활성화됩니다.
사전 요구 사항
-
selinux-policy-targeted
,libselinux-utils
및policycoreutils
패키지가 시스템에 설치됩니다. -
selinux=0
또는enforcing=0
커널 매개 변수는 사용되지 않습니다.
절차
선택한 텍스트 편집기에서
/etc/selinux/config
파일을 엽니다. 예를 들면 다음과 같습니다.vi /etc/selinux/config
# vi /etc/selinux/config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELINUX=enforcing
옵션을 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항을 저장하고 시스템을 다시 시작하십시오.
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 부팅 시 SELinux는 시스템 내의 모든 파일과 디렉터리의 레이블을 다시 지정하고 SELinux가 비활성화될 때 생성된 파일과 디렉토리에 대해 SELinux 컨텍스트를 추가합니다.
검증
시스템이 다시 시작되면
getenforce
명령이Enforcing
:getenforce
$ getenforce Enforcing
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
문제 해결
강제 모드로 변경한 후 SELinux는 올바르지 않거나 누락된 SELinux 정책 규칙으로 인해 일부 작업을 거부할 수 있습니다.
SELinux 거부 작업을 보려면 root로 다음 명령을 입력합니다.
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today
# ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또는
se rsh-server
패키지가 설치되어 있으면 다음을 입력합니다.grep "SELinux is preventing" /var/log/messages
# grep "SELinux is preventing" /var/log/messages
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux가 활성화되어 있고 감사 데몬(
auditd
)이 시스템에서 실행되지 않는 경우dmesg
명령의 출력에서 특정 SELinux 메시지를 검색합니다.dmesg | grep -i -e type=1300 -e type=1400
# dmesg | grep -i -e type=1300 -e type=1400
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
자세한 내용은 SELinux와 관련된 문제 해결을 참조하십시오.
19.2.4. 이전에 비활성화한 시스템에서 SELinux 활성화 링크 복사링크가 클립보드에 복사되었습니다!
이전에 비활성화한 시스템에서 SELinux를 활성화하거나 처리할 수 없는 시스템과 같은 문제를 방지하려면 허용 모드에서 AVC(Access Vector Cache) 메시지를 먼저 해결합니다.
시스템이 허용 모드에서 SELinux를 실행하는 경우 사용자와 프로세스는 다양한 파일 시스템 오브젝트에 잘못 레이블을 지정할 수 있습니다. SELinux가 비활성화되는 동안 생성된 파일 시스템 오브젝트는 레이블로 지정되지 않습니다. 이 동작은 SELinux가 파일 시스템 오브젝트의 올바른 레이블을 사용하므로 강제 모드로 변경할 때 문제가 발생합니다.
레이블이 지정되지 않은 파일에 잘못 레이블이 지정되지 않은 파일을 방지하기 위해 SELinux는 비활성화 상태에서 허용 또는 강제 모드로 변경될 때 파일 시스템의 레이블을 자동으로 다시 지정합니다.
레이블을 다시 지정하기 위해 시스템을 재부팅하기 전에, 예를 들어 enforcing=0
커널 옵션을 사용하여 허용 모드로 부팅되는지 확인합니다. 이렇게 하면 selinux-autorelabel
서비스를 시작하기 전에 시스템에 systemd
에 필요한 레이블이 지정되지 않은 파일이 포함된 경우 시스템이 부팅되지 않습니다. 자세한 내용은 RHBZ#2021835 를 참조하십시오.
절차
- 허용 모드에서 SELinux를 활성화합니다. 자세한 내용은 허용 모드로 변경에서 참조하십시오.
시스템을 다시 시작하십시오.
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux 거부 메시지를 확인합니다. 자세한 내용은 SELinux 거부 식별 을 참조하십시오.
다음 재부팅 시 파일의 레이블을 다시 지정했는지 확인합니다.
fixfiles -F onboot
# fixfiles -F onboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면
-F
옵션이 포함된/.autorelabel
파일이 생성됩니다.주의fixfiles -F onboot
명령을 시작하기 전에 항상 허용 모드로 전환합니다.기본적으로
autorelabel
은 시스템에 사용 가능한 CPU 코어만큼 많은 스레드를 병렬로 사용합니다. 자동 레이블을 다시 지정하는 동안 단일 스레드만 사용하려면fixfiles -T 1 onboot
명령을 사용합니다.- 거부가 없는 경우 강제 모드로 전환합니다. 자세한 내용은 부팅 시 SELinux 모드 변경을 참조하십시오.
검증
시스템이 다시 시작되면
getenforce
명령이Enforcing
:getenforce
$ getenforce Enforcing
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 단계
SELinux를 강제 모드로 사용자 지정 애플리케이션을 실행하려면 다음 시나리오 중 하나를 선택하십시오.
-
unconfined_service_t
도메인에서 애플리케이션을 실행합니다. - 애플리케이션에 대한 새 정책을 작성합니다. 자세한 내용은 사용자 지정 SELinux 정책 작성 섹션을 참조하십시오.
19.2.5. SELinux 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
SELinux를 비활성화하면 시스템이 SELinux 정책을 로드하지 않습니다. 결과적으로 시스템은 SELinux 정책을 적용하지 않고 AVC(Access Vector Cache) 메시지를 기록하지 않습니다. 따라서 SELinux 실행의 모든 이점이 사라집니다.
성능이 취약한 보안으로 인해 상당한 위험이 발생하지 않는 시스템과 같이 특정 시나리오를 제외하고 SELinux를 비활성화하지 마십시오.
프로덕션 환경에서 디버깅을 수행해야 하는 경우 SELinux를 영구적으로 비활성화하는 대신 허용 모드를 일시적으로 사용합니다. 허용 모드에 대한 자세한 내용은 허용 모드로 변경을 참조하십시오.
사전 요구 사항
grubby
패키지가 설치되어 있습니다.rpm -q grubby
$ rpm -q grubby grubby-<version>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
절차
selinux=0
을 커널 명령줄에 추가하도록 부트 로더를 구성합니다.sudo grubby --update-kernel ALL --args selinux=0
$ sudo grubby --update-kernel ALL --args selinux=0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템을 다시 시작하십시오.
reboot
$ reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
재부팅 후
getenforce
명령이Disabled
:을 반환하는지 확인합니다.getenforce
$ getenforce Disabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
대체 방법
RHEL 8에서는 /etc/selinux/config
파일에서 SELINUX=disabled
옵션을 사용하여 더 이상 사용되지 않는 SELinux를 비활성화하는 방법을 계속 사용할 수 있습니다. 그러면 SELinux가 활성화된 상태로 커널이 부팅되고 부팅 프로세스 후반부에서 비활성화 모드로 전환됩니다. 결과적으로 커널 패닉을 유발하는 메모리 누수 및 경쟁 조건이 발생할 수 있었습니다. 이 방법을 사용하려면 다음을 수행합니다.
선택한 텍스트 편집기에서
/etc/selinux/config
파일을 엽니다. 예를 들면 다음과 같습니다.vi /etc/selinux/config
# vi /etc/selinux/config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELINUX=disabled
옵션을 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항을 저장하고 시스템을 다시 시작하십시오.
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
19.2.6. 부팅 시 SELinux 모드 변경 링크 복사링크가 클립보드에 복사되었습니다!
부팅 시 다음 커널 매개변수를 설정하여 SELinux가 실행되는 방식을 변경할 수 있습니다.
enforcing=0
이 매개 변수를 설정하면 시스템이 허용 모드로 시작되므로 문제를 해결할 때 유용합니다. 파일 시스템이 너무 손상된 경우 허용 모드를 사용하는 것이 문제를 감지하는 유일한 옵션일 수 있습니다. 또한 허용 모드에서 시스템은 라벨을 올바르게 만듭니다. 이 모드에서 생성되는 AVC 메시지는 강제 모드에서와 다를 수 있습니다.
허용 모드에서는 일련의 동일한 거부 중 첫 번째 거부만 보고됩니다. 그러나 강제 모드에서는 디렉터리 읽기와 관련된 거부가 발생할 수 있으며 애플리케이션이 중지될 수 있습니다. 허용 모드에서는 동일한 AVC 메시지가 표시되지만 애플리케이션은 디렉토리에 있는 파일을 계속 읽고 각 거부에 대해 AVC도 받습니다.
selinux=0
이 매개 변수를 사용하면 커널이 SELinux 인프라의 일부를 로드하지 않습니다. init 스크립트는 시스템이
selinux=0
매개 변수로 부팅되었으며/.autorelabel
파일을 터치합니다. 이로 인해 SELinux를 활성화한 다음 부팅할 때 시스템이 자동으로 레이블을 다시 지정합니다.중요프로덕션 환경에서는
selinux=0
매개변수를 사용하지 마십시오. 시스템을 디버깅하려면 SELinux를 비활성화하는 대신 일시적으로 허용 모드를 사용합니다.autorelabel=1
이 매개변수는 시스템에서 다음 명령과 유사하게 레이블을 다시 지정하도록 강제 적용합니다.
touch /.autorelabel reboot
# touch /.autorelabel # reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 파일 시스템에 레이블이 잘못 지정된 오브젝트가 많은 경우 허용 모드로 시스템을 시작하여 자동 레이블 프로세스가 성공적으로 수행됩니다.