SELinux 사용
SELinux(Security-Enhanced Linux)를 사용하여 사용자와 프로세스가 파일 및 장치와 무단 상호 작용을 수행하지 못하도록 방지
초록
Red Hat 문서에 관한 피드백 제공 링크 복사링크가 클립보드에 복사되었습니다!
문서 개선을 위한 의견에 감사드립니다. 어떻게 개선할 수 있는지 알려주십시오.
Jira를 통해 피드백 제출 (계정 필요)
- Jira 웹 사이트에 로그인합니다.
- 상단 탐색 바에서 생성을 클릭합니다.
- 요약 필드에 설명 제목을 입력합니다.
- 설명 필드에 개선을 위한 제안을 입력합니다. 문서의 관련 부분에 대한 링크를 포함합니다.
- 대화 상자 하단에서 생성 을 클릭합니다.
1장. SELinux 시작하기 링크 복사링크가 클립보드에 복사되었습니다!
SELinux(Security Enhanced Linux)는 추가 시스템 보안 계층을 제공합니다. SELinux는 근본적으로 질문에 대답합니다. May <subject> do <action> to <object>? (예: 사용자의 홈 디렉토리에 있는 웹 서버 액세스 파일일수 있음)
1.1. SELinux 소개 링크 복사링크가 클립보드에 복사되었습니다!
DAC(Disretionary Access Control)라는 사용자, 그룹 및 기타 권한을 기반으로 하는 표준 액세스 정책은 시스템 관리자가 특정 애플리케이션을 로그 파일에만 볼 수 있도록 하는 것과 같은 포괄적이고 세분화된 보안 정책을 만들 수 없습니다.
SELinux(Security Enhanced Linux)는 MAC(Mandatory Access Control)을 구현합니다. 모든 프로세스 및 시스템 리소스에는 SELinux 컨텍스트 라는 특수 보안 레이블이 있습니다. SELinux 컨텍스트( SELinux 레이블 이라고도 함)는 시스템 수준 세부 정보를 추상화하고 엔터티의 보안 속성에 중점을 두는 식별자입니다. 이는 SELinux 정책에서 오브젝트를 일관된 방식으로 참조할 수 있을 뿐만 아니라 다른 식별 방법에서 찾을 수 있는 모호함도 제거합니다. 예를 들어, 파일에 바인드 마운트를 사용하는 시스템에 여러 개의 유효한 경로 이름이 있을 수 있습니다.
SELinux 정책은 프로세스가 서로 상호 작용하는 방법과 다양한 시스템 리소스를 정의하는 일련의 규칙에 이러한 컨텍스트를 사용합니다. 기본적으로 정책은 규칙이 액세스를 명시적으로 부여하지 않는 한 모든 상호 작용을 허용하지 않습니다.
DAC 규칙 후에 SELinux 정책 규칙을 확인합니다. DAC 규칙에서 먼저 액세스를 거부하는 경우 SELinux 정책 규칙이 사용되지 않으므로 기존 DAC 규칙에서 액세스를 방지하는 경우 SELinux 거부가 기록되지 않습니다.
SELinux 컨텍스트에는 사용자, 역할, 유형, 보안 수준 등 여러 필드가 있습니다. SELinux 유형 정보는 SELinux 정책과 관련하여 프로세스와 시스템 리소스 간의 허용된 상호 작용을 정의하는 가장 일반적인 정책 규칙에서 전체 SELinux 컨텍스트가 아니라 SELinux 유형을 사용하므로 가장 중요한 정보일 수 있습니다. SELinux 유형은 _t 로 끝납니다. 예를 들어 웹 서버의 유형 이름은 httpd_t 입니다. /var/www/html/ 에 있는 파일 및 디렉토리의 유형 컨텍스트는 httpd_sys_content_t 입니다. /tmp 및 / var /tmp /에 있는 파일 및 디렉토리의 유형 컨텍스트는 tmp_t 입니다. 웹 서버 포트의 유형 컨텍스트는 http_port_t 입니다.
Apache( httpd_t로 실행되는 웹 서버 프로세스)가 /var/www/html/ 및 기타 웹 서버 디렉터리(httpd_sys_content_t)에서 일반적으로 발견되는 컨텍스트의 파일 및 디렉터리에 액세스할 수 있도록 허용하는 정책 규칙이 있습니다. /tmp 및 /var/tmp/ 에서 일반적으로 발견되는 파일에 대한 정책에 허용 규칙이 없으므로 액세스가 허용되지 않습니다. SELinux를 사용하면 Apache가 손상되고 악성 스크립트가 액세스 권한을 얻을 수 있더라도 /tmp 디렉토리에 액세스할 수 없습니다.
그림 1.1. 예를 들어 SELinux가 Apache 및 MariaDB를 안전한 방식으로 실행하는 데 도움이 되는 방법입니다.
이전 체계에서 볼 수 있듯이 SELinux는 httpd_t로 httpd_t 로 실행되는 Apache 프로세스가 /var/www/html/ 디렉터리에 액세스할 수 있도록 허용하며 httpd_t 및 mysqld_db_t 유형 컨텍스트에 대한 허용 규칙이 없기 때문에 /data/mysql/ 디렉터리에 액세스하는 동일한 프로세스를 거부합니다. 반면 mysqld_t 로 실행되는 MariaDB 프로세스는 /data/mysql/ 디렉터리에 액세스할 수 있으며 SELinux는 mysqld_t 유형의 프로세스를 올바르게 거부하여 httpd_sys_content_t 로 레이블이 지정된 /var/www/html/ 디렉터리에 액세스합니다.
1.2. SELinux 실행의 이점 링크 복사링크가 클립보드에 복사되었습니다!
SELinux는 다음과 같은 이점을 제공합니다.
- 모든 프로세스와 파일에 레이블이 지정됩니다. SELinux 정책 규칙은 프로세스가 파일과 상호 작용하는 방법과 프로세스가 서로 상호 작용하는 방식을 정의합니다. 액세스를 구체적으로 허용하는 SELinux 정책 규칙이 있는 경우에만 액세스가 허용됩니다.
- SELinux는 세분화된 액세스 제어를 제공합니다. 사용자 재량에 따라 제어되는 기존 UNIX 권한을 벗어나 Linux 사용자 및 그룹 ID를 기반으로 하는 SELinux 액세스 결정은 SELinux 사용자, 역할, 유형 및 필요에 따라 보안 수준과 같은 모든 사용 가능한 정보를 기반으로 합니다.
- SELinux 정책은 관리로 정의되며 시스템 전체에서 강제 적용됩니다.
- SELinux는 권한 에스컬레이션 공격을 완화할 수 있습니다. 프로세스는 도메인에서 실행되며 서로 분리되어 있습니다. SELinux 정책 규칙은 프로세스가 파일 및 기타 프로세스에 액세스하는 방법을 정의합니다. 프로세스가 손상되면 공격자는 해당 프로세스의 정상적인 기능에만 액세스하고 프로세스가 액세스하도록 구성된 파일에만 액세스할 수 있습니다. 예를 들어 Apache HTTP Server가 손상된 경우 공격자는 이러한 액세스를 허용하도록 특정 SELinux 정책 규칙이 추가되거나 구성되지 않은 경우 해당 프로세스를 사용하여 사용자 홈 디렉터리의 파일을 읽을 수 없습니다.
- SELinux는 데이터 기밀성과 무결성을 강제 적용할 수 있으며 신뢰할 수 없는 입력에서 프로세스를 보호할 수 있습니다.
SELinux는 안티바이러스 소프트웨어, 보안 암호, 방화벽 또는 기타 보안 시스템을 대체하지 않고 기존 보안 솔루션을 개선하도록 설계되었습니다. SELinux를 실행하는 경우에도 하드 추측 암호 및 방화벽을 사용하여 소프트웨어를 최신 상태로 유지하는 등 모범적인 보안 사례를 계속 따르는 것이 중요합니다.
1.3. SELinux 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제에서는 SELinux가 보안을 강화하는 방법을 보여줍니다.
- 기본 동작은 거부됩니다. 파일을 여는 프로세스와 같이 액세스를 허용하는 SELinux 정책 규칙이 없으면 액세스가 거부됩니다.
-
SELinux는 Linux 사용자를 제한할 수 있습니다. SELinux 정책에 제한된 SELinux 사용자가 많이 있습니다. Linux 사용자는 제한된 SELinux 사용자에게 매핑되어 적용되는 보안 규칙과 메커니즘을 활용할 수 있습니다. 예를 들어 Linux 사용자를 SELinux
user_u사용자에게 매핑하면sudo및su와 같은 사용자 ID(setuid) 애플리케이션을 설정하지 않으면 Linux 사용자가 실행할 수 없습니다. - 프로세스 및 데이터 분리 증가 SELinux 도메인 의 개념을 사용하면 특정 파일 및 디렉터리에 액세스할 수 있는 프로세스를 정의할 수 있습니다. 예를 들어, 다른 구성하지 않는 한 SELinux를 실행하는 경우 공격자는 Samba 서버를 손상시킬 수 없으며 해당 Samba 서버를 공격 벡터로 사용하여 MariaDB 데이터베이스와 같은 다른 프로세스에서 사용하는 파일을 읽고 쓸 수 없습니다.
-
SELinux는 구성 오류로 인한 손상을 완화하는 데 도움이 됩니다. DNS(Domain Name System) 서버는 영역 전송에서 서로 간에 정보를 복제하는 경우가 많습니다. 공격자는 영역 전송을 사용하여 잘못된 정보로 DNS 서버를 업데이트할 수 있습니다. RHEL에서 Berkeley Internet Name Domain (BIND)을 DNS 서버로 실행할 때 관리자가 영역 전송을 수행할 수 있는 서버를 제한하지 못하는 경우에도 기본 SELinux 정책은 영역 파일의 업데이트를 방지합니다. [1] 해당 기능은 영역 전송, BIND
이름데몬 자체 및 기타 프로세스를 사용합니다. -
SELinux가 없으면 공격자는 Apache 웹 서버에서 경로를 통과하기 위해 취약점을 악용하고
../와 같은 특수 요소를 사용하여 파일 시스템에 저장된 파일 및 디렉터리에 액세스할 수 있습니다. 공격자가 강제 모드에서 SELinux로 실행되는 서버를 공격하는 경우 SELinux는httpd프로세스가 액세스할 수 없는 파일에 대한 액세스를 거부합니다. SELinux는 이러한 유형의 공격을 완전히 차단할 수는 없지만 효과적으로 완화합니다. -
강제 모드의 SELinux는 비SMAP 플랫폼에서 커널 NULL 포인터 역참조 연산자(CVE-2019-9213)를 악용하지 않습니다. 공격자는
mmap함수의 취약점을 악용하여 null 페이지의 매핑을 확인하지 않고 이 페이지에 임의의 코드를 배치합니다. -
강제 모드의
deny_ptraceSELinux 부울 및 SELinux는 PTRACE_TRACEME 취약점 (CVE-2019-13272)으로부터 시스템을 보호합니다. 이러한 구성으로 인해 공격자가root권한을 얻을 수 있는 시나리오가 방지됩니다. -
nfs_export_all_rw및nfs_export_all_roSELinux 부울을 사용하면 실수로/home디렉터리와 같은 NFS(Network File System)의 잘못된 설정을 방지하기 위해 사용하기 쉬운 툴이 제공됩니다.
1.4. SELinux 아키텍처 및 패키지 링크 복사링크가 클립보드에 복사되었습니다!
SELinux는 Linux 커널에 빌드된 Linux Security Module(LSM)입니다. 커널의 SELinux 하위 시스템은 관리자가 제어하고 부팅 시 로드되는 보안 정책에 의해 구동됩니다. 시스템의 모든 보안 관련 커널 수준 액세스 작업은 SELinux에 의해 가로채어 로드된 보안 정책의 컨텍스트에서 검사됩니다. 로드된 정책이 작업을 허용하는 경우 계속 실행됩니다. 그렇지 않으면 작업이 차단되고 프로세스에서 오류가 발생합니다.
액세스 허용 또는 허용하지 않는 등의 SELinux 결정은 캐시됩니다. 이 캐시는 AVC(Access Vector Cache)라고 합니다. 이러한 캐시된 결정을 사용하는 경우 SELinux 정책 규칙을 더 적게 확인하여 성능이 향상됩니다. DAC 규칙에서 먼저 액세스를 거부하는 경우 SELinux 정책 규칙에 영향을 미치지 않습니다. 원시 감사 메시지는 /var/log/audit/audit.log 에 기록되며 type=AVC 문자열로 시작합니다.
RHEL 10에서 시스템 서비스는 systemd 데몬에 의해 제어됩니다. systemd 는 모든 서비스를 시작하고 중지하고 사용자 및 프로세스는 systemctl 유틸리티를 사용하여 systemd 와 통신합니다. systemd 데몬은 SELinux 정책을 참조하고 호출 프로세스의 레이블과 호출자가 관리하려고 하는 유닛 파일의 레이블을 확인한 다음, 호출자가 액세스할 수 있는지 여부를 SELinux에 요청할 수 있습니다. 이 접근 방식은 중요한 시스템 기능에 대한 액세스 제어를 강화하며, 여기에는 시스템 서비스 시작 및 중지가 포함됩니다.
systemd 데몬은 SELinux Access Manager로도 작동합니다. systemctl 을 실행하는 프로세스 레이블 또는 D-Bus 메시지를 systemd 로 보낸 프로세스를 검색합니다. 그런 다음 데몬은 프로세스가 구성하려는 유닛 파일의 레이블을 조회합니다. 마지막으로 SELinux 정책에서 프로세스 레이블과 유닛 파일 레이블 간의 특정 액세스를 허용하는 경우 커널에서 정보를 검색할 수 있습니다. 즉, 특정 서비스에 대해 systemd 와 상호 작용해야 하는 손상된 애플리케이션을 이제 SELinux로 제한할 수 있습니다. 정책 작성자는 관리자가 제한하기 위해 이러한 세분화된 제어를 사용할 수도 있습니다.
프로세스가 D-Bus 메시지를 다른 프로세스로 보내고 SELinux 정책에서 두 프로세스의 D-Bus 통신을 허용하지 않는 경우 시스템은 USER_AVC 거부 메시지를 출력하고 D-Bus 통신 시간이 초과됩니다. 두 프로세스 간의 D-Bus 통신은 양방향으로 작동합니다.
잘못된 SELinux 레이블 지정 및 후속 문제를 방지하려면 systemctl start 명령을 사용하여 서비스를 시작해야 합니다.
RHEL 10에서는 SELinux를 사용하기 위한 다음 패키지를 제공합니다.
-
정책:
selinux-policy-targeted,selinux-policy-mls -
툴:
policycoreutils,policycoreutils-gui,libselinux-utils,policycoreutils-python-utils,setools-console,checkpolicy
1.5. SELinux 상태 및 모드 링크 복사링크가 클립보드에 복사되었습니다!
SELinux는 강제, 허용 또는 비활성화의 세 가지 모드 중 하나로 실행할 수 있습니다.
- 강제 모드는 기본 작업 모드이며 권장되는 작업 모드입니다. 강제 모드에서는 SELinux가 정상적으로 작동하여 전체 시스템에서 로드된 보안 정책을 강제 적용합니다.
- 허용 모드에서는 SELinux가 개체에 레이블을 지정하고 로그에 액세스 거부 항목을 내보내는 등 로드된 보안 정책을 적용하는 것처럼 동작하지만 실제로는 어떤 작업도 거부하지 않습니다. 프로덕션 시스템에는 권장되지 않지만 허용 모드는 SELinux 정책 개발 및 디버깅에 유용할 수 있습니다.
- 비활성화 모드는 권장되지 않습니다. 시스템이 SELinux 정책을 강제 적용하지 않도록 할 뿐만 아니라 파일과 같은 영구 개체에 레이블을 지정하는 것을 방지하여 나중에 SELinux를 활성화하기가 어렵습니다.
setenforce 유틸리티를 사용하여 강제 모드와 허용 모드 간에 변경합니다. setenforce 를 통한 변경 사항은 재부팅해도 유지되지 않습니다. 강제 모드로 변경하려면 Linux root 사용자로 setenforce 1 명령을 입력합니다. 허용 모드로 변경하려면 setenforce 0 명령을 입력합니다. getenforce 유틸리티를 사용하여 현재 SELinux 모드를 확인합니다.
getenforce Enforcing
# getenforce
Enforcing
setenforce 0 getenforce Permissive
# setenforce 0
# getenforce
Permissive
setenforce 1 getenforce Enforcing
# setenforce 1
# getenforce
Enforcing
Red Hat Enterprise Linux에서는 시스템이 강제 모드로 실행되는 동안 개별 도메인을 허용 모드로 설정할 수 있습니다. 예를 들어 httpd_t 도메인을 허용하도록 설정하려면 다음을 수행합니다.
semanage permissive -a httpd_t
# semanage permissive -a httpd_t
허용 도메인은 시스템의 보안을 손상시킬 수 있는 강력한 도구입니다. Red Hat은 특정 시나리오를 디버깅할 때와 같이 허용 도메인을 주의해서 사용하는 것이 좋습니다.
2장. SELinux 상태 및 모드 변경 링크 복사링크가 클립보드에 복사되었습니다!
활성화하면 SELinux를 두 가지 모드(강제 또는 허용) 중 하나로 실행할 수 있습니다. 기본적으로 SELinux는 활성화되어 강제 모드에서 실행됩니다. SELinux를 비활성화하거나 허용 모드로 설정하면 SELinux가 시스템을 보호할 수 없습니다. setenforce 명령을 사용하여 SELinux 상태를 변경하는 것은 일시적이며 다시 시작한 후 되돌립니다. SELinux 상태를 영구적으로 변경하려면 SELinux 구성 파일 또는 커널 매개변수를 변경해야 합니다.
2.1. SELinux 상태 및 모드의 영구 변경 링크 복사링크가 클립보드에 복사되었습니다!
SELinux를 활성화하거나 비활성화할 수 있습니다. 활성화하면 SELinux에 두 가지 모드(강제 및 허용)가 있습니다.
getenforce 또는 sestatus 명령을 사용하여 SELinux가 실행 중인 모드를 확인합니다. getenforce 명령은 Enforcing,Permissive 또는 Disabled 를 반환합니다.
sestatus 명령은 SELinux 상태 및 사용 중인 SELinux 정책을 반환합니다.
시스템이 허용 모드에서 SELinux를 실행하는 경우 사용자와 프로세스는 다양한 파일 시스템 오브젝트에 잘못 레이블을 지정할 수 있습니다. SELinux가 비활성화된 동안 생성된 파일 시스템 개체는 레이블이 지정되지 않습니다. 이 동작은 SELinux가 파일 시스템 오브젝트의 올바른 레이블을 사용하므로 강제 모드로 변경할 때 문제가 발생합니다.
잘못 레이블이 지정되거나 레이블이 지정되지 않은 파일이 문제가 발생하지 않도록 SELinux는 비활성화 상태에서 허용 또는 강제 모드로 파일 시스템을 자동으로 다시 지정합니다. 수정 파일 -F onboot 명령을 root로 사용하여 다음 재부팅 시 파일의 레이블을 다시 지정할 수 있도록 -F 옵션이 포함된 /.autorelabel 파일을 만듭니다.
재레이블을 위해 시스템을 재부팅하기 전에, 예를 들어 enforcing=0 커널 옵션을 사용하여 시스템이 허용 모드로 부팅되는지 확인합니다. 이렇게 하면 selinux-autorelabel 서비스를 시작하기 전에 시스템에 systemd 에 필요한 레이블이 지정되지 않은 파일이 포함된 경우 시스템이 부팅되지 않습니다. 자세한 내용은 RHBZ#2021835 를 참조하십시오.
2.2. SELinux를 허용 모드로 변경 링크 복사링크가 클립보드에 복사되었습니다!
SELinux가 허용 모드에서 실행되면 SELinux 정책이 적용되지 않습니다. 시스템은 여전히 작동 중이며 SELinux는 작업을 거부하지 않지만 문제 해결, 디버깅 및 SELinux 정책 개선에 사용할 수 있는 AVC 메시지만 기록합니다. 이 경우 각 AVC는 한 번만 기록됩니다.
사전 요구 사항
-
selinux-policy-targeted,libselinux-utils및policycoreutils패키지가 시스템에 설치됩니다. -
selinux=0또는enforcing=0커널 매개 변수는 사용되지 않습니다.
프로세스
텍스트 편집기에서
/etc/selinux/config파일을 열고SELINUX=permissive옵션을 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템을 다시 시작하십시오.
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
시스템이 다시 시작되면
getenforce명령이Permissive를 반환하는지 확인합니다.getenforce Permissive
$ getenforce PermissiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3. SELinux를 강제 모드로 변경 링크 복사링크가 클립보드에 복사되었습니다!
SELinux가 강제 모드에서 실행되면 SELinux 정책을 적용하고 SELinux 정책 규칙에 따라 액세스를 거부합니다. RHEL에서 강제 모드는 SELinux를 사용하여 시스템을 처음 설치할 때 기본적으로 활성화됩니다.
사전 요구 사항
-
selinux-policy-targeted,libselinux-utils및policycoreutils패키지가 시스템에 설치됩니다. -
selinux=0또는enforcing=0커널 매개 변수는 사용되지 않습니다.
프로세스
텍스트 편집기에서
/etc/selinux/config파일을 열고SELINUX=enforcing옵션을 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항을 저장하고 시스템을 다시 시작하십시오.
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 부팅 시 SELinux는 시스템 내의 모든 파일과 디렉터리의 레이블을 다시 지정하고 SELinux가 비활성화될 때 생성된 파일 및 디렉터리에 대한 SELinux 컨텍스트를 추가합니다.
검증
시스템을 다시 시작한 후
getenforce명령이Enforcing을 반환하는지 확인합니다.getenforce Enforcing
$ getenforce EnforcingCopy 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 todayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 또는
se rsh-server패키지가 설치되어 있으면 다음을 입력합니다.grep "SELinux is preventing" /var/log/messages
# grep "SELinux is preventing" /var/log/messagesCopy 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=1400Copy to Clipboard Copied! Toggle word wrap Toggle overflow
자세한 내용은 SELinux와 관련된 문제 해결을 참조하십시오.
2.4. 이전에 비활성화한 시스템에서 SELinux 활성화 링크 복사링크가 클립보드에 복사되었습니다!
오류를 부팅하거나 처리할 수 없는 시스템과 같은 문제를 방지하려면 이전에 비활성화한 시스템에서 SELinux를 활성화하기 전에 허용 모드에서 ACL(Access Vector Cache) 메시지를 해결합니다.
시스템이 허용 모드에서 SELinux를 실행하는 경우 사용자와 프로세스는 다양한 파일 시스템 오브젝트에 잘못 레이블을 지정할 수 있습니다. SELinux가 비활성화된 동안 생성된 파일 시스템 개체는 레이블이 지정되지 않습니다. 이 동작은 SELinux가 파일 시스템 오브젝트의 올바른 레이블을 사용하므로 강제 모드로 변경할 때 문제가 발생합니다.
잘못 레이블이 지정되거나 레이블이 지정되지 않은 파일이 문제가 발생하지 않도록 SELinux는 비활성화 상태에서 허용 또는 강제 모드로 파일 시스템을 자동으로 다시 지정합니다.
재레이블을 위해 시스템을 재부팅하기 전에, 예를 들어 enforcing=0 커널 옵션을 사용하여 시스템이 허용 모드로 부팅되는지 확인합니다. 이렇게 하면 selinux-autorelabel 서비스를 시작하기 전에 시스템에 systemd 에 필요한 레이블이 지정되지 않은 파일이 포함된 경우 시스템이 부팅되지 않습니다. 자세한 내용은 RHBZ#2021835 를 참조하십시오.
절차
- 허용 모드에서 SELinux를 활성화합니다. 자세한 내용은 SELinux를 허용 모드로 변경을 참조하십시오.
시스템을 다시 시작하십시오.
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux 거부 메시지를 확인합니다. 자세한 내용은 SELinux 거부 식별 을 참조하십시오.
다음 재부팅 시 파일의 레이블을 다시 지정했는지 확인합니다.
fixfiles -F onboot
# fixfiles -F onbootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면
-F옵션이 포함된/.autorelabel파일이 생성됩니다.주의fixfiles -F onboot명령을 시작하기 전에 항상 허용 모드로 전환합니다.기본적으로
autorelabel은 시스템에 사용 가능한 CPU 코어만큼 많은 스레드를 병렬로 사용합니다. 자동 레이블을 다시 지정하는 동안 단일 스레드만 사용하려면fixfiles -T 1 onboot명령을 사용합니다.- 거부 모드가 없는 경우 강제 모드로 전환합니다. 자세한 내용은 부팅 시 SELinux 모드 변경을 참조하십시오.
검증
시스템을 다시 시작한 후
getenforce명령이Enforcing을 반환하는지 확인합니다.getenforce Enforcing
$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 단계
SELinux를 강제 모드로 사용하여 사용자 정의 애플리케이션을 실행하려면 다음 시나리오 중 하나를 선택합니다.
-
unconfined_service_t도메인에서 애플리케이션을 실행합니다. - 애플리케이션에 대한 새 정책을 작성합니다. 자세한 내용은 사용자 지정 SELinux 정책 작성 섹션을 참조하십시오.
2.5. SELinux 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
SELinux를 비활성화하면 시스템이 SELinux 정책을 로드하지 않습니다. 결과적으로 시스템은 SELinux 정책을 적용하지 않고 AVC(Access Vector Cache) 메시지를 기록하지 않습니다. 따라서 SELinux 실행의 모든 이점이 손실됩니다.
성능이 취약한 보안으로 인해 상당한 위험이 발생하지 않는 시스템과 같이 특정 시나리오를 제외하고 SELinux를 비활성화하지 마십시오.
프로덕션 환경에서 디버깅을 수행해야 하는 경우 SELinux를 영구적으로 비활성화하는 대신 허용 모드를 일시적으로 사용합니다. 허용 모드에 대한 자세한 내용은 허용 모드로 변경을 참조하십시오.
사전 요구 사항
grubby패키지가 설치되어 있습니다.rpm -q grubby grubby-<version>
$ 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=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템을 다시 시작하십시오.
reboot
$ rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
재부팅 후
getenforce명령이Disabled:을 반환하는지 확인합니다.getenforce Disabled
$ getenforce DisabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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 # rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 파일 시스템에 많은 양의 레이블이 있는 경우 허용 모드에서 시스템을 시작하여 자동 레이블 프로세스가 성공적으로 수행되도록 합니다.
3장. 제한되거나 제한되지 않은 사용자 관리 링크 복사링크가 클립보드에 복사되었습니다!
각 Linux 사용자는 SELinux 정책의 규칙에 따라 SELinux 사용자에게 매핑됩니다. 관리자는 semanage 로그인 유틸리티를 사용하거나 Linux 사용자를 특정 SELinux 사용자에게 직접 할당하여 이러한 규칙을 수정할 수 있습니다. 따라서 Linux 사용자에게는 SELinux 사용자가 할당되는 제한 사항이 있습니다. SELinux 사용자에게 할당된 Linux 사용자가 프로세스를 시작하면 다른 규칙에서 다른 역할 또는 유형을 지정하지 않는 한 이 프로세스는 SELinux 사용자의 제한 사항을 상속합니다.
3.1. SELinux에서 제한되거나 제한되지 않은 사용자 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 관리 권한이 있는 사용자를 포함하여 Red Hat Enterprise Linux의 모든 Linux 사용자는 제한되지 않은 SELinux 사용자 unconfined_u 에 매핑됩니다. SELinux 제한 사용자에게 사용자를 할당하여 시스템의 보안을 개선할 수 있습니다.
Linux 사용자의 보안 컨텍스트는 SELinux 사용자, SELinux 역할 및 SELinux 유형으로 구성됩니다. 예를 들면 다음과 같습니다.
user_u:user_r:user_t
user_u:user_r:user_t
다음과 같습니다.
user_u- SELinux 사용자입니다.
user_r- SELinux 역할입니다.
user_t- SELinux 유형입니다.
Linux 사용자가 로그인하면 SELinux 사용자는 변경할 수 없습니다. 그러나 해당 유형과 역할은 예를 들어 전환 중에 변경될 수 있습니다.
시스템에서 SELinux 사용자 매핑을 보려면 semanage login -l 명령을 root로 사용합니다.
semanage login -l Login Name SELinux User MLS/MCS Range Service __default__ unconfined_u s0-s0:c0.c1023 * root unconfined_u s0-s0:c0.c1023 *
# semanage login -l
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
Red Hat Enterprise Linux에서 Linux 사용자는 기본적으로 SELinux __default__ 로그인에 매핑되며 SELinux unconfined_u 사용자에게 매핑됩니다. 다음 줄은 기본 매핑을 정의합니다.
default unconfined_u s0-s0:c0.c1023 *
default unconfined_u s0-s0:c0.c1023 *
제한된 사용자는 현재 SELinux 정책에 명시적으로 정의된 SELinux 규칙에 의해 제한됩니다. 제한되지 않은 사용자에게는 SELinux의 최소한의 제한만 적용됩니다.
제한된 Linux 사용자는 실행 가능하고 쓰기 가능한 메모리 검사의 영향을 받으며 MCS 또는 MLS에 의해 제한됩니다.
사용 가능한 SELinux 사용자를 나열하려면 다음 명령을 입력합니다.
seinfo 명령은 기본적으로 설치되지 않는 setools-console 패키지에서 제공합니다.
제한되지 않은 Linux 사용자가 SELinux 정책이 unconfined_t 도메인에서 자체 제한된 도메인으로 전환할 수 있는 애플리케이션으로 정의되는 애플리케이션을 실행하는 경우 제한되지 않은 Linux 사용자에게는 여전히 해당 제한된 도메인의 제한 사항이 적용됩니다. 이 문제의 보안 이점은 Linux 사용자가 제한되지 않더라도 애플리케이션이 제한된 상태로 유지된다는 것입니다. 따라서 애플리케이션의 결함 악용은 정책에 의해 제한될 수 있습니다.
마찬가지로 이러한 검사를 제한된 사용자에게 적용할 수 있습니다. 제한된 각 사용자는 제한된 사용자 도메인에 의해 제한됩니다. SELinux 정책은 제한된 사용자 도메인에서 자체 대상 제한 도메인으로의 전환을 정의할 수도 있습니다. 이러한 경우 제한된 사용자에게는 해당 대상 제한 도메인의 제한 사항이 적용됩니다. 주요 포인트는 해당 역할에 따라 제한된 사용자와 특수 권한이 연결된다는 것입니다.
3.2. SELinux 사용자의 역할 및 액세스 권한 링크 복사링크가 클립보드에 복사되었습니다!
SELinux 정책은 각 Linux 사용자를 SELinux 사용자에게 매핑합니다. 이를 통해 Linux 사용자는 SELinux 사용자의 제한을 상속할 수 있습니다.
정책의 부울을 조정하여 특정 요구 사항에 따라 SELinux 정책에서 제한된 사용자에 대한 권한을 사용자 지정할 수 있습니다. semanage boolean -l 명령을 사용하여 이러한 부울의 현재 상태를 확인할 수 있습니다. 모든 SELinux 사용자, SELinux 역할, MLS 및 MCS의 수준 및 범위를 나열하려면 semanage user -l 명령을 root 로 사용합니다.
| 사용자 | 기본 역할 | 추가 역할 |
|---|---|---|
|
|
|
|
|
|
| |
|
|
| |
|
|
| |
|
|
|
|
|
| ||
|
| ||
|
|
| |
|
|
|
|
|
| ||
|
| ||
|
|
|
system_u 는 시스템 프로세스 및 오브젝트의 특수 사용자 ID이며 system_r 은 연결된 역할입니다. 관리자는 이 system_u 사용자와 system_r 역할을 Linux 사용자와 연결하지 않아야 합니다. 또한 unconfined_u 및 root 는 제한되지 않은 사용자입니다. 이러한 이유로 이러한 SELinux 사용자와 관련된 역할은 다음 SELinux 역할의 유형 및 액세스 권한에 포함되지 않습니다.
각 SELinux 역할은 SELinux 유형에 해당하며 특정 액세스 권한을 제공합니다.
| Role | 유형 | X Window System을 사용하여 로그인 | Su 및 sudo | 홈 디렉토리 및 /tmp (기본값)에서 실행 | 네트워킹 |
|---|---|---|---|---|---|
|
|
| 제공됨 | 제공됨 | 제공됨 | 제공됨 |
|
|
| 제공되지 않음 | 제공되지 않음 | 제공됨 | 제공되지 않음 |
|
|
| 제공됨 | 제공되지 않음 | 제공됨 | 웹 브라우저만 (M#159illa Firefox, GNOME 웹) |
|
|
| 제공됨 | 제공되지 않음 | 제공됨 | 제공됨 |
|
|
| 제공됨 |
| 제공됨 | 제공됨 |
|
|
| 제공됨 | 제공됨 | 제공됨 | |
|
|
| 제공됨 | 제공됨 | 제공됨 | |
|
|
| 제공됨 | 제공됨 | 제공됨 | |
|
|
| 제공됨 | 제공됨 | 제공됨 | |
|
|
| 제공됨 | 제공됨 | 제공됨 | |
|
|
|
| 제공됨 | 제공됨 | 제공됨 |
관리자가 아닌 역할에 대한 자세한 내용은 SELinux에서 관리자 역할이 아닌 역할을 참조하십시오.
관리자 역할에 대한 자세한 내용은 SELinux에서 관리자 역할 확인을 참조하십시오.
사용 가능한 모든 역할을 나열하려면 seinfo -r 명령을 입력합니다.
seinfo 명령은 기본적으로 설치되지 않는 setools-console 패키지에서 제공합니다.
3.3. SELinux에서 제한된 비관리자 역할 링크 복사링크가 클립보드에 복사되었습니다!
SELinux에서 제한된 비관리자 역할은 특정 권한 및 권한을 부여하여 사용자에게 할당된 Linux 사용자에게 특정 작업을 수행할 수 있는 권한을 부여합니다. 제한된 별도의 관리자가 아닌 역할을 할당하면 개별 사용자에게 특정 권한을 할당할 수 있습니다. 이는 각각 다른 수준의 권한 부여를 가진 여러 사용자가 있는 시나리오에서 유용합니다.
시스템에서 관련 SELinux 부울을 변경하여 SELinux 역할의 권한을 사용자 지정할 수도 있습니다. SELinux 부울 및 해당 현재 상태를 보려면 semanage boolean -l 명령을 root로 사용합니다. selinux-policy-devel 패키지를 설치하는 경우 자세한 설명을 얻을 수 있습니다.
SELinux 정책에서 허용하는 경우 user_t,guest_t, xguest_t 도메인의 Linux 사용자는 설정된 사용자 ID(setuid) 애플리케이션만 실행할 수 있습니다(예: passwd). 이러한 사용자는 setuid 애플리케이션 su 및 sudo 를 실행할 수 없으므로 이러한 애플리케이션을 사용하여 root가 될 수 없습니다.
기본적으로 staff_t,user_t, guest_t , x 도메인의 Linux 사용자는 홈 디렉터리 및 guest_t /tmp 에서 애플리케이션을 실행할 수 있습니다. 애플리케이션은 이를 실행한 사용자의 권한을 상속합니다.
guest_t 및 xguest_t 사용자가 쓰기 액세스 권한이 있는 디렉터리에서 애플리케이션을 실행하지 않으려면 guest_exec_content 및 xguest_exec_content 부울을 off 로 설정합니다.
SELinux에는 다음과 같은 제한된 관리자가 아닌 역할이 있으며 각각 특정 권한 및 제한이 있습니다.
guest_r매우 제한된 권한이 있습니다. 이 역할에 할당된 사용자는 네트워크에 액세스할 수 없지만
/tmp및/home디렉토리에서 파일을 실행할 수 있습니다.관련 부울:
SELinux boolean State Default Description guest_exec_content (on , on) Allow guest to exec content
SELinux boolean State Default Description guest_exec_content (on , on) Allow guest to exec contentCopy to Clipboard Copied! Toggle word wrap Toggle overflow xguest_r제한된 권한이 있습니다. 이 역할에 할당된 사용자는 X Window에 로그인하고 네트워크 브라우저를 사용하여 웹 페이지에 액세스하며 미디어에 액세스할 수 있습니다. 또한
/tmp및/home디렉토리에서 파일을 실행할 수도 있습니다.관련 부울:
SELinux boolean State Default Description xguest_connect_network (on , on) Allow xguest users to configure Network Manager and connect to apache ports xguest_exec_content (on , on) Allow xguest to exec content xguest_mount_media (on , on) Allow xguest users to mount removable media xguest_use_bluetooth (on , on) Allow xguest to use blue tooth devices
SELinux boolean State Default Description xguest_connect_network (on , on) Allow xguest users to configure Network Manager and connect to apache ports xguest_exec_content (on , on) Allow xguest to exec content xguest_mount_media (on , on) Allow xguest users to mount removable media xguest_use_bluetooth (on , on) Allow xguest to use blue tooth devicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow user_r전체 사용자 권한으로 권한이 없는 액세스 권한을 갖습니다. 이 역할에 할당된 사용자는 관리 권한이 필요하지 않은 대부분의 작업을 수행할 수 있습니다.
관련 부울:
SELinux boolean State Default Description unprivuser_use_svirt (off , off) Allow unprivileged user to create and transition to svirt domains.
SELinux boolean State Default Description unprivuser_use_svirt (off , off) Allow unprivileged user to create and transition to svirt domains.Copy to Clipboard Copied! Toggle word wrap Toggle overflow staff_ruser_r및 추가 권한과 유사한 권한이 있습니다. 특히 이 역할에 할당된 사용자는sudo를 실행하여 일반적으로root사용자로 예약된 관리 명령을 실행할 수 있습니다. 이 명령은 역할 및 유효 사용자 ID(EUID)를 변경하지만 SELinux 사용자는 변경하지 않습니다.관련 부울:
SELinux boolean State Default Description staff_exec_content (on , on) Allow staff to exec content staff_use_svirt (on , on) allow staff user to create and transition to svirt domains.
SELinux boolean State Default Description staff_exec_content (on , on) Allow staff to exec content staff_use_svirt (on , on) allow staff user to create and transition to svirt domains.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. SELinux에서 제한된 관리자 역할 링크 복사링크가 클립보드에 복사되었습니다!
SELinux에서 제한된 관리자 역할은 Linux 사용자에게 특정 작업을 수행할 수 있는 특정 권한 및 권한을 부여합니다. 별도의 제한된 관리자 역할을 할당하면 시스템 관리의 다양한 도메인에 대한 권한을 개별 사용자로 나눌 수 있습니다. 이는 각각 별도의 도메인이 있는 여러 관리자가 있는 시나리오에서 유용합니다.
semanage user 명령을 사용하여 SELinux 사용자에게 이러한 역할을 할당할 수 있습니다.
SELinux에는 다음과 같은 제한된 관리자 역할이 있습니다.
auditadm_r감사 관리자 역할을 사용하면 감사 하위 시스템과 관련된 프로세스를 관리할 수 있습니다.
관련 부울:
SELinux boolean State Default Description auditadm_exec_content (on , on) Allow auditadm to exec content
SELinux boolean State Default Description auditadm_exec_content (on , on) Allow auditadm to exec contentCopy to Clipboard Copied! Toggle word wrap Toggle overflow dbadm_r데이터베이스 관리자 역할을 사용하면 MariaDB 및 PostgreSQL 데이터베이스를 관리할 수 있습니다.
관련 부울:
SELinux boolean State Default Description dbadm_exec_content (on , on) Allow dbadm to exec content dbadm_manage_user_files (off , off) Determine whether dbadm can manage generic user files. dbadm_read_user_files (off , off) Determine whether dbadm can read generic user files.
SELinux boolean State Default Description dbadm_exec_content (on , on) Allow dbadm to exec content dbadm_manage_user_files (off , off) Determine whether dbadm can manage generic user files. dbadm_read_user_files (off , off) Determine whether dbadm can read generic user files.Copy to Clipboard Copied! Toggle word wrap Toggle overflow logadm_r로그 관리자 역할을 사용하면 Rsyslog 로깅 서비스 및 감사 하위 시스템과 관련된 로그, 특히 SELinux 유형을 관리할 수 있습니다.
관련 부울:
SELinux boolean State Default Description logadm_exec_content (on , on) Allow logadm to exec content
SELinux boolean State Default Description logadm_exec_content (on , on) Allow logadm to exec contentCopy to Clipboard Copied! Toggle word wrap Toggle overflow webadm_r웹 관리자는 Apache HTTP 서버를 관리할 수 있습니다.
관련 부울:
SELinux boolean State Default Description webadm_manage_user_files (off , off) Determine whether webadm can manage generic user files. webadm_read_user_files (off , off) Determine whether webadm can read generic user files.
SELinux boolean State Default Description webadm_manage_user_files (off , off) Determine whether webadm can manage generic user files. webadm_read_user_files (off , off) Determine whether webadm can read generic user files.Copy to Clipboard Copied! Toggle word wrap Toggle overflow secadm_r보안 관리자 역할을 사용하면 SELinux 데이터베이스를 관리할 수 있습니다.
관련 부울:
SELinux boolean State Default Description secadm_exec_content (on , on) Allow secadm to exec content
SELinux boolean State Default Description secadm_exec_content (on , on) Allow secadm to exec contentCopy to Clipboard Copied! Toggle word wrap Toggle overflow sysadm_r시스템 관리자 역할을 사용하면 이전에 나열된 모든 역할을 수행할 수 있으며 추가 권한이 있습니다. 기본이 아닌 구성에서 보안 관리는 SELinux 정책에서
sysadm_secadm모듈을 비활성화하여 시스템 관리와 분리할 수 있습니다. 자세한 내용은 MLS의 보안 관리에서 시스템 관리 분리를 참조하십시오.sysadm_u사용자는 SSH를 사용하여 직접 로그인할 수 없습니다.sysadm_u에대한 SSH 로그인을 활성화하려면ssh_sysadm_login부울을 다음과 같이 설정합니다.setsebool -P ssh_sysadm_login on
# setsebool -P ssh_sysadm_login onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 관련 부울:
SELinux boolean State Default Description ssh_sysadm_login (on , on) Allow ssh logins as sysadm_r:sysadm_t sysadm_exec_content (on , on) Allow sysadm to exec content xdm_sysadm_login (on , on) Allow the graphical login program to login directly as sysadm_r:sysadm_t
SELinux boolean State Default Description ssh_sysadm_login (on , on) Allow ssh logins as sysadm_r:sysadm_t sysadm_exec_content (on , on) Allow sysadm to exec content xdm_sysadm_login (on , on) Allow the graphical login program to login directly as sysadm_r:sysadm_tCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5. SELinux unconfined_u 사용자에게 자동으로 매핑된 새 사용자 추가 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 시스템에 새 Linux 사용자를 추가하는 방법을 보여줍니다. 사용자는 SELinux unconfined_u 사용자에게 자동으로 매핑됩니다.
사전 요구 사항
-
루트사용자는 기본적으로 Red Hat Enterprise Linux에서 실행되므로 제한되지 않습니다.
프로세스
다음 명령을 입력하여 이라는 새 Linux 사용자를 생성합니다
<example_user>.useradd <example_user>
# useradd <example_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Linux
<example_user>사용자에게 암호를 할당하려면 다음을 수행합니다.passwd <example_user> Changing password for user <example_user>. New password: Retype new password: passwd: all authentication tokens updated successfully.
# passwd <example_user> Changing password for user <example_user>. New password: Retype new password: passwd: all authentication tokens updated successfully.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 현재 세션에서 로그아웃합니다.
-
Linux
<example_user>사용자로 로그인합니다. 로그인할 때pam_selinuxPAM 모듈은 Linux 사용자를 SELinux 사용자(이 경우unconfined_u)에 자동으로 매핑하고 결과 SELinux 컨텍스트를 설정합니다. 그런 다음 이 컨텍스트로 Linux 사용자의 쉘이 시작됩니다.
검증
사용자로
<example_user>로그인하면 Linux 사용자의 컨텍스트를 확인합니다.id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6. SELinux 제한 사용자로 새 사용자 추가 링크 복사링크가 클립보드에 복사되었습니다!
사용자 계정을 생성하기 위해 명령을 사용하여 새 SELinux로 제한된 사용자를 시스템 오른쪽에 추가할 수 있습니다. 이 예제 절차에서는 사용자를 SELinux staff_u 사용자에게 매핑합니다.
사전 요구 사항
-
루트사용자는 기본적으로 Red Hat Enterprise Linux에서 실행되므로 제한되지 않습니다.
프로세스
다음 명령을 입력하여 라는
<example_user>새 Linux 사용자를 생성하고 SELinuxstaff_u사용자에게 매핑합니다.useradd -Z staff_u <example_user>
# useradd -Z staff_u <example_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Linux
<example_user>사용자에게 암호를 할당하려면 다음을 수행합니다.passwd <example_user> Changing password for user <example_user>. New password: Retype new password: passwd: all authentication tokens updated successfully.
# passwd <example_user> Changing password for user <example_user>. New password: Retype new password: passwd: all authentication tokens updated successfully.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 현재 세션에서 로그아웃합니다.
-
Linux
<example_user>사용자로 로그인합니다. 사용자의 쉘은staff_u컨텍스트로 시작됩니다.
검증
사용자로
<example_user>로그인하면 Linux 사용자의 컨텍스트를 확인합니다.id -Z uid=1000(<example_user>) gid=1000(<example_user>) groups=1000(<example_user>) context=staff_u:staff_r:staff_t:s0-s0:c0.c1023
$ id -Z uid=1000(<example_user>) gid=1000(<example_user>) groups=1000(<example_user>) context=staff_u:staff_r:staff_t:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7. SELinux에서 일반 사용자 제한 링크 복사링크가 클립보드에 복사되었습니다!
시스템에 있는 모든 일반 사용자를 user_u SELinux 사용자에게 매핑하여 제한할 수 있습니다.
기본적으로 관리 권한이 있는 사용자를 포함하여 Red Hat Enterprise Linux의 모든 Linux 사용자는 제한되지 않은 SELinux 사용자 unconfined_u 에 매핑됩니다. SELinux 제한 사용자에게 사용자를 할당하여 시스템의 보안을 개선할 수 있습니다. 이는 V-71971 보안 기술 구현 가이드 를 준수하는 데 유용합니다.
절차
SELinux 로그인 레코드 목록을 표시합니다. 이 목록에는 Linux 사용자의 매핑이 SELinux 사용자에게 표시됩니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명시적 매핑 없이 모든 사용자를
user_uSELinux 사용자에게 매핑하는__default__사용자를 매핑합니다.semanage login -m -s user_u -r s0 __default__
# semanage login -m -s user_u -r s0 __default__Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
__default__사용자가user_uSELinux 사용자에게 매핑되었는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새 사용자의 프로세스가
user_u:user_r:user_t:s0SELinux 컨텍스트에서 실행되는지 확인합니다.새 사용자를 생성합니다.
adduser <example_user>
# adduser <example_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같은 암호를 정의합니다
<example_user>.passwd <example_user>
# passwd <example_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
root로 로그아웃하고 새 사용자로 로그인합니다. 사용자 ID의 보안 컨텍스트를 표시합니다.
[<example_user>@localhost ~]$ id -Z user_u:user_r:user_t:s0
[<example_user>@localhost ~]$ id -Z user_u:user_r:user_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 현재 프로세스의 보안 컨텍스트를 표시합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.8. sysadm_u에 매핑하여 관리자 제한 링크 복사링크가 클립보드에 복사되었습니다!
사용자를 sysadm_u SELinux 사용자에게 직접 매핑하여 관리 권한이 있는 사용자를 제한할 수 있습니다. 사용자가 로그인하면 세션은 sysadm_u:sysadm_r:sysadm_t SELinux 컨텍스트에서 실행됩니다.
기본적으로 관리 권한이 있는 사용자를 포함하여 Red Hat Enterprise Linux의 모든 Linux 사용자는 제한되지 않은 SELinux 사용자 unconfined_u 에 매핑됩니다. SELinux 제한 사용자에게 사용자를 할당하여 시스템의 보안을 개선할 수 있습니다. 이는 V-71971 보안 기술 구현 가이드 를 준수하는 데 유용합니다.
사전 요구 사항
-
root사용자는 unconfined를 실행합니다. 이는 Red Hat Enterprise Linux 기본값입니다.
프로세스
선택 사항:
sysadm_u사용자가 SSH를 사용하여 시스템에 연결할 수 있도록 하려면 다음을 수행합니다.setsebool -P ssh_sysadm_login on
# setsebool -P ssh_sysadm_login onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 새 사용자 또는 기존 사용자를
sysadm_uSELinux 사용자에게 매핑합니다.새 사용자를 매핑하려면 새 사용자를
wheel사용자 그룹에 추가하고 사용자를sysadm_uSELinux 사용자에게 매핑합니다.adduser -G wheel -Z sysadm_u <example_user>
# adduser -G wheel -Z sysadm_u <example_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기존 사용자를 매핑하려면 사용자를
wheel사용자 그룹에 추가하고 사용자를sysadm_uSELinux 사용자에게 매핑합니다.usermod -G wheel -Z sysadm_u <example_user>
# usermod -G wheel -Z sysadm_u <example_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
사용자 홈 디렉터리의 컨텍스트를 복원합니다.
restorecon -R -F -v /home/<example_user>
# restorecon -R -F -v /home/<example_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
가
<example_user>sysadm_uSELinux 사용자에게 매핑되었는지 확인합니다.semanage login -l | grep <example_user> <example_user> sysadm_u s0-s0:c0.c1023 *
# semanage login -l | grep <example_user> <example_user> sysadm_u s0-s0:c0.c1023 *Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어 SSH를 사용하여 로
<example_user>로그인하고 사용자의 보안 컨텍스트를 표시합니다.[<example_user>@localhost ~]$ id -Z sysadm_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
[<example_user>@localhost ~]$ id -Z sysadm_u:sysadm_r:sysadm_t:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow root사용자로 전환합니다.sudo -i [sudo] password for <example_user>:
$ sudo -i [sudo] password for <example_user>:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 보안 컨텍스트가 변경되지 않은 상태로 남아 있는지 확인합니다.
id -Z sysadm_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
# id -Z sysadm_u:sysadm_r:sysadm_t:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어
sshd서비스를 다시 시작하십시오.systemctl restart sshd
# systemctl restart sshdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력이 없으면 명령이 성공적으로 완료되었습니다.
명령이 성공적으로 완료되지 않으면 다음 메시지가 출력됩니다.
Failed to restart sshd.service: Access denied See system logs and 'systemctl status sshd.service' for details.
Failed to restart sshd.service: Access denied See system logs and 'systemctl status sshd.service' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.9. sudo 및 sysadm_r 역할을 사용하여 관리자 제한 링크 복사링크가 클립보드에 복사되었습니다!
관리 권한이 있는 특정 사용자를 staff_u SELinux 사용자에게 매핑하고 사용자가 sysadm_r SELinux 관리자 역할을 얻을 수 있도록 sudo 를 구성할 수 있습니다. 이 역할을 통해 사용자는 SELinux 거부 없이 관리 작업을 수행할 수 있습니다. 사용자가 로그인하면 세션이 staff_u:staff_r:staff_t SELinux 컨텍스트에서 실행되지만 사용자가 sudo 를 사용하여 명령을 입력하면 세션이 staff_u:sysadm_r:sysadm_t 컨텍스트로 변경됩니다.
기본적으로 관리 권한이 있는 사용자를 포함하여 Red Hat Enterprise Linux의 모든 Linux 사용자는 제한되지 않은 SELinux 사용자 unconfined_u 에 매핑됩니다. SELinux 제한 사용자에게 사용자를 할당하여 시스템의 보안을 개선할 수 있습니다. 이는 V-71971 보안 기술 구현 가이드 를 준수하는 데 유용합니다.
사전 요구 사항
-
root사용자는 unconfined를 실행합니다. 이는 Red Hat Enterprise Linux 기본값입니다.
절차
새 사용자 또는 기존 사용자를
staff_uSELinux 사용자에게 매핑합니다.새 사용자를 매핑하려면 새 사용자를
wheel사용자 그룹에 추가하고 사용자를staff_uSELinux 사용자에게 매핑합니다.adduser -G wheel -Z staff_u <example_user>
# adduser -G wheel -Z staff_u <example_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기존 사용자를 매핑하려면 사용자를
wheel사용자 그룹에 추가하고 사용자를staff_uSELinux 사용자에게 매핑합니다.usermod -G wheel -Z staff_u <example_user>
# usermod -G wheel -Z staff_u <example_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
사용자 홈 디렉터리의 컨텍스트를 복원합니다.
restorecon -R -F -v /home/<example_user>
# restorecon -R -F -v /home/<example_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux 관리자 역할을 얻을 수 있도록
<example_user>하려면/etc/sudoers.d/디렉터리에 새 파일을 만듭니다. 예를 들면 다음과 같습니다.visudo -f /etc/sudoers.d/<example_user>
# visudo -f /etc/sudoers.d/<example_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새 파일에 다음 행을 추가합니다.
<example_user> ALL=(ALL) TYPE=sysadm_t ROLE=sysadm_r ALL
<example_user> ALL=(ALL) TYPE=sysadm_t ROLE=sysadm_r ALLCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
staff_uSELinux 사용자에게 매핑되었는지<example_user>확인합니다.semanage login -l | grep <example_user> <example_user> staff_u s0-s0:c0.c1023 *
# semanage login -l | grep <example_user> <example_user> staff_u s0-s0:c0.c1023 *Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어 SSH를 사용하여 로
<example_user>로그인하고root사용자로 전환합니다.[<example_user>@localhost ~]$ sudo -i [sudo] password for <example_user>:
[<example_user>@localhost ~]$ sudo -i [sudo] password for <example_user>:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 루트보안 컨텍스트를 표시합니다.id -Z staff_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
# id -Z staff_u:sysadm_r:sysadm_t:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어
sshd서비스를 다시 시작하십시오.systemctl restart sshd
# systemctl restart sshdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력이 없으면 명령이 성공적으로 완료되었습니다.
명령이 성공적으로 완료되지 않으면 다음 메시지가 출력됩니다.
Failed to restart sshd.service: Access denied See system logs and 'systemctl status sshd.service' for details.
Failed to restart sshd.service: Access denied See system logs and 'systemctl status sshd.service' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4장. 비표준 구성을 사용하여 애플리케이션 및 서비스에 대한 SELinux 구성 링크 복사링크가 클립보드에 복사되었습니다!
SELinux가 강제 모드에 있을 때 기본 정책은 대상 정책입니다. 다음 섹션에서는 프로세스에 대한 구성 기본값(예: 포트, 데이터베이스 위치 또는 파일 시스템 권한)을 변경한 후 다양한 서비스에 대한 SELinux 정책 설정 및 구성에 대한 정보를 제공합니다.
비표준 포트의 SELinux 유형을 변경하고, 기본 디렉터리의 변경 사항에 대해 잘못된 레이블을 식별하고 수정하고, SELinux 부울을 사용하여 정책을 조정하는 방법을 배웁니다.
4.1. 비표준 구성으로 Apache HTTP 서버에 대한 SELinux 정책 사용자 정의 링크 복사링크가 클립보드에 복사되었습니다!
다른 포트에서 수신 대기하고 기본이 아닌 디렉터리에 콘텐츠를 제공하도록 Apache HTTP 서버를 구성할 수 있습니다. 연속 SELinux 거부를 방지하려면 이 절차의 단계에 따라 시스템의 SELinux 정책을 조정합니다.
사전 요구 사항
-
httpd패키지가 설치되고 Apache HTTP 서버는 TCP 포트 3131에서 수신 대기하고 기본/var/www/디렉터리 대신/var/test_www/디렉터리를 사용하도록 구성됩니다. -
policycoreutils-python-utils및se rsh-server패키지가 시스템에 설치되어 있습니다.
절차
httpd서비스를 시작하고 상태를 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux 정책은
httpd가 포트 80에서 실행되는 것으로 가정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 포트 3131의 SELinux 유형을 포트 80과 일치하도록 변경합니다.
semanage port -a -t http_port_t -p tcp 3131
# semanage port -a -t http_port_t -p tcp 3131Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpd를 다시 시작합니다.systemctl start httpd
# systemctl start httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 그러나 콘텐츠는 계속 액세스할 수 없습니다.
wget localhost:3131/index.html … HTTP request sent, awaiting response... 403 Forbidden …
# wget localhost:3131/index.html … HTTP request sent, awaiting response... 403 Forbidden …Copy to Clipboard Copied! Toggle word wrap Toggle overflow sealert툴로 이유를 찾으십시오.sealert -l "*" … SELinux is preventing httpd from getattr access on the file /var/test_www/html/index.html. …
# sealert -l "*" … SELinux is preventing httpd from getattr access on the file /var/test_www/html/index.html. …Copy to Clipboard Copied! Toggle word wrap Toggle overflow matchpathcon툴을 사용하여 표준 및 새 경로에 대한 SELinux 유형을 비교합니다.matchpathcon /var/www/html /var/test_www/html /var/www/html system_u:object_r:httpd_sys_content_t:s0 /var/test_www/html system_u:object_r:var_t:s0
# matchpathcon /var/www/html /var/test_www/html /var/www/html system_u:object_r:httpd_sys_content_t:s0 /var/test_www/html system_u:object_r:var_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새
/var/test_www/html/콘텐츠 디렉터리의 SELinux 유형을 기본/var/www/html디렉터리 유형으로 변경합니다.semanage fcontext -a -e /var/www /var/test_www
# semanage fcontext -a -e /var/www /var/test_wwwCopy to Clipboard Copied! Toggle word wrap Toggle overflow /var디렉터리의 레이블을 재귀적으로 다시 지정합니다.restorecon -Rv /var/ ... Relabeled /var/test_www/html from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /var/test_www/html/index.html from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
# restorecon -Rv /var/ ... Relabeled /var/test_www/html from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /var/test_www/html/index.html from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
httpd서비스가 실행 중인지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Apache HTTP 서버에서 제공하는 콘텐츠에 액세스할 수 있는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2. SELinux 부울을 사용하여 NFS 및 CIFS 볼륨 공유를 위한 정책 조정 링크 복사링크가 클립보드에 복사되었습니다!
SELinux 정책 작성에 대한 지식이 없어도 부울을 사용하여 런타임에 SELinux 정책의 일부를 변경할 수 있습니다. 이렇게 하면 SELinux 정책을 다시 로드하거나 다시 컴파일하지 않고도 NFS 볼륨에 대한 서비스 액세스 허용과 같은 변경이 가능합니다. 다음 절차에서는 SELinux 부울을 나열하고 정책을 변경하도록 구성하는 방법을 보여줍니다.
클라이언트 측의 NFS 마운트는 NFS 볼륨의 정책으로 정의된 기본 컨텍스트로 레이블이 지정됩니다. RHEL에서 이 기본 컨텍스트는 nfs_t 유형을 사용합니다. 또한 클라이언트 측에 마운트된 Samba 공유는 정책에서 정의한 기본 컨텍스트로 레이블이 지정됩니다. 이 기본 컨텍스트는 cifs_t 유형을 사용합니다. 부울을 활성화하거나 비활성화하여 nfs_t 및 cifs_t 유형에 액세스할 수 있는 서비스를 제어할 수 있습니다.
Apache HTTP 서버 서비스(httpd)가 NFS 및 CIFS 볼륨에 액세스하고 공유할 수 있도록 하려면 다음 단계를 수행합니다.
사전 요구 사항
-
필요한 경우
selinux-policy-devel패키지를 설치하여semanage boolean -l명령의 출력에서 SELinux 부울에 대한 명확한 설명을 얻을 수 있습니다.
절차
NFS, CIFS 및 Apache와 관련된 SELinux 부울을 식별합니다.
semanage boolean -l | grep 'nfs\|cifs' | grep httpd httpd_use_cifs (off , off) Allow httpd to access cifs file systems httpd_use_nfs (off , off) Allow httpd to access nfs file systems
# semanage boolean -l | grep 'nfs\|cifs' | grep httpd httpd_use_cifs (off , off) Allow httpd to access cifs file systems httpd_use_nfs (off , off) Allow httpd to access nfs file systemsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 부울의 현재 상태를 나열합니다.
getsebool -a | grep 'nfs\|cifs' | grep httpd httpd_use_cifs --> off httpd_use_nfs --> off
$ getsebool -a | grep 'nfs\|cifs' | grep httpd httpd_use_cifs --> off httpd_use_nfs --> offCopy to Clipboard Copied! Toggle word wrap Toggle overflow 식별된 부울을 활성화합니다.
setsebool httpd_use_nfs on setsebool httpd_use_cifs on
# setsebool httpd_use_nfs on # setsebool httpd_use_cifs onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고다시 시작해도 변경 사항을 유지하려면
-P옵션과 함께setsebool을 사용합니다.setsebool -P명령에는 전체 정책을 다시 빌드해야 하며 구성에 따라 다소 시간이 걸릴 수 있습니다.
검증
부울이 다음과 같이 설정되어
있는지확인합니다.getsebool -a | grep 'nfs\|cifs' | grep httpd httpd_use_cifs --> on httpd_use_nfs --> on
$ getsebool -a | grep 'nfs\|cifs' | grep httpd httpd_use_cifs --> on httpd_use_nfs --> onCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3. 비표준 디렉터리에 대한 액세스를 관리하기 위한 올바른 SELinux 유형 찾기 링크 복사링크가 클립보드에 복사되었습니다!
기본 SELinux 정책이 다루지 않는 access-control 규칙을 설정해야 하는 경우 사용 사례와 일치하는 부울을 검색하여 시작합니다. 적절한 부울을 찾을 수 없는 경우 일치하는 SELinux 유형을 사용하거나 로컬 정책 모듈을 생성할 수도 있습니다.
사전 요구 사항
-
selinux-policy-doc및setools-console패키지가 시스템에 설치되어 있습니다.
프로세스
모든 SELinux 관련 주제를 나열하고 결과를 구성하려는 구성 요소로 제한합니다. 예를 들면 다음과 같습니다.
man -k selinux | grep samba samba_net_selinux (8) - Security Enhanced Linux Policy for the samba_net processes samba_selinux (8) - Security Enhanced Linux Policy for the smbd processes …
# man -k selinux | grep samba samba_net_selinux (8) - Security Enhanced Linux Policy for the samba_net processes samba_selinux (8) - Security Enhanced Linux Policy for the smbd processes …Copy to Clipboard Copied! Toggle word wrap Toggle overflow 시나리오에 해당하는 도움말 페이지에서 관련 SELinux 부울, 포트 유형 및 파일 유형을 찾습니다.
selinux-policy-doc패키지를 설치한 후에만man -k selinux또는apropos selinux명령을 사용할 수 있습니다.선택 사항:
semanage fcontext -l명령을 사용하여 기본 위치에 프로세스의 기본 매핑을 표시할 수 있습니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow sesearch명령을 사용하여 기본 SELinux 정책에 규칙을 표시합니다. 해당 규칙을 나열하여 사용할 유형 및 부울을 찾을 수 있습니다. 예를 들면 다음과 같습니다.sesearch -A | grep samba | grep httpd … allow httpd_t cifs_t:dir { getattr open search }; [ use_samba_home_dirs && httpd_enable_homedirs ]:True …$ sesearch -A | grep samba | grep httpd … allow httpd_t cifs_t:dir { getattr open search }; [ use_samba_home_dirs && httpd_enable_homedirs ]:True …Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux 부울은 구성 문제에 가장 간단한 솔루션일 수 있습니다.
getsebool -a명령을 사용하여 사용 가능한 부울 및 해당 값을 모두 표시할 수 있습니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어
sesearch명령을 사용하여 선택한 부울이 정확히 원하는 작업을 수행하는지 확인할 수 있습니다.sesearch -A | grep httpd_enable_homedirs … allow httpd_suexec_t autofs_t:dir { getattr open search }; [ use_nfs_home_dirs && httpd_enable_homedirs ]:True allow httpd_suexec_t autofs_t:dir { getattr open search }; [ use_samba_home_dirs && httpd_enable_homedirs ]:True …$ sesearch -A | grep httpd_enable_homedirs … allow httpd_suexec_t autofs_t:dir { getattr open search }; [ use_nfs_home_dirs && httpd_enable_homedirs ]:True allow httpd_suexec_t autofs_t:dir { getattr open search }; [ use_samba_home_dirs && httpd_enable_homedirs ]:True …Copy to Clipboard Copied! Toggle word wrap Toggle overflow 부울이 시나리오와 일치하지 않는 경우 케이스에 맞는 SELinux 유형을 찾습니다.
sesearch를 사용하여 기본 정책에서 해당 규칙을 쿼리하여 파일의 유형을 찾을 수 있습니다. 예를 들면 다음과 같습니다.sesearch -A -s httpd_t -c file -p read … allow httpd_t httpd_t:file { append getattr ioctl lock open read write }; allow httpd_t httpd_tmp_t:file { append create getattr ioctl link lock map open read rename setattr unlink write }; …$ sesearch -A -s httpd_t -c file -p read … allow httpd_t httpd_t:file { append getattr ioctl lock open read write }; allow httpd_t httpd_tmp_t:file { append create getattr ioctl link lock map open read rename setattr unlink write }; …Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이전 솔루션이 시나리오를 다루지 않는 경우 SELinux 정책에 사용자 지정 규칙을 추가할 수 있습니다. 자세한 내용은 로컬 SELinux 정책 모듈 생성 섹션을 참조하십시오.
6장. Multi-Level Security (MLS) 사용 링크 복사링크가 클립보드에 복사되었습니다!
Multi-Level Security (MLS) 정책은 원래 미국 방어 커뮤니티에서 설계 한 것처럼 명확한 수준을 사용합니다. MLS는 미군과 같이 엄격하게 제어되는 환경에서 정보 관리를 기반으로 매우 좁은 보안 요구 사항을 충족합니다.
MLS를 사용하는 것은 복잡하고 일반적인 사용 사례 시나리오에 잘 매핑되지 않습니다.
6.1. Multi-Level Security (MLS) 링크 복사링크가 클립보드에 복사되었습니다!
Multi-Level Security (MLS) 기술은 정보 보안 수준을 사용하여 계층 분류의 데이터를 분류합니다. 예를 들면 다음과 같습니다.
- [lowest] 분류되지 않음
- [low] 기밀
- [high] 시크릿
- [가장 높은] 최고 시크릿
기본적으로 MLS SELinux 정책은 16개의 민감도 수준을 사용합니다.
-
s0이 가장 민감합니다. -
S
15가가장 민감합니다.
MLS는 민감도 수준을 해결하기 위해 특정 용어를 사용합니다.
- 사용자 및 프로세스를 제목이라고 하며 민감도 수준을 명확한 수준이라고 합니다.
- 시스템의 파일, 장치 및 기타 수동 구성 요소를 오브젝트 라고 하며 민감도 수준을 분류 라고 합니다.
MLS를 구현하기 위해 SELinux는 BLP(P hat-La Padula Model ) 모델을 사용합니다. 이 모델은 각 주체 및 개체에 연결된 라벨에 따라 시스템 내에서 정보가 이동하는 방법을 지정합니다.
BLP의 기본 원칙은읽기가 없고 쓰기가 없습니다. "즉,사용자가 자신의 민감도 수준에서만 파일을 읽을 수 있으며 데이터는 더 낮은 수준에서 더 높은 수준으로만 전달될 수 있으며 그 반대는 아닙니다.
RHEL에서 MLS를 구현하는 MLS SELinux 정책은 쓰기 같음을 가진 Bell-La Padula 라는 수정된 원칙을 적용합니다. 즉, 사용자는 자신의 민감도 수준에서 파일을 읽을 수 있지만 정확히 자체 수준에서만 쓸 수 있습니다. 이렇게 하면, 예를 들어 저해 사용자가 콘텐츠를 top-secret 파일에 쓰지 못하게 합니다.
예를 들어 기본적으로 명확한 수준 s2 를 가진 사용자는 다음과 같습니다.
-
민감도 수준
s0,s1및s2로 파일을 읽을 수 있습니다. -
민감도 수준
s3이상인 파일을 읽을 수 없습니다. -
정확히
s2의 민감도 수준으로 파일을 수정할 수 있습니다. -
s2이외의 민감도 수준으로 파일을 수정할 수 없습니다.
보안 관리자는 시스템의 SELinux 정책을 수정하여 이 동작을 조정할 수 있습니다. 예를 들어 사용자가 더 낮은 수준에서 파일을 수정하여 파일의 민감도 수준을 사용자의 명확한 수준으로 높일 수 있습니다.
실제로 사용자는 일반적으로 다양한 명확한 수준(예: s1-s2 )에 할당됩니다. 사용자는 사용자의 최대 수준보다 민감도 수준이 낮은 파일을 읽고 해당 범위 내의 모든 파일에 쓸 수 있습니다.
예를 들어 기본적으로 범위가 s1-s2 인 사용자는 다음을 수행합니다.
-
민감도 수준
s0및s1을 사용하여 파일을 읽을 수 있습니다. -
민감도 수준
s2이상의 파일을 읽을 수 없습니다. -
민감도 수준
s1로 파일을 수정할 수 있습니다. -
s1이외의 민감도 수준으로 파일을 수정할 수 없습니다. -
자신의 명확한 수준을
s2로 변경할 수 있습니다.
MLS 환경에서 권한이 없는 사용자의 보안 컨텍스트는 다음과 같습니다.
user_u:user_r:user_t:s1
user_u:user_r:user_t:s1
다음과 같습니다.
user_u- SELinux 사용자입니다.
user_r- SELinux 역할입니다.
user_t- SELinux 유형입니다.
s1- MLS 민감도 수준의 범위입니다.
시스템은 항상 MLS 액세스 규칙과 기존 파일 액세스 권한을 결합합니다. 예를 들어 보안 수준이 "Secret"인 사용자가 Discretionary Access Control(DAC)을 사용하여 다른 사용자가 파일에 대한 액세스를 차단하는 경우 "Top Secret" 사용자도 해당 파일에 액세스할 수 없습니다. 보안 수준이 높은 경우 사용자가 전체 파일 시스템을 검색하도록 자동으로 허용하지 않습니다.
최상위 수준의 명확한 사용자는 다중 수준 시스템에 대한 관리 권한을 자동으로 취득하지 않습니다. 시스템에 대한 모든 중요한 정보에 액세스할 수 있지만 이는 관리 권한이 있는 것과 다릅니다.
또한 관리자 권한은 중요한 정보에 대한 액세스 권한을 제공하지 않습니다. 예를 들어, 누군가가 root 로 로그인한 경우에도 최상위 비밀 정보를 읽을 수 없습니다.
범주를 사용하여 MLS 시스템 내에서 액세스를 추가로 조정할 수 있습니다. MCCS(Multi-Category Security)를 사용하면 프로젝트 또는 부서와 같은 카테고리를 정의할 수 있으며 사용자는 할당된 카테고리의 파일에만 액세스할 수 있습니다. 자세한 내용은 데이터 기밀성을 위해 MCS(Multi-Category Security) 사용을 참조하십시오.
6.2. MLS에서 SELinux 역할 링크 복사링크가 클립보드에 복사되었습니다!
SELinux 정책은 각 Linux 사용자를 SELinux 사용자에게 매핑합니다. 이를 통해 Linux 사용자는 SELinux 사용자의 제한을 상속할 수 있습니다.
MLS 정책에는 제한되지 않은 사용자, 유형, 역할을 포함하여 제한되지 않은 모듈이 포함되어 있지 않습니다. 결과적으로 root 를 포함하여 제한되지 않은 사용자는 모든 오브젝트에 액세스하고 대상 정책에서 수행할 수 있는 모든 작업을 수행할 수 없습니다.
정책의 부울을 조정하여 특정 요구 사항에 따라 SELinux 정책에서 제한된 사용자에 대한 권한을 사용자 지정할 수 있습니다. semanage boolean -l 명령을 사용하여 이러한 부울의 현재 상태를 확인할 수 있습니다. 모든 SELinux 사용자, SELinux 역할, MLS/MCS 수준 및 범위를 나열하려면 semanage user -l 명령을 root 로 사용합니다.
| 사용자 | 기본 역할 | 추가 역할 |
|---|---|---|
|
|
| |
|
|
| |
|
|
| |
|
|
|
|
|
| ||
|
| ||
|
| ||
|
|
| |
|
|
|
|
|
| ||
|
| ||
|
| ||
|
|
|
system_u 는 시스템 프로세스 및 오브젝트의 특수 사용자 ID이며 system_r 은 연결된 역할입니다. 관리자는 이 system_u 사용자와 system_r 역할을 Linux 사용자와 연결하지 않아야 합니다. 또한 unconfined_u 및 root 는 제한되지 않은 사용자입니다. 이러한 이유로 이러한 SELinux 사용자와 관련된 역할은 다음 표의 SELinux 역할에 포함되지 않습니다.
각 SELinux 역할은 SELinux 유형에 해당하며 특정 액세스 권한을 제공합니다.
| 역할 | 유형 | X Window System을 사용하여 로그인 | Su 및 sudo | 홈 디렉토리 및 /tmp (기본값)에서 실행 | 네트워킹 |
|---|---|---|---|---|---|
|
|
| 제공되지 않음 | 제공되지 않음 | 제공됨 | 제공되지 않음 |
|
|
| 제공됨 | 제공되지 않음 | 제공됨 | 웹 브라우저만 (Fire Firefox, GNOME 웹) |
|
|
| 제공됨 | 제공되지 않음 | 제공됨 | 제공됨 |
|
|
| 제공됨 |
| 제공됨 | 제공됨 |
|
|
| 제공됨 | 제공됨 | 제공됨 | |
|
|
| 제공됨 | 제공됨 | 제공됨 | |
|
|
|
| 제공됨 | 제공됨 | 제공됨 |
-
기본적으로
sysadm_r역할에는secadm_r역할의 권한이 있으므로sysadm_r역할의 사용자가 보안 정책을 관리할 수 있습니다. 사용 사례에 해당하지 않는 경우 정책에서sysadm_secadm모듈을 비활성화하여 두 역할을 분리할 수 있습니다. 자세한 내용은 MLS의 보안 관리에서 시스템 관리 분리를 참조하십시오. -
비로그인 역할
dbadm_r,logadm_r,webadm_r는 관리 작업의 하위 집합에 사용할 수 있습니다. 기본적으로 이러한 역할은 SELinux 사용자와 연결되지 않습니다.
6.3. SELinux 정책을 MLS로 전환 링크 복사링크가 클립보드에 복사되었습니다!
다음 단계를 사용하여 SELinux 정책을 대상에서 MLS(Multi-Level Security)로 전환합니다.
X Window System을 실행하는 시스템에서 MLS 정책을 사용하지 마십시오. 또한 MLS 레이블을 사용하여 파일 시스템의 레이블을 다시 지정하면 시스템에서 제한된 도메인이 액세스하지 못하도록 시스템이 올바르게 시작되지 않을 수 있습니다. 따라서 파일의 레이블을 다시 지정하기 전에 SELinux를 허용 모드로 전환해야 합니다. 대부분의 시스템에서 MLS로 전환한 후 SELinux 거부가 많이 표시되고 많은 SELinux 거부를 수정할 수 없습니다.
절차
selinux-policy-mls패키지를 설치합니다.dnf install selinux-policy-mls
# dnf install selinux-policy-mlsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택한 텍스트 편집기에서
/etc/selinux/config파일을 엽니다. 예를 들면 다음과 같습니다.vi /etc/selinux/config
# vi /etc/selinux/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux 모드를 강제에서 허용으로 변경하고 대상 정책에서 MLS로 전환합니다.
SELINUX=permissive SELINUXTYPE=mls
SELINUX=permissive SELINUXTYPE=mlsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항을 저장하고 편집기를 종료합니다.
MLS 정책을 활성화하려면 파일 시스템의 각 파일의 레이블을 MLS 레이블로 다시 지정해야 합니다.
fixfiles -F onboot System will relabel on next boot
# fixfiles -F onboot System will relabel on next bootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템을 다시 시작하십시오.
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux 거부를 확인합니다.
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts recent -i
# ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts recent -iCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 명령에서는 모든 시나리오를 다루지 않으므로 SELinux 와 관련된 문제 해결을 참조하십시오. SELinux 거부 식별, 분석 및 수정에 대한 지침을 참조하십시오.
시스템에서 SELinux와 관련된 문제가 없는지 확인한 후
/etc/selinux/config에서 해당 옵션을 변경하여 SELinux를 강제 모드로 다시 전환합니다.SELINUX=enforcing
SELINUX=enforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템을 다시 시작하십시오.
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
시스템이 시작되지 않거나 MLS로 전환한 후 로그인할 수 없는 경우 커널 명령줄에 enforcing=0 매개 변수를 추가합니다. 자세한 내용은 부팅 시 SELinux 모드 변경을 참조하십시오.
또한 MLS에서 sysadm_r SELinux 역할에 매핑된 root 사용자의 SSH 로그인은 staff_r 의 root 로그인과 다릅니다. 처음으로 MLS에서 시스템을 시작하기 전에 ssh_sysadm_login SELinux 부울을 1 로 설정하여 sysadm_r 로 SSH 로그인을 허용하는 것이 좋습니다. 나중에 ssh_sysadm_login 을 활성화하려면 이미 MLS에서 root 로 로그인하고, newrole - 에서 r sysadm_r 명령을 사용하여 sysadm_rroot 로 전환한 다음 부울을 1 로 설정해야 합니다.
검증
SELinux가 강제 모드에서 실행되는지 확인합니다.
getenforce Enforcing
# getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux의 상태가
mls값을 반환하는지 확인합니다.sestatus | grep mls Loaded policy name: mls
# sestatus | grep mls Loaded policy name: mlsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4. MLS에서 사용자 명확한 설정 링크 복사링크가 클립보드에 복사되었습니다!
SELinux 정책을 MLS로 전환한 후 제한된 SELinux 사용자에게 매핑하여 사용자에게 보안 명확한 수준을 할당해야 합니다. 기본적으로 보안 수준이 지정된 사용자는 다음과 같습니다.
- 민감도 수준이 높은 개체를 읽을 수 없습니다.
- 다른 민감도 수준에서 오브젝트에 쓸 수 없습니다.
사전 요구 사항
-
SELinux 정책은
mls로 설정됩니다. -
SELinux 모드는
enforcing으로 설정됩니다. -
policycoreutils-python-utils패키지가 설치됩니다. SELinux 제한 사용자에게 할당된 사용자:
-
권한이 없는 사용자의 경우
user_u에 할당된(다음 절차의example_user )입니다. -
권한이 있는 사용자의 경우
staff_u(다음 절차의staff )에 할당됩니다.
-
권한이 없는 사용자의 경우
MLS 정책이 활성화되었을 때 사용자가 생성되었는지 확인합니다. 다른 SELinux 정책에서 생성된 사용자는 MLS에서 사용할 수 없습니다.
프로세스
선택 사항: SELinux 정책에 오류를 추가하지 않으려면
허용 SELinux 모드로전환하여 문제 해결을 용이하게 합니다.setenforce 0
# setenforce 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 허용 모드에서 SELinux는 활성 정책을 적용하지 않지만 문제 해결 및 디버깅에 사용할 수 있는 AVC(Access Vector Cache) 메시지만 기록합니다.
staff_uSELinux 사용자의 명확한 범위를 정의합니다. 예를 들어 이 명령은s1에서s15로 명확한 범위를 설정하고s1은 기본 명확한 수준입니다.semanage user -m -L s1 -r s1-s15 staff_u
# semanage user -m -L s1 -r s1-s15 staff_uCopy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 홈 디렉터리에 대한 SELinux 파일 컨텍스트 구성 항목을 생성합니다.
genhomedircon
# genhomedirconCopy to Clipboard Copied! Toggle word wrap Toggle overflow 파일 보안 컨텍스트를 기본값으로 복원합니다.
restorecon -R -F -v /home/ Relabeled /home/staff from staff_u:object_r:user_home_dir_t:s0 to staff_u:object_r:user_home_dir_t:s1 Relabeled /home/staff/.bash_logout from staff_u:object_r:user_home_t:s0 to staff_u:object_r:user_home_t:s1 Relabeled /home/staff/.bash_profile from staff_u:object_r:user_home_t:s0 to staff_u:object_r:user_home_t:s1 Relabeled /home/staff/.bashrc from staff_u:object_r:user_home_t:s0 to staff_u:object_r:user_home_t:s1
# restorecon -R -F -v /home/ Relabeled /home/staff from staff_u:object_r:user_home_dir_t:s0 to staff_u:object_r:user_home_dir_t:s1 Relabeled /home/staff/.bash_logout from staff_u:object_r:user_home_t:s0 to staff_u:object_r:user_home_t:s1 Relabeled /home/staff/.bash_profile from staff_u:object_r:user_home_t:s0 to staff_u:object_r:user_home_t:s1 Relabeled /home/staff/.bashrc from staff_u:object_r:user_home_t:s0 to staff_u:object_r:user_home_t:s1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자에게 명확한 수준을 할당합니다.
semanage login -m -r s1 example_user
# semanage login -m -r s1 example_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 여기서
s1은 사용자에게 할당된 명확한 수준입니다.사용자의 홈 디렉터리의 레이블을 사용자의 명확한 수준으로 다시 지정합니다.
chcon -R -l s1 /home/example_user
# chcon -R -l s1 /home/example_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 이전에
허용 SELinux 모드로전환했으며 모든 항목이 예상대로 작동하는지 확인한 후강제SELinux 모드로 다시 전환합니다.setenforce 1
# setenforce 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
사용자가 올바른 SELinux 사용자에게 매핑되고 올바른 명확한 수준이 할당되어 있는지 확인합니다.
semanage login -l Login Name SELinux User MLS/MCS Range Service __default__ user_u s0-s0 * example_user user_u s1 * …
# semanage login -l Login Name SELinux User MLS/MCS Range Service __default__ user_u s0-s0 * example_user user_u s1 * …Copy to Clipboard Copied! Toggle word wrap Toggle overflow - MLS 내에서 사용자로 로그인합니다.
사용자의 보안 수준이 올바르게 작동하는지 확인합니다.
주의확인에 사용하는 파일에는 구성이 올바르지 않고 사용자가 실제로 권한 없이 파일에 액세스할 수 있는 경우 중요한 정보가 포함되어 있지 않아야 합니다.
- 사용자가 더 높은 수준의 민감도를 가진 파일을 읽을 수 없는지 확인합니다.
- 사용자가 민감도가 동일한 파일에 쓸 수 있는지 확인합니다.
- 사용자가 낮은 수준의 민감도를 사용하여 파일을 읽을 수 있는지 확인합니다.
6.5. MLS에서 정의된 보안 범위 내에서 사용자의 명확한 수준 변경 링크 복사링크가 클립보드에 복사되었습니다!
Multi-Level Security (MLS)의 사용자는 관리자가 할당한 범위 내에서 현재 명확한 수준을 변경할 수 있습니다. 범위의 상한을 초과하거나 범위의 하한값보다 낮은 수준을 줄일 수 없습니다. 예를 들어 민감도 수준을 가장 높은 명확한 수준으로 늘리지 않고 낮은 민감도 파일을 수정할 수 있습니다.
예를 들어, 범위 s1-s3 에 할당된 사용자는 다음과 같습니다.
-
레벨
s1,s2,s3으로 전환할 수 있습니다. -
s1-s2및s2-s3범위로 전환할 수 있습니다. -
s0-s3또는s1-s4범위로 전환할 수 없습니다.
다른 수준으로 전환하면 다른 명확한 설명이 포함된 새 쉘이 열립니다. 즉, 값을 줄이는 것과 동일한 방식으로 원래의 명확한 수준으로 돌아갈 수 없습니다. 그러나 exit 를 입력하여 항상 이전 쉘로 돌아갈 수 있습니다.
사전 요구 사항
-
SELinux 정책은
mls로 설정됩니다. -
SELinux 모드는
enforcing으로 설정되어 있습니다. - 다양한 MLS clearance 수준에 할당된 사용자로 로그인할 수 있습니다.
절차
보안 터미널에서 사용자로 로그인합니다.
보안 터미널은
/etc/selinux/mls/contexts/securetty_types파일에 정의되어 있습니다. 기본적으로 콘솔은 보안 터미널이지만 SSH는 그렇지 않습니다.현재 사용자의 보안 컨텍스트를 확인합니다.
id -Z user_u:user_r:user_t:s0-s2
$ id -Z user_u:user_r:user_t:s0-s2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서 사용자는
user_uSELinux 사용자,user_r역할,user_t유형 및 MLS 보안 범위s0-s2에 할당됩니다.현재 사용자의 보안 컨텍스트를 확인합니다.
id -Z user_u:user_r:user_t:s1-s2
$ id -Z user_u:user_r:user_t:s1-s2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 명확한 범위 내에서 다른 보안 명확한 범위로 전환합니다.
newrole -l s1
$ newrole -l s1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 최대 범위가 더 낮거나 할당된 범위와 동일한 모든 범위로 전환할 수 있습니다. 단일 수준 범위를 입력하면 할당된 범위의 하한이 변경됩니다. 예를 들어
s0-s2범위가 있는 사용자로newrole -l s1을 입력하는 것은newrole -l s1-s2를 입력하는 것과 동일합니다.
검증
현재 사용자의 보안 컨텍스트를 표시합니다.
id -Z user_u:user_r:user_t:s1-s2
$ id -Z user_u:user_r:user_t:s1-s2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 현재 쉘을 종료하여 원래 범위로 이전 쉘로 돌아갑니다.
exit
$ exitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6. MLS에서 파일 민감도 수준 증가 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Multi-Level Security (MLS) 사용자는 파일 민감도 수준을 높일 수 없습니다. 그러나 보안 관리자(secadm_r)는 시스템의 SELinux 정책에 로컬 모듈 mlsfilewrite 를 추가하여 파일의 민감도를 높일 수 있도록 이 기본 동작을 변경할 수 있습니다. 그런 다음 policy 모듈에 정의된 SELinux 유형에 할당된 사용자는 파일을 수정하여 파일 분류 수준을 높일 수 있습니다. 사용자가 파일을 수정할 때마다 파일의 민감도 수준이 사용자의 현재 보안 범위 값으로 늘어납니다.
보안 관리자는 secadm_r 역할에 할당된 사용자로 로그인하면 chcon -l s0 /path/to/file 명령을 사용하여 파일의 보안 수준을 변경할 수 있습니다. 자세한 내용은 MLS에서 파일 민감도 변경을 참조하십시오.
사전 요구 사항
-
SELinux 정책은
mls로 설정됩니다. -
SELinux 모드는
enforcing으로 설정되어 있습니다. -
policycoreutils-python-utils패키지가 설치됩니다. -
mlsfilewrite로컬 모듈이 SELinux MLS 정책에 설치됩니다. MLS에서 다음과 같은 사용자로 로그인했습니다.
-
정의된 보안 범위에 할당됩니다. 이 예에서는 보안 범위
s0-s2가 있는 사용자를 보여줍니다. -
mlsfilewrite모듈에 정의된 동일한 SELinux 유형에 할당됩니다. 이 예제에서는(attributeset mlsfilewrite(user_t))모듈이 필요합니다.
-
정의된 보안 범위에 할당됩니다. 이 예에서는 보안 범위
프로세스
선택 사항: 현재 사용자의 보안 컨텍스트를 표시합니다.
id -Z user_u:user_r:user_t:s0-s2
$ id -Z user_u:user_r:user_t:s0-s2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 MLS 명확한 범위의 더 낮은 수준을 파일에 할당하려는 수준으로 변경합니다.
newrole -l s1-s2
$ newrole -l s1-s2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 현재 사용자의 보안 컨텍스트를 표시합니다.
id -Z user_u:user_r:user_t:s1-s2
$ id -Z user_u:user_r:user_t:s1-s2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 파일의 보안 컨텍스트를 표시합니다.
ls -Z /path/to/file user_u:object_r:user_home_t:s0 /path/to/file
$ ls -Z /path/to/file user_u:object_r:user_home_t:s0 /path/to/fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 파일을 수정하여 파일의 민감도 수준을 사용자의 명확한 수준으로 변경합니다.
touch /path/to/file
$ touch /path/to/fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 중요restorecon명령이 시스템에서 사용되는 경우 분류 수준은 기본값으로 되돌립니다.선택 사항: 쉘을 종료하여 사용자의 이전 보안 범위로 돌아갑니다.
exit
$ exitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
파일의 보안 컨텍스트를 표시합니다.
ls -Z /path/to/file user_u:object_r:user_home_t:s1 /path/to/file
$ ls -Z /path/to/file user_u:object_r:user_home_t:s1 /path/to/fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.7. MLS에서 파일 민감도 변경 링크 복사링크가 클립보드에 복사되었습니다!
MLS SELinux 정책에서는 사용자가 민감도 수준에서만 파일을 수정할 수 있습니다. 이는 매우 민감한 정보가 더 낮은 수준의 사용자에게 노출되는 것을 방지하고, 고밀도 문서를 생성하는 저해 사용자를 방지하기 위한 것입니다. 그러나 관리자는 파일 분류를 수동으로 늘릴 수 있습니다(예: 상위 수준에서 파일을 처리할 수 있음).
사전 요구 사항
-
SELinux 정책은
mls로 설정됩니다. - SELinux 모드는 enforcing으로 설정됩니다.
보안 관리 권한이 있습니다. 즉, 다음 중 하나에 할당되어 있습니다.
-
secadm_r역할입니다. -
sysadm_secadm모듈이 활성화된 경우sysadm_r역할에 대해 다음을 수행합니다.sysadm_secadm모듈은 기본적으로 활성화되어 있습니다.
-
-
policycoreutils-python-utils패키지가 설치됩니다. 모든 명확한 수준에 할당된 사용자입니다. 자세한 내용은 MLS의 사용자 삭제 수준을 참조하십시오.
이 예에서
User1에는 명확한 수준s1이 있습니다.분류 수준이 할당되고 액세스 권한이 있는 파일입니다.
이 예에서
/path/to/file에는 분류 수준s1이 있습니다.
절차
파일의 분류 수준을 확인합니다.
ls -lZ /path/to/file -rw-r-----. 1 User1 User1 user_u:object_r:user_home_t:s1 0 12. Feb 10:43 /path/to/file
# ls -lZ /path/to/file -rw-r-----. 1 User1 User1 user_u:object_r:user_home_t:s1 0 12. Feb 10:43 /path/to/fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 파일의 기본 분류 수준을 변경합니다.
semanage fcontext -a -r s2 /path/to/file
# semanage fcontext -a -r s2 /path/to/fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 파일의 SELinux 컨텍스트 레이블을 강제로 다시 지정합니다.
restorecon -F -v /path/to/file Relabeled /path/to/file from user_u:object_r:user_home_t:s1 to user_u:object_r:user_home_t:s2
# restorecon -F -v /path/to/file Relabeled /path/to/file from user_u:object_r:user_home_t:s1 to user_u:object_r:user_home_t:s2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
파일의 분류 수준을 확인합니다.
ls -lZ /path/to/file -rw-r-----. 1 User1 User1 user_u:object_r:user_home_t:s2 0 12. Feb 10:53 /path/to/file
# ls -lZ /path/to/file -rw-r-----. 1 User1 User1 user_u:object_r:user_home_t:s2 0 12. Feb 10:53 /path/to/fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 하위 사용자가 파일을 읽을 수 없는지 확인합니다.
cat /path/to/file cat: file: Permission denied
$ cat /path/to/file cat: file: Permission deniedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.8. MLS의 보안 관리와 시스템 관리 분리 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 sysadm_r 역할에는 secadm_r 역할의 권한이 있으므로 sysadm_r 역할의 사용자가 보안 정책을 관리할 수 있습니다. 보안 권한 부여를 더 많이 제어해야 하는 경우 Linux 사용자를 secadm_r 역할에 할당하고 SELinux 정책에서 sysadm_secadm 모듈을 비활성화하여 시스템 관리를 분리할 수 있습니다.
사전 요구 사항
-
SELinux 정책은
mls로 설정됩니다. -
SELinux 모드는
enforcing으로 설정됩니다. -
policycoreutils-python-utils패키지가 설치됩니다. secadm_r역할에 할당할 Linux 사용자:-
사용자가
staff_uSELinux 사용자에게 할당됩니다. - 이 사용자의 암호가 정의되었습니다.
주의secadm역할에 할당할 사용자로 로그인할 수 있는지 확인합니다. 그렇지 않은 경우 시스템의 SELinux 정책을 향후 수정하지 못할 수 있습니다.-
사용자가
절차
/etc/sudoers.d사용자에 대한 새sudoers파일을 만듭니다.visudo -f /etc/sudoers.d/<sec_adm_user>
# visudo -f /etc/sudoers.d/<sec_adm_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudoers파일을 정리하려면 <sec_adm_user>를secadm역할에 할당할 Linux 사용자로 바꿉니다./etc/sudoers.d/ <sec_adm_user> 파일에 다음 내용을 추가합니다.<sec_adm_user> ALL=(ALL) TYPE=secadm_t ROLE=secadm_r ALL
<sec_adm_user> ALL=(ALL) TYPE=secadm_t ROLE=secadm_r ALLCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 행은 모든 호스트의 <
sec_adm_user>를 승인하여 모든 명령을 수행하고 기본적으로secadmSELinux 유형 및 역할에 매핑합니다.< sec_adm_user> 사용자로 로그인합니다.
SELinux 컨텍스트(SELinux 사용자, 역할 및 유형으로 구성됨)가 변경되었는지 확인하려면
ssh, 콘솔 또는xdm을 사용하여 로그인합니다.su및sudo와 같은 다른 방법은 전체 SELinux 컨텍스트를 변경할 수 없습니다.사용자의 보안 컨텍스트를 확인합니다.
id uid=1000(<sec_adm_user>) gid=1000(<sec_adm_user>) groups=1000(<sec_adm_user>) context=staff_u:staff_r:staff_t:s0-s15:c0.c1023
$ id uid=1000(<sec_adm_user>) gid=1000(<sec_adm_user>) groups=1000(<sec_adm_user>) context=staff_u:staff_r:staff_t:s0-s15:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow root 사용자에 대해 대화형 쉘을 실행합니다.
sudo -i [sudo] password for <sec_adm_user>:
$ sudo -i [sudo] password for <sec_adm_user>:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 현재 사용자의 보안 컨텍스트를 확인합니다.
id uid=0(root) gid=0(root) groups=0(root) context=staff_u:secadm_r:secadm_t:s0-s15:c0.c1023
# id uid=0(root) gid=0(root) groups=0(root) context=staff_u:secadm_r:secadm_t:s0-s15:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow 정책에서
cryptsetup_secadm모듈을 비활성화합니다.semodule -d sysadm_secadm
# semodule -d sysadm_secadmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 중요semodule -r명령을 사용하여 시스템 정책 모듈을 제거하는 대신semodule -d명령을 사용합니다.semodule -r명령은 시스템 스토리지에서 모듈을 삭제합니다. 즉selinux-policy-mls패키지를 다시 설치하지 않고도 다시 로드할 수 없습니다.
검증
secadm역할에 할당된 사용자로 root 사용자의 대화형 쉘에서 보안 정책 데이터에 액세스할 수 있는지 확인합니다.seinfo -xt secadm_t Types: 1 type secadm_t, can_relabelto_shadow_passwords, (…) userdomain;
# seinfo -xt secadm_t Types: 1 type secadm_t, can_relabelto_shadow_passwords, (…) userdomain;Copy to Clipboard Copied! Toggle word wrap Toggle overflow root 쉘에서 로그아웃합니다.
logout
# logoutCopy to Clipboard Copied! Toggle word wrap Toggle overflow <
sec_adm_user> 사용자로부터 로그아웃합니다.logout Connection to localhost closed.
$ logout Connection to localhost closed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 현재 보안 컨텍스트를 표시합니다.
id uid=0(root) gid=0(root) groups=0(root) context=root:sysadm_r:sysadm_t:s0-s15:c0.c1023
# id uid=0(root) gid=0(root) groups=0(root) context=root:sysadm_r:sysadm_t:s0-s15:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow sysadm_secadm모듈을 활성화합니다. 이 명령은 실패합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow sysadm_tSELinux 유형에 대한 세부 정보를 표시하십시오. 이 명령은 실패합니다.seinfo -xt sysadm_t [Errno 13] Permission denied: '/sys/fs/selinux/policy'
# seinfo -xt sysadm_t [Errno 13] Permission denied: '/sys/fs/selinux/policy'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.9. MLS에서 보안 터미널 정의 링크 복사링크가 클립보드에 복사되었습니다!
SELinux 정책은 사용자가 연결된 터미널 유형을 확인하고, 예를 들어 newrole 과 같이 보안 터미널에서만 특정 SELinux 애플리케이션을 실행할 수 있습니다. 비보안 터미널에서 이 작업을 시도하면 오류 메시지가 생성됩니다. 오류: 보안되지 않은 터미널에서 수준을 변경할 수 없습니다.
/etc/selinux/mls/contexts/securetty_types 파일은 MLS(Multi-Level Security) 정책에 대한 보안 터미널을 정의합니다.
파일의 기본 콘텐츠:
보안 터미널 목록에 터미널 유형을 추가하면 시스템이 보안 위험에 노출될 수 있습니다.
사전 요구 사항
-
SELinux 정책은
mls로 설정됩니다. - 이미 보안된 터미널에서 연결되어 있거나 SELinux가 허용 모드에 있습니다.
보안 관리 권한이 있습니다. 즉, 다음 중 하나에 할당되어 있습니다.
-
secadm_r역할입니다. -
sysadm_secadm모듈이 활성화된 경우sysadm_r역할에 대해 다음을 수행합니다.sysadm_secadm모듈은 기본적으로 활성화되어 있습니다.
-
-
policycoreutils-python-utils패키지가 설치됩니다.
절차
현재 터미널 유형을 확인합니다.
ls -Z `tty` root:object_r:user_devpts_t:s0 /dev/pts/0
# ls -Z `tty` root:object_r:user_devpts_t:s0 /dev/pts/0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예제 출력에서
user_devpts_t는 현재 터미널 유형입니다.-
/etc/selinux/mls/contexts/securetty_types파일의 새 행에 관련 SELinux 유형을 추가합니다. 선택 사항: SELinux를 강제 모드로 전환합니다.
setenforce 1
# setenforce 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
-
이전에 안전하지 않은 터미널에서
/etc/selinux/mls/contexts/securetty_types파일에 추가했습니다.
6.10. MLS 사용자가 더 낮은 수준에서 파일을 편집 가능 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 MLS 사용자는 민감도 수준이 더 낮은 범위보다 낮은 파일에 쓸 수 없습니다. 사용자가 더 낮은 수준에서 파일을 편집하도록 허용하는 경우 로컬 SELinux 모듈을 생성하여 이를 수행할 수 있습니다. 그러나 파일에 기록하면 민감도 수준이 사용자의 현재 범위의 낮은 값으로 증가합니다.
사전 요구 사항
-
SELinux 정책은
mls로 설정됩니다. -
SELinux 모드는
enforcing으로 설정됩니다. -
policycoreutils-python-utils패키지가 설치됩니다. -
확인을 위한
setools-console및감사패키지입니다.
프로세스
선택 사항: 문제 해결을 위해 허용 모드로 전환합니다.
setenforce 0
# setenforce 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 텍스트 편집기로 새
.cil파일(예:~/local_mlsfilewrite.cil)을 열고 다음 사용자 지정 규칙을 삽입합니다.(typeattributeset mlsfilewrite (_staff_t_))
(typeattributeset mlsfilewrite (_staff_t_))Copy to Clipboard Copied! Toggle word wrap Toggle overflow staff_t를 다른 SELinux 유형으로 교체할 수 있습니다. SELinux 유형을 지정하면 하위 수준 파일을 편집할 수 있는 SELinux 역할을 제어할 수 있습니다.로컬 모듈을 더 잘 정리하려면 로컬 SELinux 정책 모듈의 이름에
local_접두사를 사용합니다.정책 모듈을 설치합니다.
semodule -i ~/local_mlsfilewrite.cil
# semodule -i ~/local_mlsfilewrite.cilCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고로컬 정책 모듈을 제거하려면
semodule -r ~/local_mlsfilewrite를 사용합니다..cil접미사 없이 모듈 이름을 참조해야 합니다.선택 사항: 이전에 허용 모드로 다시 전환한 경우 강제 모드로 돌아갑니다.
setenforce 1
# setenforce 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
설치된 SELinux 모듈 목록에서 로컬 모듈을 찾습니다.
semodule -lfull | grep "local_mls" 400 local_mlsfilewrite cil
# semodule -lfull | grep "local_mls" 400 local_mlsfilewrite cilCopy to Clipboard Copied! Toggle word wrap Toggle overflow 로컬 모듈에는 우선 순위가
400이므로semodule -lfull | grep -v ^100명령을 사용하여 나열할 수도 있습니다.-
사용자 지정 규칙에 정의된 유형에 할당된 사용자로 로그인합니다(예:
staff_t). 민감도 수준이 낮은 파일에 쓰기를 시도합니다. 이렇게 하면 파일의 분류 수준이 사용자의 명확한 수준으로 증가합니다.
중요확인에 사용하는 파일에는 구성이 올바르지 않고 사용자가 실제로 권한 없이 파일에 액세스할 수 있는 경우 중요한 정보가 포함되어 있지 않아야 합니다.
7장. 데이터 기밀성을 위해 MCS(Multi-Category Security) 사용 링크 복사링크가 클립보드에 복사되었습니다!
MCS를 사용하여 데이터를 분류한 다음 특정 프로세스 및 사용자에게 특정 카테고리에 대한 액세스 권한을 부여하여 시스템의 데이터 기밀성을 향상시킬 수 있습니다.
7.1. MCS(Multi-Category Security) 링크 복사링크가 클립보드에 복사되었습니다!
MCS(Multi-Category Security)는 프로세스 및 파일에 할당된 카테고리를 사용하는 액세스 제어 메커니즘입니다. 그런 다음 동일한 카테고리에 할당된 프로세스에서만 파일에 액세스할 수 있습니다. MCS의 목적은 시스템에서 데이터 기밀성을 유지하는 것입니다.
MCS 카테고리는 c0 에서 c1023 까지의 값으로 정의되지만, "Personnel", "ProjectX" 또는 "ProjectX.Personnel"과 같은 카테고리의 각 카테고리 또는 조합에 대한 텍스트 레이블을 정의할 수도 있습니다. MCS Translation 서비스(mcstrans)는 범주 값을 시스템 입력 및 출력의 적절한 레이블로 교체하여 사용자가 카테고리 값 대신 이러한 레이블을 사용할 수 있도록 합니다.
사용자가 카테고리에 할당되면 해당 파일에 할당된 범주 중 하나로 레이블을 지정할 수 있습니다.
MCS는 파일에 액세스하려면 파일에 할당된 모든 카테고리에 대해 사용자를 할당해야 합니다. MCS 확인은 일반 Linux DAC(disretionary Access Control) 및 SELinux 유형 강제(TE) 규칙 이후에 적용되므로 기존 보안 구성만 추가로 제한할 수 있습니다.
다중 수준 보안 내에서 MCS
자체적으로 MCS를 계층이 아닌 시스템으로 사용하거나 계층 시스템의 계층 구조 계층으로 Multi-Level Security(MLS)와 함께 사용할 수 있습니다.
MLS 내의 MCS의 예는 비밀 연구 조직일 수 있으며, 여기서 파일은 다음과 같이 분류됩니다.
| 보안 수준 | 카테고리 | |||
| 지정되지 않음 | 프로젝트 X | 프로젝트 Y | 프로젝트 Z | |
| 분류되지 않음 |
|
|
|
|
| 기밀 |
|
|
|
|
| Secret |
|
|
|
|
| 최상위 시크릿 |
|
|
|
|
범위가 s0:c0.1023 인 사용자는 DAC 또는 유형 시행 정책 규칙과 같은 다른 보안 메커니즘에서 액세스를 금지하지 않는 한 수준 s0 의 모든 카테고리에 할당된 모든 파일에 액세스할 수 있습니다.
파일 또는 프로세스의 보안 컨텍스트는 다음과 같은 조합입니다.
- SELinux 사용자
- SELinux 역할
- SELinux 유형
- MLS 민감도 수준
- MCS 카테고리
예를 들어 MLS/MCS 환경에서 민감도 수준 1 및 카테고리 2에 액세스할 수 있는 권한이 없는 사용자는 다음과 같은 SELinux 컨텍스트를 가질 수 있습니다.
user_u:user_r:user_t:s1:c2
user_u:user_r:user_t:s1:c2
7.2. 데이터 기밀성을 위한 다중 범주 보안 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 MCS(Multi-Category Security)는 대상 및 mls SELinux 정책에서 활성화되지만 사용자에게는 구성되지 않습니다. 대상 정책에서 MCS는 다음을 위해서만 구성됩니다.
- OpenShift
- virt
- sandbox
- 네트워크 레이블링
-
컨테이너 (
container-selinux)
유형 적용 외에도 MCS 규칙으로 user_t SELinux 유형을 제한하는 규칙을 사용하여 로컬 SELinux 모듈을 생성하여 사용자를 분류하도록 MCS를 구성할 수 있습니다.
특정 파일의 카테고리를 변경하면 일부 서비스가 작동하지 않을 수 있습니다. 전문가가 아닌 경우 Red Hat 영업 담당자에게 연락하여 컨설팅 서비스를 요청하십시오.
사전 요구 사항
-
SELinux 모드는
enforcing으로 설정되어 있습니다. -
SELinux 정책은
대상또는mls로 설정됩니다. -
policycoreutils-python-utils및setools-console패키지가 설치됩니다.
절차
이름이
local_mcs_user.cil:이라는 새 파일을 만듭니다.vim local_mcs_user.cil
# vim local_mcs_user.cilCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 규칙을 삽입합니다.
(typeattributeset mcs_constrained_type (user_t))
(typeattributeset mcs_constrained_type (user_t))Copy to Clipboard Copied! Toggle word wrap Toggle overflow 정책 모듈을 설치합니다.
semodule -i local_mcs_user.cil
# semodule -i local_mcs_user.cilCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
각 사용자 도메인의 모든 구성 요소에 대한 추가 세부 정보를 표시합니다.
seinfo -xt user_t Types: 1 type user_t, application_domain_type, nsswitch_domain, corenet_unlabeled_type, domain, kernel_system_state_reader, mcs_constrained_type, netlabel_peer_type, privfd, process_user_target, scsi_generic_read, scsi_generic_write, syslog_client_type, pcmcia_typeattr_1, user_usertype, login_userdomain, userdomain, unpriv_userdomain, userdom_home_reader_type, userdom_filetrans_type, xdmhomewriter, x_userdomain, x_domain, dridomain, xdrawable_type, xcolormap_type;
# seinfo -xt user_t Types: 1 type user_t, application_domain_type, nsswitch_domain, corenet_unlabeled_type, domain, kernel_system_state_reader, mcs_constrained_type, netlabel_peer_type, privfd, process_user_target, scsi_generic_read, scsi_generic_write, syslog_client_type, pcmcia_typeattr_1, user_usertype, login_userdomain, userdomain, unpriv_userdomain, userdom_home_reader_type, userdom_filetrans_type, xdmhomewriter, x_userdomain, x_domain, dridomain, xdrawable_type, xcolormap_type;Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3. MCS에서 카테고리 레이블 정의 링크 복사링크가 클립보드에 복사되었습니다!
setrans.conf 파일을 편집하여 MCS 범주 또는 MLS 수준의 MCS 카테고리 조합을 관리하고 유지 관리할 수 있습니다. 이 파일에서 SELinux는 내부 민감도와 카테고리 수준과 사람이 읽을 수 있는 레이블 간의 매핑을 유지 관리합니다.
카테고리 레이블만 있으면 사용자가 카테고리를 더 쉽게 사용할 수 있습니다. MCS는 레이블을 정의하는지 여부에 관계없이 동일하게 작동합니다.
사전 요구 사항
-
SELinux 모드는
enforcing으로 설정됩니다. -
SELinux 정책은
대상또는mls로 설정됩니다. -
policycoreutils-python-utils및mcstrans패키지가 설치됩니다.
절차
텍스트 편집기에서
/etc/selinux/ <selinux_policy> /setrans.conf파일을 편집하여 기존 카테고리를 수정하거나 새 카테고리를 만듭니다. 사용하는 SELinux 정책에 따라 <selinux_policy>를대상또는ml로 바꿉니다. 예를 들면 다음과 같습니다.vi /etc/selinux/targeted/setrans.conf
# vi /etc/selinux/targeted/setrans.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 정책에 대한
setrans.conf파일에서s_<security_level>_:c_<category_number>_= <category_name> 구문을 사용하여 시나리오에 필요한 카테고리 조합을 정의합니다. 예를 들면 다음과 같습니다.s0:c0=Marketing s0:c1=Finance s0:c2=Payroll s0:c3=Personnel
s0:c0=Marketing s0:c1=Finance s0:c2=Payroll s0:c3=PersonnelCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
c0에서c1023까지 카테고리 번호를 사용할 수 있습니다. -
대상정책에서s0보안 수준을 사용합니다. -
mls정책에서는 민감도 수준 및 범주의 각 조합에 레이블을 지정할 수 있습니다.
-
-
선택 사항:
setrans.conf파일에서 MLS 민감도에 레이블을 지정할 수도 있습니다. - 파일을 저장하고 종료합니다.
변경 사항을 적용하려면 MCS 변환 서비스를 다시 시작하십시오.
systemctl restart mcstrans
# systemctl restart mcstransCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
현재 카테고리를 표시합니다.
chcat -L
# chcat -LCopy to Clipboard Copied! Toggle word wrap Toggle overflow 위의 예제에서는 다음 출력을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4. MCS의 사용자에게 카테고리 할당 링크 복사링크가 클립보드에 복사되었습니다!
Linux 사용자에게 범주를 할당하여 사용자 권한을 정의할 수 있습니다. 범주가 할당된 사용자는 사용자 카테고리의 하위 집합이 있는 파일에 액세스하고 수정할 수 있습니다. 사용자는 할당된 범주에 고유 파일을 할당할 수도 있습니다.
Linux 사용자는 관련 SELinux 사용자에 대해 정의된 보안 범위를 벗어나는 카테고리에 할당할 수 없습니다.
범주 액세스는 로그인 중에 할당됩니다. 따라서 사용자는 다시 로그인할 때까지 새로 할당된 카테고리에 액세스할 수 없습니다. 마찬가지로, 범주에 대한 사용자 액세스를 취소하는 경우 사용자가 다시 로그인한 후에만 적용됩니다.
사전 요구 사항
-
SELinux 모드는
enforcing으로 설정됩니다. -
SELinux 정책은
대상또는mls로 설정됩니다. -
policycoreutils-python-utils패키지가 설치됩니다. Linux 사용자는 SELinux 제한 사용자에게 할당됩니다.
-
권한이 없는 사용자는
user_u에 할당됩니다. -
권한이 있는 사용자는
staff_u에 할당됩니다.
-
권한이 없는 사용자는
절차
SELinux 사용자의 보안 범위를 정의합니다.
semanage user -m -rs0:c0,c1-s0:c0.c9 <user_u>
# semanage user -m -rs0:c0,c1-s0:c0.c9 <user_u>Copy to Clipboard Copied! Toggle word wrap Toggle overflow setrans.conf파일에 정의된 카테고리 번호c0에서c1023또는 카테고리 레이블을 사용합니다. 자세한 내용은 MCS의 카테고리 라벨 정의를 참조하십시오.Linux 사용자에게 MCS 범주를 할당합니다. 관련 SELinux 사용자에게 정의된 범위 내에서만 범위를 지정할 수 있습니다.
semanage login -m -rs0:c1 <Linux.user1>
# semanage login -m -rs0:c1 <Linux.user1>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고chcat명령을 사용하여 Linux 사용자의 카테고리를 추가하거나 제거할 수 있습니다. 다음 예제에서는 <category1>를 추가하고 <Linux.user1> 및 <Linux.user2>에서 <category2>를 제거합니다.chcat -l -- +<category1>,-<category2> <Linux.user1>,<Linux.user2>
# chcat -l -- +<category1>,-<category2> <Linux.user1>,<Linux.user2>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - <category> 구문을 사용하기 전에 명령줄에서--를 지정해야 합니다. 그렇지 않으면chcat명령이 카테고리 제거를 명령 옵션으로 잘못 해석합니다.
검증
Linux 사용자에게 할당된 카테고리를 나열합니다.
chcat -L -l <Linux.user1>,<Linux.user2> <Linux.user1>: <category1>,<category2> <Linux.user2>: <category1>,<category2>
# chcat -L -l <Linux.user1>,<Linux.user2> <Linux.user1>: <category1>,<category2> <Linux.user2>: <category1>,<category2>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5. MCS의 파일에 카테고리 할당 링크 복사링크가 클립보드에 복사되었습니다!
사용자에게 카테고리를 할당하려면 관리자 권한이 필요합니다. 그런 다음 사용자는 파일에 카테고리를 할당할 수 있습니다. 파일의 카테고리를 수정하려면 사용자에게 해당 파일에 대한 액세스 권한이 있어야 합니다. 사용자는 파일이 할당된 범주에만 할당할 수 있습니다.
시스템은 카테고리 액세스 규칙과 기존 파일 액세스 권한을 결합합니다. 예를 들어, 범주가 있는 사용자가 Discretionary Access Control(DAC)을 사용하여 다른 사용자가 파일에 대한 액세스를 차단하는 경우 해당 파일에 액세스할 수 없습니다. 사용 가능한 모든 카테고리에 할당된 사용자는 여전히 전체 파일 시스템에 액세스하지 못할 수 있습니다.
bigfoot
사전 요구 사항
-
SELinux 모드는
enforcing으로 설정됩니다. -
SELinux 정책은
대상또는mls로 설정됩니다. -
policycoreutils-python-utils패키지가 설치됩니다. Linux 사용자에 대한 액세스 및 권한:
- SELinux 사용자에게 할당됩니다.
- 파일을 할당할 카테고리에 할당됩니다. 자세한 내용은 MCS의 사용자에게 카테고리 할당을 참조하십시오.
- 카테고리에 추가할 파일에 대한 액세스 및 권한.
- 확인을 위해: 이 카테고리에 할당되지 않은 Linux 사용자에 대한 액세스 및 권한
프로세스
파일에 카테고리 추가:
chcat -- +<category1>,+<category2> <path/to/file1>
$ chcat -- +<category1>,+<category2> <path/to/file1>Copy to Clipboard Copied! Toggle word wrap Toggle overflow setrans.conf파일에 정의된 카테고리 번호c0에서c1023또는 카테고리 레이블을 사용합니다. 자세한 내용은 MCS의 카테고리 라벨 정의를 참조하십시오.동일한 구문을 사용하여 파일에서 카테고리를 제거할 수 있습니다.
chcat -- -<category1>,-<category2> <path/to/file1>
$ chcat -- -<category1>,-<category2> <path/to/file1>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고범주를 제거하는 경우
-<category>구문을 사용하기 전에 명령줄에서--을 지정해야 합니다. 그렇지 않으면chcat명령이 카테고리 제거를 명령 옵션으로 잘못 해석합니다.
검증
파일의 보안 컨텍스트를 표시하여 올바른 카테고리가 있는지 확인합니다.
ls -lZ <path/to/file> -rw-r--r-- <LinuxUser1> <Group1> root:object_r:user_home_t:_<sensitivity>_:_<category>_ <path/to/file>
$ ls -lZ <path/to/file> -rw-r--r-- <LinuxUser1> <Group1> root:object_r:user_home_t:_<sensitivity>_:_<category>_ <path/to/file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 파일의 특정 보안 컨텍스트는 다를 수 있습니다.
선택 사항: Linux 사용자로 로그인할 때 파일과 동일한 카테고리에 할당되지 않은 경우 파일에 액세스하려면 다음을 수행합니다.
cat <path/to/file> cat: <path/to/file>: Permission Denied
$ cat <path/to/file> cat: <path/to/file>: Permission DeniedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8장. 사용자 지정 SELinux 정책 작성 링크 복사링크가 클립보드에 복사되었습니다!
SELinux에 의해 제한된 애플리케이션을 실행하려면 사용자 지정 정책을 작성하고 사용해야 합니다.
8.2. 사용자 지정 애플리케이션에 대한 SELinux 정책 생성 및 적용 링크 복사링크가 클립보드에 복사되었습니다!
SELinux로 애플리케이션을 제한하여 호스트 시스템 및 사용자 데이터의 보안을 강화할 수 있습니다. 각 애플리케이션에는 특정 요구 사항이 있으므로 사용 사례에 따라 간단한 데몬을 제한하는 SELinux 정책을 생성하기 위한 이 예제 절차를 수정합니다.
사전 요구 사항
-
selinux-policy-devel패키지 및 해당 종속 항목은 시스템에 설치됩니다.
프로세스
이 예제 프로시저의 경우 쓰기를 위해
/var/log/messages파일을 여는 간단한 데몬을 준비합니다.새 파일을 생성하고 선택한 텍스트 편집기에서 엽니다.
vi mydaemon.c
$ vi mydaemon.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 코드를 삽입합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 파일을 컴파일합니다.
gcc -o mydaemon mydaemon.c
$ gcc -o mydaemon mydaemon.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow 데몬의
systemd장치 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 데몬을 설치하고 시작합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새 데몬이 SELinux에 의해 제한되지 않았는지 확인합니다.
ps -efZ | grep mydaemon system_u:system_r:unconfined_service_t:s0 root 4117 1 0 16:56 ? 00:00:00 /usr/local/bin/mydaemon
$ ps -efZ | grep mydaemon system_u:system_r:unconfined_service_t:s0 root 4117 1 0 16:56 ? 00:00:00 /usr/local/bin/mydaemonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
데몬에 대한 사용자 정의 정책을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 명령으로 생성한 설정 스크립트를 사용하여 새 정책 모듈로 시스템 정책을 다시 빌드합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 설정 스크립트는
restorecon명령을 사용하여 파일 시스템의 해당 부분을 레이블을 다시 지정합니다.restorecon -v /usr/local/bin/mydaemon /usr/lib/systemd/system
restorecon -v /usr/local/bin/mydaemon /usr/lib/systemd/systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 데몬을 다시 시작하고 이제 SELinux에 의해 제한되는지 확인합니다.
systemctl restart mydaemon ps -efZ | grep mydaemon system_u:system_r:mydaemon_t:s0 root 8150 1 0 17:18 ? 00:00:00 /usr/local/bin/mydaemon
# systemctl restart mydaemon $ ps -efZ | grep mydaemon system_u:system_r:mydaemon_t:s0 root 8150 1 0 17:18 ? 00:00:00 /usr/local/bin/mydaemonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 데몬은 이제 SELinux에 의해 제한되므로 SELinux는
/var/log/messages에 액세스하지 못하도록 합니다. 해당 거부 메시지를 표시합니다.ausearch -m AVC -ts recent ... type=AVC msg=audit(1590247112.719:5935): avc: denied { open } for pid=8150 comm="mydaemon" path="/var/log/messages" dev="dm-0" ino=2430831 scontext=system_u:system_r:mydaemon_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=file permissive=1 ...# ausearch -m AVC -ts recent ... type=AVC msg=audit(1590247112.719:5935): avc: denied { open } for pid=8150 comm="mydaemon" path="/var/log/messages" dev="dm-0" ino=2430831 scontext=system_u:system_r:mydaemon_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=file permissive=1 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow sealert도구를 사용하여 추가 정보를 얻을 수 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow audit2allow툴을 사용하여 변경 사항을 제안하십시오.Copy to Clipboard Copied! Toggle word wrap Toggle overflow audit2allow에서 제안한 규칙은 특정 경우 올바르지 않을 수 있으므로 출력의 일부만 사용하여 해당 정책 인터페이스를 찾습니다.macro-expander툴을 사용하여logging_write_generic_logs(mydaemon_t)매크로를 검사하여 매크로에서 제공하는 모든 허용 규칙을 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 경우 로그 파일 및 해당 상위 디렉터리에 대한 읽기 및 쓰기 액세스 권한만 제공하므로 제안된 인터페이스를 사용할 수 있습니다. 유형 적용 파일에 해당 규칙을 추가합니다.
echo "logging_write_generic_logs(mydaemon_t)" >> mydaemon.te
$ echo "logging_write_generic_logs(mydaemon_t)" >> mydaemon.teCopy to Clipboard Copied! Toggle word wrap Toggle overflow 또는 인터페이스를 사용하는 대신 이 규칙을 추가할 수 있습니다.
echo "allow mydaemon_t var_log_t:file { open write getattr };" >> mydaemon.te$ echo "allow mydaemon_t var_log_t:file { open write getattr };" >> mydaemon.teCopy to Clipboard Copied! Toggle word wrap Toggle overflow 정책을 다시 설치합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
다음과 같이 애플리케이션이 SELinux에 의해 제한적으로 실행되는지 확인합니다.
ps -efZ | grep mydaemon system_u:system_r:mydaemon_t:s0 root 8150 1 0 17:18 ? 00:00:00 /usr/local/bin/mydaemon
$ ps -efZ | grep mydaemon system_u:system_r:mydaemon_t:s0 root 8150 1 0 17:18 ? 00:00:00 /usr/local/bin/mydaemonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 지정 애플리케이션에서 SELinux 거부를 유발하지 않는지 확인합니다.
ausearch -m AVC -ts recent <no matches>
# ausearch -m AVC -ts recent <no matches>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9장. 컨테이너에 대한 SELinux 정책 생성 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux는 udica 패키지를 사용하여 컨테이너에 대한 SELinux 정책을 생성하는 툴을 제공합니다. udica 를 사용하면 컨테이너가 스토리지, 장치 및 네트워크와 같은 호스트 시스템 리소스에 액세스하는 방법을 보다 효과적으로 제어하기 위한 맞춤형 보안 정책을 생성할 수 있습니다. 이를 통해 보안 위반에 대해 컨테이너 배포를 강화할 수 있으며 규정 준수의 달성 및 유지 관리를 단순화할 수 있습니다.
9.1. udica SELinux 정책 생성기 소개 링크 복사링크가 클립보드에 복사되었습니다!
사용자 지정 컨테이너의 새 SELinux 정책 생성을 단순화하기 위해 RHEL 10에서는 udica 유틸리티를 제공합니다. 이 도구를 사용하여 Linux-capabilities, 마운트 지점 및 포트 정의가 포함된 JSON(Container JavaScript Object Notation) 파일을 검사하는 정책을 생성할 수 있습니다. 결과적으로 이 툴은 지정된 SELinux CIL(Common Intermediate Language) 블록에서 상속된 규칙과 함께 검사 결과를 사용하여 생성된 규칙을 결합합니다.
udica 를 사용하여 컨테이너에 대한 SELinux 정책을 생성하는 프로세스에는 다음 세 가지 주요 부분이 있습니다.
- JSON 형식으로 컨테이너 사양 파일 구문 분석
- 첫 번째 파트의 결과에 따라 적절한 허용 규칙 검색
- 최종 SELinux 정책 생성
구문 분석 단계에서 udica 는 Linux 기능, 네트워크 포트 및 마운트 지점을 찾습니다.
결과를 기반으로 udica 는 컨테이너에서 필요한 Linux 기능을 감지하고 이러한 모든 기능을 허용하는 SELinux 규칙을 만듭니다. 컨테이너가 특정 포트에 바인딩되면 udica 는 SELinux 사용자 공간 라이브러리를 사용하여 검사된 컨테이너에서 사용하는 포트의 올바른 SELinux 레이블을 가져옵니다.
나중에 udica 는 호스트의 컨테이너 파일 시스템 네임 스페이스에 마운트되는 디렉터리를 감지합니다.
CIL의 블록 상속 기능을 사용하면 udica 에서 SELinux의 템플릿을 생성할 수 있습니다. 예를 들면 다음과 같습니다.
- 홈 디렉터리에 액세스 허용
- 로그 파일에 액세스 허용
- Xserver와의 통신을 허용합니다.
이러한 템플릿을 블록이라고 하며 최종 SELinux 정책은 블록을 병합하여 생성됩니다.
9.2. 사용자 지정 컨테이너에 대한 SELinux 정책 생성 및 사용 링크 복사링크가 클립보드에 복사되었습니다!
udica 유틸리티를 사용하면 사용자 지정 컨테이너에 대한 SELinux 보안 정책을 생성할 수 있습니다.
사전 요구 사항
-
컨테이너를 관리하기 위한
podman툴이 설치되어 있습니다. 그렇지 않은 경우dnf install podman명령을 사용합니다. - 사용자 지정 Linux 컨테이너 - 이 예에서는 ubi8 입니다.
절차
udica패키지를 설치합니다.dnf install -y udica
# dnf install -y udicaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 또는
udica를 포함한 컨테이너 소프트웨어 패키지 세트를 제공하는container-tools모듈을 설치합니다.dnf module install -y container-tools
# dnf module install -y container-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 읽기 전용 권한과 읽기 및 쓰기 권한이 있는
/var/spool디렉터리로/home디렉터리를 마운트하는 ubi8 컨테이너를 시작합니다. 컨테이너는 포트 21 을 노출합니다.podman run --env container=podman -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash
# podman run --env container=podman -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이제 컨테이너는
container_tSELinux 유형으로 실행됩니다. 이 유형은 SELinux 정책의 모든 컨테이너의 일반 도메인이며 시나리오에 대해 너무 엄격하게 또는 너무 느슨해질 수 있습니다.새 터미널을 열고
podman ps명령을 입력하여 컨테이너 ID를 가져옵니다.podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 37a3635afb8f registry.access.redhat.com/ubi8:latest bash 15 minutes ago Up 15 minutes ago heuristic_lewin
# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 37a3635afb8f registry.access.redhat.com/ubi8:latest bash 15 minutes ago Up 15 minutes ago heuristic_lewinCopy to Clipboard Copied! Toggle word wrap Toggle overflow 컨테이너 JSON 파일을 생성하고
udica를 사용하여 JSON 파일의 정보를 기반으로 정책 모듈을 생성합니다.podman inspect 37a3635afb8f > container.json udica -j container.json my_container Policy my_container with container id 37a3635afb8f created! […]
# podman inspect 37a3635afb8f > container.json # udica -j container.json my_container Policy my_container with container id 37a3635afb8f created! […]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또는 다음을 수행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 단계에서
udica의 출력에서 제안한 대로 policy 모듈을 로드합니다.semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}# semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 컨테이너를 중지하고
--security-opt label=type:my_container.process옵션을 사용하여 다시 시작합니다.podman stop 37a3635afb8f podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash
# podman stop 37a3635afb8f # podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
컨테이너가
my_container.process유형으로 실행되는지 확인합니다.ps -efZ | grep my_container.process unconfined_u:system_r:container_runtime_t:s0-s0:c0.c1023 root 2275 434 1 13:49 pts/1 00:00:00 podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash system_u:system_r:my_container.process:s0:c270,c963 root 2317 2305 0 13:49 pts/0 00:00:00 bash
# ps -efZ | grep my_container.process unconfined_u:system_r:container_runtime_t:s0-s0:c0.c1023 root 2275 434 1 13:49 pts/1 00:00:00 podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it ubi8 bash system_u:system_r:my_container.process:s0:c270,c963 root 2317 2305 0 13:49 pts/0 00:00:00 bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux가 이제
/home및/var/spool마운트 지점에 액세스할 수 있는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux가 포트 21에만 바인딩할 수 있는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10장. 여러 시스템에 동일한 SELinux 구성 배포 링크 복사링크가 클립보드에 복사되었습니다!
다음 방법 중 하나를 사용하여 여러 시스템에 확인된 SELinux 구성을 배포할 수 있습니다.
- RHEL 시스템 역할 및 Ansible 사용
- RHEL 웹 콘솔 사용
-
스크립트에서
semanage내보내기 및 가져오기 명령 사용
10.1. RHEL 시스템 역할을 사용하여 SELinux 구성 링크 복사링크가 클립보드에 복사되었습니다!
selinux RHEL 시스템 역할을 사용하여 SELinux 권한을 원격으로 구성하고 관리할 수 있습니다. 예를 들면 다음과 같습니다.
- SELinux 부울, 파일 컨텍스트, 포트 및 로그인과 관련된 로컬 정책 수정 정리.
- SELinux 정책 부울, 파일 컨텍스트, 포트, 로그인 설정.
- 지정된 파일 또는 디렉터리에서 파일 컨텍스트 복원.
- SELinux 모듈 관리.
10.1.1. selinux RHEL 시스템 역할을 사용하여 디렉터리에서 SELinux 컨텍스트 복원 링크 복사링크가 클립보드에 복사되었습니다!
파일에 잘못된 SELinux 컨텍스트가 있는 경우 여러 경우가 있을 수 있습니다. 예를 들어 파일이 복사되거나 디렉터리로 이동하는 경우 SELinux 컨텍스트가 새 위치의 예상 컨텍스트와 일치하지 않을 수 있습니다. 잘못된 SELinux 컨텍스트를 사용하면 애플리케이션이 파일에 액세스하지 못할 수 있습니다. 많은 호스트의 디렉터리에서 SELinux 컨텍스트를 원격으로 재설정하려면 selinux RHEL 시스템 역할을 사용할 수 있습니다.
사전 요구 사항
- 컨트롤 노드와 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo권한이 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml)을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 플레이북에 지정된 설정은 다음과 같습니다.
selinux_restore_dirs: <list>- SELinux 컨텍스트를 재설정해야 하는 디렉터리 목록을 정의합니다.
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.selinux/README.md파일을 참조하십시오.플레이북 구문을 확인합니다.
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
컨텍스트를 재설정한 파일 또는 디렉터리에 대한 SELinux 컨텍스트를 표시합니다. 예를 들어
/var/www/디렉터리에 컨텍스트를 표시하려면 다음을 입력합니다.ansible rhel10.example.com -m command -a 'ls -ldZ /var/www/' drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Feb 28 13:20 /var/www/
# ansible rhel10.example.com -m command -a 'ls -ldZ /var/www/' drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Feb 28 13:20 /var/www/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.1.2. selinux RHEL 시스템 역할을 사용하여 SELinux 네트워크 포트 레이블 관리 링크 복사링크가 클립보드에 복사되었습니다!
비표준 포트에서 서비스를 실행하려면 이 포트에서 해당 SELinux 유형 레이블을 설정해야 합니다. 이렇게 하면 서비스가 비표준 포트에서 수신 대기하려고 할 때 SELinux가 서비스에 대한 권한을 거부합니다. selinux RHEL 시스템 역할을 사용하면 이 작업을 자동화하고 포트에 type 레이블을 원격으로 할당할 수 있습니다.
사전 요구 사항
- 컨트롤 노드와 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo권한이 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml)을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 플레이북에 지정된 설정은 다음과 같습니다.
포트: < ;port_number>- SELinux 레이블을 할당할 포트 번호를 정의합니다. 여러 값을 쉼표로 구분합니다.
setype: <type_label>- SELinux 유형 레이블을 정의합니다.
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.selinux/README.md파일을 참조하십시오.플레이북 구문을 확인합니다.
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
http_port_t레이블이 할당된 포트 번호를 표시합니다.ansible managed-node-01.example.com -m shell -a 'semanage port --list | grep http_port_t' http_port_t tcp 80, 81, 443, <port_number>, 488, 8008, 8009, 8443, 9000
# ansible managed-node-01.example.com -m shell -a 'semanage port --list | grep http_port_t' http_port_t tcp 80, 81, 443, <port_number>, 488, 8008, 8009, 8443, 9000Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.1.3. selinux RHEL 시스템 역할을 사용하여 SELinux 모듈 배포 링크 복사링크가 클립보드에 복사되었습니다!
기본 SELinux 정책이 요구 사항을 충족하지 않는 경우 사용자 지정 모듈을 생성하여 애플리케이션이 필요한 리소스에 액세스할 수 있도록 할 수 있습니다. selinux RHEL 시스템 역할을 사용하면 이 프로세스를 자동화하고 SELinux 모듈을 원격으로 배포할 수 있습니다.
사전 요구 사항
- 컨트롤 노드와 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo권한이 있습니다. - 배포하려는 SELinux 모듈은 플레이북과 동일한 디렉터리에 저장됩니다.
SELinux 모듈은 CIL(Common Intermediate Language) 또는 정책 패키지(PP) 형식으로 사용할 수 있습니다.
PP 모듈을 사용하는 경우 관리 노드의
policydb버전이 PP 모듈을 빌드하는 데 사용되는 버전과 같거나 그 이상인지 확인하십시오.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml)을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 플레이북에 지정된 설정은 다음과 같습니다.
path: <module_file>- 제어 노드에서 모듈 파일의 경로를 설정합니다.
우선순위: < ;value>-
SELinux 모듈 우선 순위를 설정합니다.
400은 기본값입니다. state: < ;value>모듈의 상태를 정의합니다.
-
enabled: 모듈을 설치하거나 활성화합니다. -
disabled: 모듈을 비활성화합니다. -
absent: 모듈을 제거합니다.
-
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.selinux/README.md파일을 참조하십시오.플레이북 구문을 확인합니다.
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
SELinux 모듈 목록을 원격으로 표시하고 플레이북에서 사용한 모듈 목록을 필터링합니다.
ansible managed-node-01.example.com -m shell -a 'semodule -l | grep <module>'
# ansible managed-node-01.example.com -m shell -a 'semodule -l | grep <module>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모듈이 나열되면 설치되어 활성화되어 있습니다.
10.2. 웹 콘솔에서 SELinux 구성 Ansible 플레이북 생성 링크 복사링크가 클립보드에 복사되었습니다!
웹 콘솔에서 쉘 스크립트 또는 SELinux 구성의 Ansible 플레이북을 생성할 수 있습니다. Ansible 플레이북의 경우 여러 시스템에 구성을 편리하게 적용할 수 있습니다.
사전 요구 사항
RHEL 10 웹 콘솔을 설치했습니다.
자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.
절차
- RHEL 10 웹 콘솔에 로그인합니다.
- SELinux 를 클릭합니다.
클릭합니다.
생성된 스크립트가 있는 창이 열립니다. 쉘 스크립트와 Ansible 플레이북 생성 옵션 탭 사이를 탐색할 수 있습니다.
- 버튼을 클릭하여 스크립트 또는 플레이북을 선택하고 적용합니다.
결과적으로 더 많은 머신에 적용할 수 있는 자동화 스크립트가 있습니다.
10.3. semanage를 사용하여 다른 시스템으로 SELinux 설정 전송 링크 복사링크가 클립보드에 복사되었습니다!
RHEL 10 기반 시스템 간에 사용자 정의 및 검증된 SELinux 설정을 전송하려면 다음 단계를 사용하십시오.
사전 요구 사항
-
policycoreutils-python-utils패키지가 시스템에 설치되어 있습니다.
절차
확인된 SELinux 설정을 내보냅니다.
semanage export -f ./<my-selinux-settings.mod>
# semanage export -f ./<my-selinux-settings.mod>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 설정이 포함된 파일을 새 시스템에 복사합니다.
scp ./<my-selinux-settings.mod> <new-system-hostname>:
# scp ./<my-selinux-settings.mod> <new-system-hostname>:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새 시스템에 로그인합니다.
ssh root@<new-system-hostname>
$ ssh root@<new-system-hostname>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새 시스템에서 설정을 가져옵니다.
<new-system-hostname># semanage import -f ./<my-selinux-settings.mod>
<new-system-hostname># semanage import -f ./<my-selinux-settings.mod>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11장. polyinstantiated 디렉토리 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 모든 프로그램, 서비스 및 사용자는 임시 스토리지에 /tmp,/var/tmp 및 홈 디렉토리를 사용합니다. 이렇게 하면 이러한 디렉터리는 파일 이름을 기반으로 경쟁 조건 공격 및 정보 유출에 취약합니다. /tmp/, , 홈 디렉토리를 인스턴스화하여 모든 사용자와 사용자의 /var/tmp //tmp-inst 와 /var/tmp/tmp-inst 가 /tmp 및 /var /tmp 디렉터리에 별도로 마운트됩니다.
절차
SELinux에서 polyinstantiation을 활성화합니다.
setsebool -P allow_polyinstantiation 1
# setsebool -P allow_polyinstantiation 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow getsebool allow_polyinstantiation명령을 입력하여 SELinux에서 polyinstantiation이 활성화되었는지 확인할 수 있습니다.필요한 권한으로 재부팅을 통해 데이터 지속성을 위한 디렉터리 구조를 만듭니다.
mkdir /tmp-inst /var/tmp/tmp-inst --mode 000
# mkdir /tmp-inst /var/tmp/tmp-inst --mode 000Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux 사용자 부분을 포함하여 전체 보안 컨텍스트를 복원합니다.
restorecon -Fv /tmp-inst /var/tmp/tmp-inst Relabeled /tmp-inst from unconfined_u:object_r:default_t:s0 to system_u:object_r:tmp_t:s0 Relabeled /var/tmp/tmp-inst from unconfined_u:object_r:tmp_t:s0 to system_u:object_r:tmp_t:s0
# restorecon -Fv /tmp-inst /var/tmp/tmp-inst Relabeled /tmp-inst from unconfined_u:object_r:default_t:s0 to system_u:object_r:tmp_t:s0 Relabeled /var/tmp/tmp-inst from unconfined_u:object_r:tmp_t:s0 to system_u:object_r:tmp_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템이
fapolicyd애플리케이션 제어 프레임워크를 사용하는 경우fapolicyd를 허용하여/etc/fapolicyd/fapolicyd.conf구성 파일에서allow_filesystem_mark옵션을 활성화하여 기본 파일 시스템에서 파일 액세스 이벤트를 모니터링할 수 있습니다.allow_filesystem_mark = 1
allow_filesystem_mark = 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow /tmp , /
var, 사용자의 홈 디렉터리를 인스턴스화할 수 있습니다./tmp/중요pam_namespace_helper프로그램이/etc/security/namespace.d.d 의 추가 파일을 읽지 않기 때문에/etc/security/namespace.d/디렉터리에서 별도의 파일 대신/etc/security/namespace.conf를 사용합니다.다중 수준 보안(MLS)이 있는 시스템에서
/etc/security/namespace.conf파일에서 마지막 세 행의 주석을 제거합니다./tmp /tmp-inst/ level root,adm /var/tmp /var/tmp/tmp-inst/ level root,adm $HOME $HOME/$USER.inst/ level
/tmp /tmp-inst/ level root,adm /var/tmp /var/tmp/tmp-inst/ level root,adm $HOME $HOME/$USER.inst/ levelCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다중 수준 보안(MLS)이 없는 시스템에서
/etc/security/namespace.conf파일에 다음 행을 추가합니다./tmp /tmp-inst/ user root,adm /var/tmp /var/tmp/tmp-inst/ user root,adm $HOME $HOME/$USER.inst/ user
/tmp /tmp-inst/ user root,adm /var/tmp /var/tmp/tmp-inst/ user root,adm $HOME $HOME/$USER.inst/ userCopy to Clipboard Copied! Toggle word wrap Toggle overflow
pam_namespace.so모듈이 세션에 대해 구성되었는지 확인합니다.grep namespace /etc/pam.d/login session required pam_namespace.so
$ grep namespace /etc/pam.d/login session required pam_namespace.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 클라우드 사용자가 SSH 키를 사용하여 시스템에 액세스할 수 있습니다.
-
openssh-keycat패키지를 설치합니다. 다음 콘텐츠를 사용하여
/etc/ssh/sshd_config.d/디렉터리에 파일을 생성합니다.AuthorizedKeysCommand /usr/libexec/openssh/ssh-keycat AuthorizedKeysCommandRunAs root
AuthorizedKeysCommand /usr/libexec/openssh/ssh-keycat AuthorizedKeysCommandRunAs rootCopy to Clipboard Copied! Toggle word wrap Toggle overflow sshd_config의PubkeyAuthentication변수가yes로 설정되어 있는지 확인하여 공개 키 인증이 활성화되어 있는지 확인합니다.sshd_config의 행이 주석 처리되어 있어도 기본적으로PubkeyAuthentication은 yes로 설정됩니다.grep -r PubkeyAuthentication /etc/ssh/ /etc/ssh/sshd_config:#PubkeyAuthentication yes
$ grep -r PubkeyAuthentication /etc/ssh/ /etc/ssh/sshd_config:#PubkeyAuthentication yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
세션에항목을 추가합니다. 예를 들어system-auth 행이 포함된후 polyinstantiation이 적용되어야 하는 각 서비스의 모듈에 필요한 pam_namespace.so unmnt_remnt/etc/pam.d/su,/etc/pam.d/sudo,/etc/pam.d/ssh,/etc/pam.d/sshd:[...] session include system-auth session required pam_namespace.so unmnt_remnt [...]
[...] session include system-auth session required pam_namespace.so unmnt_remnt [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
- root가 아닌 사용자로 로그인합니다. polyinstantiation을 구성하기 전에 로그인한 사용자는 변경 사항이 적용되기 전에 로그아웃하고 로그인해야 합니다.
/tmp/디렉터리가/tmp-inst/:에 마운트되었는지 확인합니다.findmnt --mountpoint /tmp/ TARGET SOURCE FSTYPE OPTIONS /tmp /dev/vda1[/tmp-inst/<user>] xfs rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota
$ findmnt --mountpoint /tmp/ TARGET SOURCE FSTYPE OPTIONS /tmp /dev/vda1[/tmp-inst/<user>] xfs rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquotaCopy to Clipboard Copied! Toggle word wrap Toggle overflow SOURCE출력은 환경에 따라 다릅니다. * 가상 시스템에서/dev/vda_<number>_ 를표시합니다. * 베어 메탈 시스템에서/dev/sda_<number>_또는/dev/nvme*를 표시합니다.