리눅스 SELinux 모드를 영구적으로 변경하려면 SELinux 구성 파일을 수정해야 합니다. 다음은 변경하는 방법입니다
리눅스 SELinux 모드 sestatus
명령으로 확인
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 31
경고: SELinux를 퍼미시브 모드에서 실행하는 경우 사용자 및 프로세스가 여러 파일 시스템 개체를 잘못 레이블링할 수 있습니다. SELinux가 비활성화된 상태에서 생성된 파일 시스템 개체는 전혀 레이블이 지정되지 않습니다. 이러한 동작은 SELinux가 파일 시스템 개체의 올바른 레이블에 의존하기 때문에 강제 모드로 변경할 때 문제를 일으킵니다.
잘못된 레이블이 지정된 파일과 레이블이 지정되지 않은 파일이 문제를 일으키지 않도록 하려면, SELinux는 비활성화된 상태에서 퍼미시브 또는 강제 모드로 변경될 때 파일 시스템을 자동으로 다시 레이블링합니다. 파일이 다음 재부팅 시 다시 레이블링되도록 -F 옵션을 포함하는 /.autorelabel 파일을 생성하려면 root로 fixfiles -F onboot 명령을 사용합니다.
레이블을 다시 지정하기 전에 시스템을 재부팅하기 전에, 예를 들어 enforcing=0 커널 옵션을 사용하여 시스템이 퍼미시브 모드에서 부팅되도록 확인하십시오. 이렇게 하면 시스템이 selinux-autorelabel 서비스를 시작하기 전에 systemd가 필요로하는 레이블이 지정되지 않은 파일을 포함하고 있어서 부팅에 실패하는 경우를 방지할 수 있습니다. 자세한 내용은 RHBZ#2021835를 참조하십시오.
리눅스 SELinux permissive 모드 영구 변경 방법
SELinux 모드를 퍼미시브로 영구적으로 변경하는 절차는 다음과 같습니다. SELinux가 퍼미시브 모드에서 실행되면 SELinux 정책이 강제되지 않습니다. 시스템은 운영 중이며 SELinux가 작업을 거부하지 않지만 AVC 메시지만 기록하며, 이는 문제 해결, 디버깅 및 SELinux 정책 개선에 사용될 수 있습니다. 이 경우 각 AVC는 한 번만 로깅됩니다.
전제 조건
- 시스템에 selinux-policy-targeted, libselinux-utils 및 policycoreutils 패키지가 설치되어 있어야 합니다.
- selinux=0 또는 enforcing=0 커널 매개변수를 사용하지 않아야 합니다.
절차
- 선호하는 텍스트 편집기로
/etc/selinux/config
파일을 엽니다. 예를 들어:
# vi /etc/selinux/config
- SELINUX=permissive 옵션을 구성합니다.
# 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=permissive
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
- 시스템을 다시 시작합니다.
# reboot
확인
시스템이 다시 시작되면 getenforce
명령이 Permissive를 반환하는지 확인합니다.
$ getenforce
Permissive
리눅스 SELinux enforcing 모드 영구 변경 방법
SELinux를 강제 모드로 전환하는 절차는 다음과 같습니다. SELinux가 강제 모드에서 실행되면 SELinux 정책을 시행하고 SELinux 정책 규칙에 따라 액세스를 거부합니다. RHEL에서는 SELinux를 사용하여 시스템을 초기 설치했을 때 강제 모드가 기본적으로 활성화됩니다.
전제 조건
- 시스템에 selinux-policy-targeted, libselinux-utils 및 policycoreutils 패키지가 설치되어 있어야 합니다.
- selinux=0 또는 enforcing=0 커널 매개변수를 사용하지 않아야 합니다.
절차
- 선호하는 텍스트 편집기로
/etc/selinux/config
파일을 엽니다. 예를 들어:
# vi /etc/selinux/config
- SELINUX=enforcing 옵션을 구성합니다.
# 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 these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
- 변경 사항을 저장하고 시스템을 다시 시작합니다.
# reboot
확인
시스템이 다시 시작되면 getenforce
명령이 Enforcing을 반환하는지 확인합니다.
$ getenforce
Enforcing
SELinux를 강제 모드로 변경한 후 에러 발생 확인 방법
SELinux를 강제 모드로 변경한 후에는 SELinux 정책 규칙이 부정확하거나 누락되어 SELinux가 일부 작업을 거부할 수 있습니다. SELinux가 거부하는 작업을 확인하려면 다음 명령을 root로 입력하세요:
# ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today
또는 setroubleshoot-server 패키지가 설치된 경우 다음과 같이 입력할 수도 있습니다:
# grep "SELinux is preventing" /var/log/messages
만약 SELinux가 활성화되어 있고 Audit 데몬 (auditd)이 시스템에서 실행되지 않는다면, dmesg 명령의 출력에서 특정 SELinux 메시지를 검색하세요:
# dmesg | grep -i -e type=1300 -e type=1400
SELinux를 활성화할 때 발생할 수 있는 부팅 불가능 또는 프로세스 실패
이전에 비활성화된 시스템에서 SELinux를 활성화할 때 발생할 수 있는 부팅 불가능 또는 프로세스 실패와 같은 문제를 피하기 위해 다음 절차를 따르세요.
경고
시스템이 SELinux를 퍼미시브 모드로 실행할 때 사용자 및 프로세스가 다양한 파일 시스템 객체를 잘못 레이블링할 수 있습니다. SELinux가 비활성화된 동안 생성된 파일 시스템 객체에는 전혀 레이블이 지정되지 않습니다. 이 동작은 SELinux가 파일 시스템 객체의 올바른 레이블에 의존하기 때문에 강제 모드로 전환할 때 문제를 일으킵니다.
잘못된 레이블이 지정된 및 레이블이 지정되지 않은 파일이 문제를 일으키지 않도록 하려면 SELinux는 비활성화된 상태에서 퍼미시브 또는 강제 모드로 변경될 때 파일 시스템을 자동으로 다시 레이블링합니다.
레이블을 다시 지정하기 전에 시스템이 부팅할 수 있는지 확인하려면 시스템이 부팅될 때 퍼미시브 모드로 부팅되도록 하십시오. 예를 들어, enforcing=0 커널 옵션을 사용합니다. 이렇게 하면 시스템이 selinux-autorelabel 서비스를 시작하기 전에 systemd가 필요로하는 레이블이 지정되지 않은 파일을 포함하고 있어서 부팅에 실패하는 경우를 방지할 수 있습니다. 자세한 내용은 RHBZ#2021835를 참조하십시오.
절차
- SELinux를 퍼미시브 모드로 활성화합니다. 자세한 내용은 퍼미시브 모드로 변경을 참조하십시오.
- 시스템을 다시 시작합니다.
# reboot
- SELinux 거부 메시지를 확인합니다. 자세한 내용은 SELinux 거부 확인을 참조하십시오.
- 다음 재부팅 시 파일이 다시 레이블링되도록 확인합니다.
# fixfiles -F onboot
이 명령은 -F 옵션을 포함하는 /.autorelabel 파일을 생성합니다.
경고
fixfiles -F onboot 명령을 실행하기 전에 항상 퍼미시브 모드로 전환하십시오. 이렇게 하면 시스템이 레이블이 지정되지 않은 파일을 포함하고 있어서 부팅에 실패하는 경우를 방지할 수 있습니다. 자세한 내용은 RHBZ#2021835를 참조하십시오.
- 거부 사항이 없으면 강제 모드로 전환합니다. 자세한 내용은 부팅 시 SELinux 모드 변경을 참조하십시오.
확인
시스템이 다시 시작되면 getenforce
명령이 Enforcing을 반환하는지 확인합니다.
$ getenforce
Enforcing
참고
SELinux를 강제 모드로 실행하면서 사용자 정의 애플리케이션을 실행하는 경우 다음 시나리오 중 하나를 선택하세요:
- 애플리케이션을 unconfined_service_t 도메인에서 실행합니다.
- 애플리케이션에 대한 새로운 정책을 작성합니다. 자세한 내용은 사용자 지정 SELinux 정책 작성을 참조하십시오.
SELinux 비활성화
SELinux를 비활성화할 때는 SELinux 정책이 전혀 로드되지 않으며 강제되지 않으며 AVC 메시지가 로그되지 않습니다. 따라서 SELinux를 실행하는 모든 이점을 잃게 됩니다.
중요
Red Hat은 SELinux를 영구적으로 비활성화하는 대신 퍼미시브 모드를 사용하는 것을 강력히 권장합니다. 퍼미시브 모드에 대한 자세한 내용은 퍼미시브 모드로 변경을 참조하십시오.
전제 조건
- grubby 패키지가 설치되어 있어야 합니다.
절차
- SELinux를 영구적으로 비활성화하려면 부트로더를 구성하여 kernel 명령 줄에 selinux=0을 추가합니다.
$ sudo grubby --update-kernel ALL --args selinux=0
- 시스템을 다시 시작합니다.
$ reboot
확인
재부팅 후에 getenforce
명령이 Disabled를 반환하는지 확인합니다.
$ getenforce
Disabled
부팅 시 SELinux 모드를 변경
부팅 시 SELinux 모드를 변경하기 위해 여러 가지 커널 매개변수를 설정할 수 있습니다:
enforcing=0
이 매개변수를 설정하면 시스템이 퍼미시브 모드로 시작됩니다. 이는 문제 해결 시 유용합니다. 파일 시스템이 매우 손상되었을 때 문제를 감지하는 유일한 옵션이 될 수 있습니다. 또한 퍼미시브 모드에서는 시스템이 레이블을 올바르게 생성합니다. 이 모드에서 생성되는 AVC 메시지는 강제 모드에서와 다를 수 있습니다.
퍼미시브 모드에서는 동일한 거부 중 첫 번째 거부만 보고됩니다. 그러나 강제 모드에서는 디렉터리를 읽는 데 관련된 거부와 응용 프로그램이 중지되는 거부가 있을 수 있습니다. 퍼미시브 모드에서는 동일한 AVC 메시지가 생성되지만 응용 프로그램은 디렉터리의 파일을 계속 읽고 각 거부에 대해 추가적인 AVC를 받게 됩니다.
selinux=0
이 매개변수는 커널이 SELinux 인프라를 로드하지 않도록 합니다. init 스크립트는 시스템이 selinux=0 매개변수를 사용하여 부팅되었음을 인식하고 /.autorelabel 파일을 touch합니다. 이렇게 하면 SELinux를 사용하여 다음 번 부팅 시 자동으로 다시 레이블링됩니다.
중요
Red Hat은 selinux=0 매개변수 사용을 권장하지 않습니다. 시스템을 디버깅할 때는 퍼미시브 모드를 사용하는 것이 좋습니다.
autorelabel=1
이 매개변수는 다음과 유사한 방식으로 시스템을 다시 레이블링합니다:
# touch /.autorelabel
# reboot
파일 시스템에 잘못된 레이블이 있는 경우 autorelabel 프로세스를 성공적으로 수행하려면 시스템을 퍼미시브 모드로 시작합니다.
추가 자료
SELinux와 관련된 추가적인 커널 부트 매개변수에 대한 자세한 내용은 /usr/share/doc/kernel-doc-/Documentation/admin-guide/kernel-parameters.txt 파일을 참조하세요. 이 파일은 커널-doc 패키지와 함께 설치됩니다. 문자열을 설치된 커널의 버전 번호로 대체하세요. 예를 들어:
dnf install kernel-doc
less /usr/share/doc/kernel-doc-4.18.0/Documentation/admin-guide/kernel-parameters.txt