SELinux 사용자 및 관리자 가이드
SELinux(Security-Enhanced Linux)의 기본 및 고급 구성
초록
I 부. SELinux 링크 복사링크가 클립보드에 복사되었습니다!
1장. 소개 링크 복사링크가 클립보드에 복사되었습니다!
_t 로 끝납니다. 예를 들어 웹 서버의 유형 이름은 httpd_t 입니다. /var/www/html/ 에 있는 파일 및 디렉토리의 유형 컨텍스트는 httpd_sys_content_t 입니다. /tmp 및 / var /tmp /에 있는 파일 및 디렉토리의 유형 컨텍스트는 tmp_t 입니다. 웹 서버 포트의 유형 컨텍스트는 http_port_t 입니다.
httpd_t로 실행되는 웹 서버 프로세스)가 /var/www/html/ 및 기타 웹 서버 디렉터리(httpd_sys_content_t)에서 일반적으로 발견된 컨텍스트를 사용하여 파일 및 디렉터리에 액세스할 수 있도록 허용하는 정책 규칙이 있습니다. /tmp 및 /var/tmp/ 에서 일반적으로 발견되는 파일에 대한 정책에 허용 규칙이 없으므로 액세스가 허용되지 않습니다. SELinux를 사용하면 Apache가 손상되고 악성 스크립트가 액세스 권한을 얻을 수 있더라도 /tmp 디렉토리에 액세스할 수 없습니다.
그림 1.1. SELinux를 사용하면 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/ 디렉터리에 액세스합니다.
추가 리소스
- apropos selinux 명령으로 나열된
selinux(8)도움말 페이지 및 도움말 페이지. - selinux-policy-doc 패키지가 설치된 경우 man -k _selinux 명령으로 나열된 도움말 페이지. 자세한 내용은 11.3.3절. “서비스 수동 페이지”을 참조하십시오.
1.1. SELinux 실행의 이점 링크 복사링크가 클립보드에 복사되었습니다!
- 모든 프로세스와 파일에 레이블이 지정됩니다. SELinux 정책 규칙은 프로세스가 파일과 상호 작용하는 방법과 프로세스가 서로 상호 작용하는 방식을 정의합니다. 액세스는 특별히 허용하는 SELinux 정책 규칙이 있는 경우에만 허용됩니다.
- 세부적인 액세스 제어. 사용자 재량에 Linux 사용자 및 그룹 ID에 따라 제어되는 기존 UNIX 권한을 벗어나 SELinux 액세스 결정은 SELinux 사용자, 역할, 유형 및 선택적으로 보안 수준과 같은 사용 가능한 모든 정보를 기반으로 합니다.
- SELinux 정책은 관리 방식으로 정의되고 시스템 전체에 적용됩니다.
- 권한 에스컬레이션 공격에 대한 완화 개선. 프로세스는 도메인에서 실행되므로 서로 분리됩니다. SELinux 정책 규칙은 프로세스가 파일 및 기타 프로세스에 액세스하는 방법을 정의합니다. 프로세스가 손상되면 공격자는 해당 프로세스의 일반 기능에만 액세스할 수 있으며 프로세스가 액세스하도록 구성된 파일에만 액세스할 수 있습니다. 예를 들어 Apache HTTP 서버가 손상되면 공격자는 특정 SELinux 정책 규칙을 추가하거나 이러한 액세스를 허용하도록 구성하지 않은 한 해당 프로세스를 사용하여 사용자 홈 디렉토리의 파일을 읽을 수 없습니다.
- SELinux를 사용하여 데이터 기밀성 및 무결성을 적용하고 신뢰할 수 없는 입력에서 프로세스를 보호할 수 있습니다.
- 확대/축소 소프트웨어,
- 암호, 방화벽 및 기타 보안 시스템 대신
- 올인원 보안 솔루션.
1.2. 예 링크 복사링크가 클립보드에 복사되었습니다!
- 기본 작업은 deny입니다. 파일을 여는 프로세스와 같이 액세스를 허용하기 위한 SELinux 정책 규칙이 없으면 액세스가 거부됩니다.
- SELinux는 Linux 사용자를 제한할 수 있습니다. SELinux 정책에는 많은 제한된 SELinux 사용자가 있습니다. 제한된 SELinux 사용자에게 Linux 사용자를 매핑하여 보안 규칙 및 메커니즘을 활용할 수 있습니다. 예를 들어 Linux 사용자를 SELinux
user_u사용자에게 매핑하면 (그렇지 않으면 구성되지 않은 경우) sudo 및 su 와 같은 사용자 ID(setuid) 애플리케이션을 실행할 수 없는 Linux 사용자가 생성됩니다. 자세한 내용은 3.3절. “제한된 사용자 및 제한되지 않은 사용자”을 참조하십시오. - 프로세스 및 데이터 분리 증가. 프로세스는 자체 도메인에서 실행되므로 프로세스가 다른 프로세스에서 사용하는 파일에 액세스하지 못하도록 방지하고 프로세스가 다른 프로세스에 액세스하지 못하도록 합니다. 예를 들어, SELinux를 실행할 때 공격자는 Samba 서버를 손상시킬 수 없으며 MariaDB 데이터베이스와 같은 다른 프로세스에서 사용하는 파일을 읽고 쓸 수 있는 공격 벡터로 해당 Samba 서버를 사용할 수 없습니다.
- SELinux를 사용하면 구성 실수로 인한 손상을 완화할 수 있습니다. DNS(Domain Name System) 서버는 종종 영역 전송이라고 하는 항목에서 서로 간에 정보를 복제합니다. 공격자는 영역 전송을 사용하여 false 정보로 DNS 서버를 업데이트할 수 있습니다. Red Hat Enterprise Linux에서 Berkeley Internet Name Domain(BIND)을 DNS 서버로 실행하는 경우 관리자가 영역 전송을 수행할 수 있는 서버를 제한하지 않아도 기본 SELinux 정책은 영역 파일을 금지합니다. [1] 영역 전송, BIND
이름데몬 자체 및 기타 프로세스를 사용하여 업데이트할 수 있습니다. - NetworkWorld.com 문서, 서버 소프트웨어에 대한 이해력: SELinux로 실제 공격 차단[2], SELinux에 대한 배경 정보와 SELinux가 차단한 다양한 위협에 대한 정보.
1.3. SELinux 아키텍처 링크 복사링크가 클립보드에 복사되었습니다!
1.4. SELinux 상태 및 모드 링크 복사링크가 클립보드에 복사되었습니다!
getenforce
~]# getenforce
Enforcing
setenforce 0 getenforce
~]# setenforce 0
~]# getenforce
Permissive
setenforce 1 getenforce
~]# setenforce 1
~]# getenforce
Enforcing
httpd_t 도메인을 허용하도록 설정하려면 다음을 수행합니다.
semanage permissive -a httpd_t
~]# semanage permissive -a httpd_t
1.5. 추가 리소스 링크 복사링크가 클립보드에 복사되었습니다!
2장. SELinux 컨텍스트 링크 복사링크가 클립보드에 복사되었습니다!
ls -Z file1
~]$ ls -Z file1
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
- SELinux 사용자
- SELinux 사용자 ID는 특정 역할 집합과 특정 MLS/MCS 범위에 대해 인증된 정책에 알려진 ID입니다. 각 Linux 사용자는 SELinux 정책을 사용하여 SELinux 사용자에게 매핑됩니다. 이를 통해 Linux 사용자는 SELinux 사용자에게 지정된 제한 사항을 상속할 수 있습니다. 매핑된 SELinux 사용자 ID는 입력할 수 있는 역할과 수준을 정의하기 위해 해당 세션의 프로세스에 대해 SELinux 컨텍스트에서 사용됩니다. SELinux 및 Linux 사용자 계정 간 매핑 목록을 보려면 root로 다음 명령을 입력합니다( policycoreutils-python 패키지가 설치되어 있어야 함).
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력은 시스템마다 약간 다를 수 있습니다.로그인 이름열에는 Linux 사용자가 나열됩니다.SELinux User열에는 Linux 사용자가 매핑되는 SELinux 사용자가 나열됩니다. 프로세스의 경우 SELinux 사용자는 액세스할 수 있는 역할과 수준을 제한합니다.MLS/MCS Range열은 MLS(Multi-Level Security) 및 MCS(Multi-Category Security)에서 사용하는 수준입니다.서비스열에는 Linux 사용자를 시스템에 로그인해야 하는 올바른 SELinux 컨텍스트가 결정됩니다. 기본적으로 별표(*) 문자는 모든 서비스를 나타냅니다.
- 역할
- SELinux의 일부는 역할 기반 액세스 제어(RBAC) 보안 모델입니다. 역할은 RBAC의 속성입니다. SELinux 사용자에게는 역할에 대한 권한이 부여되며, 도메인에 대한 역할이 인증됩니다. 역할은 도메인과 SELinux 사용자 간의 중간 역할을 합니다. 입력할 수 있는 역할은 입력할 수 있는 도메인을 결정합니다. 궁극적으로 액세스할 수 있는 오브젝트 유형을 제어합니다. 이를 통해 권한 상승 공격의 취약점을 줄일 수 있습니다.
- type
- 유형은 Type Enforcement의 속성입니다. 유형은 프로세스의 도메인 및 파일의 유형을 정의합니다. SELinux 정책 규칙은 유형에 액세스하는 도메인이든 다른 도메인에 액세스하는 도메인이든 관계없이 유형이 서로 액세스할 수 있는 방법을 정의합니다. 액세스는 허용하는 특정 SELinux 정책 규칙이 있는 경우에만 허용됩니다.
- level
- 수준은 MLS 및 MCS의 속성입니다. MLS 범위는 수준이 다른 경우 하위 수준으로 작성되거나 수준이 동일한 경우 하위 수준 (
s0-s0이s0과 동일)으로 작성된 수준의 쌍입니다. 각 수준은 민감도 범주가 선택 사항인 민감도 범주 쌍입니다. 범주가 있는 경우 수준은 민감도:category-set 로 작성됩니다. 범주가 없으면 민감도 로 작성됩니다.범주 세트가 연속된 시리즈인 경우 약어로 표시할 수 있습니다. 예를 들어c0.c3은c0,c1,c2,c3과 동일합니다./etc/selinux/targeted/setrans.conf파일은 수준(s0:c0)을 사람이 읽을 수 있는 양식(즉CompanyConfidential)으로 매핑합니다. Red Hat Enterprise Linux의 대상 정책은 MCS를 적용하고 MCS에서는 하나의 민감도s0에서만 적용됩니다. Red Hat Enterprise Linux의 MCS는 1024개의 카테고리를 지원합니다.c0~c1023.s0-s0:c0.c1023은 민감도s0이며 모든 카테고리에 대해 권한이 부여됩니다.MLS는 LSPP(Labeled Security Protection Profile) 환경에서 사용됩니다. MLS 제한을 사용하려면 selinux-policy-mls 패키지를 설치하고 MLS를 기본 SELinux 정책으로 구성합니다. Red Hat Enterprise Linux와 함께 제공되는 MLS 정책은 평가된 구성에 포함되지 않은 많은 프로그램 도메인을 생략하므로 데스크탑 워크스테이션에서 MLS를 사용할 수 없습니다(X Window System에 대한 지원 없음). 그러나 모든 프로그램 도메인을 포함하는 업스트림 SELinux 참조 정책의 MLS 정책을 구축할 수 있습니다. MLS 구성에 대한 자세한 내용은 4.13절. “다단계 보안(MLS)” 을 참조하십시오.
2.1. 도메인 전환 링크 복사링크가 클립보드에 복사되었습니다!
진입점 유형이 있는 애플리케이션을 실행하여 다른 도메인으로 전환됩니다. 진입점 권한은 SELinux 정책에서 사용되며 도메인을 입력하는 데 사용할 수 있는 애플리케이션을 제어합니다. 다음 예제에서는 도메인 전환을 보여줍니다.
절차 2.1. 도메인 전환의 예
- 사용자가 암호를 변경하려고 합니다. 이를 위해
passwd유틸리티를 실행합니다./usr/bin/passwd실행 파일은passwd_exec_t유형으로 레이블이 지정됩니다.ls -Z /usr/bin/passwd
~]$ ls -Z /usr/bin/passwd -rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwdCopy to Clipboard Copied! Toggle word wrap Toggle overflow passwd유틸리티는shadow_t유형으로 레이블이 지정된/etc/shadow에 액세스합니다.ls -Z /etc/shadow
~]$ ls -Z /etc/shadow -r--------. root root system_u:object_r:shadow_t:s0 /etc/shadowCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux 정책 규칙은
passwd_t도메인에서 실행되는 프로세스가shadow_t유형으로 레이블이 지정된 파일을 읽고 쓸 수 있음을 나타냅니다.shadow_t유형은 암호 변경에 필요한 파일에만 적용됩니다. 여기에는/etc/gshadow,/etc/shadow및 해당 백업 파일이 포함됩니다. - SELinux 정책 규칙은
passwd_t도메인에passwd_exec_t유형으로 설정된entrypoint권한이 있음을 나타냅니다. - 사용자가
passwd유틸리티를 실행하면 사용자의 쉘 프로세스가passwd_t도메인으로 전환됩니다. SELinux에서는 기본 작업이 거부되며passwd_t도메인에서 실행 중인 애플리케이션이shadow_t유형으로 레이블이 지정된 파일에 액세스할 수 있도록 허용하는 규칙이 존재하므로passwd애플리케이션은/etc/shadow에 액세스하고 사용자 암호를 업데이트할 수 있습니다.
passwd_t 도메인에서 실행 중인 주체가 shadow_t 파일 유형으로 레이블이 지정된 개체에 액세스할 수 있도록 하는 실제 규칙이 있지만 제목을 새 도메인으로 전환하려면 다른 SELinux 정책 규칙을 충족해야 합니다. 이 예제에서는 적용 유형으로 다음을 보장합니다.
passwd_t도메인은passwd_exec_t유형으로 레이블이 지정된 애플리케이션을 실행하여만 입력할 수 있습니다.lib_t유형과 같은 인증된 공유 라이브러리에서만 실행할 수 있으며 다른 애플리케이션을 실행할 수 없습니다.passwd_t와 같은 인증된 도메인만shadow_t유형으로 레이블이 지정된 파일에 쓸 수 있습니다. 다른 프로세스가 슈퍼유저 권한으로 실행 중인 경우에도 해당 프로세스는passwd_t도메인에서 실행되지 않으므로shadow_t유형으로 레이블이 지정된 파일에 쓸 수 없습니다.- 인증된 도메인만
passwd_t도메인으로 전환할 수 있습니다. 예를 들어도메인에서 실행 중인 sendmail 프로세스에 passwd를 실행할 정당한 이유가 없으므로sendmail_tpasswd _t도메인으로 전환할 수 없습니다. passwd_t도메인에서 실행되는 프로세스는etc_t또는shadow_t유형으로 레이블이 지정된 파일과 같이 권한 있는 유형만 읽고 쓸 수 있습니다. 이렇게 하면passwd애플리케이션이 임의의 파일을 읽거나 작성하지 못하도록 합니다.
2.2. 프로세스의 SELinux 컨텍스트 링크 복사링크가 클립보드에 복사되었습니다!
절차 2.2. passwd 유틸리티의 SELinux 컨텍스트 보기
- → → 과 같은 터미널을 엽니다.
passwd유틸리티를 실행합니다. 새 암호를 입력하지 마십시오.passwd
~]$ passwd Changing password for user user_name. Changing password for user_name. (current) UNIX password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 새 탭 또는 다른 터미널을 열고 다음 명령을 입력합니다. 출력은 다음과 유사합니다.
ps -eZ | grep passwd
~]$ ps -eZ | grep passwd unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1 00:00:00 passwdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 첫 번째 탭/terminal에서
Ctrl+C를 눌러passwd유틸리티를 취소합니다.
passwd 유틸리티( passwd_exec_t 유형으로 레이블이 지정됨)가 실행되면 사용자의 쉘 프로세스가 passwd_t 도메인으로 전환됩니다. 유형은 프로세스의 도메인 및 파일의 유형을 정의합니다.
ps 유틸리티를 다시 실행합니다. 아래에 출력이 잘린 예가 있으며 시스템에 따라 다를 수 있습니다.
system_r 역할은 데몬과 같은 시스템 프로세스에 사용됩니다. Enforcement(강제)를 입력하고 각 도메인을 분리합니다.
2.3. 사용자의 SELinux 컨텍스트 링크 복사링크가 클립보드에 복사되었습니다!
id -Z
~]$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
unconfined_r 역할로 실행되는 SELinux unconfined_u 사용자에게 매핑되고 있으며 unconfined_t 도메인에서 실행 중입니다. s0-s0 은 MLS 범위이며, 이 경우 s0 과 동일합니다. 사용자가 액세스할 수 있는 범주는 c0.c1023 에 의해 정의되며, 이는 모든 카테고리(c0 에서 c1023까지)로 정의됩니다.
3장. 대상 지정 정책 링크 복사링크가 클립보드에 복사되었습니다!
unconfined_t 도메인에서 실행되고, init run에 의해 시작된 시스템 프로세스는 unconfined_service_t 도메인에서 실행됩니다. 두 도메인 모두 제한되지 않습니다.
3.1. 제한된 프로세스 링크 복사링크가 클립보드에 복사되었습니다!
sshd 또는 httpd 와 같은 네트워크에서 수신 대기하는 거의 모든 서비스는 Red Hat Enterprise Linux에서 제한됩니다. 또한 root 사용자로 실행하고 passwd 유틸리티와 같은 사용자에 대한 작업을 수행하는 대부분의 프로세스는 제한됩니다. 프로세스가 제한되면 httpd_t 도메인에서 실행되는 httpd 프로세스와 같이 자체 도메인에서 실행됩니다. SELinux 정책 구성에 따라 공격자가 제한된 프로세스가 손상되면 공격자가 리소스에 대한 액세스와 가능한 손상을 제한합니다.
절차 3.1. SELinux 상태를 확인하는 방법
- SELinux가 활성화되어 있고 강제 모드로 실행 중이며 타겟 정책이 사용 중인지 확인합니다. 올바른 출력은 아래 출력과 유사해야 합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux 모드 변경에 대한 자세한 내용은 4.4절. “SELinux 상태 및 모드의 영구 변경” 을 참조하십시오. - root 로서
/var/www/html/디렉터리에 파일을 생성합니다.touch /var/www/html/testfile
~]# touch /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 새로 생성된 파일의 SELinux 컨텍스트를 보려면 다음 명령을 입력합니다.
ls -Z /var/www/html/testfile
~]$ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 기본적으로 Linux 사용자는 Red Hat Enterprise Linux에서 제한되지 않습니다. 따라서testfile파일은 SELinuxunconfined_u사용자로 레이블이 지정됩니다. RBAC는 파일이 아닌 프로세스에 사용됩니다. 역할에는 파일에 대한 의미가 없습니다.object_r역할은 파일(영구 스토리지 및 네트워크 파일 시스템에서)에 사용되는 일반 역할입니다./proc디렉터리에서 프로세스와 관련된 파일은system_r역할을 사용할 수 있습니다.httpd_sys_content_t유형을 사용하면httpd프로세스가 이 파일에 액세스할 수 있습니다.
httpd)가 Samba에서 사용하기 위한 파일과 같이 올바르게 레이블이 지정되지 않은 파일을 읽지 못하도록 하는 방법을 보여줍니다. 이는 예제이며 프로덕션에서 사용해서는 안 됩니다. httpd 및 wget 패키지가 설치되어 있고, SELinux 대상 지정 정책이 사용되며 SELinux가 강제 모드로 실행 중이라고 가정합니다.
절차 3.2. 제한된 프로세스의 예
- root 로
httpd데몬을 시작합니다.systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스가 실행 중인지 확인합니다. 출력에는 아래 정보가 포함되어야 합니다(시간 스탬프만 다릅니다).systemctl status httpd.service
~]$ systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Mon 2013-08-05 14:00:55 CEST; 8s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux 사용자가 에 대한 쓰기 액세스 권한이 있는 디렉터리로 변경하고 다음 명령을 입력합니다. 기본 구성을 변경하지 않는 한 이 명령은 성공합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - chcon 명령은 파일의 레이블을 다시 지정하지만 파일 시스템의 레이블을 다시 지정할 때 이러한 레이블 변경 사항은 유지되지 않습니다. 파일 시스템 재레이블 후에도 유지되는 영구 변경 사항은 나중에 설명하는
semanage유틸리티를 사용합니다. root로 다음 명령을 입력하여 유형을 Samba에서 사용하는 유형으로 변경합니다.chcon -t samba_share_t /var/www/html/testfile
~]# chcon -t samba_share_t /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항을 보려면 다음 명령을 입력합니다.ls -Z /var/www/html/testfile
~]$ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 현재 DAC 권한을 사용하면
httpd프로세스에서testfile에 액세스할 수 있습니다. 사용자가 쓰기 액세스 권한이 있는 디렉터리로 변경하고 다음 명령을 입력합니다. 기본 구성을 변경하지 않는 한 이 명령은 실패합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
testfile제거 :rm -i /var/www/html/testfile
~]# rm -i /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpd를 실행할 필요가 없는 경우 root로 다음 명령을 입력하여 중지합니다.systemctl stop httpd.service
~]# systemctl stop httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
testfile 에 대한 액세스를 처리할 수 있지만 파일이 httpd 프로세스에 액세스할 수 없는 유형으로 레이블이 지정되었기 때문에 SELinux는 액세스를 거부했습니다.
auditd 데몬이 실행 중인 경우 다음과 유사한 오류가 /var/log/audit/audit.log:에 기록됩니다.
type=AVC msg=audit(1220706212.937:70): avc: denied { getattr } for pid=1904 comm="httpd" path="/var/www/html/testfile" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit=-13 a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1220706212.937:70): avc: denied { getattr } for pid=1904 comm="httpd" path="/var/www/html/testfile" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit=-13 a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
/var/log/httpd/error_log 에 기록됩니다.
[Wed May 06 23:00:54 2009] [error] [client 127.0.0.1] (13)Permission denied: access to /testfile denied
[Wed May 06 23:00:54 2009] [error] [client 127.0.0.1] (13)Permission denied: access to /testfile denied
3.2. 제한되지 않은 프로세스 링크 복사링크가 클립보드에 복사되었습니다!
init 에 의해 실행되는 제한되지 않은 서비스) unconfined_service_t 도메인, 커널에서 실행한 unconfined 서비스는 결국 kernel_t 도메인에서 실행되며, unconfined Linux 사용자가 실행한 unconfined_t 도메인은 결국 unconfined_t 도메인에서 실행됩니다. 제한되지 않은 프로세스의 경우 SELinux 정책 규칙이 적용되지만 제한되지 않은 도메인에서 실행되는 프로세스가 거의 모든 액세스를 허용하는 정책 규칙이 있습니다. 제한되지 않은 도메인에서 실행되는 프로세스는 DAC 규칙을 독점적으로 사용하는 것으로 대체됩니다. 제한되지 않은 프로세스가 손상되면 SELinux를 통해 공격자가 시스템 리소스 및 데이터에 대한 액세스 권한을 얻지 못하지만 물론 DAC 규칙이 계속 사용됩니다. SELinux는 DAC 규칙의 보안 개선 사항이므로 대체되지 않습니다.
httpd)가 Samba에서 사용하기 위한 데이터에 액세스하는 방법을 보여줍니다. Red Hat Enterprise Linux에서 httpd 프로세스는 기본적으로 제한된 httpd_t 도메인에서 실행됩니다. 이는 예제이며 프로덕션에서 사용해서는 안 됩니다. httpd,wget,dbus 및 audit 패키지가 설치되어 있고, SELinux 대상 지정 정책이 사용되며 SELinux가 강제 모드로 실행 중이라고 가정합니다.
절차 3.3. 제한되지 않은 프로세스의 예
- chcon 명령은 파일의 레이블을 다시 지정하지만 파일 시스템의 레이블을 다시 지정할 때 이러한 레이블 변경 사항은 유지되지 않습니다. 파일 시스템 재레이블 후에도 유지되는 영구 변경 사항은 나중에 설명하는
semanage유틸리티를 사용합니다. root 사용자로 다음 명령을 입력하여 유형을 Samba에서 사용하는 유형으로 변경합니다.chcon -t samba_share_t /var/www/html/testfile
~]# chcon -t samba_share_t /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항을 확인합니다.ls -Z /var/www/html/testfile
~]$ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여
httpd프로세스가 실행 중이 아닌지 확인합니다.systemctl status httpd.service
~]$ systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력이 다른 경우 root로 다음 명령을 입력하여httpd프로세스를 중지합니다.systemctl stop httpd.service
~]# systemctl stop httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpd프로세스가 unconfined를 실행하도록 하려면 root로 다음 명령을 입력하여/usr/sbin/httpd파일의 유형을 제한된 도메인으로 전환하지 않는 유형으로 변경합니다.chcon -t bin_t /usr/sbin/httpd
~]# chcon -t bin_t /usr/sbin/httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow /usr/sbin/httpd가bin_t유형으로 레이블이 지정되어 있는지 확인합니다.ls -Z /usr/sbin/httpd
~]$ ls -Z /usr/sbin/httpd -rwxr-xr-x. root root system_u:object_r:bin_t:s0 /usr/sbin/httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로
httpd프로세스를 시작하고 성공적으로 시작되었는지 확인합니다.systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl status httpd.service
~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Thu 2013-08-15 11:17:01 CEST; 5s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여
unconfined_service_t도메인에서 실행 중인httpd를 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux 사용자가 에 대한 쓰기 액세스 권한이 있는 디렉터리로 변경하고 다음 명령을 입력합니다. 기본 구성을 변경하지 않는 한 이 명령은 성공합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpd프로세스는samba_share_t유형으로 레이블이 지정된 파일에 액세스할 수 없지만httpd는 제한되지 않은unconfined_service_t도메인에서 실행 중이며 DAC 규칙을 사용하므로 wget 명령이 성공합니다. 제한된도메인에서 httpd가 실행 중이었으므로 wget 명령이 실패했습니다.httpd_t restorecon유틸리티는 파일의 기본 SELinux 컨텍스트를 복원합니다. root 로서 다음 명령을 입력하여/usr/sbin/httpd:의 기본 SELinux 컨텍스트를 복원합니다.restorecon -v /usr/sbin/httpd
~]# restorecon -v /usr/sbin/httpd restorecon reset /usr/sbin/httpd context system_u:object_r:unconfined_exec_t:s0->system_u:object_r:httpd_exec_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow /usr/sbin/httpd가httpd_exec_t유형으로 레이블이 지정되어 있는지 확인합니다.ls -Z /usr/sbin/httpd
~]$ ls -Z /usr/sbin/httpd -rwxr-xr-x root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로 다음 명령을 입력하여
httpd를 다시 시작합니다. 다시 시작한 후httpd가 제한된httpd_t도메인에서 실행 중인지 확인합니다.systemctl restart httpd.service
~]# systemctl restart httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
testfile제거 :rm -i /var/www/html/testfile
~]# rm -i /var/www/html/testfile rm: remove regular empty file `/var/www/html/testfile'? yCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpd를 실행할 필요가 없는 경우 root로 다음 명령을 입력하여httpd를 중지합니다.systemctl stop httpd.service
~]# systemctl stop httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. 제한된 사용자 및 제한되지 않은 사용자 링크 복사링크가 클립보드에 복사되었습니다!
__default__ 로그인에 매핑되며 SELinux unconfined_u 사용자에게 매핑됩니다. 다음 행은 기본 매핑을 정의합니다.
__default__ unconfined_u s0-s0:c0.c1023
__default__ unconfined_u s0-s0:c0.c1023
unconfined_u 사용자에게 매핑하는 방법을 보여줍니다. root 사용자가 Red Hat Enterprise Linux에서 기본적으로 수행되므로 제한되지 않은 것으로 가정합니다.
절차 3.4. 새 Linux 사용자를 SELinux unconfined_u 사용자에게 매핑
- root 로서 다음 명령을 입력하여
newuser:이라는 새 Linux 사용자를 생성합니다.useradd newuser
~]# useradd newuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux
newuser사용자에게 암호를 할당하려면 다음을 수행합니다. root로 다음 명령을 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 현재 세션에서 로그아웃한 후 Linux
newuser사용자로 로그인합니다. 로그인할 때 pam_selinux PAM 모듈은 Linux 사용자를 SELinux 사용자(이 경우unconfined_u)에 자동으로 매핑하고 결과 SELinux 컨텍스트를 설정합니다. 그런 다음 Linux 사용자의 쉘이 이 컨텍스트를 사용하여 시작됩니다. 다음 명령을 입력하여 Linux 사용자의 컨텍스트를 확인합니다.id -Z
[newuser@localhost ~]$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고시스템에서newuser사용자가 더 이상 필요하지 않은 경우 Linuxnewuser's 세션에서 로그아웃하고 계정으로 로그인하여 root로 userdel -r newuser 명령을 실행합니다.newuser는 홈 디렉토리와 함께 제거됩니다.
unconfined_t 도메인에서 자체 제한된 도메인으로 전환할 수 있는 애플리케이션으로 정의되는 애플리케이션을 실행하는 경우 제한되지 않은 Linux 사용자에게는 여전히 해당 제한된 도메인의 제한 사항이 적용됩니다. 이 경우의 보안 이점은 Linux 사용자가 제한되지 않고 있는 경우에도 애플리케이션이 제한되어 있다는 것입니다. 따라서 애플리케이션에서 결함을 악용하는 것은 정책에 의해 제한될 수 있습니다.
| 사용자 | Role | 도메인 | X 윈도우 시스템 | su 또는 sudo | 홈 디렉토리 및 /tmp에서 실행 (기본값) | 네트워킹 |
|---|---|---|---|---|---|---|
| sysadm_u | sysadm_r | sysadm_t | 제공됨 | Su 및 sudo | 제공됨 | 제공됨 |
| staff_u | staff_r | staff_t | 제공됨 | sudo만 | 제공됨 | 제공됨 |
| user_u | user_r | user_t | 제공됨 | 제공되지 않음 | 제공됨 | 제공됨 |
| guest_u | guest_r | guest_t | 제공되지 않음 | 제공되지 않음 | 제공됨 | 제공되지 않음 |
| xguest_u | xguest_r | xguest_t | 제공됨 | 제공되지 않음 | 제공됨 | Firefox만 |
- SELinux 정책에서 허용하는 경우
user_t,guest_t,xguest_t도메인의 Linux 사용자는 설정된 사용자 ID(setuid) 애플리케이션만 실행할 수 있습니다(예:passwd). 이러한 사용자는 su 및 sudo setuid 애플리케이션을 실행할 수 없으므로 이러한 애플리케이션을 사용하여 root가 될 수 없습니다. - EgressIP_t ,
staff,_tuser_t,xguest_t도메인의 Linux 사용자는 X Window System 및 터미널을 사용하여 로그인할 수 있습니다. - 기본적으로
staff_t,user_t, guest_t ,x도메인의 Linux 사용자는 홈 디렉터리 및guest_t/tmp에서 애플리케이션을 실행할 수 있습니다. 사용자의 권한을 상속하는 애플리케이션이 실행되지 않도록 하려면 쓰기 액세스 권한이 있는 디렉터리에서 guest_exec_content 및x부울을guest_exec_contentoff로 설정합니다. 이를 통해 결함이 있는 애플리케이션 또는 악성 애플리케이션이 사용자의 파일을 수정하지 못하도록 방지할 수 있습니다.사용자가 홈 디렉터리 및/tmp에서 애플리케이션을 실행하지 못하도록 허용 및 방지하는 방법에 대한 자세한 내용은 6.6절. “사용자 애플리케이션 실행 부울” 을 참조하십시오. xguest_t도메인에 있는 유일한 네트워크 액세스 Linux 사용자는 Firefox 가 웹 페이지에 연결하는 것입니다.
system_u 는 시스템 프로세스 및 오브젝트의 특수 사용자 ID입니다. Linux 사용자와 연결하면 안 됩니다. 또한 unconfined_u 및 root 는 제한되지 않은 사용자입니다. 이러한 이유로 앞서 언급한 SELinux 사용자 기능 테이블에 포함되지 않습니다.
webadm_r는 Apache HTTP 서버와 관련된 SELinux 유형만 관리할 수 있습니다. 자세한 내용은 13.2절. “유형” 을 참조하십시오.dbadm_r는 MariaDB 데이터베이스 및 PostgreSQL 데이터베이스 관리 시스템과 관련된 SELinux 유형만 관리할 수 있습니다. 자세한 내용은 20.2절. “유형” 및 21.2절. “유형” 을 참조하십시오.logadm_r는syslog및auditlog프로세스와 관련된 SELinux 유형만 관리할 수 있습니다.secadm_r은 SELinux만 관리할 수 있습니다.은 감사 하위 시스템과 관련된 프로세스만 관리할 수 있습니다.auditadm_r
seinfo -r
~]$ seinfo -r
3.3.1. sudo 전환 및 SELinux 역할 링크 복사링크가 클립보드에 복사되었습니다!
staff_u 및 sysadm_u SELinux 제한 사용자만 기본적으로 sudo 를 사용할 수 있습니다. 이러한 사용자가 sudo 로 명령을 실행하는 경우 /etc/sudoers 구성 파일에 지정된 규칙 또는 이러한 파일이 있는 경우 /etc/ sudoers.d/ 디렉터리의 해당 파일에 따라 해당 역할을 변경할 수 있습니다.
절차 3.5. sudo 전환 구성
- 새 SELinux 사용자를 생성하고 이 사용자에 대한 기본 SELinux 역할 및 제한된 관리자 역할을 지정합니다.
semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_u
~]# semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_uCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 기본 SElinux 정책 컨텍스트 파일을 설정합니다. 예를 들어
staff_uSELinux 사용자와 동일한 SELinux 규칙을 사용하려면staff_u컨텍스트 파일을 복사합니다.cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_u
~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_uCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 새로 생성된 SELinux 사용자를 기존 Linux 사용자에게 매핑합니다.
semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_user
semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/sudoers.d/디렉터리에 Linux 사용자와 동일한 이름으로 새 구성 파일을 생성하고 여기에 다음 문자열을 추가합니다.echo "linux_user ALL=(ALL) TYPE=administrator_t ROLE=administrator_r /bin/bash " > /etc/sudoers.d/linux_user
~]# echo "linux_user ALL=(ALL) TYPE=administrator_t ROLE=administrator_r /bin/bash " > /etc/sudoers.d/linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow restorecon유틸리티를 사용하여 linux_user 홈 디렉터리의 레이블을 다시 지정합니다.restorecon -FR -v /home/linux_user
~]# restorecon -FR -v /home/linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 새로 생성된 Linux 사용자로 시스템에 로그인하고 사용자가 기본 SELinux 역할로 레이블이 지정되어 있는지 확인합니다.
id -Z
~]$ id -Z SELinux_user_u:default_role_r:SELinux_user_t:s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow - sudo 를 실행하여 사용자의 SELinux 컨텍스트를
/etc/sudoers.d/linux_user에 지정된 대로 보조 SELinux 역할로 변경합니다. sudo 와 함께 사용되는-i옵션은 대화형 쉘이 실행되도록 합니다.sudo -i id -Z
~]$ sudo -i ~]# id -Z SELinux_user_u:administrator_r:administrator_t:s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow
예 3.1. sudo 전환 구성
staff _r 이 할당된 새 SELinux 사용자 restricted_u 를 생성하고 sudo 를 사용하여 limited _u의 역할을 staff_ r 에서 webadm_r 로 변경하도록 구성됩니다.
sysadm_r또는unconfined_r역할의 root 사용자로 다음 명령을 모두 입력합니다.semanage user -a -r s0-s0:c0.c1023 -R "staff_r webadm_r" confined_u cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/confined_u semanage login -a -s confined_u -rs0:c0.c1023 linux_user restorecon -FR -v /home/linux_user echo "linux_user ALL=(ALL) ROLE=webadm_r TYPE=webadm_t /bin/bash " > /etc/sudoers.d/linux_user
~]# semanage user -a -r s0-s0:c0.c1023 -R "staff_r webadm_r" confined_u ~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/confined_u ~]# semanage login -a -s confined_u -rs0:c0.c1023 linux_user ~]# restorecon -FR -v /home/linux_user ~]# echo "linux_user ALL=(ALL) ROLE=webadm_r TYPE=webadm_t /bin/bash " > /etc/sudoers.d/linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 새로 생성된 Linux 사용자로 시스템에 로그인하고 사용자가 기본 SELinux 역할로 레이블이 지정되어 있는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4장. SELinux 작업 링크 복사링크가 클립보드에 복사되었습니다!
4.1. SELinux 패키지 링크 복사링크가 클립보드에 복사되었습니다!
- policycoreutils 는 SELinux 운영 및 관리를 위해
restorecon,secon,setfiles,semodule,load_policy,setsebool과 같은 유틸리티를 제공합니다. - selinux-policy 는 에 기본 디렉터리 구조,
selinux-policy.conf파일 및 RPM 매크로를 제공합니다. - selinux-policy-targeted 는 SELinux 대상 정책을 제공합니다.
- libselinux - SELinux 애플리케이션을 위한 API를 제공합니다.
- libselinux-utils 는
avcstat,getenforce,getsebool,matchpathcon,selinuxconlist,selinuxdefcon,selinuxenabled,setenforce유틸리티를 제공합니다. - libselinux-python 은 SELinux 애플리케이션을 개발하기 위한 Python 바인딩을 제공합니다.
- selinux-policy-devel 은 사용자 지정 SELinux 정책 및 정책 모듈을 생성하는 유틸리티를 제공합니다.
- selinux-policy-doc 는 SELinux를 다양한 서비스와 함께 구성하는 방법을 설명하는 도움말 페이지를 제공합니다.
- selinux-policy-✓s 는 MLS(Multi-Level Security) SELinux 정책을 제공합니다.
- setroubleshoot-server 는 SELinux에서 액세스를 거부할 때 생성되는 거부 메시지를 이 패키지에 제공된 sealert 유틸리티를 사용하여 볼 수 있는 자세한 설명으로 변환합니다.
- setools-console 은 Tresys Technology SETools 배포, 정책 분석 및 쿼리, 로그 모니터링 및 보고, 파일 컨텍스트 관리를 위한 많은 유틸리티 및 라이브러리를 제공합니다. setools 패키지는 SETools의 메타 패키지입니다. setools-gui 패키지는
apol및seaudit유틸리티를 제공합니다. setools-console 패키지는sechecker,sediff,seinfo,sesearch및findcon명령줄 유틸리티를 제공합니다. setools 및 setools-gui 패키지는 Red Hat Network Optional 채널이 활성화된 경우에만 사용할 수 있습니다. 자세한 내용은 지원 범위 세부 정보를 참조하십시오. - mcstrans 는
s0-s0:c0.c1023과 같은 수준을SystemLow-SystemHigh와 같이 더 읽기 쉬운 형식으로 변환합니다. - policycoreutils-python 은 SELinux 운영 및 관리를 위해 semanage,audit2allow,audit2why, chcat 과 같은 유틸리티를 제공합니다.
- policycoreutils-gui 는 SELinux를 관리하기 위한 그래픽 유틸리티인 system-config-selinux 를 제공합니다.
4.2. 사용된 로그 파일은 무엇입니까? 링크 복사링크가 클립보드에 복사되었습니다!
auditd 데몬이 실행 중인 경우 다음과 같은 SELinux 거부 메시지가 기본적으로 /var/log/audit/audit.log 에 기록됩니다.
type=AVC msg=audit(1223024155.684:49): avc: denied { getattr } for pid=2000 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=399185 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file
type=AVC msg=audit(1223024155.684:49): avc: denied { getattr } for pid=2000 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=399185 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file
/var/log/message 파일에 기록됩니다.
May 7 18:55:56 localhost setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l de7e30d6-5488-466d-a606-92c9f40d316d
May 7 18:55:56 localhost setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l de7e30d6-5488-466d-a606-92c9f40d316d
setroubleshootd 는 더 이상 지속적으로 서비스로 실행되지 않습니다. 그러나 여전히 AVC 메시지를 분석하는 데 사용됩니다. 필요한 경우 두 개의 새 프로그램이 setroubleshoot 을 시작하는 방법으로 작동합니다.
sedispatch유틸리티는감사하위 시스템의 일부로 실행됩니다. AVC 거부 메시지가 반환되면sedispatch는dbus를 사용하여 메시지를 보냅니다. 이러한 메시지는 이미 실행 중인 경우setroubleshootd로 바로 이동합니다. 실행 중이 아니면sedispatch가 자동으로 시작됩니다.seapplet유틸리티는 시스템 도구 모음에서 실행되며setroubleshootd의 dbus 메시지를 기다립니다. 알림 도구가 시작되어 사용자가 AVC 메시지를 검토할 수 있습니다.
절차 4.1. 자동으로 데몬 시작
- 부팅 시 자동으로 시작되도록
auditd및rsyslog데몬을 구성하려면 root 사용자로 다음 명령을 입력합니다.systemctl enable auditd.service
~]# systemctl enable auditd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl enable rsyslog.service
~]# systemctl enable rsyslog.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 데몬이 활성화되었는지 확인하려면 쉘 프롬프트에 다음 명령을 입력합니다.
systemctl is-enabled auditd
~]$ systemctl is-enabled auditd enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl is-enabled rsyslog
~]$ systemctl is-enabled rsyslog enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 또는 systemctl status service-name.service 명령을 사용하고 명령 출력에서활성화된키워드를 검색합니다. 예를 들면 다음과 같습니다.systemctl status auditd.service | grep enabled
~]$ systemctl status auditd.service | grep enabled auditd.service - Security Auditing Service Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
systemd 데몬이 시스템 서비스를 관리하는 방법에 대한 자세한 내용은 시스템 관리자 가이드의 시스템 서비스 관리 장을 참조하십시오.
4.3. 기본 설정 파일 링크 복사링크가 클립보드에 복사되었습니다!
/etc/selinux/config 파일은 기본 SELinux 구성 파일입니다. SELinux가 활성화되었는지 또는 비활성화되었는지 여부와 사용되는 SELinux 모드 및 SELinux 정책을 제어합니다.
SELINUX=SELINUX옵션은 SELinux가 비활성화되었는지 여부와 강제 또는 허용 모드(강제 또는 허용)로 설정합니다.SELINUX=enforcing을 사용하면 SELinux 정책이 적용되고 SELinux는 SELinux 정책 규칙을 기반으로 액세스를 거부합니다. 거부 메시지가 기록됩니다.SELINUX=permissive를 사용하면 SELinux 정책이 적용되지 않습니다. SELinux는 액세스를 거부하지 않지만 강제 모드에서 SELinux를 실행하는 경우 거부된 작업에 대해 거부된 작업에 로깅됩니다.SELINUX=disabled를 사용하면 SELinux가 비활성화되고, SELinux 모듈이 Linux 커널에 등록되지 않으며 DAC 규칙만 사용됩니다.
SELINUXTYPE=SELINUXTYPE옵션은 사용할 SELinux 정책을 설정합니다. 타겟 정책은 기본 정책입니다. MLS 정책을 사용하려면 이 옵션만 변경하십시오. MLS 정책을 활성화하는 방법에 대한 자세한 내용은 4.13.2절. “SELinux에서 MLS 활성화” 을 참조하십시오.
4.4. SELinux 상태 및 모드의 영구 변경 링크 복사링크가 클립보드에 복사되었습니다!
Enforcing,Permissive 또는 Disabled 를 반환합니다.
4.4.1. SELinux 활성화 링크 복사링크가 클립보드에 복사되었습니다!
- 허용 모드에서 SELinux를 활성화합니다. 자세한 내용은 4.4.1.1절. “허용 모드” 의 내용을 참조하십시오.
- 시스템을 재부팅합니다.
- SELinux 거부 메시지가 있는지 확인합니다. 자세한 내용은 11.3.5절. “거부 검색 및 보기” 의 내용을 참조하십시오.
- 거부가 없는 경우 강제 모드로 전환합니다. 자세한 내용은 4.4.1.2절. “강제 모드” 의 내용을 참조하십시오.
unconfined_service_t도메인에서 애플리케이션을 실행합니다. 자세한 내용은 3.2절. “제한되지 않은 프로세스”을 참조하십시오.- 애플리케이션에 대한 새 정책을 작성합니다. 자세한 내용은 사용자 지정 SELinux 정책 지식베이스 작성 문서를 참조하십시오.
4.4.1.1. 허용 모드 링크 복사링크가 클립보드에 복사되었습니다!
절차 4.2. 허용 모드로 변경
/etc/selinux/config파일을 다음과 같이 편집합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 시스템을 재부팅합니다.
reboot
~]# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.1.2. 강제 모드 링크 복사링크가 클립보드에 복사되었습니다!
절차 4.3. 강제 모드로 변경
rpm -q package_name
rpm -q package_name
/etc/selinux/config파일을 다음과 같이 편집합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 시스템을 재부팅합니다.
reboot
~]# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 부팅 시 SELinux는 시스템 내의 모든 파일과 디렉터리의 레이블을 다시 지정하고 SELinux가 비활성화될 때 생성된 파일과 디렉토리에 대해 SELinux 컨텍스트를 추가합니다.
ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
~]# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
grep "SELinux is preventing" /var/log/messages
~]# grep "SELinux is preventing" /var/log/messages
4.4.2. SELinux 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
절차 4.4. SELinux 비활성화
/etc/selinux/config파일에서SELINUX=disabled를 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 시스템을 재부팅합니다. 재부팅 후 getenforce 명령이
Disabled를 반환하는지 확인합니다.getenforce
~]$ getenforce DisabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. 부팅 시 SELinux 모드 변경 링크 복사링크가 클립보드에 복사되었습니다!
- enforcing=0
- 이 매개 변수를 설정하면 시스템이 허용 모드로 시작되므로 문제를 해결할 때 유용합니다. 파일 시스템이 너무 손상된 경우 허용 모드를 사용하는 것이 문제를 감지하는 유일한 옵션일 수 있습니다. 또한 허용 모드에서 시스템은 라벨을 올바르게 만듭니다. 이 모드에서 생성되는 AVC 메시지는 강제 모드에서와 다를 수 있습니다.허용 모드에서는 일련의 동일한 거부 중 첫 번째 거부만 보고됩니다. 그러나 강제 모드에서는 디렉터리 읽기와 관련된 거부가 발생할 수 있으며 애플리케이션이 중지될 수 있습니다. 허용 모드에서는 동일한 AVC 메시지가 표시되지만 애플리케이션은 디렉토리에 있는 파일을 계속 읽고 각 거부에 대해 AVC도 받습니다.
- selinux=0
- 이 매개 변수를 사용하면 커널이 SELinux 인프라의 일부를 로드하지 않습니다. init 스크립트는 시스템이
selinux=0매개변수로 부팅되었으며/.autorelabel파일을 표시합니다. 이로 인해 SELinux를 활성화한 다음 부팅할 때 시스템이 자동으로 레이블을 다시 지정합니다.중요Red Hat은selinux=0매개 변수를 사용하지 않는 것이 좋습니다. 시스템을 디버깅하려면 허용 모드를 사용하는 것이 좋습니다. - autorelabel=1
- 이 매개변수는 시스템에서 다음 명령과 유사하게 레이블을 다시 지정하도록 강제 적용합니다.시스템 레이블링에 많은 양의 오류가 포함된 경우 자동 레이블에 성공하기 위해 허용 모드로 부팅해야 할 수 있습니다.
touch /.autorelabel reboot
~]# touch /.autorelabel ~]# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
checkreqprot 와 같은 추가 SELinux 관련 커널 부팅 매개변수는 /usr/share/doc/kernel-doc- <KERNEL_VER> /Documentation/kernel-parameters.txt 파일을 참조하십시오. 이 문서는 kernel-doc 패키지와 함께 설치됩니다. <KERNEL_VER> 문자열을 설치된 커널의 버전 번호로 바꿉니다. 예를 들면 다음과 같습니다.
yum install kernel-doc less /usr/share/doc/kernel-doc-3.10.0/Documentation/kernel-parameters.txt
~]# yum install kernel-doc
~]$ less /usr/share/doc/kernel-doc-3.10.0/Documentation/kernel-parameters.txt
4.6. 부울 링크 복사링크가 클립보드에 복사되었습니다!
4.6.1. 부울 나열 링크 복사링크가 클립보드에 복사되었습니다!
SELinux 부울 열에는 부울 이름이 나열됩니다. Description 열에는 부울이 on 또는 off인지 여부와 수행할 작업이 나열됩니다.
getsebool -a
~]$ getsebool -a
cvs_read_shadow --> off
daemons_dump_core --> on
getsebool cvs_read_shadow
~]$ getsebool cvs_read_shadow
cvs_read_shadow --> off
getsebool cvs_read_shadow daemons_dump_core
~]$ getsebool cvs_read_shadow daemons_dump_core
cvs_read_shadow --> off
daemons_dump_core --> on
4.6.2. 부울 구성 링크 복사링크가 클립보드에 복사되었습니다!
setsebool boolean_name on/off 양식에서 setsebool 유틸리티를 실행하여 부울을 활성화하거나 비활성화합니다.
httpd_can_network_connect_db 부울을 구성하는 방법을 보여줍니다.
절차 4.5. 부울 구성
- 기본적으로
httpd_can_network_connect_db부울이 꺼져 Apache HTTP Server 스크립트 및 모듈이 데이터베이스 서버에 연결되지 않습니다.getsebool httpd_can_network_connect_db
~]$ getsebool httpd_can_network_connect_db httpd_can_network_connect_db --> offCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Apache HTTP Server 스크립트 및 모듈을 일시적으로 활성화하여 데이터베이스 서버에 연결하려면 root로 다음 명령을 입력합니다.
setsebool httpd_can_network_connect_db on
~]# setsebool httpd_can_network_connect_db onCopy to Clipboard Copied! Toggle word wrap Toggle overflow getsebool유틸리티를 사용하여 부울이 활성화되었는지 확인합니다.getsebool httpd_can_network_connect_db
~]$ getsebool httpd_can_network_connect_db httpd_can_network_connect_db --> onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면 Apache HTTP Server 스크립트 및 모듈이 데이터베이스 서버에 연결할 수 있습니다.- 이 변경 사항은 재부팅 시 유지되지 않습니다. 재부팅 시 영구적으로 변경하려면 명령에 root로 setsebool -P boolean-name 을 실행합니다.[3]
setsebool -P httpd_can_network_connect_db on
~]# setsebool -P httpd_can_network_connect_db onCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.3. 쉘 자동 완성 링크 복사링크가 클립보드에 복사되었습니다!
getsebool,setsebool 및 semanage 유틸리티와 함께 쉘 자동 완성을 사용할 수 있습니다. getsebool 및 setsebool 과 함께 자동 완성을 사용하여 명령줄 매개 변수와 부울을 모두 완료합니다. 명령줄 매개변수만 나열하려면 명령 이름 뒤에 하이픈 문자("-")를 추가하고 Tab 키를 누릅니다.
setsebool -[Tab]
~]# setsebool -[Tab]
-P
getsebool samba_[Tab]
~]$ getsebool samba_[Tab]
samba_create_home_dirs samba_export_all_ro samba_run_unconfined
samba_domain_controller samba_export_all_rw samba_share_fusefs
samba_enable_home_dirs samba_portmapper samba_share_nfs
setsebool -P virt_use_[Tab]
~]# setsebool -P virt_use_[Tab]
virt_use_comm virt_use_nfs virt_use_sanlock
virt_use_execmem virt_use_rawip virt_use_usb
virt_use_fusefs virt_use_samba virt_use_xserver
semanage 유틸리티는 하나씩 완료된 여러 명령줄 인수와 함께 사용됩니다. semanage 명령의 첫 번째 인수는 SELinux 정책의 일부를 지정하는 옵션입니다.
semanage [Tab]
~]# semanage [Tab]
boolean export import login node port
dontaudit fcontext interface module permissive user
semanage port -a -t http_port_t -p tcp 81
~]# semanage port -a -t http_port_t -p tcp 81
4.7. SELinux 컨텍스트 - 파일 레이블 지정 링크 복사링크가 클립보드에 복사되었습니다!
ls -Z file1
~]$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
unconfined_u), 역할(object_r), 유형(user_home_t) 및 수준(s0)을 제공합니다. 이 정보는 액세스 제어 결정을 내리는 데 사용됩니다. DAC 시스템에서는 Linux 사용자 및 그룹 ID를 기반으로 액세스가 제어됩니다. SELinux 정책 규칙은 DAC 규칙 후에 확인됩니다. DAC 규칙이 먼저 액세스를 거부하면 SELinux 정책 규칙이 사용되지 않습니다.
/etc 디렉토리에 etc_t 유형으로 레이블이 지정된 새 파일을 생성할 때 새 파일은 동일한 유형을 상속합니다.
ls -dZ - /etc
~]$ ls -dZ - /etc
drwxr-xr-x. root root system_u:object_r:etc_t:s0 /etc
touch /etc/file1
~]# touch /etc/file1
ls -lZ /etc/file1
~]# ls -lZ /etc/file1
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0 /etc/file1
matchpathcon 과 같은 파일 시스템 레이블링을 관리하기 위한 여러 명령을 제공합니다.
4.7.1. 임시 변경 사항: chcon 링크 복사링크가 클립보드에 복사되었습니다!
참고 자료
- chcon -t 유형 file-name 명령을 실행하여 파일 유형을 변경합니다. 여기서 type 은 SELinux 유형(예:
httpd_sys_content_t)이며 file-name 은 파일 또는 디렉터리 이름입니다.chcon -t httpd_sys_content_t file-name
~]$ chcon -t httpd_sys_content_t file-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - chcon -R -t 유형 directory-name 명령을 실행하여 디렉터리 및 해당 콘텐츠의 유형을 변경합니다. 여기서 type 은 SELinux 유형(예:
httpd_sys_content_t)이고 directory-name 은 디렉터리 이름입니다.chcon -R -t httpd_sys_content_t directory-name
~]$ chcon -R -t httpd_sys_content_t directory-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
절차 4.6. 파일 또는 디렉토리 유형 변경
file1 이 디렉터리인 경우)에 대해 동일하게 작동합니다.
- 홈 디렉터리로 변경합니다.
- 새 파일을 생성하고 SELinux 컨텍스트를 봅니다.
touch file1
~]$ touch file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서file1에 대한 SELinux 컨텍스트에는 SELinuxunconfined_u사용자,object_r역할,user_home_t유형 및s0수준이 포함됩니다. SELinux 컨텍스트의 각 부분에 대한 설명은 2장. SELinux 컨텍스트 의 내용을 참조하십시오. - 다음 명령을 입력하여 유형을
samba_share_t로 변경합니다.t옵션은 유형만 변경합니다. 그런 다음 변경 사항을 확인합니다.chcon -t samba_share_t file1
~]$ chcon -t samba_share_t file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:samba_share_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 사용하여
file1파일의 SELinux 컨텍스트를 복원합니다. v옵션을사용하여 변경 사항을 확인하십시오.restorecon -v file1
~]$ restorecon -v file1 restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서 이전 유형samba_share_t는 올바른user_home_t유형으로 복원됩니다. 대상 정책(Red Hat Enterprise Linux의 기본 SELinux 정책)을 사용하는 경우 restorecon 명령은/etc/selinux/targeted/contexts/files/디렉터리에 있는 파일을 읽고 어떤 SELinux 컨텍스트 파일이 있어야 하는지 확인합니다.
절차 4.7. 디렉토리 및 콘텐츠 유형 변경
/var/www/html/대신)를 사용하도록 하는 경우 사용됩니다.
- root 사용자로 이 디렉터리에 새
web/디렉토리를 만들고 3개의 빈 파일(file1,file2및file3)을 만듭니다. 이 디렉터리의web/디렉터리 및 파일은default_t유형으로 레이블이 지정됩니다.mkdir /web
~]# mkdir /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow touch /web/file{1,2,3}~]# touch /web/file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -dZ /web
~]# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow ls -lZ /web
~]# ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서 다음 명령을 입력하여
웹/디렉터리(및 해당 콘텐츠)의 유형을httpd_sys_content_t로 변경합니다.chcon -R -t httpd_sys_content_t /web/
~]# chcon -R -t httpd_sys_content_t /web/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -dZ /web/
~]# ls -dZ /web/ drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -lZ /web/
~]# ls -lZ /web/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 기본 SELinux 컨텍스트를 복원하려면
restorecon유틸리티를 root로 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7.2. 영구적인 변경 사항: semanage fcontext 링크 복사링크가 클립보드에 복사되었습니다!
semanage fcontext -C -l
~]# semanage fcontext -C -l
setfiles 유틸리티는 파일 시스템의 레이블을 다시 지정하고 restorecon 유틸리티가 기본 SELinux 컨텍스트를 복원할 때 사용됩니다. 즉, 파일 시스템의 레이블을 다시 지정하는 경우에도 semanage fcontext 로 변경한 사항이 지속됩니다. SELinux 정책은 사용자가 지정된 파일에 대한 SELinux 컨텍스트를 수정할 수 있는지 여부를 제어합니다.
참고 자료
- 파일 또는 디렉토리의 전체 경로를 사용하도록 다음 명령을 입력합니다.
semanage fcontext -a options file-name|directory-name
~]# semanage fcontext -a options file-name|directory-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow restorecon유틸리티를 사용하여 컨텍스트 변경 사항을 적용합니다.restorecon -v file-name|directory-name
~]# restorecon -v file-name|directory-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
semanage fcontext와 함께 정규 표현식 사용
PCRE2_DOTALL 이므로 와일드카드가 새 행을 포함하여 모든 항목과 일치합니다 . 경로를 나타내는 문자열은 바이트로 처리됩니다. 즉 ASCII가 아닌 문자는 단일 와일드카드와 일치하지 않습니다.
file_contexts.local 에 저장된 로컬 파일 컨텍스트 수정은 정책 모듈에 지정된 것보다 우선 순위가 높습니다. 즉, file_contexts.local 에서 지정된 파일 경로에 대한 일치가 발견될 때마다 다른 파일 컨텍스트 정의는 고려되지 않습니다.
semanage-fcontext(8) 도움말 페이지를 참조하십시오.
절차 4.8. 파일 또는 디렉토리 유형 변경
file1 이 디렉터리인 경우)에 대해 동일하게 작동합니다.
- root 사용자로
/etc디렉토리에 새 파일을 만듭니다. 기본적으로/etc에서 새로 생성된 파일은etc_t유형으로 레이블이 지정됩니다.touch /etc/file1
~]# touch /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /etc/file1
~]$ ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 디렉터리에 대한 정보를 나열하려면 다음 명령을 사용합니다.ls -dZ directory_name
~]$ ls -dZ directory_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로 다음 명령을 입력하여
file1유형을samba_share_t로 변경합니다.a옵션은 새 레코드를 추가하고-t옵션은 유형(samba_share_t)을 정의합니다. 이 명령을 실행하면 유형이 직접 변경되지 않습니다.file1은 여전히etc_t유형으로 레이블이 지정됩니다.semanage fcontext -a -t samba_share_t /etc/file1
~]# semanage fcontext -a -t samba_share_t /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /etc/file1
~]# ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow semanage fcontext -C -l
~]$ semanage fcontext -C -l /etc/file1 unconfined_u:object_r:samba_share_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
restorecon유틸리티를 사용하여 유형을 변경합니다.semanage는/etc/file1의file_contexts.local에 항목을 추가했기 때문에restorecon은 유형을samba_share_t:로 변경합니다.restorecon -v /etc/file1
~]# restorecon -v /etc/file1 restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
절차 4.9. 디렉토리 및 콘텐츠 유형 변경
/var/www/html/: 대신 다른 문서 루트를 사용하도록 하려는 경우 사용됩니다.
- root 사용자로 이 디렉터리에 새
web/디렉토리를 만들고 3개의 빈 파일(file1,file2및file3)을 만듭니다. 이 디렉터리의web/디렉터리 및 파일은default_t유형으로 레이블이 지정됩니다.mkdir /web
~]# mkdir /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow touch /web/file{1,2,3}~]# touch /web/file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -dZ /web
~]# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow ls -lZ /web
~]# ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서 다음 명령을 입력하여
웹/디렉터리의 유형과 해당 디렉터리의 파일을httpd_sys_content_t로 변경합니다.a옵션은 새 레코드를 추가하고-t옵션은 유형(httpd_sys_content_t)을 정의합니다."/web(/.*)?"정규식으로 인해semanage가웹/에도 변경 사항을 적용하고 해당 파일에 변경 사항을 적용합니다. 이 명령을 실행하면 유형이 직접 변경되지 않습니다. 그 안에 있는web/및 파일은 여전히default_t유형으로 레이블이 지정됩니다.semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
~]# semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -dZ /web
~]$ ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /webCopy to Clipboard Copied! Toggle word wrap Toggle overflow ls -lZ /web
~]$ ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?" 명령은/etc/selinux/targeted/contexts/files/file_contexts.local에 다음 항목을 추가합니다./web(/.*)? system_u:object_r:httpd_sys_content_t:s0
/web(/.*)? system_u:object_r:httpd_sys_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
restorecon유틸리티를 사용하여web/의 유형 및 해당 파일의 모든 파일을 변경합니다.R은 재귀를 위한 것입니다. 즉,web/아래의 모든 파일과 디렉터리가httpd_sys_content_t유형으로 레이블이 지정됩니다.semanage는/web(/.*)의file.contexts.local에 항목을 추가했기 때문에restorecon은 유형을httpd_sys_content_t로 변경합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기본적으로 새로 생성된 파일과 디렉터리는 상위 디렉터리의 SELinux 유형을 상속받습니다.
절차 4.10. 추가된 컨텍스트 삭제
/web(/.*)?? 에서는 정규식 주위에 따옴표를 사용합니다.
semanage fcontext -d "/web(/.*)?"
~]# semanage fcontext -d "/web(/.*)?"
- 컨텍스트를 제거하려면 root로 다음 명령을 입력합니다. 여기서 file-name|directory-name 은
file_contexts.local의 첫 번째 부분입니다.semanage fcontext -d file-name|directory-name
~]# semanage fcontext -d file-name|directory-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음은file_contexts.local의 컨텍스트의 예입니다./test system_u:object_r:httpd_sys_content_t:s0
/test system_u:object_r:httpd_sys_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 첫 번째 부분은시험입니다. restorecon 을 실행한 후 또는 파일 시스템 재레이블 후test/디렉터리의 레이블이httpd_sys_content_t로 레이블이 지정되지 않도록 하려면 root로 다음 명령을 입력하여file_contexts.local에서 컨텍스트를 삭제합니다.semanage fcontext -d /test
~]# semanage fcontext -d /testCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로
restorecon유틸리티를 사용하여 기본 SELinux 컨텍스트를 복원합니다.
4.7.3. 파일 문맥을 확인하는 방법 링크 복사링크가 클립보드에 복사되었습니다!
.fc 파일)에 지정된 파일 컨텍스트 정의를 기반으로 합니다. 시스템 정책에 따라 semanage 는 file_contexts.homedirs 및 file_contexts 파일을 생성합니다.
file_contexts.local 파일에 저장됩니다.
matchpathcon 또는 restorecon 과 같은 레이블링 유틸리티에서 지정된 경로에 대한 적절한 레이블을 결정하는 경우 먼저 로컬 변경 사항(file_contexts.local)을 검색합니다. 유틸리티에서 일치하는 패턴을 찾지 못하면 file_contexts.homedirs 파일과 file_contexts 파일을 검색합니다. 그러나 지정된 파일 경로와 일치하는 항목이 있을 때마다 검색이 종료되고 유틸리티는 추가 파일 컨텍스트 정의를 찾습니다. 즉, 홈 디렉터리 관련 파일 컨텍스트가 나머지보다 우선 순위가 높으며 로컬 사용자 지정은 시스템 정책을 재정의합니다.
시스템 정책 ( file_contexts.homedirs 및 file_contexts 파일의 콘텐츠)에 의해 지정된 파일 컨텍스트 정의는 평가 전의 줄임표(모든 와일드카드 이전 경로) 길이로 정렬됩니다. 이는 가장 구체적인 경로가 선택됨을 의미합니다. 그러나 semanage fcontext 를 사용하여 지정된 파일 컨텍스트 정의는 정의 방법에 대한 역순으로 평가됩니다. 최신 항목은 영 길이에 관계없이 먼저 평가됩니다.
chcon을 사용하여 파일 컨텍스트를 변경하려면 4.7.1절. “임시 변경 사항: chcon” 을 참조하십시오.- semanage fcontext 를 사용하여 파일 컨텍스트 정의 변경 및 추가는 4.7.2절. “영구적인 변경 사항: semanage fcontext” 에서 참조하십시오.
- 시스템 정책 작업을 통해 파일 컨텍스트 정의 변경 및 추가는 4.10절. “SELinux 레이블 유지 관리” 또는 4.12절. “SELinux 정책 모듈 우선순위 및 비활성화” 을 참조하십시오.
4.8. file_t 및 default_t 유형 링크 복사링크가 클립보드에 복사되었습니다!
file_t 유형은 아직 EA 값이 할당되지 않은 파일의 기본 유형입니다. 이 유형은 이 목적으로만 사용되며 SELinux를 실행하는 시스템의 모든 파일에 적절한 SELinux 컨텍스트가 있어야 하고 file_t 유형은 file-context 구성에 사용되지 않기 때문에 올바르게 레이블이 지정된 파일 시스템에는 존재하지 않습니다.[4].
default_t 유형은 file-context 구성의 패턴과 일치하지 않는 파일에 사용되어 이러한 파일을 디스크에 컨텍스트가 없는 파일과 구분할 수 있으며 일반적으로 제한된 도메인에 액세스할 수 없습니다. 예를 들어, mydirectory/ 와 같은 새 최상위 디렉토리를 생성하는 경우 이 디렉토리에 default_t 유형으로 레이블이 지정될 수 있습니다. 서비스에서 이 디렉토리에 액세스해야 하는 경우 이 위치에 대한 file-contexts 구성을 업데이트해야 합니다. 파일 컨텍스트 구성에 컨텍스트를 추가하는 방법에 대한 자세한 내용은 4.7.2절. “영구적인 변경 사항: semanage fcontext” 을 참조하십시오.
/etc/selinux/targeted/contexts/files/ 디렉터리의 파일은 파일 및 디렉터리에 대한 컨텍스트를 정의합니다. 이 디렉터리의 파일은 restorecon 및 setfiles 유틸리티에서 읽고 파일과 디렉터리를 기본 컨텍스트로 복원합니다.
4.9. 파일 시스템 마운트 링크 복사링크가 클립보드에 복사되었습니다!
컨텍스트 는 디스크에 작성되지 않습니다. 원래 컨텍스트가 유지되며, 파일 시스템에 첫 번째 위치에서 확장된 속성이 있는 경우 컨텍스트 없이 마운트할 때 표시됩니다.
4.9.1. 컨텍스트 마운트 링크 복사링크가 클립보드에 복사되었습니다!
nfs_t 유형을 사용합니다. 추가 마운트 옵션이 없으면 Apache HTTP 서버와 같은 다른 서비스를 사용하여 NFS 볼륨을 공유하지 못하게 할 수 있습니다. 다음 예제에서는 Apache HTTP 서버를 사용하여 공유할 수 있도록 NFS 볼륨을 마운트합니다.
mount server:/export /local/mount/point -o \ context="system_u:object_r:httpd_sys_content_t:s0"
~]# mount server:/export /local/mount/point -o \ context="system_u:object_r:httpd_sys_content_t:s0"
-o 컨텍스트로 지정된 SELinux 컨텍스트가 있는 것처럼 나타납니다. 그러나 이러한 변경 사항은 디스크에 작성되지 않으므로 이 옵션과 함께 지정된 컨텍스트는 마운트 간에 유지되지 않습니다. 따라서 필요한 컨텍스트를 유지하려면 마운트할 때마다 이 옵션을 동일한 컨텍스트와 함께 사용해야 합니다. 컨텍스트 마운트를 영구적으로 만드는 방법에 대한 자세한 내용은 4.9.5절. “컨텍스트 마운트 영구 설정” 을 참조하십시오.
-o 컨텍스트를 사용하여 SELinux 컨텍스트를 재정의하고 SELinux system_u user 및 object_r 역할을 사용하고 유형에 중점을 둘 수 있습니다. MLS 정책 또는 다중 범주 보안을 사용하지 않는 경우 s0 수준을 사용합니다.
컨텍스트 옵션으로 마운트하면 사용자와 프로세스의 컨텍스트 변경이 금지됩니다. 예를 들어 컨텍스트 옵션으로 마운트된 파일 시스템에서 chcon 명령을 실행하면 Operation not supported 오류가 발생합니다.
4.9.2. 기본 문맥 변경 링크 복사링크가 클립보드에 복사되었습니다!
file_t 유형을 사용합니다. 다른 기본 컨텍스트를 사용하려면 defcontext 옵션을 사용하여 파일 시스템을 마운트합니다.
test/ 디렉터리에 새로 생성된 파일 시스템을 /dev/sda2 에 마운트합니다. /etc/selinux/targeted/contexts/files/ 에 test/ 디렉터리에 대한 컨텍스트를 정의하는 규칙이 없는 것으로 가정합니다.
mount /dev/sda2 /test/ -o defcontext="system_u:object_r:samba_share_t:s0"
~]# mount /dev/sda2 /test/ -o defcontext="system_u:object_r:samba_share_t:s0"
- 마운트 시 파일 시스템의 루트 디렉터리(
test/)는defcontext에서 지정한 컨텍스트로 레이블이 지정된 것처럼 처리됩니다(이 레이블은 디스크에 저장되지 않음).test/: 새 파일은samba_share_t유형을 상속하며 이러한 레이블은 디스크에 저장됩니다. - 파일 시스템이
defcontext옵션으로 마운트되는 동안test/에서 생성된 파일은 레이블을 유지합니다.
4.9.3. NFS 볼륨 마운트 링크 복사링크가 클립보드에 복사되었습니다!
nfs_t 유형을 사용합니다. 정책 구성에 따라 Apache HTTP Server 및 MariaDB와 같은 서비스는 nfs_t 유형으로 레이블이 지정된 파일을 읽지 못할 수 있습니다. 이렇게 하면 이 유형으로 레이블이 지정된 파일 시스템이 마운트되지 않은 다음 다른 서비스에서 읽거나 내보내지 못하게 할 수 있습니다.
nfs_t 유형을 재정의할 때 컨텍스트 옵션을 사용합니다. 다음 컨텍스트 옵션을 사용하여 Apache HTTP 서버를 사용하여 공유할 수 있도록 NFS 볼륨을 마운트합니다.
mount server:/export /local/mount/point -o context="system_u:object_r:httpd_sys_content_t:s0"
~]# mount server:/export /local/mount/point -o context="system_u:object_r:httpd_sys_content_t:s0"
컨텍스트 옵션을 사용하여 파일 시스템을 마운트하는 대신 부울을 활성화하여 nfs_t 유형으로 레이블이 지정된 파일 시스템에 대한 서비스 액세스를 허용할 수 있습니다. nfs_t 유형에 대한 서비스 액세스를 허용하도록 부울 구성 방법에 대한 지침은 II 부. 제한된 서비스 관리 를 참조하십시오.
4.9.4. 여러 NFS 마운트 링크 복사링크가 클립보드에 복사되었습니다!
web/ 및 database/ 가 있는 단일 내보내기인 export/ 가 있습니다. 다음 명령은 단일 NFS 내보내기에서 두 개의 마운트를 시도하고 각각에 대한 컨텍스트를 재정의합니다.
mount server:/export/web /local/web -o context="system_u:object_r:httpd_sys_content_t:s0"
~]# mount server:/export/web /local/web -o context="system_u:object_r:httpd_sys_content_t:s0"
mount server:/export/database /local/database -o context="system_u:object_r:mysqld_db_t:s0"
~]# mount server:/export/database /local/database -o context="system_u:object_r:mysqld_db_t:s0"
/var/log/messages:에 기록됩니다.
kernel: SELinux: mount invalid. Same superblock, different security settings for (dev 0:15, type nfs)
kernel: SELinux: mount invalid. Same superblock, different security settings for (dev 0:15, type nfs)
-o nosharecache,context 옵션을 사용합니다. 다음 예제에서는 마운트마다 다른 컨텍스트를 사용하여 단일 NFS 내보내기에서 여러 마운트를 마운트합니다(각 각각에 단일 서비스 액세스 허용).
mount server:/export/web /local/web -o nosharecache,context="system_u:object_r:httpd_sys_content_t:s0"
~]# mount server:/export/web /local/web -o nosharecache,context="system_u:object_r:httpd_sys_content_t:s0"
mount server:/export/database /local/database -o \ nosharecache,context="system_u:object_r:mysqld_db_t:s0"
~]# mount server:/export/database /local/database -o \ nosharecache,context="system_u:object_r:mysqld_db_t:s0"
server:/export/web 은 httpd_sys_content_t 유형으로 레이블이 지정된 모든 파일과 함께 /local/web/ 디렉터리에 로컬로 마운트되어 Apache HTTP Server 액세스를 허용합니다. server:/export /database 는 mysqld_db_t 유형으로 레이블이 지정된 모든 파일과 함께 로컬로 마운트됩니다. 이러한 유형 변경 사항은 디스크에 기록되지 않습니다.
nosharecache 옵션을 사용하면 다른 컨텍스트(예: /export/web/ 마운트)를 여러 번 사용하여 내보내기의 동일한 하위 디렉터리를 여러 번 마운트할 수 있습니다. 다른 컨텍스트에서 파일에 액세스할 수 있는 중복 마운트를 생성하므로 내보내기에서 동일한 하위 디렉터리를 여러 번 마운트하지 마십시오.
4.9.5. 컨텍스트 마운트 영구 설정 링크 복사링크가 클립보드에 복사되었습니다!
/etc/fstab 파일 또는 Cryostat 맵의 파일 시스템에 대한 항목을 추가하고 필요한 컨텍스트를 마운트 옵션으로 사용합니다. 다음 예제에서는 NFS 컨텍스트 마운트의 경우 /etc/fstab 에 항목을 추가합니다.
server:/export /local/mount/ nfs context="system_u:object_r:httpd_sys_content_t:s0" 0 0
server:/export /local/mount/ nfs context="system_u:object_r:httpd_sys_content_t:s0" 0 0
4.10. SELinux 레이블 유지 관리 링크 복사링크가 클립보드에 복사되었습니다!
4.10.1. 파일 및 디렉토리 복사 링크 복사링크가 클립보드에 복사되었습니다!
user_home_t 유형으로 레이블이 지정됩니다.
touch file1
~]$ touch file1
ls -Z file1
~]$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
/etc 와 같은 다른 디렉터리에 복사되는 경우 새 파일이 /etc 의 기본 레이블 지정 규칙에 따라 생성됩니다. 추가 옵션 없이 파일을 복사하면 원래 컨텍스트가 유지되지 않을 수 있습니다.
ls -Z file1
~]$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
cp file1 /etc/
~]# cp file1 /etc/
ls -Z /etc/file1
~]$ ls -Z /etc/file1
-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
file1 이 /etc 에 복사되면 /etc/file1 이 없으면 /etc/file1 이 새 파일로 생성됩니다. 위의 예에 표시된 대로 /etc/file1 은 default-labeling 규칙에 따라 etc_t 유형으로 레이블이 지정됩니다.
--preserve=context )를 유지하지 않는 한 기존 파일의 컨텍스트를 기존 파일의 컨텍스트를 복사하면 기존 파일의 컨텍스트가 유지됩니다. SELinux 정책은 복사 중에 컨텍스트가 유지되지 않도록 할 수 있습니다.
절차 4.11. SELinux 컨텍스트를 보존하지 않고 복사
- 사용자의 홈 디렉터리에서 파일을 만듭니다. 파일에는
user_home_t유형으로 레이블이 지정됩니다.touch file1
~]$ touch file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/www/html/디렉터리는 다음 명령과 같이httpd_sys_content_t유형으로 레이블이 지정됩니다.ls -dZ /var/www/html/
~]$ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow file1이/var/www/html/에 복사되면httpd_sys_content_t유형을 상속합니다.cp file1 /var/www/html/
~]# cp file1 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/file1
~]$ ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
절차 4.12. 복사 시 SELinux 컨텍스트 보존
--preserve=context 옵션을 사용하는 방법을 보여줍니다.
- 사용자의 홈 디렉터리에서 파일을 만듭니다. 파일에는
user_home_t유형으로 레이블이 지정됩니다.touch file1
~]$ touch file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/www/html/디렉터리는 다음 명령과 같이httpd_sys_content_t유형으로 레이블이 지정됩니다.ls -dZ /var/www/html/
~]$ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - preserve
=context옵션을 사용하면 복사 작업 중에 SELinux 컨텍스트가 유지됩니다. 아래 표시된 대로 파일이/var/www/html/:에 복사될 때file1의user_home_t유형이 보존되었습니다.cp --preserve=context file1 /var/www/html/
~]# cp --preserve=context file1 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/file1
~]$ ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:user_home_t:s0 /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
절차 4.13. 문맥 복사 및 변경
--context 옵션을 사용하여 대상 복사의 컨텍스트를 변경하는 방법을 보여줍니다. 다음 예는 사용자의 홈 디렉터리에서 수행됩니다.
- 사용자의 홈 디렉터리에서 파일을 만듭니다. 파일에는
user_home_t유형으로 레이블이 지정됩니다.touch file1
~]$ touch file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow context옵션을 사용하여 SELinux 컨텍스트를 정의합니다.cp --context=system_u:object_r:samba_share_t:s0 file1 file2
~]$ cp --context=system_u:object_r:samba_share_t:s0 file1 file2Copy to Clipboard Copied! Toggle word wrap Toggle overflow --context가 없으면file2는unconfined_u:object_r:user_home_t컨텍스트로 레이블이 지정됩니다.ls -Z file1 file2
~]$ ls -Z file1 file2 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1 -rw-rw-r-- user1 group1 system_u:object_r:samba_share_t:s0 file2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
절차 4.14. 기존 파일에서 파일 복사
- root 로서
/etc디렉토리에 새 파일file1을 만듭니다. 아래에 표시된 대로 파일에는etc_t유형으로 레이블이 지정됩니다.touch /etc/file1
~]# touch /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /etc/file1
~]$ ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow /tmp디렉터리에 다른file2파일을 생성합니다. 아래 표시된 대로 파일에는user_tmp_t유형으로 레이블이 지정됩니다.touch /tmp/file2
~]$ touch /tmp/file2Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~$ ls -Z /tmp/file2 -rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
~$ ls -Z /tmp/file2 -rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2Copy to Clipboard Copied! Toggle word wrap Toggle overflow file2로file1을 덮어씁니다.cp /tmp/file2 /etc/file1
~]# cp /tmp/file2 /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 복사 후 다음 명령은
/etc/을 대체하는file1/tmp/file2의user_tmp_t유형이 아닌etc_t유형으로 레이블이 지정된 file1을 표시합니다.ls -Z /etc/file1
~]$ ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.10.2. 파일 및 디렉토리 이동 링크 복사링크가 클립보드에 복사되었습니다!
/var/www/html/ 디렉터리로 파일을 이동하는 방법을 보여줍니다. 파일이 이동되었으므로 올바른 SELinux 컨텍스트를 상속하지 않습니다.
절차 4.15. 파일 및 디렉토리 이동
- 홈 디렉터리로 변경하고 파일을 만듭니다. 파일에는
user_home_t유형으로 레이블이 지정됩니다.touch file1
~]$ touch file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z file1
~]$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여
/var/www/html/디렉터리의 SELinux 컨텍스트를 확인합니다.ls -dZ /var/www/html/
~]$ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기본적으로/var/www/html/은/는httpd_sys_content_t유형으로 레이블이 지정됩니다./var/www/html/에서 생성된 파일 및 디렉터리는 이 유형을 상속하므로 이 유형으로 레이블이 지정됩니다. - root 로서
file1을/var/www/html/로 이동합니다. 이 파일이 이동되므로 현재user_home_t유형이 유지됩니다.mv file1 /var/www/html/
~]# mv file1 /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/file1
~]# ls -Z /var/www/html/file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
user_home_t 유형으로 레이블이 지정된 파일을 읽을 수 없습니다. 웹 페이지를 포함하는 모든 파일에 user_home_t 유형으로 레이블이 지정되거나 Apache HTTP Server에서 읽을 수 없는 다른 유형이 있는 경우 Mozilla Firefox 와 같은 웹 브라우저를 사용하여 액세스하려고 할 때 권한이 거부됩니다.
4.10.3. 기본 SELinux 컨텍스트 확인 링크 복사링크가 클립보드에 복사되었습니다!
matchpathcon 유틸리티를 사용하여 파일과 디렉터리에 올바른 SELinux 컨텍스트가 있는지 확인합니다. 이 유틸리티는 시스템 정책을 쿼리한 다음 파일 경로와 연결된 기본 보안 컨텍스트를 제공합니다.[6] 다음 예제에서는 matchpathcon 을 사용하여 /var/www/html/ 디렉터리의 파일에 올바르게 레이블이 지정되어 있는지 확인하는 방법을 보여줍니다.
절차 4.16. matchpathcon으로 기본 SELinux Conxtext 확인
- root 사용자로
/var/www/html/디렉터리에 세 개의 파일(file1,file2,file3)을 만듭니다. 이러한 파일은/var/www/html/:의httpd_sys_content_t유형을 상속합니다.touch /var/www/html/file{1,2,3}~]# touch /var/www/html/file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/
~]# ls -Z /var/www/html/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
file1유형을samba_share_t로 변경합니다. Apache HTTP Server는samba_share_t유형으로 레이블이 지정된 파일 또는 디렉터리를 읽을 수 없습니다.chcon -t samba_share_t /var/www/html/file1
~]# chcon -t samba_share_t /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow matchpathcon-V옵션은 현재 SELinux 컨텍스트를 SELinux 정책의 올바른 기본 컨텍스트와 비교합니다. 다음 명령을 입력하여/var/www/html/디렉터리의 모든 파일을 확인합니다.matchpathcon -V /var/www/html/*
~]$ matchpathcon -V /var/www/html/* /var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2 verified. /var/www/html/file3 verified.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
file1 이 samba_share_t 유형으로 레이블이 지정되었지만 httpd_sys_content_t 유형으로 레이블이 지정되어야 함을 설명합니다.
/var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
/var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
file1 에 대한 Apache HTTP Server 액세스를 허용하려면 root로 restorecon 유틸리티를 사용합니다.
restorecon -v /var/www/html/file1
~]# restorecon -v /var/www/html/file1
restorecon reset /var/www/html/file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
4.10.4. tar로 파일 아카이브 링크 복사링크가 클립보드에 복사되었습니다!
tar 유틸리티는 기본적으로 확장된 속성을 유지하지 않습니다. SELinux 컨텍스트는 확장된 특성에 저장되므로 파일을 보관할 때 컨텍스트가 손실될 수 있습니다. tar --selinux 명령을 사용하여 컨텍스트를 유지하고 아카이브에서 파일을 복원하는 아카이브를 생성합니다. tar 아카이브에 확장 속성이 없는 파일이 포함되어 있거나 확장된 속성이 시스템 기본값과 일치하도록 하려면 restorecon 유틸리티를 사용합니다.
tar -xvf archive.tar | restorecon -f -
~]$ tar -xvf archive.tar | restorecon -f -
restorecon 을 실행하려면 root 사용자여야 할 수 있습니다.
tar 아카이브를 생성하는 방법을 보여줍니다.
절차 4.17. tar 아카이브 만들기
/var/www/html/디렉터리로 변경하고 SELinux 컨텍스트를 확인합니다.cd /var/www/html/
~]$ cd /var/www/html/Copy to Clipboard Copied! Toggle word wrap Toggle overflow html]$ ls -dZ /var/www/html/ drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 .
html]$ ls -dZ /var/www/html/ drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 .Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
/var/www/html/에 세 개의 파일(file1,file2,file3)을 만듭니다. 이러한 파일은/var/www/html/:의httpd_sys_content_t유형을 상속합니다.html]# touch file{1,2,3}html]# touch file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow html]$ ls -Z /var/www/html/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
html]$ ls -Z /var/www/html/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로 다음 명령을 입력하여
test.tar이라는 tar 아카이브를 만듭니다. SELinux 컨텍스트를 유지하려면--selinux를 사용합니다.html]# tar --selinux -cf test.tar file{1,2,3}html]# tar --selinux -cf test.tar file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
test/라는 새 디렉터리를 생성한 다음 모든 사용자가 모든 사용자가 액세스할 수 있도록 허용합니다.mkdir /test
~]# mkdir /testCopy to Clipboard Copied! Toggle word wrap Toggle overflow chmod 777 /test/
~]# chmod 777 /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test.tar파일을test/:에 복사합니다.cp /var/www/html/test.tar /test/
~]$ cp /var/www/html/test.tar /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test/디렉터리로 변경합니다. 이 디렉터리에 다음 명령을 입력하여tar아카이브를 추출합니다.--selinux옵션을 다시 지정합니다. 그러지 않으면 SELinux 컨텍스트가default_t로 변경됩니다.cd /test/
~]$ cd /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test]$ tar --selinux -xvf test.tar
test]$ tar --selinux -xvf test.tarCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux 컨텍스트 보기.
httpd_sys_content_t유형은default_t로 변경되지 않고--selinux를 사용하지 않은 상태로 유지되었습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow test/디렉터리가 더 이상 필요하지 않은 경우 root로 다음 명령을 입력하여 제거하고 여기에 있는 모든 파일을 삭제합니다.rm -ri /test/
~]# rm -ri /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
--xattrs 옵션과 같이 tar 에 대한 자세한 내용은 tar(1) 매뉴얼 페이지를 참조하십시오.
4.10.5. 별이있는 파일 아카이브 링크 복사링크가 클립보드에 복사되었습니다!
star 유틸리티는 기본적으로 확장 속성을 유지하지 않습니다. SELinux 컨텍스트는 확장된 특성에 저장되므로 파일을 보관할 때 컨텍스트가 손실될 수 있습니다. star -xattr -H=exustar 명령을 사용하여 컨텍스트를 유지하는 아카이브를 생성합니다. star 패키지는 기본적으로 설치되지 않습니다. 별표 를 설치하려면 root 사용자로 yum install star 명령을 실행합니다.
별 아카이브를 생성하는 방법을 보여줍니다.
절차 4.18. 별 아카이브 생성
- root 로서
/var/www/html/에 세 개의 파일(file1,file2,file3)을 만듭니다. 이러한 파일은/var/www/html/:의httpd_sys_content_t유형을 상속합니다.touch /var/www/html/file{1,2,3}~]# touch /var/www/html/file{1,2,3}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Z /var/www/html/
~]# ls -Z /var/www/html/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/www/html/디렉터리로 변경합니다. 이 디렉터리에서 root로 다음 명령을 입력하여test.star:이라는 별 아카이브를 생성합니다.cd /var/www/html
~]$ cd /var/www/htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow html]# star -xattr -H=exustar -c -f=test.star file{1,2,3} star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).html]# star -xattr -H=exustar -c -f=test.star file{1,2,3} star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
test/라는 새 디렉터리를 생성한 다음 모든 사용자가 모든 사용자가 액세스할 수 있도록 허용합니다.mkdir /test
~]# mkdir /testCopy to Clipboard Copied! Toggle word wrap Toggle overflow chmod 777 /test/
~]# chmod 777 /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여
test.star파일을test/:에 복사합니다.cp /var/www/html/test.star /test/
~]$ cp /var/www/html/test.star /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test/로 변경합니다. 이 디렉터리에 다음 명령을 입력하여star아카이브를 추출합니다.cd /test/
~]$ cd /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow test]$ star -x -f=test.star star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
test]$ star -x -f=test.star star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux 컨텍스트 보기.
httpd_sys_content_t유형이default_t로 변경되지 않고 유지되었습니다. 이 유형은-xattr -H=exustar옵션이 사용되지 않았습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow test/디렉터리가 더 이상 필요하지 않은 경우 root로 다음 명령을 입력하여 제거하고 여기에 있는 모든 파일을 삭제합니다.rm -ri /test/
~]# rm -ri /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 더 이상
별이필요하지 않은 경우 root 로서 패키지를 제거합니다.yum remove star
~]# yum remove starCopy to Clipboard Copied! Toggle word wrap Toggle overflow
별에 대한 자세한 내용은 star(1) 도움말 페이지를 참조하십시오.
4.11. 정보 수집 도구 링크 복사링크가 클립보드에 복사되었습니다!
avcstat
/sys/fs/selinux/avc/cache_stats 이며 -f /path/to/file 옵션을 사용하여 다른 캐시 파일을 지정할 수 있습니다.
avcstat
~]# avcstat
lookups hits misses allocs reclaims frees
47517410 47504630 12780 12780 12176 12275
seinfo
seinfo 는 policy.conf 파일, 바이너리 정책 파일, 모듈식 정책 패키지 목록 또는 정책 목록 파일을 입력으로 사용하는 명령줄 유틸리티입니다. seinfo 유틸리티를 사용하려면 setools-console 패키지가 설치되어 있어야 합니다.
seinfo 의 출력은 바이너리 파일과 소스 파일마다 다릅니다. 예를 들어 정책 소스 파일은 { } 대괄호를 사용하여 여러 규칙 요소를 한 줄에 그룹화합니다. 단일 속성이 하나 또는 여러 유형으로 확장되는 속성과 유사한 효과가 발생합니다. 이러한 항목이 확장되어 바이너리 정책 파일에서 더 이상 관련이 없으므로 검색 결과에 반환 값이 0입니다. 그러나 대괄호를 사용하여 이전 한 줄 규칙 각각에 따라 룰 수가 크게 증가합니다. 이제 여러 개의 개별 행이 있습니다.
seinfo 유틸리티는 도메인 속성이 있는 유형 수를 나열하여 다른 제한된 프로세스의 수를 추정할 수도 있습니다.
seinfo -adomain -x | wc -l
~]# seinfo -adomain -x | wc -l
550
unconfined_domain 특성을 사용합니다.
seinfo -aunconfined_domain_type -x | wc -l
~]# seinfo -aunconfined_domain_type -x | wc -l
52
--permissive 옵션을 사용하여 계산할 수 있습니다.
seinfo --permissive -x | wc -l
~]# seinfo --permissive -x | wc -l
31
sesearch
sesearch 유틸리티를 사용하여 정책에서 특정 규칙을 검색할 수 있습니다. 정책 소스 파일 또는 바이너리 파일을 검색할 수 있습니다. 예를 들어 다음과 같습니다.
sesearch 유틸리티는 허용 규칙 수를 제공할 수 있습니다.
sesearch --allow | wc -l
~]# sesearch --allow | wc -l
262798
sesearch --dontaudit | wc -l
~]# sesearch --dontaudit | wc -l
156712
4.12. SELinux 정책 모듈 우선순위 및 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
/etc/selinux/ 의 SELinux 모듈 스토리지를 사용하면 SELinux 모듈에서 우선 순위를 사용할 수 있습니다. 다음 명령을 root로 입력하여 다른 우선 순위의 두 모듈 디렉터리를 표시합니다.
ls /etc/selinux/targeted/active/modules
~]# ls /etc/selinux/targeted/active/modules
100 400 disabled
예 4.1. SELinux 정책 모듈 우선 순위 사용
sandbox.pp 를 사용합니다.
semodule -X 400 -i sandbox.pp semodule --list-modules=full | grep sandbox
~]# semodule -X 400 -i sandbox.pp
~]# semodule --list-modules=full | grep sandbox
400 sandbox pp
100 sandbox pp
semodule -X 400 -r sandbox
~]# semodule -X 400 -r sandbox
libsemanage.semanage_direct_remove_key: sandbox module at priority 100 is now active.
시스템 정책 모듈 비활성화
시스템 정책 모듈을 비활성화하려면 root로 다음 명령을 입력합니다.
semodule -d MODULE_NAME
semodule -d MODULE_NAME
시스템 정책 모듈을 제거하면 시스템 스토리지에서 삭제되고 다시 로드할 수 없습니다. 모든 시스템 정책 모듈을 복원하기 위해 selinux-policy-targeted 패키지를 불필요한 다시 설치하지 않으려면 대신 semodule -d 명령을 사용합니다.
4.13. 다단계 보안(MLS) 링크 복사링크가 클립보드에 복사되었습니다!
그림 4.1. 마케도니아 레벨
그림 4.2. MLS를 사용하여 허용된 데이터 흐름
4.13.1. MLS 및 시스템 권한 링크 복사링크가 클립보드에 복사되었습니다!
4.13.2. SELinux에서 MLS 활성화 링크 복사링크가 클립보드에 복사되었습니다!
절차 4.19. SELinux MLS 정책 활성화
- selinux-policy-✓s 패키지를 설치합니다.
yum install selinux-policy-mls
~]# yum install selinux-policy-mlsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - MLS 정책을 활성화하기 전에 파일 시스템의 각 파일의 레이블을 MLS 레이블로 다시 지정해야 합니다. 파일 시스템의 레이블을 다시 지정하면 제한된 도메인이 액세스가 거부될 수 있으므로 시스템이 올바르게 부팅되지 않을 수 있습니다. 이러한 문제가 발생하지 않도록
/etc/selinux/config파일에서SELINUX=permissive를 구성합니다. 또한SELINUXTYPE=mls를 구성하여 MLS 정책을 활성화합니다. 구성 파일은 다음과 같아야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux가 허용 모드에서 실행 중인지 확인합니다.
setenforce 0
~]# setenforce 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow getenforce
~]$ getenforce PermissiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 수정 파일 스크립트를 사용하여 다음 재부팅 시 파일의 레이블을 다시 지정하도록
-F옵션이 포함된/.autorelabel파일을 만듭니다.fixfiles -F onboot
~]# fixfiles -F onbootCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 시스템을 재부팅합니다. 다음 부팅 중에 모든 파일 시스템은 MLS 정책에 따라 레이블이 다시 지정됩니다. 레이블 프로세스는 적절한 SELinux 컨텍스트를 사용하여 모든 파일의 레이블을 지정합니다.
*** Warning -- SELinux mls policy relabel is required. *** Relabeling could take a very long time, depending on file *** system size and speed of hard drives. ***********
*** Warning -- SELinux mls policy relabel is required. *** Relabeling could take a very long time, depending on file *** system size and speed of hard drives. ***********Copy to Clipboard Copied! Toggle word wrap Toggle overflow 맨 아래에 있는 각*(별표) 문자는 레이블이 지정된 1000개의 파일을 나타냅니다. 위의 예에서 11자*문자는 레이블이 지정된 11000 파일을 나타냅니다. 모든 파일에 레이블을 지정하는 데 걸리는 시간은 시스템의 파일 수와 하드 디스크 드라이브의 속도에 따라 달라집니다. 최신 시스템에서 이 프로세스는 10분도 걸리지 않습니다. 레이블 지정 프로세스가 완료되면 시스템이 자동으로 재부팅됩니다. - 허용 모드에서는 SELinux 정책이 적용되지 않지만 강제 모드에서 실행 중인 경우 거부된 작업에 여전히 기록됩니다. 강제 모드로 변경하기 전에 root로 다음 명령을 입력하여 마지막 부팅 중에 SELinux가 작업을 거부하지 않았는지 확인합니다. 마지막 부팅 중에 SELinux에서 작업을 거부하지 않은 경우 이 명령은 출력을 반환하지 않습니다. 부팅 중 SELinux가 액세스를 거부한 경우 문제 해결 정보는 11장. 문제 해결 을 참조하십시오.
grep "SELinux is preventing" /var/log/messages
~]# grep "SELinux is preventing" /var/log/messagesCopy to Clipboard Copied! Toggle word wrap Toggle overflow /var/log/messages파일에 거부 메시지가 없거나 모든 기존 거부를 해결한 경우/etc/selinux/config파일에서SELINUX=enforcing을 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 시스템을 재부팅하고 SELinux가 강제 모드에서 실행 중인지 확인합니다.
getenforce
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow MLS 정책이 활성화되어 있습니다.sestatus |grep mls
~]# sestatus |grep mls Policy from config file: mlsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.13.3. 특정 MLS 범위를 사용하여 사용자 생성 링크 복사링크가 클립보드에 복사되었습니다!
절차 4.20. 특정 MLS 범위를 사용하여 사용자 생성
- useradd 명령을 사용하여 새 Linux 사용자를 추가하고 새 Linux 사용자를 기존 SELinux 사용자(이 경우
staff_u)에 매핑합니다.useradd -Z staff_u john
~]# useradd -Z staff_u johnCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 새로 생성된 Linux 사용자에게 암호를 할당합니다.
prompt~]# passwd john
prompt~]# passwd johnCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux와 Linux 사용자 간의 매핑을 보려면 root로 다음 명령을 입력합니다. 출력은 다음과 같아야 합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 사용자
john에 대한 특정 범위를 정의합니다.semanage login --modify --range s2:c100 john
~]# semanage login --modify --range s2:c100 johnCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux와 Linux 사용자 간의 매핑을 다시 봅니다. 사용자
john에는 이제 특정 MLS 범위가 정의되어 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 필요한 경우 john의 홈 디렉터리에서 레이블을 수정하려면 다음 명령을 입력합니다.
chcon -R -l s2:c100 /home/john
~]# chcon -R -l s2:c100 /home/johnCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.13.4. Polyinstantiated 디렉토리 설정 링크 복사링크가 클립보드에 복사되었습니다!
/tmp 및 /var/tmp/ 디렉터리는 일반적으로 모든 프로그램, 서비스 및 사용자의 임시 스토리지에 사용됩니다. 그러나 이러한 설정을 사용하면 이러한 디렉터리가 경쟁 조건 공격에 취약하거나 파일 이름에 따라 정보 누출이 발생할 수 있습니다. SELinux는 다중 인스턴스화된 디렉터리의 형태로 솔루션을 제공합니다. 이는 효과적으로 /tmp 및 /var/tmp/ 가 인스턴스화되어 각 사용자에 대해 비공개로 표시되는 것을 의미합니다. 디렉토리 인스턴스화가 활성화되면 각 사용자의 /tmp 및 /var/tmp/ 디렉토리가 /tmp-inst 및 /var/tmp/tmp-inst 에 자동으로 마운트됩니다.
절차 4.21. Polyinstantiation 디렉터리 활성화
/etc/security/namespace.conf파일에서 마지막 세 줄의 주석을 제거하여 /tmp , /var, 사용자의 홈 디렉터리의 인스턴스화를 활성화합니다./tmp/tail -n 3 /etc/security/namespace.conf
~]$ tail -n 3 /etc/security/namespace.conf /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 /etc/pam.d/login파일에서pam_namespace.so모듈이 세션에 대해 구성되었는지 확인합니다.grep namespace /etc/pam.d/login
~]$ grep namespace /etc/pam.d/login session required pam_namespace.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 시스템을 재부팅합니다.
4.14. 파일 이름 전환 링크 복사링크가 클립보드에 복사되었습니다!
A_t 레이블이 지정된 프로세스가 B_t 레이블이 지정된 디렉터리에 지정된 오브젝트 클래스를 생성하고 지정된 오브젝트 클래스의 이름이 objectname 인 경우 C_t 레이블을 가져옵니다. 이 메커니즘은 시스템의 프로세스에 대해 보다 세밀한 제어를 제공합니다.
- 기본적으로 오브젝트는 상위 디렉터리에서 레이블을 상속합니다. 예를 들어 사용자가
etc_t레이블이 지정된 디렉터리에 파일을 생성하면 파일에etc_t레이블이 지정됩니다. 그러나 이 방법은 다른 레이블이 있는 디렉터리 내에 여러 파일이 있는 것이 바람직한 경우 사용되지 않습니다. - 정책 작성자는 다음을 명시하는 정책에 규칙을 작성할 수 있습니다.
A_t유형의 프로세스가B_t레이블이 지정된 디렉터리에 지정된 오브젝트 클래스를 생성하면 오브젝트에서 새C_t레이블을 가져옵니다. 단일 프로그램에서 각 오브젝트에 별도의 레이블이 필요한 동일한 디렉토리에 여러 오브젝트를 생성하는 경우 이 방법이 문제가 됩니다. 또한 생성된 오브젝트의 이름은 지정되지 않으므로 이러한 규칙은 부분적인 제어만 제공합니다. - 특정 애플리케이션에는 이러한 애플리케이션이 특정 경로의 레이블이 무엇인지 시스템에 질문할 수 있는 SELinux 인식 기능이 있습니다. 그런 다음 이러한 애플리케이션은 커널을 요청하여 필수 레이블이 있는 오브젝트를 생성합니다. SELinux 인식을 사용하는 애플리케이션의 예로는 rpm 패키지 관리자, restorecon 유틸리티 또는 udev 장치 관리자가 있습니다. 그러나 SELinux 인식을 통해 파일 또는 디렉토리를 생성하는 모든 애플리케이션에 지시할 수 없습니다. 종종 생성 후 올바른 레이블을 사용하여 오브젝트의 레이블을 다시 지정해야 합니다. 그렇지 않으면 제한된 도메인에서 오브젝트 사용을 시도하면 AVC 메시지가 반환됩니다.
strcmp() 함수에서 수행한 정확한 일치를 사용합니다. 정규 표현식 또는 와일드카드 문자 사용은 고려되지 않습니다.
예 4.2. 파일 이름 전환으로 작성된 정책 규칙의 예
filetrans_pattern(unconfined_t, admin_home_t, ssh_home_t, dir, ".ssh")
filetrans_pattern(unconfined_t, admin_home_t, ssh_home_t, dir, ".ssh")
unconfined_t 유형의 프로세스가 admin_home_t 레이블이 지정된 디렉터리에 ~/.ssh/ 디렉터리를 생성하면 ~/.ssh/ 디렉터리가 ssh_home_t 레이블을 가져옵니다.
filetrans_pattern(staff_t, user_home_dir_t, httpd_user_content_t, dir, "public_html") filetrans_pattern(thumb_t, user_home_dir_t, thumb_home_t, file, "missfont.log") filetrans_pattern(kernel_t, device_t, xserver_misc_device_t, chr_file, "nvidia0") filetrans_pattern(puppet_t, etc_t, krb5_conf_t, file, "krb5.conf")
filetrans_pattern(staff_t, user_home_dir_t, httpd_user_content_t, dir, "public_html")
filetrans_pattern(thumb_t, user_home_dir_t, thumb_home_t, file, "missfont.log")
filetrans_pattern(kernel_t, device_t, xserver_misc_device_t, chr_file, "nvidia0")
filetrans_pattern(puppet_t, etc_t, krb5_conf_t, file, "krb5.conf")
4.15. ptrace() 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
ptrace() 시스템 호출을 사용하면 한 프로세스에서 다른 프로세스의 실행을 관찰 및 제어하고 메모리 및 레지스터를 변경할 수 있습니다. 이 호출은 디버깅 중에 개발자가 주로 사용합니다(예: strace 유틸리티를 사용할 때). ptrace() 가 필요하지 않은 경우 시스템 보안을 개선하기 위해 비활성화할 수 있습니다. 이는 다른 프로세스에서 ptrace() 를 사용할 수 없도록 unconfined_t 도메인에서 실행 중인 모든 프로세스를 거부하는 deny_ptrace 부울을 활성화하여 수행할 수 있습니다.
deny_ptrace 부울은 기본적으로 비활성화되어 있습니다. 이를 활성화하려면 root 사용자로 명령에서 setsebool -P deny_ptrace 를 실행합니다.
setsebool -P deny_ptrace on
~]# setsebool -P deny_ptrace on
getsebool deny_ptrace
~]$ getsebool deny_ptrace
deny_ptrace --> on
setsebool -P deny_ptrace off
~]# setsebool -P deny_ptrace off
-P 옵션을 사용하지 마십시오.
ptrace() 시스템 호출을 계속 사용할 수 있었습니다. ptrace() 를 사용할 수 있는 모든 도메인을 나열하려면 다음 명령을 입력합니다. setools-console 패키지는 sesearch 유틸리티를 제공하며 패키지가 기본적으로 설치되지 않습니다.
sesearch -A -p ptrace,sys_ptrace -C | grep -v deny_ptrace | cut -d ' ' -f 5
~]# sesearch -A -p ptrace,sys_ptrace -C | grep -v deny_ptrace | cut -d ' ' -f 5
4.16. 축소네일 보호 링크 복사링크가 클립보드에 복사되었습니다!
- /usr/bin/evince-thumbnailer
- /usr/bin/ffmpegthumbnailer
- /usr/bin/gnome-exe-thumbnailer.sh
- /usr/bin/gnome-nds-thumbnailer
- /usr/bin/gnome-xcf-thumbnailer
- /usr/bin/gsf-office-thumbnailer
- /usr/bin/raw-thumbnailer
- /usr/bin/shotwell-video-thumbnailer
- /usr/bin/totem-video-thumbnailer
- /usr/bin/whaaw-thumbnailer
- /usr/lib/tumbler-1/tumblerd
- /usr/lib64/tumbler-1/tumblerd
5장. sepolicy Suite 링크 복사링크가 클립보드에 복사되었습니다!
sepolicy 유틸리티는 설치된 SELinux 정책을 쿼리하는 기능 제품군을 제공합니다. 이러한 기능은 새로운 기능이거나 sepolgen 또는 setrans 와 같은 별도의 유틸리티에 의해 이전에 제공되었습니다. 모음을 사용하면 전환 보고서, 도움말 페이지 또는 새로운 정책 모듈을 생성할 수 있으므로 사용자가 더 쉽게 액세스할 수 있고 SELinux 정책을 더 잘 이해할 수 있습니다.
sepolicy 를 제공합니다. sepolicy 를 설치할 root 사용자로 다음 명령을 입력합니다.
yum install policycoreutils-devel
~]# yum install policycoreutils-devel
sepolicy 제품군은 명령줄 매개 변수로 호출되는 다음 기능을 제공합니다.
| 기능 | Description |
|---|---|
| 부울 | 부울 설명을 보려면 SELinux 정책을 쿼리합니다. |
| 통신 | SELinux 정책을 쿼리하여 도메인이 서로 통신할 수 있는지 확인합니다. |
| generate | SELinux 정책 모듈 템플릿 생성 |
| GUI | SELinux 정책 용 그래픽 사용자 인터페이스 |
| 인터페이스 | SELinux 정책 인터페이스 나열 |
| manpage | SELinux man 페이지 생성 |
| 네트워크 | SELinux 정책 네트워크 정보 쿼리 |
| 전환 | SELinux 정책을 쿼리하고 프로세스 전환 보고서 생성 |
5.1. sepolicy Python Bindings 링크 복사링크가 클립보드에 복사되었습니다!
sesearch 및 seinfo 유틸리티가 포함되어 있었습니다. sesearch 유틸리티는 SELinux 정책에서 규칙을 검색하는 데 사용되며 seinfo 유틸리티를 사용하면 정책의 다양한 구성 요소를 쿼리할 수 있습니다.
sesearch 및 seinfo 에 대한 Python 바인딩이 추가되어 sepolicy 제품군을 통해 이러한 유틸리티의 기능을 사용할 수 있습니다. 아래 예제를 참조하십시오.
5.2. SELinux 정책 모듈 생성: sepolicy generate 링크 복사링크가 클립보드에 복사되었습니다!
sepolgen 또는 selinux-polgengui 유틸리티를 사용하여 SELinux 정책을 생성했습니다. 이러한 툴은 sepolicy 제품군에 병합되었습니다. Red Hat Enterprise Linux 7에서 sepolicy generate 명령은 초기 SELinux 정책 모듈 템플릿을 생성하는 데 사용됩니다.
sepolgen 과 달리 sepolicy generate 를 root 사용자로 실행할 필요가 없습니다. 이 유틸리티는 또한 정책 패키지 파일(.pp.pp)을 설치하는 RPM 패키지를 빌드하는 데 사용할 수 있는 RPM 사양 파일을 생성하고, 인터페이스 파일(NAME .if)을 올바른 위치에 설치하고 커널에 SELinux 정책을 설치하고 레이블을 수정합니다. 설정 스크립트는 SELinux 정책을 계속 설치하고 레이블을 설정합니다. 또한 설치된 정책을 기반으로 하는 도움말 페이지는 sepolicy manpage 명령을 사용하여 생성됩니다. [7] 마지막으로 sepolicy 는 SELinux 정책과 매뉴얼 페이지를 RPM 패키지로 빌드 및 컴파일하고 다른 시스템에 설치할 준비가 되었습니다.
sepolicy 생성이 실행되면 다음 파일이 생성됩니다.
NAME.te- enforcing file을 입력합니다.- 이 파일은 특정 도메인의 모든 유형과 규칙을 정의합니다.
NAME.if- 인터페이스 파일- 이 파일은 시스템의 기본 파일 컨텍스트를 정의합니다.
NAME.te파일에서 생성된 파일 유형을 가져와 유형에 파일 경로를 연결합니다.restorecon및rpm과 같은 유틸리티에서는 이러한 경로를 사용하여 레이블을 작성합니다. NAME_selinux.spec- RPM 사양 파일- 이 파일은 SELinux 정책을 설치하고 레이블을 설정하는 RPM 사양 파일입니다. 이 파일은 또한 정책을 설명하는 인터페이스 파일과 도움말 페이지를 설치합니다. sepolicy manpage -d NAME 명령을 사용하여 도움말 페이지를 생성할 수 있습니다.
NAME.sh- Helper shell script- 이 스크립트는 시스템의 레이블을 컴파일, 설치 및 수정하는 데 도움이 됩니다. 또한 설치된 정책, 컴파일 및 기타 시스템에 설치하는 데 적합한 RPM 패키지를 기반으로 도움말 페이지를 생성합니다.
sepolicy 는 소스 도메인에서 대상 도메인으로 생성된 모든 경로를 출력합니다. sepolicy generate 에 대한 자세한 내용은 sepolicy-generate(8) 매뉴얼 페이지를 참조하십시오.
5.3. 도메인 전환 이해: sepolicy transition 링크 복사링크가 클립보드에 복사되었습니다!
setrans 유틸리티를 사용하여 두 도메인 또는 프로세스 유형 간 전환이 가능한지 확인하고 이러한 도메인 또는 프로세스 간에 전환하는 데 사용되는 모든 중간 유형을 출력했습니다. Red Hat Enterprise Linux 7에서 setrans 는 sepolicy 제품군의 일부로 제공되며 이제 sepolicy transition 명령을 대신 사용합니다.
sepolicy transition 명령은 SELinux 정책을 쿼리하고 프로세스 전환 보고서를 생성합니다. sepolicy transition 명령에는 두 개의 명령줄 인수( -s 옵션으로 지정됨)와 대상 도메인( -t 옵션으로 지정됨)이 필요합니다. 소스 도메인만 입력하면 sepolicy 전환에 소스 도메인이 전환할 수 있는 모든 가능한 도메인이 나열됩니다. 다음 출력에는 모든 항목이 포함되어 있지 않습니다. “@” 문자는 “다음을 실행” 함을 의미합니다.
sepolicy 전환 에서 소스 도메인에서 대상 도메인으로의 모든 전환 경로에 대한 SELinux 정책을 검사하고 이러한 경로를 나열합니다. 다음 출력은 완료되지 않았습니다.
sepolicy 전환에 대한 자세한 내용은 sepolicy-transition(8) 매뉴얼 페이지를 참조하십시오.
5.4. 수동 페이지 생성: sepolicy manpage 링크 복사링크가 클립보드에 복사되었습니다!
sepolicy manpage 명령은 프로세스 도메인을 문서화하는 SELinux 정책을 기반으로 수동 페이지를 생성합니다. 따라서 이러한 설명서는 항상 최신 상태입니다. 자동으로 생성된 각 도움말 페이지는 프로세스 도메인 이름과 _selinux 접미사(예: httpd_selinux )로 구성됩니다.
Entrypoints섹션에는 도메인 전환 중에 실행해야 하는 모든 실행 파일이 포함되어 있습니다.프로세스 유형섹션에는 대상 도메인과 동일한 접두사로 시작하는 모든 프로세스 유형이 나열됩니다.부울s섹션에는 도메인과 연결된 부울이 나열됩니다.Port Types섹션에는 도메인과 동일한 접두사와 일치하는 포트 유형이 포함되어 있으며 이러한 포트 유형에 할당된 기본 포트 번호를 설명합니다.Managed Files섹션에서는 도메인이 쓸 수 있는 유형과 이러한 유형과 연결된 기본 경로에 대해 설명합니다.파일 컨텍스트섹션에는 도메인과 연결된 모든 파일 유형이 포함되어 있으며 시스템의 기본 경로 레이블과 함께 이러한 파일 유형을 사용하는 방법을 설명합니다.공유 파일섹션에서는public_content_t와 같은 도메인 공유 유형을 사용하는 방법을 설명합니다.
sepolicy manpage 에 대한 자세한 내용은 sepolicy-manpage(8) 매뉴얼 페이지를 참조하십시오.
6장. 사용자 제한 링크 복사링크가 클립보드에 복사되었습니다!
unconfined_u 사용자에게 매핑됩니다. unconfined_u 에서 실행하는 모든 프로세스는 unconfined_t 도메인에 있습니다. 즉, 사용자는 표준 Linux DAC 정책의 한도 내에서 시스템 전체에 액세스할 수 있습니다. 그러나 Red Hat Enterprise Linux에서는 수많은 제한된 SELinux 사용자를 사용할 수 있습니다. 즉, 사용자는 제한된 기능 집합으로 제한할 수 있습니다. 각 Linux 사용자는 SELinux 정책을 사용하여 SELinux 사용자에게 매핑되므로 Linux 사용자는 다음을 수행할 수 없는 SELinux 사용자(예:)에 지정된 제한 사항을 상속할 수 있습니다.
- X 윈도우 시스템 실행
- 네트워킹 사용
- setuid 응용 프로그램 실행 (SELinux 정책이 허용하지 않는 경우)
- 또는 su 및 sudo 명령을 실행합니다.
user_u 사용자가 실행하는 프로세스는 user_t 도메인에 있습니다. 이러한 프로세스는 네트워크에 연결할 수 있지만 su 또는 sudo 명령을 실행할 수 없습니다. 이렇게 하면 사용자로부터 시스템을 보호하는 데 도움이 됩니다. 제한된 사용자 및 해당 기능에 대한 자세한 내용은 3.3절. “제한된 사용자 및 제한되지 않은 사용자”, 표 3.1. “SELinux 사용자 기능” 을 참조하십시오.
6.1. Linux 및 SELinux 사용자 맵핑 링크 복사링크가 클립보드에 복사되었습니다!
__default__ 로그인에 매핑됩니다(이는 SELinux unconfined_u 사용자에게 매핑됨). useradd 명령을 사용하여 Linux 사용자를 생성하면 옵션이 지정되지 않은 경우 SELinux unconfined_u 사용자에게 매핑됩니다. 다음은 default-mapping을 정의합니다.
__default__ unconfined_u s0-s0:c0.c1023 *
__default__ unconfined_u s0-s0:c0.c1023 *
6.2. 새로운 Linux 사용자 제한: useradd 링크 복사링크가 클립보드에 복사되었습니다!
unconfined_u 사용자에게 매핑된 Linux 사용자는 unconfined_t 도메인에서 실행됩니다. 이는 unconfined_u 에 매핑된 Linux 사용자로 로그인한 동안 id -Z 명령을 실행하여 확인할 수 있습니다.
id -Z
~]$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
unconfined_t 도메인에서 실행되면 SELinux 정책 규칙이 적용되지만, unconfined_t 도메인에서 실행되는 Linux 사용자가 거의 모든 액세스 권한을 허용하는 정책 규칙이 있습니다. 제한되지 않은 Linux 사용자가 SELinux 정책에서 정의한 애플리케이션을 실행하는 경우 unconfined_t 도메인에서 자체 제한된 도메인으로 전환할 수 있는 경우 제한되지 않은 Linux 사용자에게는 여전히 해당 제한된 도메인의 제한 사항이 적용됩니다. 이 경우의 보안 이점은 Linux 사용자가 제한되지 않았더라도 애플리케이션이 제한된 상태로 유지되므로 애플리케이션에서 결함을 악용하는 것은 정책에 의해 제한될 수 있다는 것입니다.
-Z 옵션을 사용하여 매핑되는 SELinux 사용자를 지정합니다. 다음 예제에서는 새 Linux 사용자인 useruuser 를 생성하고 해당 사용자를 SELinux user_u 사용자에게 매핑합니다. SELinux user_u 사용자에게 매핑된 Linux 사용자는 user_t 도메인에서 실행됩니다. 이 도메인에서 Linux 사용자는 SELinux 정책에서 허용하지 않는 한 setuid 애플리케이션을 실행할 수 없으며 su 또는 sudo 명령을 실행할 수 없으므로 이러한 명령을 사용하여 root 사용자가 되지 않습니다.
절차 6.1. user_u SELinux 사용자로 새 Linux 사용자 제한
- root 로서 SELinux
user_u사용자에게 매핑되는 새 Linux 사용자(useruuser)를 만듭니다.useradd -Z user_u useruuser
~]# useradd -Z user_u useruuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow useruuser와user_u간의 매핑을 보려면 root로 다음 명령을 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서 Linux
useruuser사용자에게 암호를 할당합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 현재 세션에서 로그아웃한 후 Linux
useruuser사용자로 로그인합니다. 로그인하면pam_selinux모듈은 Linux 사용자를 SELinux 사용자(이 경우user_u)에 매핑하고 결과 SELinux 컨텍스트를 설정합니다. 그런 다음 Linux 사용자의 쉘이 이 컨텍스트를 사용하여 시작됩니다. 다음 명령을 입력하여 Linux 사용자의 컨텍스트를 확인합니다.id -Z
~]$ id -Z user_u:user_r:user_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux
useruuser에서 로그아웃한 후 계정으로 다시 로그인합니다. Linuxuseruuser사용자가 필요하지 않은 경우 root로 다음 명령을 입력하여 홈 디렉터리와 함께 제거합니다.userdel -Z -r useruuser
~]# userdel -Z -r useruuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3. 기존 Linux 사용자 제한: semanage login 링크 복사링크가 클립보드에 복사되었습니다!
unconfined_u 사용자(기본 동작)에 매핑되고 매핑된 SELinux 사용자를 변경하려는 경우 semanage login 명령을 사용합니다. 다음 예제에서는 newuser 라는 새 Linux 사용자를 생성한 다음 해당 Linux 사용자를 SELinux user_u 사용자에게 매핑합니다.
절차 6.2. SELinux 사용자에게 Linux 사용자 매핑
- root 로서 새 Linux 사용자(
newuser)를 만듭니다. 이 사용자는 기본 매핑을 사용하므로 semanage login -l 출력에 표시되지 않습니다.useradd newuser
~]# useradd newuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux
newuser사용자를 SELinuxuser_u사용자에게 매핑하려면 root로 다음 명령을 입력합니다.semanage login -a -s user_u newuser
~]# semanage login -a -s user_u newuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow a옵션은새 레코드를 추가하고-s옵션은 Linux 사용자를 매핑할 SELinux 사용자를 지정합니다. 마지막 인수newuser는 지정된 SELinux 사용자에게 매핑하려는 Linux 사용자입니다. - Linux
newuser사용자와user_u간의 매핑을 보려면semanage유틸리티를 다시 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서 Linux
newuser사용자에게 암호를 할당합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 현재 세션에서 로그아웃한 후 Linux
newuser사용자로 로그인합니다. 다음 명령을 입력하여newuser의 SELinux 컨텍스트를 확인합니다.id -Z
~]$ id -Z user_u:user_r:user_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Linux
newuser의 세션에서 로그아웃한 후 계정으로 다시 로그인합니다. Linuxnewuser사용자를 원하지 않는 경우 root로 다음 명령을 입력하여 홈 디렉토리와 함께 제거합니다.userdel -r newuser
~]# userdel -r newuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow root 로서 Linuxnewuser사용자와user_u간의 매핑을 제거합니다.semanage login -d newuser
~]# semanage login -d newuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4. 기본 맵핑 변경 링크 복사링크가 클립보드에 복사되었습니다!
__default__ 로그인에 매핑됩니다(이는 SELinux unconfined_u 사용자에게 매핑됨). 새 Linux 사용자를 원하는 경우 Linux 사용자는 기본적으로 SELinux 사용자에게 구체적으로 매핑되지 않은 경우 semanage login 명령을 사용하여 기본 매핑을 변경합니다.
unconfined_u 에서 user_u 로 변경합니다.
semanage login -m -S targeted -s "user_u" -r s0 __default__
~]# semanage login -m -S targeted -s "user_u" -r s0 __default__
__default__ login이 user_u:에 매핑되었는지 확인합니다.
__default__ 로그인에 따라 user_u 에 매핑됩니다.
__default__ login을 SELinux unconfined_u 사용자에게 매핑합니다.
semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 __default__
~]# semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 __default__
6.5. xguest: 키오스크 모드 링크 복사링크가 클립보드에 복사되었습니다!
xguest_u 에 할당되어 있습니다. 표 3.1. “SELinux 사용자 기능” 을 참조하십시오. 파일 생성 또는 설정 변경과 같이 이 계정으로 로그인하는 동안 변경한 내용은 로그아웃 시 손실됩니다.
- root로 xguest 패키지를 설치합니다. 필요에 따라 종속성을 설치합니다.
yum install xguest
~]# yum install xguestCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 다양한 사용자가 키오스크 계정을 사용할 수 있도록 하려면 계정은 암호로 보호되지 않으므로 SELinux가 강제 모드로 실행 중인 경우에만 계정을 보호할 수 있습니다. 이 계정으로 로그인하기 전에
getenforce유틸리티를 사용하여 SELinux가 강제 모드에서 실행 중인지 확인합니다.getenforce
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 강제 모드로 변경하는 데 대한 정보는 4.4절. “SELinux 상태 및 모드의 영구 변경” 을 참조하십시오. SELinux가 허용 모드이거나 비활성화된 경우 이 계정으로 로그인할 수 없습니다. - GDM(GNOME Display Manager)을 사용하면 이 계정에만 로그인할 수 있습니다. xguest 패키지가 설치되면 guest
계정이GDM 로그인 화면에 추가됩니다.
6.6. 사용자 애플리케이션 실행 부울 링크 복사링크가 클립보드에 복사되었습니다!
/tmp 디렉토리에서 애플리케이션(사용자의 권한을 상속하는) 애플리케이션을 실행할 수 있도록 허용하지 않으면 결함이 있거나 악의적인 애플리케이션이 사용자가 소유한 파일을 수정하지 못하도록 합니다.
setsebool 유틸리티를 사용하여 구성됩니다. setsebool -P 명령은 영구적으로 변경합니다. 재부팅 시 변경 사항을 유지하지 않으려면 -P 옵션을 사용하지 마십시오.
guest_t
guest_t 도메인의 Linux 사용자가 홈 디렉토리 및 /tmp 에서 애플리케이션을 실행하지 못하도록 하려면 다음을 수행하십시오.
setsebool -P guest_exec_content off
~]# setsebool -P guest_exec_content off
xguest_t
xguest_t 도메인의 Linux 사용자가 홈 디렉토리 및 /tmp 에서 애플리케이션을 실행하지 못하도록 하려면 다음을 수행하십시오.
setsebool -P xguest_exec_content off
~]# setsebool -P xguest_exec_content off
user_t
user_t 도메인의 Linux 사용자가 홈 디렉토리 및 /tmp 에서 애플리케이션을 실행하지 못하도록 하려면 다음을 수행합니다.
setsebool -P user_exec_content off
~]# setsebool -P user_exec_content off
staff_t
staff_t 도메인의 Linux 사용자가 홈 디렉토리 및 /tmp 에서 애플리케이션을 실행하지 못하도록 하려면 다음을 수행합니다.
setsebool -P staff_exec_content off
~]# setsebool -P staff_exec_content off
staff_exec_content 부울을 켜고 staff_t 도메인의 Linux 사용자가 홈 디렉토리 및 /tmp 에서 애플리케이션을 실행할 수 있도록 하려면 다음을 수행합니다.
setsebool -P staff_exec_content on
~]# setsebool -P staff_exec_content on
7장. Sandbox를 사용하여 프로그램 보안 설정 링크 복사링크가 클립보드에 복사되었습니다!
7.1. Sandbox를 사용하여 애플리케이션 실행 링크 복사링크가 클립보드에 복사되었습니다!
yum install policycoreutils-sandbox
~]# yum install policycoreutils-sandbox
sandbox [options] application_under_test
~]$ sandbox [options] application_under_test
-X 옵션을 사용합니다. 예를 들어 다음과 같습니다.
sandbox -X evince
~]$ sandbox -X evince
X 는 필요한 리소스를 복사하고 사용자의 홈 디렉터리 또는 /tmp 디렉터리에 닫힌 가상 환경을 생성하기 전에 애플리케이션에 대해 제한된 보조 X 서버를 설정하도록 샌드박스에 지시합니다.
sandbox -H sandbox/home -T sandbox/tmp -X firefox
~]$ sandbox -H sandbox/home -T sandbox/tmp -X firefox
sandbox/home 은 /home 및 sandbox /tmp 에 사용됩니다. 다른 애플리케이션은 다양한 제한된 환경에 배치됩니다. 애플리케이션은 전체 화면 모드로 실행되므로 다른 기능에 액세스할 수 없습니다. 앞서 언급했듯이 sandbox_x_file_t 로 레이블이 지정된 파일을 제외하고 파일을 열 수 없습니다.
sandbox_web_t 레이블을 사용합니다. 예를 들어 Firefox 를 시작하려면 다음을 수행합니다.
sandbox ‑X ‑t sandbox_web_t firefox
~]$ sandbox ‑X ‑t sandbox_web_t firefox
샌드박스 (8) 도움말 페이지 및 사용 가능한 전체 옵션 목록을 참조하십시오.
8장. sVirt 링크 복사링크가 클립보드에 복사되었습니다!
비가상화 환경
가상화 환경
8.1. 보안 및 가상화 링크 복사링크가 클립보드에 복사되었습니다!
8.2. sVirt 레이블링 링크 복사링크가 클립보드에 복사되었습니다!
ps -eZ | grep qemu
~]# ps -eZ | grep qemu
system_u:system_r:svirt_t:s0:c87,c520 27950 ? 00:00:17 qemu-kvm
system_u:system_r:svirt_t:s0:c639,c757 27989 ? 00:00:06 qemu-system-x86
ls -lZ /var/lib/libvirtimages/*
~]# ls -lZ /var/lib/libvirtimages/*
system_u:object_r:svirt_image_t:s0:c87,c520 image1
| 유형 | SELinux 문맥 | Description |
|---|---|---|
| 가상 머신 프로세스 | system_u:system_r:svirt_t:MCS1 | MCS1은 임의로 선택한 MCS 필드입니다. 현재 약 50만 개의 라벨이 지원됩니다. |
| 가상 머신 이미지 | system_u:object_r:svirt_image_t:MCS1 | 동일한 MCS 필드가 있는 svirt_t 레이블이 지정된 프로세스만 해당 이미지 파일 및 장치를 읽고 쓸 수 있습니다. |
| 가상 머신 공유 읽기/쓰기 콘텐츠 | system_u:object_r:svirt_image_t:s0 | svirt_t 라는 모든 프로세스는 svirt_image_t:s0 파일 및 장치에 쓸 수 있습니다. |
| 가상 머신 이미지 | system_u:object_r:virt_content_t:s0 | 이미지가 종료될 때 사용되는 시스템 기본 레이블입니다. 이 레이블이 있는 파일/장치를 읽을 수 있는 svirt_t 가상 프로세스가 없습니다. |
9장. 보안 Linux 컨테이너 링크 복사링크가 클립보드에 복사되었습니다!
virsh 명령줄 유틸리티를 사용할 수도 있습니다.
10장. SELinux systemd 액세스 제어 링크 복사링크가 클립보드에 복사되었습니다!
systemd 데몬에 의해 제어됩니다. 이전 Red Hat Enterprise Linux 릴리스에서 데몬은 다음 두 가지 방법으로 시작할 수 있습니다.
- 부팅 시 System V
init데몬이init.rc스크립트를 시작한 다음 이 스크립트가 필요한 데몬을 시작했습니다. 예를 들어 부팅 시 시작된 Apache 서버에는 다음 SELinux 레이블이 있습니다.system_u:system_r:httpd_t:s0
system_u:system_r:httpd_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 관리자가
init.rc스크립트를 수동으로 시작하여 데몬이 실행됩니다. 예를 들어 서비스 httpd restart 명령이 Apache 서버에서 호출되면 결과 SELinux 레이블은 다음과 같습니다.unconfined_u:system_r:httpd_t:s0
unconfined_u:system_r:httpd_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
systemd 데몬에서는 전환이 매우 다릅니다. systemd 는 시스템에서 데몬을 시작하고 중지하기 위해 모든 호출을 처리하므로 init_t 유형을 사용하여 데몬을 수동으로 다시 시작할 때 레이블의 사용자 부분을 덮어쓸 수 있습니다. 결과적으로 위의 두 시나리오의 레이블은 예상대로 system_u:system_r:httpd_t:s0 이며 SELinux 정책이 개선되어 어떤 도메인을 제어할 수 있는지 제어할 수 있었습니다.
10.1. 서비스의 SELinux 액세스 권한 링크 복사링크가 클립보드에 복사되었습니다!
systemd 가 모든 서비스를 시작 및 중지하고 사용자 및 프로세스는 systemctl 유틸리티를 사용하여 systemd 와 통신합니다. systemd 데몬은 SELinux 정책을 참조하고 호출 프로세스의 레이블과 호출자가 관리하려고 하는 단위 파일의 레이블을 확인한 다음, 호출자가 액세스할 수 있는지 여부를 SELinux에 요청할 수 있습니다. 이 접근 방식을 통해 시스템 서비스의 시작 및 중지를 비롯한 중요한 시스템 기능에 대한 액세스 제어를 강화합니다.
systemctl 을 실행하여 D-Bus 메시지를 systemd 로 보낼 수 있도록 허용해야 했으며, 이 메시지는 NetworkManager가 요청한 모든 서비스를 시작하거나 중지했습니다. 실제로 NetworkManager는 systemctl 이 수행할 수 있는 모든 작업을 수행할 수 있습니다. 또한 특정 서비스를 시작하거나 중지할 수 있도록 제한된 관리자를 설정하는 것도 불가능했습니다.
systemd 는 SELinux Access Manager로도 작동합니다. systemctl 을 실행하는 프로세스의 레이블 또는 D-Bus 메시지를 systemd 로 보낸 프로세스를 검색할 수 있습니다. 그런 다음 데몬은 프로세스가 구성하려는 유닛 파일의 레이블을 조회합니다. 마지막으로 SELinux 정책에서 프로세스 레이블과 유닛 파일 레이블 간의 특정 액세스를 허용하는 경우 커널에서 정보를 검색할 수 있습니다. 즉, 특정 서비스에 대해 systemd 와 상호 작용해야 하는 손상된 애플리케이션을 이제 SELinux로 제한할 수 있습니다. 정책 작성자는 이러한 세분화된 제어를 사용하여 관리자를 제한할 수도 있습니다. 정책 변경에는 service 라는 새 클래스와 다음 권한이 포함됩니다.
systemd 의 액세스 제어 작업이 모든 경우에 일치하지 않습니다. SELinux 액세스 검사를 사용하여 systemd 메서드 호출을 연결하도록 매핑이 정의되었습니다. 표 10.1. “SELinux 액세스 검사에서 systemd 장치 파일 메서드 호출 매핑” 는 단위 파일에 대한 액세스 검사를 매핑하고 표 10.2. “SELinux 액세스 검사에서 systemd 일반 시스템 호출 매핑” 는 일반적으로 시스템에 대한 액세스 검사를 다룹니다. 두 테이블에 일치하는 항목이 없으면 정의되지 않은 시스템 검사가 호출됩니다.
systemd 장치 파일 방법 | SELinux 액세스 확인 |
|---|---|
| DisableUnitFiles | 비활성화 |
| EnableUnitFiles | 활성화 |
| GetUnit | 상태 |
| GetUnitByPID | 상태 |
| GetUnitFileState | 상태 |
| 강제 종료 | stop |
| KillUnit | stop |
| LinkUnitFiles | 활성화 |
| ListUnits | 상태 |
| LoadUnit | 상태 |
| MaskUnitFiles | 비활성화 |
| PresetUnitFiles | 활성화 |
| ReenableUnitFiles | 활성화 |
| 다시 실행 | 시작 |
| 새로 고침 | 새로 고침 |
| ReloadOrRestart | 시작 |
| ReloadOrRestartUnit | 시작 |
| ReloadOrTryRestart | 시작 |
| ReloadOrTryRestartUnit | 시작 |
| ReloadUnit | 새로 고침 |
| ResetFailed | stop |
| ResetFailedUnit | stop |
| 재시작 | 시작 |
| RestartUnit | 시작 |
| 시작 | 시작 |
| StartUnit | 시작 |
| StartUnitReplace | 시작 |
| 중지 | stop |
| StopUnit | stop |
| TryRestart | 시작 |
| TryRestartUnit | 시작 |
| UnmaskUnitFiles | 활성화 |
systemd 일반 시스템 호출 | SELinux 액세스 확인 |
|---|---|
| ClearJobs | reboot |
| FlushDevices | Halted |
| get | 상태 |
| GetAll | 상태 |
| GetJob | 상태 |
| GetSeat | 상태 |
| GetSession | 상태 |
| GetSessionByPID | 상태 |
| GetUser | 상태 |
| Halted | Halted |
| 인트로스펙션 | 상태 |
| kexec | reboot |
| KillSession | Halted |
| KillUser | Halted |
| ListJobs | 상태 |
| ListSeats | 상태 |
| ListSessions | 상태 |
| ListUsers | 상태 |
| LockSession | Halted |
| PowerOff | Halted |
| 재부팅 | reboot |
| SetUserLinger | Halted |
| TerminateSeat | Halted |
| TerminateSession | Halted |
| TerminateUser | Halted |
예 10.1. 시스템 서비스에 대한 SELinux 정책
sesearch 유틸리티를 사용하면 시스템 서비스에 대한 정책 규칙을 나열할 수 있습니다. 예를 들어 sesearch -A -s NetworkManager_t -c service 명령을 호출하면 다음이 반환됩니다.
10.2. SELinux 및 journald 링크 복사링크가 클립보드에 복사되었습니다!
systemd 에서 journald 데몬( systemd-journal라고도 함)은 로깅 데이터를 수집하고 저장하는 시스템 서비스인 syslog 유틸리티의 대안입니다. 커널에서 수신되는 로깅 정보, 시스템 서비스의 표준 및 오류 출력에서 libc syslog() 함수를 사용하는 사용자 프로세스에서 또는 기본 API를 사용하여 구조화 및 인덱싱된 저널을 생성하고 유지 관리합니다. 각 로그 메시지의 여러 메타데이터 필드를 안전한 방식으로 암시적으로 수집합니다.
systemd-journal 서비스를 SELinux와 함께 사용하여 보안을 강화할 수 있습니다. SELinux는 설계한 작업만 수행할 수 있도록 허용하여 프로세스를 제어합니다. 정책 작성자의 보안 목표에 따라 때로는 더 적은 경우도 있습니다. 예를 들어 SELinux는 손상된 ntpd 프로세스가 네트워크 시간 처리 이외의 작업을 수행하지 못하도록 합니다. 그러나 ntpd 프로세스는 SELinux가 손상된 프로세스가 해당 메시지를 계속 전송할 수 있도록 syslog 메시지를 보냅니다. 손상된 ntpd 는 다른 데몬과 일치하도록 syslog 메시지를 포맷하고 관리자가 잘못되거나 전체 시스템을 손상시키기 위해 syslog 파일을 읽는 유틸리티가 더 나을 수 있습니다.
systemd-journal 데몬은 모든 로그 메시지를 확인하고 특히 SELinux 레이블을 추가합니다. 그러면 로그 메시지의 불일치가 감지되고 발생하기 전에 이 유형의 공격을 방지할 수 있습니다. journalctl 유틸리티를 사용하여 systemd 저널의 로그를 쿼리할 수 있습니다. 명령줄 인수를 지정하지 않으면 이 유틸리티를 실행하면 가장 오래된 항목부터 시작하여 저널의 전체 내용이 나열됩니다. 시스템 구성 요소에 대한 로그를 포함하여 시스템에서 생성된 모든 로그를 보려면 root로 journalctl 을 실행합니다. 루트가 아닌 사용자로 실행하는 경우 현재 로그인한 사용자와 관련된 로그로만 출력이 제한됩니다.
예 10.2. journalctl로 로그 나열
journalctl 을 사용할 수 있습니다. 예를 들어 다음 명령은 system_u:system_r:policykit_t:s0 레이블에서 로그인한 모든 로그를 나열합니다.
journalctl 에 대한 자세한 내용은 journalctl(1) 매뉴얼 페이지를 참조하십시오.
11장. 문제 해결 링크 복사링크가 클립보드에 복사되었습니다!
audit2allow 를 사용하여 사용자 지정 정책 모듈을 생성하는 방법을 설명합니다.
11.1. 액세스가 거부되면 어떤 문제가 발생합니까 링크 복사링크가 클립보드에 복사되었습니다!
/var/log/audit/audit.log/var/log/messages/var/log/audit/audit.log. 더 읽기 쉬운 거부 메시지도 /var/log/messages로 전송setroubleshootd 및 auditd 데몬이 실행 중인 경우 SELinux에서 액세스를 거부하면 경고가 표시됩니다.
Forbidden You don't have permission to access file name on this server
Forbidden
You don't have permission to access file name on this server
/var/log/messages 및 /var/log/audit/audit.log 의 "SELinux is preventing" 및 "denied" 오류를 각각 확인합니다. root 사용자로 다음 명령을 실행하여 수행할 수 있습니다.
grep "SELinux is preventing" /var/log/messages
~]# grep "SELinux is preventing" /var/log/messages
grep "denied" /var/log/audit/audit.log
~]# grep "denied" /var/log/audit/audit.log
11.2. 상위 세 가지 문제 원인 링크 복사링크가 클립보드에 복사되었습니다!
11.2.1. 문제 레이블 지정 링크 복사링크가 클립보드에 복사되었습니다!
/var/www/html/ 을 사용하는 대신 관리자가 /srv/myweb/ 을 사용하려고 합니다. Red Hat Enterprise Linux에서 /srv 디렉터리는 var_t 유형으로 레이블이 지정됩니다. /srv 에서 생성된 파일 및 디렉터리는 이 유형을 상속합니다. 또한 최상위 디렉터리(예: /myserver)에서 새로 생성된 오브젝트는 default_t 유형으로 레이블을 지정할 수 있습니다. SELinux는 Apache HTTP Server(httpd)가 이러한 유형에 모두 액세스하지 못하도록 합니다. 액세스를 허용하려면 SELinux에서 /srv/myweb/ 의 파일에 httpd 에 액세스할 수 있는지 알아야 합니다.
semanage fcontext -a -t httpd_sys_content_t "/srv/myweb(/.*)?"
~]# semanage fcontext -a -t httpd_sys_content_t "/srv/myweb(/.*)?"
/srv/myweb/ 디렉터리(및 그 아래의 모든 파일 및 디렉터리)에 대한 컨텍스트를 SELinux file-context 구성에 추가합니다.[8]. semanage 유틸리티는 컨텍스트를 변경하지 않습니다. root 로 restorecon 유틸리티를 실행하여 변경 사항을 적용합니다.
restorecon -R -v /srv/myweb
~]# restorecon -R -v /srv/myweb
11.2.1.1. 올바른 문맥이란 무엇입니까? 링크 복사링크가 클립보드에 복사되었습니다!
matchpathcon 유틸리티는 파일 경로의 컨텍스트를 확인하고 해당 경로의 기본 레이블과 비교합니다. 다음 예제에서는 잘못 레이블이 지정된 파일이 포함된 디렉터리에서 matchpathcon 을 사용하는 방법을 보여줍니다.
matchpathcon -V /var/www/html/*
~]$ matchpathcon -V /var/www/html/*
/var/www/html/index.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
/var/www/html/page1.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
index.html 및 page1.html 파일은 user_home_t 유형으로 레이블이 지정됩니다. 이 유형은 사용자 홈 디렉토리의 파일에 사용됩니다. mv 명령을 사용하여 홈 디렉토리에서 파일을 이동하면 파일이 user_home_t 유형으로 레이블이 지정될 수 있습니다. 이 유형은 홈 디렉토리 외부에 없어야 합니다. restorecon 유틸리티를 사용하여 이러한 파일을 올바른 형식으로 복원합니다.
restorecon -v /var/www/html/index.html
~]# restorecon -v /var/www/html/index.html
restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0
-R 옵션을 사용합니다.
restorecon -R -v /var/www/html/
~]# restorecon -R -v /var/www/html/
restorecon reset /var/www/html/page1.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/index.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
matchpathcon 의 자세한 예제는 4.10.3절. “기본 SELinux 컨텍스트 확인” 을 참조하십시오.
11.2.2. 제한된 서비스 실행 방법은 무엇입니까? 링크 복사링크가 클립보드에 복사되었습니다!
httpd_can_network_connect_db 부울을 활성화합니다.
setsebool -P httpd_can_network_connect_db on
~]# setsebool -P httpd_can_network_connect_db on
getsebool 및 grep 유틸리티를 사용하여 액세스를 허용하는 부울을 사용할 수 있는지 확인합니다. 예를 들어 getsebool -a | grep ftp 명령을 사용하여 FTP 관련 부울을 검색합니다.
포트 번호
http 관련 포트를 나열합니다.
http_port_t 포트 유형은 포트 Apache HTTP Server가 수신할 수 있는 포트를 정의합니다. 이 경우 TCP 포트 80, 443, 488, 8008, 8009 및 8443입니다. 관리자가 httpd 가 포트 9876(Listen 9876)에서 수신 대기하도록 httpd.conf 를 구성하지만 이를 반영하도록 정책이 업데이트되지 않으면 다음 명령이 실패합니다.
systemctl start httpd.service
~]# systemctl start httpd.service
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
/var/log/audit/audit.log 에 기록됩니다.
type=AVC msg=audit(1225948455.061:294): avc: denied { name_bind } for pid=4997 comm="httpd" src=9876 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket
type=AVC msg=audit(1225948455.061:294): avc: denied { name_bind } for pid=4997 comm="httpd" src=9876 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket
httpd 가 http_port_t 포트 유형에 대해 나열되지 않은 포트에서 수신 대기하도록 허용하려면 semanage port 명령을 입력하여 정책 구성에 포트를 추가합니다.[9]:
semanage port -a -t http_port_t -p tcp 9876
~]# semanage port -a -t http_port_t -p tcp 9876
옵션은 새 레코드를 추가하고, -t 옵션은 유형을 정의하고, -p 옵션은 프로토콜을 정의합니다. 마지막 인수는 추가할 포트 번호입니다.
11.2.3. 진화하는 규칙 및 깨진 애플리케이션 링크 복사링크가 클립보드에 복사되었습니다!
audit2allow 유틸리티를 사용하여 액세스를 허용하는 사용자 지정 정책 모듈을 생성합니다. audit2allow 사용에 대한 자세한 내용은 11.3.8절. “액세스 허용: audit2allow” 을 참조하십시오.
11.3. 문제 해결 링크 복사링크가 클립보드에 복사되었습니다!
감사2allow 를 사용하여 사용자 지정 정책 모듈을 생성하는 방법.
11.3.1. Linux 권한 링크 복사링크가 클립보드에 복사되었습니다!
ls -l /var/www/html/index.html
~]$ ls -l /var/www/html/index.html
-rw-r----- 1 root root 0 2009-05-07 11:06 index.html
index.html 은 root 사용자 및 그룹이 소유합니다. root 사용자에게는 읽기 및 쓰기 권한(-rw)이 있으며 root 그룹의 멤버는 읽기 권한(-r-)을 갖습니다. 다른 모든 사용자에게는 액세스 권한이 없습니다(---). 기본적으로 이러한 권한은 httpd 가 이 파일을 읽는 것을 허용하지 않습니다. 이 문제를 해결하려면 chown 명령을 사용하여 소유자와 그룹을 변경합니다. 이 명령은 root로 실행해야 합니다.
chown apache:apache /var/www/html/index.html
~]# chown apache:apache /var/www/html/index.html
httpd 가 Linux Apache 사용자로 실행되는 기본 구성을 가정합니다. httpd 를 다른 사용자로 실행하는 경우 apache:apache 를 해당 사용자로 교체합니다.
11.3.2. 음소거 거부의 원인 링크 복사링크가 클립보드에 복사되었습니다!
semodule -DB
~]# semodule -DB
옵션은 dontaudit 규칙을 비활성화합니다. -B 옵션은 정책을 다시 빌드합니다. semodule -DB 를 실행한 후 권한 문제가 발생한 애플리케이션을 수행하고 애플리케이션과 관련된 SELinux 거부가 기록되고 있는지 확인합니다. dontaudit 규칙에 의해 일부 거부를 무시하고 처리해야 하므로 허용되는 거부를 결정할 때 주의하십시오. 확실하지 않거나 지침을 검색할 때 SELinux 목록(예: fedora-selinux-list )의 다른 SELinux 사용자와 개발자에게 문의하십시오.
dontaudit 규칙을 활성화하려면 root로 다음 명령을 입력합니다.
semodule -B
~]# semodule -B
-s domain 옵션과 grep 명령을 사용하여 검색 범위를 좁힙니다. 예를 들어 다음과 같습니다.
sesearch --dontaudit -s smbd_t | grep squid
~]$ sesearch --dontaudit -s smbd_t | grep squid
dontaudit smbd_t squid_port_t : tcp_socket name_bind ;
dontaudit smbd_t squid_port_t : udp_socket name_bind ;
11.3.3. 서비스 수동 페이지 링크 복사링크가 클립보드에 복사되었습니다!
httpd 가 NFS 볼륨에 액세스)이 포함됩니다. 이 정보는 표준 도움말 페이지 또는 sepolicy manpage 유틸리티를 사용하여 모든 서비스 도메인에 대한 SELinux 정책에서 자동으로 생성될 수 있는 도움말 페이지에 있을 수 있습니다. 이러한 도움말 페이지의 이름은 service-name_selinux 형식으로 지정됩니다. 이러한 도움말 페이지는 selinux-policy-doc 패키지와 함께 제공됩니다.
- Samba: samba_selinux(8) 도움말 페이지는 예를 들어
samba_enable_home_dirs부울을 활성화하면 Samba가 사용자 홈 디렉터리를 공유할 수 있음을 설명합니다. - NFS: nfsd_selinux(8) 도움말 페이지는 사용자가 가능한 한 방법으로 nfsd 프로세스를 보안할 수 있는 SELinux nfsd 정책을 설명합니다.
sepolicy manpage 에 대한 자세한 내용은 5.4절. “수동 페이지 생성: sepolicy manpage” 을 참조하십시오.
11.3.4. 허용 도메인 링크 복사링크가 클립보드에 복사되었습니다!
- 단일 프로세스(도메인) 실행 허용(도메인)을 실행하여 전체 시스템을 허용하도록 위험을 초래하지 않고 문제를 해결하는 데 사용할 수 있습니다.
- 이를 통해 관리자는 새 애플리케이션에 대한 정책을 만들 수 있습니다. 이전에는 최소 정책을 생성한 다음 전체 시스템을 허용 모드로 전환하여 애플리케이션을 실행할 수 있지만 SELinux 거부는 여전히 기록되었습니다. 그런 다음
audit2allow를 사용하여 정책을 작성할 수 있습니다. 이로 인해 전체 시스템이 위험해질 수 있습니다. 허용 도메인을 사용하면 새 정책의 도메인만 전체 시스템을 위험에 빠뜨리지 않고 허용으로 표시할 수 있습니다.
11.3.4.1. 도메인 허용 만들기 링크 복사링크가 클립보드에 복사되었습니다!
httpd_t 도메인( Apache HTTP Server가 실행되는 도메인)을 허용하도록 설정합니다.
semanage permissive -a httpd_t
~]# semanage permissive -a httpd_t
semodule -l | grep permissive
~]# semodule -l | grep permissive
permissive_httpd_t (null)
permissivedomains (null)
semanage permissive -d httpd_t
~]# semanage permissive -d httpd_t
11.3.4.2. 허용 도메인 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
permissivedomains.pp 모듈에는 시스템에 제공된 모든 허용 도메인 선언이 포함되어 있습니다. 모든 허용 도메인을 비활성화하려면 root로 다음 명령을 입력합니다.
semodule -d permissivedomains
~]# semodule -d permissivedomains
semodule --list-modules=full
~]# semodule --list-modules=full
11.3.4.3. 허용 도메인에 대한 거부 링크 복사링크가 클립보드에 복사되었습니다!
SYSCALL 메시지는 허용 도메인에 따라 다릅니다. 다음은 Apache HTTP 서버의 AVC 거부 (및 관련 시스템 호출)의 예입니다.
type=AVC msg=audit(1226882736.442:86): avc: denied { getattr } for pid=2427 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226882736.442:86): arch=40000003 syscall=196 success=no exit=-13 a0=b9a1e198 a1=bfc2921c a2=54dff4 a3=2008171 items=0 ppid=2425 pid=2427 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1226882736.442:86): avc: denied { getattr } for pid=2427 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226882736.442:86): arch=40000003 syscall=196 success=no exit=-13 a0=b9a1e198 a1=bfc2921c a2=54dff4 a3=2008171 items=0 ppid=2425 pid=2427 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
httpd_t 도메인은 허용되지 않으므로 작업이 거부되고 SYSCALL 메시지에 success=no 가 포함됩니다. 다음은 semanage permissive -a httpd_t 명령이 httpd_t 도메인을 허용하도록 실행되었음을 제외하고 동일한 상황에 대한 AVC 거부의 예입니다.
type=AVC msg=audit(1226882925.714:136): avc: denied { read } for pid=2512 comm="httpd" name="file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226882925.714:136): arch=40000003 syscall=5 success=yes exit=11 a0=b962a1e8 a1=8000 a2=0 a3=8000 items=0 ppid=2511 pid=2512 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1226882925.714:136): avc: denied { read } for pid=2512 comm="httpd" name="file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226882925.714:136): arch=40000003 syscall=5 success=yes exit=11 a0=b962a1e8 a1=8000 a2=0 a3=8000 items=0 ppid=2511 pid=2512 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
SYSCALL 메시지의 success=yes 에 표시된 대로 액세스가 거부되지 않았습니다.
11.3.5. 거부 검색 및 보기 링크 복사링크가 클립보드에 복사되었습니다!
auditd,rsyslogd 및 setroubleshootd 데몬이 실행 중인 것으로 가정합니다. 이러한 데몬을 시작하는 방법에 대한 자세한 내용은 4.2절. “사용된 로그 파일은 무엇입니까?” 을 참조하십시오. ausearch,aureport, sealert 와 같은 SELinux AVC 메시지를 검색하고 보는 데 사용할 수 있습니다.
ausearch
감사 데몬 로그를 쿼리할 수 있는 ausearch 유틸리티를 제공합니다.[10] ausearch 유틸리티는 /var/log/audit/audit.log 에 액세스하므로 root 사용자로 실행해야 합니다.
-c comm-name 옵션을 사용합니다. 여기서 comm-name 은 실행 파일 이름(예: Apache HTTP Server의 경우 httpd, Samba의 경우 smbd )을 사용합니다.
ausearch -m avc -c httpd
~]# ausearch -m avc -c httpd
ausearch -m avc -c smbd
~]# ausearch -m avc -c smbd
--interpret (-i) 옵션을 사용하거나 스크립트 처리를 위해 --raw (-r) 옵션을 사용하는 것이 좋습니다. 추가 ausearch 옵션은 ausearch(8) 매뉴얼 페이지를 참조하십시오.
aureport
aureport 유틸리티를 제공합니다. [11] aureport 유틸리티는 /var/log/audit/audit.log 에 액세스하므로 root 사용자로 실행해야 합니다. SELinux 거부 메시지 목록과 각 메시지가 발생한 빈도를 보려면 aureport -a 명령을 실행합니다. 다음은 두 개의 거부를 포함하는 출력 예입니다.
sealert
sealert 유틸리티를 제공합니다.[12] 거부는 /var/log/messages 에 표시된 대로 ID가 할당됩니다. 다음은 메시지 거부의 예입니다.
setroubleshoot: SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket. For complete SELinux messages. run sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7
setroubleshoot: SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket. For complete SELinux messages. run sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7
8c123656-5dda-4e5d-8791-9e3bd03786b7 입니다. l 옵션은 ID를 인수로 사용합니다. sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7 명령을 실행하면 SELinux가 액세스를 거부한 이유와 액세스 허용에 대한 자세한 분석을 제공합니다.
setroubleshootd,dbus 및 auditd 데몬이 실행 중인 경우 SELinux에서 액세스가 거부되면 경고가 표시됩니다.
Show 를 클릭하면 문제를 해결할 수 있는 sealert GUI가 시작됩니다.
11.3.6. 원시 감사 메시지 링크 복사링크가 클립보드에 복사되었습니다!
/var/log/audit/audit.log 에 기록됩니다. 다음은 Apache HTTP Server( httpd_t 도메인에서 실행)가 /var/www/html/file1 파일( samba_share_t 유형으로 레이블이 지정된)에 액세스하려고 할 때 발생한 AVC 거부 메시지(및 관련 시스템 호출)의 예입니다.
type=AVC msg=audit(1226874073.147:96): avc: denied { getattr } for pid=2465 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226874073.147:96): arch=40000003 syscall=196 success=no exit=-13 a0=b98df198 a1=bfec85dc a2=54dff4 a3=2008171 items=0 ppid=2463 pid=2465 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=6 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1226874073.147:96): avc: denied { getattr } for pid=2465 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226874073.147:96): arch=40000003 syscall=196 success=no exit=-13 a0=b98df198 a1=bfec85dc a2=54dff4 a3=2008171 items=0 ppid=2463 pid=2465 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=6 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
- { getattr }
- 중괄호의 항목은 거부된 권한을 나타냅니다.
getattr항목은 소스 프로세스가 대상 파일의 상태 정보를 읽으려고 한다는 것을 나타냅니다. 이 작업은 파일을 읽기 전에 수행됩니다. 이 작업은 레이블이 잘못되어 액세스 중인 파일로 인해 거부됩니다. 일반적으로 표시되는 권한에는getattr,read,write가 포함됩니다. - comm="httpd"
- 프로세스를 시작한 실행 파일입니다. 실행 파일의 전체 경로는 시스템 호출의
exe=섹션에 있습니다(이 경우exe="/usr/sbin/httpd"). - path="/var/www/html/file1"
- 프로세스가 액세스하려고 한 개체(대상)의 경로입니다.
- scontext="unconfined_u:system_r:httpd_t:s0"
- 거부된 작업을 시도한 프로세스의 SELinux 컨텍스트입니다. 이 경우
httpd_t도메인에서 실행 중인 Apache HTTP Server의 SELinux 컨텍스트입니다. - tcontext="unconfined_u:object_r:samba_share_t:s0"
- 프로세스가 액세스를 시도한 개체(대상)의 SELinux 컨텍스트입니다. 이 경우
file1의 SELinux 컨텍스트입니다.samba_share_t유형은httpd_t도메인에서 실행되는 프로세스에 액세스할 수 없습니다.특정 상황에서tcontext는 예를 들어 프로세스가 사용자 ID와 같은 실행 중인 프로세스의 특성을 변경하는 시스템 서비스를 실행하려고 할 때scontext와 일치할 수 있습니다. 또한 프로세스가 일반 제한보다 더 많은 리소스(예: 메모리)를 사용하려고 할 때t와 일치하여 해당 프로세스가 해당 제한을 중단할 수 있는지 보안 검사를 수행할 수 있습니다.context
SYSCALL) 메시지에서 다음 두 항목이 중요합니다.
success=no: 거부(AVC)가 적용되었는지 여부를 나타냅니다.success=no는 시스템 호출이 성공하지 못했음을 나타냅니다(SELinux 거부된 액세스).success=yes는 시스템 호출에 성공했음을 나타냅니다. 허용 도메인 또는 제한되지 않은 도메인(예:unconfined_service_t및kernel_t)에서 확인할 수 있습니다.exe="/usr/sbin/httpd": 프로세스를 시작한 실행 파일의 전체 경로(이 경우exe="/usr/sbin/httpd").
scontext)와 대상 컨텍스트(tcontext)를 비교합니다. 프로세스(scontext)가 이러한 오브젝트(tcontext)에 액세스해야 합니까? 예를 들어 Apache HTTP Server(httpd_t)는 별도로 구성된 경우를 제외하고 httpd_sys_content_t,public_content_t 등 httpd_selinux(8) 매뉴얼 페이지에 지정된 유형에만 액세스해야 합니다.
11.3.7. sealert 메시지 링크 복사링크가 클립보드에 복사되었습니다!
/var/log/messages 에 표시된 대로 ID가 할당됩니다. 다음은 Apache HTTP Server( httpd_t 도메인에서 실행)가 /var/www/html/file1 파일( samba_share_t 유형으로 레이블이 지정된)에 액세스하려고 할 때 발생한 AVC 거부( 메시지에로그됨)의 예입니다.
hostname setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l 32eee32b-21ca-4846-a22f-0ba050206786
hostname setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l 32eee32b-21ca-4846-a22f-0ba050206786
- 요약
- 거부된 작업에 대한 간략한 요약. 이는
/var/log/messages의 거부와 동일합니다. 이 예에서httpd프로세스는samba_share_t유형으로 레이블이 지정된 파일(file1)에 대한 액세스가 거부되었습니다. - 자세한 설명
- 보다 자세한 설명. 이 예에서
file1은samba_share_t유형으로 레이블이 지정됩니다. 이 유형은 Samba를 사용하여 내보내려는 파일 및 디렉터리에 사용됩니다. 설명은 이러한 액세스가 필요한 경우 Apache HTTP Server 및 Samba에서 액세스할 수 있는 유형으로 유형을 변경하는 것을 제안합니다. - 액세스 허용
- 액세스를 허용하는 방법에 대한 제안 사항. 이는 파일의 레이블을 다시 지정하거나 부울을 활성화하거나 로컬 정책 모듈을 만드는 것일 수 있습니다. 이 경우 제안은 Apache HTTP 서버와 Samba 모두에서 액세스할 수 있는 유형을 사용하여 파일에 레이블을 지정하는 것입니다.
- 명령 수정
- 액세스를 허용하고 거부를 해결하기 위해 제안된 명령. 이 예제에서는 Apache HTTP Server 및 Samba가 액세스할 수 있는
file1유형을public_content_t로 변경하는 명령을 제공합니다. - 추가 정보
- 정책 패키지 이름 및 버전(
selinux-policy-3.13.1-166.el7.noarch)과 같은 버그 보고서에 유용한 정보는 거부가 발생한 이유를 해결하는 데 도움이 되지 않을 수 있습니다. - 원시 감사 메시지
- 거부와 관련된
/var/log/audit/audit.log의 원시 감사 메시지입니다. AVC 거부의 각 항목에 대한 자세한 내용은 11.3.6절. “원시 감사 메시지” 을 참조하십시오.
11.3.8. 액세스 허용: audit2allow 링크 복사링크가 클립보드에 복사되었습니다!
audit2allow 유틸리티 사용을 시연하는 데만 사용됩니다.
audit2allow 유틸리티는 거부된 작업의 로그에서 정보를 수집한 다음 SELinux 정책 허용 규칙을 생성합니다.[13] 11.3.7절. “sealert 메시지” 에 따라 거부 메시지를 분석한 후 레이블 변경 또는 부울이 액세스할 수 없는 경우 audit2allow 를 사용하여 로컬 정책 모듈을 생성합니다. SELinux에서 액세스를 거부하는 경우 audit2allow 를 실행하면 이전에 거부된 액세스를 허용하는 Type Enforcement 규칙이 생성됩니다.
audit2allow 를 사용하여 첫 번째 옵션으로 로컬 정책 모듈을 생성하지 않아야 합니다. 레이블 지정 문제가 있는 경우 문제 해결을 시작해야 합니다. 두 번째 가장 자주 발생하는 사례는 프로세스 구성을 변경했으며 SELinux에 대해 알려주는 것을 잊어버리는 것입니다. 자세한 내용은 SELinux 오류의 4가지 주요 원인 백서를 참조하십시오.
audit2allow 를 사용하여 정책 모듈을 생성하는 방법을 보여줍니다.
- 거부 메시지 및 관련 시스템 호출은
/var/log/audit/audit.log파일에 기록됩니다.type=AVC msg=audit(1226270358.848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13 a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="certwatch" exe="/usr/bin/certwatch" subj=system_u:system_r:certwatch_t:s0 key=(null)type=AVC msg=audit(1226270358.848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13 a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="certwatch" exe="/usr/bin/certwatch" subj=system_u:system_r:certwatch_t:s0 key=(null)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서 certwatch 는var_t유형으로 레이블이 지정된 디렉터리에 대한 쓰기 액세스 권한이 거부되었습니다. 거부 메시지를 11.3.7절. “sealert 메시지” 에 따라 분석합니다. 레이블 변경 또는 부울이 액세스할 수 없는 경우audit2allow를 사용하여 로컬 정책 모듈을 생성합니다. - 다음 명령을 입력하여 액세스가 거부된 이유에 대한 사람이 읽을 수 있는 설명을 생성합니다.
audit2allow유틸리티는/var/log/audit/audit.log를 읽고 root 사용자로 실행해야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow a명령줄옵션을 사용하면 모든 감사 로그를 읽습니다. w옵션은사람이 읽을 수 있는 설명을 생성합니다. 표시된 대로 유형 적용 규칙이 누락되어 액세스가 거부되었습니다. - 거부된 액세스를 허용하는 유형 적용 규칙을 보려면 다음 명령을 입력합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요유형 적용 규칙이 누락된 경우 일반적으로 SELinux 정책의 버그로 인해 발생하며 Red Hat Bugzilla 에서 보고해야 합니다. Red Hat Enterprise Linux의 경우Red Hat Enterprise Linux제품에 대한 버그를 생성하고selinux-policy구성 요소를 선택합니다. 이러한 버그 보고서에 audit2allow -w -a 및 audit2allow -a 명령의 출력을 포함합니다. - audit2allow -a 에 의해 표시되는 규칙을 사용하려면 root로 다음 명령을 입력하여 사용자 지정 모듈을 생성합니다. M 옵션은 현재 작업 디렉터리에
-M으로 지정된 이름으로 Type Enforcement 파일(.te)을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 또한
audit2allow는 유형 시행 규칙을 정책 패키지(.pp)로 컴파일합니다.ls
~]# ls mycertwatch.pp mycertwatch.teCopy to Clipboard Copied! Toggle word wrap Toggle overflow 모듈을 설치하려면 root로 다음 명령을 입력합니다.semodule -i mycertwatch.pp
~]# semodule -i mycertwatch.ppCopy to Clipboard Copied! Toggle word wrap Toggle overflow 중요audit2allow로 생성된 모듈은 필요한 것보다 더 많은 액세스를 허용할 수 있습니다. review를 위해audit2allow로 생성된 정책을 업스트림 SELinux 목록에 게시하는 것이 좋습니다. 정책에 버그가 있다고 생각되면 Red Hat Bugzilla 에 버그를 생성하십시오.
grep 유틸리티를 사용하여 audit2allow 입력을 좁힙니다. 다음 예제에서는 grep 을 사용하여 certwatch 와 관련된 거부 메시지만 audit2allow 를 통해 보내는 방법을 보여줍니다.
12장. 추가 정보 링크 복사링크가 클립보드에 복사되었습니다!
12.1. 기여자 링크 복사링크가 클립보드에 복사되었습니다!
- Dominick Grift - 기술 편집자
- Murray McAllister - Red Hat 제품 보안
- James Morris - 기술 편집자
- Ericregister - 기술 편집자
- Scott Radvan - Red Hat 고객 콘텐츠 서비스
- Daniel Walsh - Red Hat 보안 엔지니어링
12.2. 기타 리소스 링크 복사링크가 클립보드에 복사되었습니다!
Fedora
- Fedora SELinux FAQ: https://fedoraproject.org/wiki/SELinux_FAQ.
국가안보국(NSA)
Tresys 기술
SELinux GitHub 리포지토리
- SELinux 프로젝트: https://github.com/SELinuxProject
- Tresys 기술: https://github.com/TresysTechnology/
SELinux 프로젝트 Wiki
- 설명서, 메일링 리스트, 웹사이트 및 툴에 대한 링크를 포함한 사용자 리소스: http://selinuxproject.org/page/User_Resources.
SELinux 노트북 - 기초 - 4번째 버전
디지털Ocean: CentOS 7의 SELinux 소개
IRC
- #SELinux
- #fedora-selinux
II 부. 제한된 서비스 관리 링크 복사링크가 클립보드에 복사되었습니다!
13장. Apache HTTP 서버 링크 복사링크가 클립보드에 복사되었습니다!
rpm -q httpd
~]$ rpm -q httpd
package httpd is not installed
yum 유틸리티를 root 사용자로 사용하여 설치합니다.
yum install httpd
~]# yum install httpd
13.1. Apache HTTP 서버 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
httpd)가 기본적으로 제한된 상태로 실행됩니다. 제한된 프로세스는 자체 도메인에서 실행되며 다른 제한된 프로세스와 분리됩니다. SELinux 정책 구성에 따라 공격자가 제한된 프로세스가 손상되면 공격자가 리소스에 대한 액세스와 가능한 손상을 제한합니다. 다음 예제에서는 자체 도메인에서 실행되는 httpd 프로세스를 보여줍니다. 이 예제에서는 httpd,setroubleshoot,setroubleshoot-server 및 policycoreutils-python 패키지가 설치되어 있다고 가정합니다.
- getenforce 명령을 실행하여 SELinux가 강제 모드에서 실행 중인지 확인합니다.
getenforce
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 SELinux가 강제 모드에서 실행되는 경우Enforcing을 반환합니다. - root로 다음 명령을 입력하여
httpd를 시작합니다.systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스가 실행 중인지 확인합니다. 출력에는 아래 정보가 포함되어야 합니다(시간 스탬프만 다릅니다).systemctl status httpd.service
~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Mon 2013-08-05 14:00:55 CEST; 8s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpd프로세스를 보려면 다음 명령을 실행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpd프로세스와 관련된 SELinux 컨텍스트는system_u:system_r:httpd_t:s0입니다. 컨텍스트의 마지막 부분인httpd_t는 유형입니다. 유형은 프로세스 및 파일의 유형에 대한 도메인을 정의합니다. 이 경우httpd프로세스는httpd_t도메인에서 실행됩니다.
httpd_t)가 파일, 기타 프로세스 및 시스템과의 상호 작용하는 방법을 정의합니다. httpd 액세스를 허용하려면 파일에 올바르게 레이블이 지정되어야 합니다. 예를 들어 httpd 는 httpd_sys_content_t 유형으로 레이블이 지정된 파일을 읽을 수 있지만 Linux(DAC) 권한이 쓰기 액세스를 허용하는 경우에도 해당 파일에 쓸 수 없습니다. 스크립트 네트워크 액세스 허용, NFS 및 CIFS 볼륨에 대한 httpd 액세스 허용, CGI(Common Gateway Interface) 스크립트를 실행할 수 있는 httpd 와 같은 특정 동작을 허용하려면 부울을 활성화해야 합니다.
httpd 가 TCP 포트 80, 443, 488, 8008, 8009 또는 8443 이외의 포트에서 수신 대기하도록 /etc/httpd/conf/httpd.conf 파일이 구성된 경우 semanage port 명령을 사용하여 SELinux 정책 구성에 새 포트 번호를 추가해야 합니다. 다음 예제에서는 httpd 에 대한 SELinux 정책 구성에 정의되지 않은 포트에서 수신 대기하도록 httpd 를 구성하는 방법을 보여줍니다. 결과적으로 httpd 가 시작되지 않습니다. 이 예제에서는 httpd 가 정책에 아직 정의되지 않은 비표준 포트에서 수신 대기할 수 있도록 SELinux 시스템을 구성하는 방법도 보여줍니다. 이 예제에서는 httpd 패키지가 설치되어 있다고 가정합니다. 예제에서 root 사용자로 각 명령을 실행합니다.
- 다음 명령을 입력하여
httpd가 실행 중이 아닌지 확인합니다.systemctl status httpd.service
~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력이 다르면 프로세스를 중지합니다.systemctl stop httpd.service
~]# systemctl stop httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow semanage유틸리티를 사용하여 SELinux가httpd가 수신 대기할 수 있는 포트를 확인합니다.semanage port -l | grep -w http_port_t
~]# semanage port -l | grep -w http_port_t http_port_t tcp 80, 443, 488, 8008, 8009, 8443Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/httpd/conf/httpd.conf파일을 root로 편집합니다.httpd에 대한 SELinux 정책 구성에 구성되지 않은 포트를 나열하도록Listen옵션을 구성합니다. 이 예에서는httpd가 포트 12345에서 수신 대기하도록 구성되어 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여
httpd를 시작합니다.systemctl start httpd.service
~]# systemctl start httpd.service Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 유사한 SELinux 거부 메시지가 기록됩니다.setroubleshoot: SELinux is preventing the httpd (httpd_t) from binding to port 12345. For complete SELinux messages. run sealert -l f18bca99-db64-4c16-9719-1db89f0d8c77
setroubleshoot: SELinux is preventing the httpd (httpd_t) from binding to port 12345. For complete SELinux messages. run sealert -l f18bca99-db64-4c16-9719-1db89f0d8c77Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이 예제에서 사용되는 대로 SELinux가 포트 12345에서 수신 대기하도록 허용하려면 다음 명령이 필요합니다.
semanage port -a -t http_port_t -p tcp 12345
~]# semanage port -a -t http_port_t -p tcp 12345Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpd를 다시 시작하고 새 포트에서 수신 대기하도록 합니다.systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이제 SELinux가 비표준 포트(이 예제의 TCP 12345)에서 수신 대기하도록 구성되어
가 이 포트에서 성공적으로 시작됩니다.httpd httpd가 TCP 포트 12345에서 수신 대기 및 통신하고 있음을 증명하려면 다음과 같이 지정된 포트에 대한 telnet 연결을 열고 HTTP GET 명령을 실행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
/var/www/html/ 디렉터리에 새 파일을 생성하고 상위 디렉터리(/var/www/html/)에서 httpd_sys_content_t 유형을 상속하는 파일을 보여줍니다.
- 다음 명령을 입력하여
/var/www/html/:의 SELinux 컨텍스트를 확인합니다.ls -dZ /var/www/html
~]$ ls -dZ /var/www/html drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이는/var/www/html/이httpd_sys_content_t유형으로 레이블이 지정됩니다. touch유틸리티를 root로 사용하여 새 파일을 생성합니다.touch /var/www/html/file1
~]# touch /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여 SELinux 컨텍스트를 확인합니다.
ls -Z /var/www/html/file1
~]$ ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
httpd_sys_content_t 유형으로 레이블이 지정된 file1 을 표시합니다. SELinux는 httpd 가 이 유형으로 레이블이 지정된 파일을 읽을 수 있도록 허용하지만 Linux 권한이 쓰기 액세스를 허용하는 경우에도 해당 파일에 쓸 수 없습니다. SELinux 정책은 httpd_t 도메인에서 실행되는 프로세스 유형을 정의합니다( httpd 가 실행되는 위치)는 읽고 쓸 수 있습니다. 따라서 프로세스가 다른 프로세스에서 사용할 파일에 액세스하는 것을 방지할 수 있습니다.
httpd 는 httpd_sys_content_t 유형으로 레이블이 지정된 파일에 액세스할 수 있지만 기본적으로 samba_share_t 유형으로 레이블이 지정된 파일에 액세스할 수 없습니다( Samba로 권장됨). 또한 사용자 홈 디렉터리의 파일은 user_home_t 유형으로 레이블이 지정됩니다. 기본적으로 httpd 가 사용자 홈 디렉터리의 파일을 읽거나 쓰는 것을 방지합니다.
httpd 와 함께 사용되는 몇 가지 유형을 나열합니다. 다양한 유형을 사용하여 유연한 액세스를 구성할 수 있습니다.
httpd_sys_content_t- 정적 웹 사이트에서 사용하는
.html파일과 같은 정적 웹 콘텐츠에 이 유형을 사용합니다. 이 유형으로 레이블이 지정된 파일은httpd및httpd에서 실행하는 스크립트에 액세스할 수 있습니다(읽기 전용). 기본적으로 이 유형으로 레이블이 지정된 파일과 디렉터리는httpd또는 기타 프로세스에서 작성하거나 수정할 수 없습니다. 기본적으로 에서 생성되거나/var/www/html/디렉터리에 복사된 파일은httpd_sys_content_t유형으로 레이블이 지정됩니다. httpd_sys_script_exec_thttpd를 실행할 스크립트에 이 유형을 사용합니다. 이 유형은 일반적으로/var/www/cgi-bin/디렉터리의 CGI(Common Gateway Interface) 스크립트에 사용됩니다. 기본적으로 SELinux 정책은httpd가 CGI 스크립트를 실행하지 못하도록 합니다. 이를 허용하려면httpd_sys_script_exec_t유형으로 스크립트에 레이블을 지정하고httpd_enable_cgi부울을 활성화합니다.로 레이블이 지정된 스크립트는httpd_sys_script_exec_thttpd_sys_script_t도메인에서 실행됩니다.httpd_sys_script_t도메인은postgresql_t및mysqld_t와 같은 다른 시스템 도메인에 액세스할 수 있습니다.httpd_sys_rw_content_t- 이 유형으로 레이블이 지정된 파일은
httpd_sys_script_exec_t유형으로 레이블이 지정된 스크립트에서 작성할 수 있지만 다른 유형으로 레이블이 지정된 스크립트에서 수정할 수 없습니다.httpd_sys_rw_content_t유형을 사용하여httpd_sys_script_exec_t유형으로 레이블이 지정된 스크립트에서 읽고 쓸 파일에 레이블을 지정해야 합니다. httpd_sys_ra_content_t- 이 유형으로 레이블이 지정된 파일은
httpd_sys_script_exec_t유형으로 레이블이 지정된 스크립트에서 추가할 수 있지만 다른 유형으로 레이블이 지정된 스크립트에서 수정할 수 없습니다.httpd_sys_ra_content_t유형을 사용하여httpd_sys_script_exec_t유형으로 레이블이 지정된 스크립트에서 읽고 추가할 파일에 레이블을 지정해야 합니다. httpd_unconfined_script_exec_t- 이 유형으로 레이블이 지정된 스크립트는 SELinux 보호 없이 실행됩니다. 다른 모든 옵션을 모두 고갈시킨 후 복잡한 스크립트에만 이 유형을 사용합니다.
httpd또는 전체 시스템에 대해 SELinux 보호를 비활성화하는 대신 이 유형을 사용하는 것이 좋습니다.
grep httpd /etc/selinux/targeted/contexts/files/file_contexts
~]$ grep httpd /etc/selinux/targeted/contexts/files/file_contexts
절차 13.1. SELinux 컨텍스트 변경
httpd 에서 사용할 새 디렉터리와 index.html 파일을 생성하고 해당 파일과 디렉터리에 레이블을 지정하여 httpd 액세스를 허용하는 방법을 보여줍니다.
- root
로Cryostat 유틸리티를 사용하여httpd에서 사용할 파일을 저장할 최상위 디렉터리 구조를 만듭니다.mkdir -p /my/website
~]# mkdir -p /my/websiteCopy to Clipboard Copied! Toggle word wrap Toggle overflow - file-context 구성의 패턴과 일치하지 않는 파일 및 디렉터리는
default_t유형으로 레이블을 지정할 수 있습니다. 이 유형은 제한된 서비스에 액세스할 수 없습니다.ls -dZ /my
~]$ ls -dZ /my drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /myCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root로 다음 명령을 입력하여
my/디렉토리 및 하위 디렉터리의 유형을httpd에 액세스할 수 있는 유형으로 변경합니다. 이제/my/website/에서 생성된 파일은default_t유형이 아닌httpd_sys_content_t유형을 상속하므로 httpd에 액세스할 수 있습니다.chcon -R -t httpd_sys_content_t /my/ touch /my/website/index.html ls -Z /my/website/index.html
~]# chcon -R -t httpd_sys_content_t /my/ ~]# touch /my/website/index.html ~]# ls -Z /my/website/index.html -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /my/website/index.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
httpd 에서 사용할 새 디렉터리와 index.html 파일을 생성하고 해당 디렉터리와 파일의 레이블을 지속적으로 변경하여 httpd 액세스를 허용하는 방법을 보여줍니다.
- root
로Cryostat 유틸리티를 사용하여httpd에서 사용할 파일을 저장할 최상위 디렉터리 구조를 만듭니다.mkdir -p /my/website
~]# mkdir -p /my/websiteCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root로 다음 명령을 입력하여 레이블 변경 사항을 파일 컨텍스트 구성에 추가합니다.
semanage fcontext -a -t httpd_sys_content_t "/my(/.*)?"
~]# semanage fcontext -a -t httpd_sys_content_t "/my(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow "/my(/.*)?"표현식은 레이블 변경이my/디렉토리와 그 아래의 모든 파일과 디렉터리에 적용됨을 의미합니다. touch유틸리티를 root로 사용하여 새 파일을 생성합니다.touch /my/website/index.html
~]# touch /my/website/index.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root로 다음 명령을 입력하여 레이블 변경 사항을 적용합니다.restorecon 은 2단계에서 semanage 명령으로 수정된 file-context 구성을 읽습니다.
restorecon -R -v /my/
~]# restorecon -R -v /my/ restorecon reset /my context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /my/website context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /my/website/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.3. 부울 링크 복사링크가 클립보드에 복사되었습니다!
httpd_anon_write 부울을 활성화하려면 root 사용자로 다음 명령을 입력합니다.
setsebool -P httpd_anon_write on
~]# setsebool -P httpd_anon_write on
setsebool -P httpd_anon_write off
~]# setsebool -P httpd_anon_write off
-P 옵션을 사용하지 마십시오.
httpd 가 실행되는 방식을 충족하는 일반적인 부울에 대한 설명입니다.
httpd_anon_write- 비활성화된 경우 이 부울을 사용하면
httpd가public_content_rw_t유형으로 레이블이 지정된 파일에 대한 읽기 액세스 권한만 가질 수 있습니다. 이 부울을 활성화하면httpd가 공용 파일 전송 서비스에 대한 파일을 포함하는 공용 디렉터리와 같이public_content_rw_t유형으로 레이블이 지정된 파일에 쓸 수 있습니다. httpd_mod_auth_ntlm_winbind- 이 부울을 활성화하면
httpd에서mod_auth_ntlm_winbind모듈을 사용하여 NTLM 및 Winbind 인증 메커니즘에 액세스할 수 있습니다. httpd_mod_auth_pam- 이 부울을 활성화하면
httpd에서mod_auth_pam모듈을 사용하여 PAM 인증 메커니즘에 액세스할 수 있습니다. httpd_sys_script_anon_write- 이 부울은 공용 파일 전송 서비스에서 사용되는 대로
public_content_rw_t유형으로 레이블이 지정된 파일에 대한 HTTP 스크립트가 허용되는지 여부를 정의합니다. httpd_builtin_scripting- 이 부울은
httpd스크립팅에 대한 액세스를 정의합니다. 이 부울을 활성화하려면 PHP 콘텐츠에 필요합니다. httpd_can_network_connect- 이 부울을 비활성화하면 HTTP 스크립트 및 모듈이 네트워크 또는 원격 포트에 대한 연결을 시작하지 못하게 합니다. 이 액세스를 허용하려면 이 부울을 활성화합니다.
httpd_can_network_connect_db- 이 부울을 비활성화하면 HTTP 스크립트 및 모듈이 데이터베이스 서버에 대한 연결을 시작하지 못하게 합니다. 이 액세스를 허용하려면 이 부울을 활성화합니다.
httpd_can_network_relayhttpd가 정방향 또는 역방향 프록시로 사용될 때 이 부울을 활성화합니다.httpd_can_sendmail- 이 부울을 비활성화하면 HTTP 모듈이 메일을 보내지 못하게 합니다. 이는
httpd에서 취약점을 발견해야 하는 스팸 공격을 방지할 수 있습니다. HTTP 모듈이 메일을 보낼 수 있도록 이 부울을 활성화합니다. httpd_dbus_avahi- 비활성화되면 이 부울은
D-Bus를 통해avahi서비스에 대한httpd액세스를 거부합니다. 이 액세스를 허용하려면 이 부울을 활성화합니다. httpd_enable_cgi- 비활성화되면 이 부울에서
httpd가 CGI 스크립트를 실행하지 못하도록 합니다.httpd가 CGI 스크립트를 실행할 수 있도록 하려면 이 부울을 활성화합니다(CGI 스크립트는httpd_sys_script_exec_t유형으로 레이블이 지정되어야 함). httpd_enable_ftp_server- 이 부울을 활성화하면
httpd가 FTP 포트에서 수신 대기하고 FTP 서버로 작동할 수 있습니다. httpd_enable_homedirs- 비활성화된 경우 이 부울은
httpd가 사용자 홈 디렉터리에 액세스하지 못하도록 합니다. 사용자 홈 디렉터리에 대한httpd액세스를 허용하려면 이 부울을 활성화합니다(예:/home/*/의 콘텐츠). httpd_execmem- 이 부울을 사용하면
httpd에서 실행 가능하고 쓰기 가능한 메모리 주소가 필요한 프로그램을 실행할 수 있습니다. 이 부울을 활성화하면 버퍼 오버플로에 대한 보호가 감소하지만 특정 모듈 및 애플리케이션(예: Java 및 킥 애플리케이션)에 대한 보호 권한이 필요하므로 보안 관점에서는 사용하지 않는 것이 좋습니다. httpd_ssi_exec- 이 부울은 웹 페이지의 서버 측에 SSI(서버 측) 요소를 포함할 수 있는지 여부를 정의합니다.
httpd_tty_comm- 이 부울은
httpd가 제어 터미널에 액세스할 수 있는지 여부를 정의합니다. 일반적으로 이 액세스는 필요하지 않지만 SSL 인증서 파일을 구성하는 등의 경우 터미널 액세스가 암호 프롬프트를 표시하고 처리해야 합니다. httpd_unified- 활성화하면 이 부울을 사용하면
httpd_t가 모든httpd유형(즉, sys_content_t를 실행, 읽기 또는 쓰기)에 액세스할 수 있습니다. 비활성화된 경우 읽기 전용, 쓰기 가능 또는 실행 가능한 웹 콘텐츠 간에 분리가 수행됩니다. 이 부울을 비활성화하면 추가적인 보안 수준이 보장되지만, 각각 보유해야 하는 파일 액세스에 따라 스크립트 및 기타 웹 콘텐츠에 개별적으로 레이블을 지정하는 관리 오버헤드가 추가됩니다. httpd_use_cifs- Samba를 사용하여 마운트된 파일 시스템과 같이
cifs_t유형으로 레이블이 지정된 CIFS 볼륨의 파일에httpd액세스를 허용하려면 이 부울을 활성화합니다. httpd_use_nfs- NFS를 사용하여 마운트된 파일 시스템과 같이
nfs_t유형으로 레이블이 지정된 NFS 볼륨의 파일에httpd액세스를 허용하려면 이 부울을 활성화합니다.
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
13.4. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
13.4.1. 정적 사이트 실행 링크 복사링크가 클립보드에 복사되었습니다!
.html 파일에 httpd_sys_content_t 유형의 레이블을 지정합니다. 기본적으로 Apache HTTP 서버는 httpd_sys_content_t 유형으로 레이블이 지정된 파일에 쓸 수 없습니다. 다음 예제에서는 읽기 전용 웹 사이트에 대한 파일을 저장할 새 디렉터리를 생성합니다.
- root
로Cryostat 유틸리티를 사용하여 최상위 디렉토리를 생성합니다.mkdir /mywebsite
~]# mkdir /mywebsiteCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
/mywebsite/index.html파일을 만듭니다. 다음 콘텐츠를 복사하여/mywebsite/index.html에 붙여넣습니다.<html> <h2>index.html from /mywebsite/</h2> </html>
<html> <h2>index.html from /mywebsite/</h2> </html>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Apache HTTP Server가
/mywebsite/및 그 아래의 파일 및 하위 디렉터리에 대한 읽기 전용 액세스만 허용하려면httpd_sys_content_t유형의 디렉터리에 레이블을 지정합니다. root로 다음 명령을 입력하여 레이블 변경 사항을 파일 컨텍스트 구성에 추가합니다.semanage fcontext -a -t httpd_sys_content_t "/mywebsite(/.*)?"
~]# semanage fcontext -a -t httpd_sys_content_t "/mywebsite(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow restorecon유틸리티를 root로 사용하여 레이블을 변경합니다.restorecon -R -v /mywebsite
~]# restorecon -R -v /mywebsite restorecon reset /mywebsite context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /mywebsite/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이 예에서는
/etc/httpd/conf/httpd.conf파일을 root로 편집합니다. 기존DocumentRoot옵션을 주석 처리합니다.DocumentRoot "/mywebsite"옵션을 추가합니다. 편집 후 이러한 옵션은 다음과 같이 표시됩니다.#DocumentRoot "/var/www/html" DocumentRoot "/mywebsite"
#DocumentRoot "/var/www/html" DocumentRoot "/mywebsite"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root로 다음 명령을 입력하여 Apache HTTP Server의 상태를 확인합니다. 서버가 중지되면 시작합니다.
systemctl status httpd.service
~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서버가 실행 중인 경우 root로 다음 명령을 실행하여 서비스를 다시 시작합니다(httpd.conf에 대한 변경 사항도 적용됨).systemctl status httpd.service
~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Wed 2014-02-05 13:16:46 CET; 2s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl restart httpd.service
~]# systemctl restart httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 웹 브라우저를 사용하여
http://localhost/index.html로 이동합니다. 다음은 다음과 같습니다.index.html from /mywebsite/
index.html from /mywebsite/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.4.2. NFS 및 CIFS 볼륨 공유 링크 복사링크가 클립보드에 복사되었습니다!
nfs_t 유형을 사용합니다. 또한 기본적으로 클라이언트측에 마운트된 Samba 공유는 정책에서 정의한 기본 컨텍스트로 레이블이 지정됩니다. 일반적인 정책에서 이 기본 컨텍스트는 cifs_t 유형을 사용합니다.
nfs_t 또는 cifs_t 유형으로 레이블이 지정된 파일을 읽지 못할 수 있습니다. 이렇게 하면 이러한 유형으로 레이블이 지정된 파일 시스템이 마운트되지 않고 다른 서비스에서 읽거나 내보내지 못하게 할 수 있습니다. 부울을 활성화하거나 비활성화하여 nfs_t 및 cifs_t 유형에 액세스할 수 있는 서비스를 제어할 수 있습니다.
httpd_use_nfs 부울을 활성화하여 httpd 가 NFS 볼륨( nfs_t 유형으로 레이블이 지정된)에 액세스하고 공유할 수 있도록 합니다.
setsebool -P httpd_use_nfs on
~]# setsebool -P httpd_use_nfs on
httpd_use_cifs 부울을 활성화하여 httpd 가 CIFS 볼륨에 액세스하고 공유할 수 있도록 합니다( cifs_t 유형으로 레이블이 지정됨).
setsebool -P httpd_use_cifs on
~]# setsebool -P httpd_use_cifs on
-P 옵션을 사용하지 마십시오.
13.4.3. 서비스 간 파일 공유 링크 복사링크가 클립보드에 복사되었습니다!
httpd_sys_content_t 유형으로 레이블이 지정된 파일을 읽을 수 없습니다. 필요한 파일에 public_content_t 또는 public_content_rw_t 유형으로 레이블이 지정된 경우 Apache HTTP Server, FTP, rsync 및 Samba 간에 파일을 공유할 수 있습니다.
- root
로Cryostat 유틸리티를 사용하여 여러 서비스 간에 파일을 공유할 새 최상위 디렉토리를 만듭니다.mkdir /shares
~]# mkdir /sharesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - file-context 구성의 패턴과 일치하지 않는 파일 및 디렉터리는
default_t유형으로 레이블을 지정할 수 있습니다. 이 유형은 제한된 서비스에 액세스할 수 없습니다.ls -dZ /shares
~]$ ls -dZ /shares drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /sharesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로서
/shares/index.html파일을 만듭니다. 다음 콘텐츠를 복사하여/shares/index.html에 붙여넣습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow public_content_t유형을 사용하여/shares/레이블을 지정하면 Apache HTTP Server, FTP, rsync 및 Samba의 읽기 전용 액세스를 허용합니다. root로 다음 명령을 입력하여 레이블 변경 사항을 파일 컨텍스트 구성에 추가합니다.semanage fcontext -a -t public_content_t "/shares(/.*)?"
~]# semanage fcontext -a -t public_content_t "/shares(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow restorecon유틸리티를 root로 사용하여 레이블 변경 사항을 적용합니다.restorecon -R -v /shares/
~]# restorecon -R -v /shares/ restorecon reset /shares context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0 restorecon reset /shares/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
/shares/ 를 공유하려면 다음을 수행합니다.
- samba, samba -common 및 samba-client 패키지가 설치되어 있는지 확인합니다(버전 번호가 다를 수 있음).
rpm -q samba samba-common samba-client
~]$ rpm -q samba samba-common samba-client samba-3.4.0-0.41.el6.3.i686 samba-common-3.4.0-0.41.el6.3.i686 samba-client-3.4.0-0.41.el6.3.i686Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이러한 패키지가 설치되어 있지 않으면 root로 다음 명령을 실행하여 설치합니다.yum install package-name
~]# yum install package-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/samba/smb.conf파일을 root로 편집합니다. 이 파일 하단에 다음 항목을 추가하여 Samba를 통해/shares/디렉터리를 공유합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Samba 파일 시스템을 마운트하려면 Samba 계정이 필요합니다. root로 다음 명령을 입력하여 Samba 계정을 만듭니다. 여기서 username 은 기존 Linux 사용자입니다. 예를 들어 smbpasswd -a testuser 는 Linux
testuser사용자에 대한 Samba 계정을 생성합니다.smbpasswd -a testuser
~]# smbpasswd -a testuser New SMB password: Enter a password Retype new SMB password: Enter the same password again Added user testuser.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 위의 명령을 실행하여 시스템에 존재하지 않는 계정의 사용자 이름을 지정하면 '사용자 이름'! 오류에 대한 Unix 계정을찾을수 없습니다. - Samba 서비스를 시작합니다.
systemctl start smb.service
~]# systemctl start smb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여 사용 가능한 공유를 나열합니다. 여기서 username 은 3단계에 추가된 Samba 계정입니다. 암호를 입력하라는 메시지가 표시되면 3단계에서 Samba 계정에 할당된 암호를 입력합니다(버전 번호는 다를 수 있음).
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 새
디렉터리를 생성하는 사용자입니다. 이 디렉터리는공유 Samba 공유를마운트하는 데 사용됩니다.mkdir /test/
~]# mkdir /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root로 다음 명령을 입력하여 공유 Samba
공유를/test/에 마운트하고 사용자 이름을 3단계에서 사용자 이름으로 바꿉니다.mount //localhost/shares /test/ -o user=username
~]# mount //localhost/shares /test/ -o user=usernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 3단계에 구성된 사용자 이름의 암호를 입력합니다. - Samba를 통해 공유되는 파일의 내용을 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
/shares/ 를 공유하려면 다음을 수행합니다.
- httpd 패키지가 설치되었는지 확인합니다 (버전 번호는 다를 수 있음).
rpm -q httpd
~]$ rpm -q httpd httpd-2.2.11-6.i386Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 패키지가 설치되지 않은 경우yum유틸리티를 root로 사용하여 설치합니다.yum install httpd
~]# yum install httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow /var/www/html/디렉터리로 변경합니다. root로 다음 명령을 입력하여/디렉터리에 대한 링크(마운트 )를 생성합니다.shares/html]# ln -s /shares/ shares
html]# ln -s /shares/ sharesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Apache HTTP 서버를 시작합니다.
systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 웹 브라우저를 사용하여
http://localhost/shares로 이동합니다./shares/index.html파일이 표시됩니다.
index.html 파일이 있는 경우 읽습니다. /shares/ 에 index.html 이 없고 대신 file1,file2, file3 이 있는 경우 http://localhost/shares 에 액세스할 때 디렉터리 목록이 발생합니다.
index.html파일을 제거합니다.rm -i /shares/index.html
~]# rm -i /shares/index.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow /shares/:에 3개의 파일을 생성하려면touch유틸리티를 root로 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root로 다음 명령을 입력하여 Apache HTTP Server의 상태를 확인합니다.
systemctl status httpd.service
~]# systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서버가 중지되면 시작합니다.systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 웹 브라우저를 사용하여
http://localhost/shares로 이동합니다. 디렉터리 목록이 표시됩니다.
13.4.4. 포트 번호 변경 링크 복사링크가 클립보드에 복사되었습니다!
semanage 유틸리티를 root 사용자로 사용하여 SELinux가 httpd 에서 수신 대기할 수 있는 포트를 나열합니다.
semanage port -l | grep -w http_port_t
~]# semanage port -l | grep -w http_port_t
http_port_t tcp 80, 443, 488, 8008, 8009, 8443
httpd 가 TCP 포트 80, 443, 488, 8008, 8009 또는 8443에서 수신 대기하도록 허용합니다. httpd 가 http_port_t 에 대해 나열되지 않은 포트에서 수신 대기하도록 /etc/httpd/conf/httpd.conf 가 구성된 경우httpd 가 시작되지 않습니다.
httpd 를 구성하려면 다음을 수행합니다.
/etc/httpd/conf/httpd.conf파일을 root로 편집하여Listen옵션은httpd에 대해 SELinux 정책에 구성되지 않은 포트를 나열합니다. 다음 예제에서는 10.0.0.1 IP 주소 및 TCP 포트 12345에서 수신 대기하도록httpd를 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 root 사용자로 입력하여 포트를 SELinux 정책 구성에 추가합니다.
semanage port -a -t http_port_t -p tcp 12345
~]# semanage port -a -t http_port_t -p tcp 12345Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 포트가 추가되었는지 확인합니다.
semanage port -l | grep -w http_port_t
~]# semanage port -l | grep -w http_port_t http_port_t tcp 12345, 80, 443, 488, 8008, 8009, 8443Copy to Clipboard Copied! Toggle word wrap Toggle overflow
httpd 를 더 이상 실행하지 않는 경우 semanage 유틸리티를 root로 사용하여 정책 구성에서 포트를 제거합니다.
semanage port -d -t http_port_t -p tcp 12345
~]# semanage port -d -t http_port_t -p tcp 12345
14장. Samba 링크 복사링크가 클립보드에 복사되었습니다!
rpm -q samba
~]$ rpm -q samba
package samba is not installed
yum 유틸리티를 root 사용자로 사용하여 설치합니다.
yum install samba
~]# yum install samba
14.1. Samba 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
smbd)가 기본적으로 제한됩니다. 제한된 서비스는 자체 도메인에서 실행되며 다른 제한된 서비스와 분리됩니다. 다음 예제에서는 자체 도메인에서 실행되는 smbd 프로세스를 보여줍니다. 이 예제에서는 samba 패키지가 설치되어 있다고 가정합니다.
- getenforce 명령을 실행하여 SELinux가 강제 모드에서 실행 중인지 확인합니다.
getenforce
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 SELinux가 강제 모드에서 실행되는 경우Enforcing을 반환합니다. - root로 다음 명령을 입력하여
smbd를 시작합니다.systemctl start smb.service
~]# systemctl start smb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스가 실행 중인지 확인합니다. 출력에는 아래 정보가 포함되어야 합니다(시간 스탬프만 다릅니다).systemctl status smb.service
~]# systemctl status smb.service smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled) Active: active (running) since Mon 2013-08-05 12:17:26 CEST; 2h 22min agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow smbd프로세스를 보려면 다음 명령을 실행합니다.ps -eZ | grep smb
~]$ ps -eZ | grep smb system_u:system_r:smbd_t:s0 9653 ? 00:00:00 smbd system_u:system_r:smbd_t:s0 9654? 00:00:00 smbdCopy to Clipboard Copied! Toggle word wrap Toggle overflow smbd프로세스와 관련된 SELinux 컨텍스트는system_u:system_r:smbd_t:s0입니다. 컨텍스트의 마지막 부분인smbd_t는 유형입니다. 유형은 프로세스 및 파일의 유형에 대한 도메인을 정의합니다. 이 경우smbd프로세스는smbd_t도메인에서 실행됩니다.
smbd 가 액세스하고 공유할 수 있도록 파일에 올바르게 레이블이 지정되어야 합니다. 예를 들어 smbd 는 samba_share_t 유형으로 레이블이 지정된 파일을 읽고 쓸 수 있지만 기본적으로 Apache HTTP Server에서 사용하기 위한 httpd_sys_content_t 유형으로 레이블이 지정된 파일에 액세스할 수 없습니다. 홈 디렉터리 및 NFS 볼륨을 Samba를 통해 내보내고 Samba가 도메인 컨트롤러 역할을 허용하는 등의 특정 동작을 허용하려면 부울을 활성화해야 합니다.
14.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
samba_share_t 유형으로 파일에 레이블을 지정합니다. 생성한 파일에만 레이블을 지정하고 samba_share_t 유형으로 시스템 파일의 레이블을 다시 지정하지 않습니다. 이러한 파일과 디렉토리를 공유하기 위해 부울을 활성화할 수 있습니다. SELinux를 사용하면 /etc/samba/smb.conf 파일과 Linux 권한이 적절하게 설정된 경우 Samba가 samba_share_t 유형으로 레이블이 지정된 파일에 쓸 수 있습니다.
samba_etc_t 유형은 smb.conf 와 같은 /etc/samba/ 디렉터리의 특정 파일에 사용됩니다. samba_etc_t 유형으로 파일에 레이블을 수동으로 지정하지 마십시오. 이 디렉터리의 파일에 올바르게 레이블이 지정되지 않은 경우 root 사용자로 restorecon -R -v /etc/samba 명령을 입력하여 해당 파일을 기본 컨텍스트로 복원합니다. /etc/samba/smb.conf 에 samba_etc_t 유형으로 레이블이 지정되지 않은 경우 Samba 서비스를 시작하는 데 실패하고 SELinux 거부 메시지가 기록될 수 있습니다. 다음은 /etc/samba/smb.conf 가 httpd_sys_content_t 유형으로 레이블이 지정된 경우 거부 메시지의 예입니다.
setroubleshoot: SELinux is preventing smbd (smbd_t) "read" to ./smb.conf (httpd_sys_content_t). For complete SELinux messages. run sealert -l deb33473-1069-482b-bb50-e4cd05ab18af
setroubleshoot: SELinux is preventing smbd (smbd_t) "read" to ./smb.conf (httpd_sys_content_t). For complete SELinux messages. run sealert -l deb33473-1069-482b-bb50-e4cd05ab18af
14.3. 부울 링크 복사링크가 클립보드에 복사되었습니다!
smbd_anon_write- 이 부울을 활성화하면
smbd가 특별한 액세스 제한이 없는 공통 파일을 위해 예약된 영역과 같은 공용 디렉터리에 쓸 수 있습니다. samba_create_home_dirs- 이 부울을 활성화하면 Samba가 새로운 홈 디렉토리를 독립적으로 만들 수 있습니다. 대체로 이 작업은 PAM과 같은 메커니즘에 의해 수행됩니다.
samba_domain_controller- 이 부울을 사용하면 Samba가 도메인 컨트롤러 역할을 하고 useradd,groupadd, passwd 와 같은 관련 명령을 실행할 수 있는 권한을 부여할 수 있습니다.
samba_enable_home_dirs- 이 부울을 활성화하면 Samba가 사용자의 홈 디렉토리를 공유할 수 있습니다.
samba_export_all_ro- 파일 또는 디렉터리를 내보내 읽기 전용 권한을 허용합니다. 이렇게 하면
samba_share_t유형으로 레이블이 지정되지 않은 파일과 디렉터리를 Samba를 통해 공유할 수 있습니다.samba_export_all_ro부울이 활성화되었지만samba_export_all_rw부울이 비활성화되면/etc/samba/smb.conf에 쓰기 액세스 권한이 구성되어 있어도 Samba 공유에 대한 쓰기 액세스 권한이 거부됩니다. samba_export_all_rw- 파일 또는 디렉터리를 내보내 읽기 및 쓰기 권한을 허용합니다. 이렇게 하면
samba_share_t유형으로 레이블이 지정되지 않은 파일과 디렉터리를 Samba를 통해 내보낼 수 있습니다./etc/samba/smb.conf및 Linux 권한의 권한은 쓰기 액세스를 허용하도록 구성해야 합니다. samba_run_unconfined- 이 부울을 활성화하면 Samba는
/var/lib/samba/scripts/디렉터리에서 제한되지 않은 스크립트를 실행할 수 있습니다. samba_share_fusefs- Samba가 fusefs 파일 시스템을 공유하려면 이 부울을 활성화해야 합니다.
samba_share_nfs- 이 부울을 비활성화하면
smbd가 Samba를 통해 NFS 공유에 완전히 액세스할 수 없습니다. 이 부울을 활성화하면 Samba가 NFS 볼륨을 공유할 수 있습니다. use_samba_home_dirs- Samba 홈 디렉토리에 원격 서버를 사용하도록 이 부울을 활성화합니다.
virt_use_samba- CIFS 파일에 대한 가상 머신 액세스를 허용합니다.
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
14.4. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
14.4.1. 생성한 디렉토리를 공유 링크 복사링크가 클립보드에 복사되었습니다!
- samba, samba -common, samba-client 패키지가 설치되어 있는지 확인합니다.
rpm -q samba samba-common samba-client
~]$ rpm -q samba samba-common samba-client package samba is not installed package samba-common is not installed package samba-client is not installedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이러한 패키지가 설치되지 않은 경우yum유틸리티를 root로 사용하여 설치합니다.yum install package-name
~]# yum install package-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root로
Cryostat 유틸리티를 사용하여 Samba를 통해 파일을 공유할 새 최상위 디렉토리를 만듭니다.mkdir /myshare
~]# mkdir /myshareCopy to Clipboard Copied! Toggle word wrap Toggle overflow touch유틸리티 root를 사용하여 빈 파일을 생성합니다. 이 파일은 나중에 Samba 공유가 올바르게 마운트되었는지 확인하는 데 사용됩니다.touch /myshare/file1
~]# touch /myshare/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux를 사용하면
/etc/samba/smb.conf파일 및 Linux 권한이 적절하게 설정된 경우 Samba가samba_share_t유형으로 레이블이 지정된 파일을 읽고 쓸 수 있습니다. root로 다음 명령을 입력하여 레이블 변경 사항을 파일 컨텍스트 구성에 추가합니다.semanage fcontext -a -t samba_share_t "/myshare(/.*)?"
~]# semanage fcontext -a -t samba_share_t "/myshare(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow restorecon유틸리티를 root로 사용하여 레이블 변경 사항을 적용합니다.restorecon -R -v /myshare
~]# restorecon -R -v /myshare restorecon reset /myshare context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0 restorecon reset /myshare/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/samba/smb.conf를 root로 편집합니다. 이 파일 하단에 다음을 추가하여 Samba를 통해/myshare/디렉터리를 공유합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Samba 파일 시스템을 마운트하려면 Samba 계정이 필요합니다. root로 다음 명령을 입력하여 Samba 계정을 만듭니다. 여기서 username 은 기존 Linux 사용자입니다. 예를 들어 smbpasswd -a testuser 는 Linux
testuser사용자에 대한 Samba 계정을 생성합니다.smbpasswd -a testuser
~]# smbpasswd -a testuser New SMB password: Enter a password Retype new SMB password: Enter the same password again Added user testuser.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 위 명령을 입력하면 시스템에 존재하지 않는 계정의 사용자 이름을 지정하면 '사용자 이름'! 오류에 대한 Unix 계정을찾을수 없습니다. - Samba 서비스를 시작합니다.
systemctl start smb.service
~]# systemctl start smb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여 사용 가능한 공유를 나열합니다. 여기서 username 은 7단계에 추가된 Samba 계정입니다. 암호를 입력하라는 메시지가 표시되면 7단계에서 Samba 계정에 할당된 암호를 입력합니다(버전 번호는 다를 수 있음).
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root로
Cryostat 유틸리티를 사용하여 새 디렉터리를 만듭니다. 이 디렉터리는myshareSamba 공유를 마운트하는 데 사용됩니다.mkdir /test/
~]# mkdir /test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root로 다음 명령을 입력하여
myshareSamba 공유를/test/에 마운트하고 사용자 이름을 단계 7의 사용자 이름으로 교체합니다.mount //localhost/myshare /test/ -o user=username
~]# mount //localhost/myshare /test/ -o user=usernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 7단계에 구성된 사용자 이름의 암호를 입력합니다. - 다음 명령을 입력하여 3단계에서 만든
file1파일을 봅니다.ls /test/
~]$ ls /test/ file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.4.2. 웹 사이트 공유 링크 복사링크가 클립보드에 복사되었습니다!
/var/www/html/ 디렉터리의 웹 사이트를 공유하려는 경우와 같이 samba_share_t 유형으로 파일에 레이블을 지정할 수 없습니다. 이러한 경우 samba_export_all_ro 부울을 사용하여 파일 또는 디렉터리(현재 레이블 없이)를 사용하여 읽기 전용 권한만 허용하거나 samba_export_all_rw 부울이 파일 또는 디렉터리(현재 레이블 제외)를 공유하도록 허용하여 읽기 및 쓰기 권한을 허용합니다.
/var/www/html/ 에 웹 사이트에 대한 파일을 생성한 다음 Samba를 통해 해당 파일을 공유하여 읽기 및 쓰기 권한을 허용합니다. 이 예제에서는 httpd,samba,samba-common,samba-client 및 wget 패키지가 설치되어 있다고 가정합니다.
- root 사용자로
/var/www/html/file1.html파일을 만듭니다. 다음 콘텐츠를 복사하여 이 파일에 붙여넣습니다.<html> <h2>File being shared through the Apache HTTP Server and Samba.</h2> </html>
<html> <h2>File being shared through the Apache HTTP Server and Samba.</h2> </html>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여
file1.html의 SELinux 컨텍스트를 확인합니다.ls -Z /var/www/html/file1.html
~]$ ls -Z /var/www/html/file1.html -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 파일은httpd_sys_content_t로 레이블이 지정됩니다. 기본적으로 Apache HTTP 서버는 이 유형에 액세스할 수 있지만 Samba는 이 유형에 액세스할 수 없습니다. - Apache HTTP 서버를 시작합니다.
systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 사용자가 에 대한 쓰기 액세스 권한이 있는 디렉터리로 변경하고 다음 명령을 입력합니다. 기본 구성을 변경하지 않는 한 이 명령은 성공합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/samba/smb.conf를 root로 편집합니다. 이 파일 하단에 다음을 추가하여 Samba를 통해/var/www/html/디렉터리를 공유합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/www/html/디렉터리는httpd_sys_content_t유형으로 레이블이 지정됩니다. 기본적으로 Samba는 Linux 권한이 허용하더라도 이 유형으로 레이블이 지정된 파일과 디렉터리에 액세스할 수 없습니다. Samba 액세스를 허용하려면samba_export_all_ro부울을 활성화합니다.setsebool -P samba_export_all_ro on
~]# setsebool -P samba_export_all_ro onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 재부팅 시 변경 사항이 유지되지 않도록 하려면-P옵션을 사용하지 마십시오.samba_export_all_ro부울을 활성화하면 Samba가 모든 유형에 액세스할 수 있습니다.- Samba 서비스를 시작합니다.
systemctl start smb.service
~]# systemctl start smb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15장. 파일 전송 프로토콜 링크 복사링크가 클립보드에 복사되었습니다!
vsftpd)은 처음부터 빠르고 안정적이며 가장 중요한 것으로 안전하게 설계되었습니다. 많은 수의 연결을 효율적이고 안전하게 처리할 수 있는 기능은 vsftpd 가 Red Hat Enterprise Linux를 통해 배포된 유일한 독립 실행형 FTP인 이유입니다.
rpm -q vsftpd
~]$ rpm -q vsftpd
package vsftpd is not installed
yum 유틸리티를 root 사용자로 사용하여 설치합니다.
yum install vsftpd
~]# yum install vsftpd
15.1. 유형 링크 복사링크가 클립보드에 복사되었습니다!
/var/ftp/ 디렉토리의 파일에 대한 읽기 액세스 권한을 갖습니다. 이 디렉터리는 public_content_t 유형으로 레이블이 지정되어 쓰기 액세스가 /etc/vsftpd/vsftpd.conf 에 구성된 경우에도 읽기 액세스만 허용합니다. public_content_t 유형은 Apache HTTP Server, Samba, NFS와 같은 다른 서비스에 액세스할 수 있습니다.
public_content_tpublic_content_t유형으로 생성한 레이블 파일 및 디렉터리에vsftpd를 통해 읽기 전용으로 공유할 수 있습니다. Apache HTTP Server, Samba, NFS 등의 기타 서비스도 이 유형으로 레이블이 지정된 파일에 액세스할 수 있습니다. Linux 권한이 쓰기 액세스를 허용하는 경우에도public_content_t유형으로 레이블이 지정된 파일은 에 쓸 수 없습니다. 쓰기 액세스 권한이 필요한 경우public_content_rw_t유형을 사용합니다.public_content_rw_tpublic_content_rw_t유형으로 생성한 파일 및 디렉터리에 레이블을 지정하여vsftpd를 통해 읽기 및 쓰기 권한으로 공유합니다. Apache HTTP Server, Samba, NFS 등의 기타 서비스도 이 유형으로 레이블이 지정된 파일에 액세스할 수 있습니다. 각 서비스에 대한 부울은 이 유형으로 레이블이 지정된 파일에 쓰기 전에 활성화해야 합니다.
15.2. 부울 링크 복사링크가 클립보드에 복사되었습니다!
ftpd_anon_write- 비활성화되면 이 부울을 사용하면
vsftpd가public_content_rw_t유형으로 레이블이 지정된 파일 및 디렉터리에 기록되지 않습니다. 사용자가 FTP를 사용하여 파일을 업로드할 수 있도록 이 부울을 활성화합니다. 파일이 업로드되는 디렉터리는public_content_rw_t유형으로 레이블이 지정되어야 하며 Linux 권한을 적절하게 설정해야 합니다. ftpd_full_access- 이 부울이 활성화되면 Linux(DAC) 권한만 사용하여 액세스를 제어하며 인증된 사용자는
public_content_t또는public_content_rw_t유형으로 레이블이 지정되지 않은 파일에 대해 읽고 쓸 수 있습니다. ftpd_use_cifs- 이 부울을 활성화하면
vsftpd에서cifs_t유형으로 레이블이 지정된 파일 및 디렉터리에 액세스할 수 있으므로 이 부울을 사용하면vsftpd를 통해 Samba를 사용하여 마운트된 파일 시스템을 공유할 수 있습니다. ftpd_use_nfs- 이 부울을 활성화하면
vsftpd에서nfs_t유형으로 레이블이 지정된 파일 및 디렉터리에 액세스할 수 있으므로 이 부울을 사용하면vsftpd를 통해 NFS를 사용하여 마운트된 파일 시스템을 공유할 수 있습니다. ftpd_connect_db- FTP 데몬이 데이터베이스에 대한 연결을 시작할 수 있도록 허용합니다.
httpd_enable_ftp_serverhttpd데몬이 FTP 포트에서 수신하고 FTP 서버로 작동하도록 허용합니다.tftp_anon_write- 이 부울을 활성화하면 특수한 액세스 제한이 없는 공통 파일용으로 예약된 영역과 같은 공용 디렉터리에 TFTP 액세스가 허용됩니다.
ftp_home_dir 부울을 제공하지 않습니다. 자세한 내용은 Red Hat Enterprise Linux 7.3 릴리스 노트 문서를 참조하십시오.
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
16장. 네트워크 파일 시스템 링크 복사링크가 클립보드에 복사되었습니다!
rpm -q nfs-utils
~]$ rpm -q nfs-utils
package nfs-utils is not installed
yum 유틸리티를 root로 사용하여 설치합니다.
yum install nfs-utils
~]# yum install nfs-utils
16.1. NFS 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
kernel_t 도메인 유형으로 레이블이 지정된 nfsd 프로세스를 제외하고 NFS 데몬은 기본적으로 제한됩니다. SELinux 정책을 사용하면 기본적으로 NFS가 파일을 공유할 수 있습니다. 또한 클라이언트와 서버 간에 SELinux 레이블을 전달하여 NFS 볼륨에 액세스하는 제한된 도메인의 보안 제어를 강화할 수 있습니다. 예를 들어, 홈 디렉터리가 NFS 볼륨에 설정된 경우 볼륨의 다른 디렉터리가 아닌 홈 디렉터리에만 액세스할 수 있는 제한된 도메인을 지정할 수 있습니다. 마찬가지로 Secure Virtualization과 같은 애플리케이션에서는 NFS 볼륨에 이미지 파일의 레이블을 설정하여 가상 머신의 분리 수준을 높일 수 있습니다.
16.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
nfs_t 유형을 사용합니다. root 사용자는 mount -context 옵션을 사용하여 기본 유형을 재정의할 수 있습니다. 다음 유형은 NFS와 함께 사용됩니다. 다양한 유형을 사용하여 유연한 액세스를 구성할 수 있습니다.
var_lib_nfs_t- 이 유형은
/var/lib/nfs/디렉터리에 복사되거나 생성된 기존 및 새 파일에 사용됩니다. 이 유형은 정상적인 작업에서 변경할 필요가 없습니다. 기본 설정에 대한 변경 사항을 복원하려면 root 사용자로 restorecon -R -v /var/lib/nfs 명령을 실행합니다. nfsd_exec_t/usr/sbin/rpc.nfsd파일은 NFS와 관련된 기타 시스템 실행 파일 및 라이브러리와 마찬가지로nfsd_exec_t로 레이블이 지정됩니다. 사용자는 이 유형의 파일에 레이블을 지정하지 않아야 합니다.nfsd_exec_t는nfsd_t로 전환됩니다.
16.3. 부울 링크 복사링크가 클립보드에 복사되었습니다!
ftpd_use_nfs- 활성화하면 이 부울을 사용하면
ftpd데몬이 NFS 볼륨에 액세스할 수 있습니다. cobbler_use_nfs- 활성화하면 이 부울을 사용하면
cobblerd데몬이 NFS 볼륨에 액세스할 수 있습니다. git_system_use_nfs- 이 부울을 활성화하면 Git 시스템 데몬이 NFS 볼륨의 시스템 공유 리포지토리를 읽을 수 있습니다.
httpd_use_nfs- 활성화하면 이 부울을 사용하면
httpd데몬이 NFS 볼륨에 저장된 파일에 액세스할 수 있습니다. samba_share_nfs- 활성화하면 이 부울을 사용하면
smbd데몬이 NFS 볼륨을 공유할 수 있습니다. 비활성화되면 이 부울은smbd가 Samba를 사용하여 NFS 공유에 대한 전체 액세스 권한을 허용하지 않습니다. sanlock_use_nfs- 활성화하면 이 부울을 사용하면
sanlock데몬이 NFS 볼륨을 관리할 수 있습니다. sge_use_nfs- 활성화하면 이 부울을 사용하면
sge스케줄러가 NFS 볼륨에 액세스할 수 있습니다. use_nfs_home_dirs- 이 부울을 활성화하면 NFS 홈 디렉토리에 대한 지원이 추가됩니다.
virt_use_nfs- 이 부울을 사용하면 가상 게스트가 NFS 볼륨의 파일을 관리할 수 있습니다.
xen_use_nfs- 활성화하면 이 부울을 사용하면 Cryo
stat가 NFS 볼륨의 파일을 관리할 수 있습니다. git_cgi_use_nfs- 이 부울을 활성화하면CGI(Git Common Gateway Interface)가 NFS 볼륨에 액세스할 수 있습니다.
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
16.4. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
16.4.1. SELinux 레이블이 지정된 NFS 지원 활성화 링크 복사링크가 클립보드에 복사되었습니다!
nfs-srv 에서 수행해야 합니다.
- NFS 서버가 실행 중인 경우 중지하십시오.
systemctl stop nfs
[nfs-srv]# systemctl stop nfsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서버가 중지되었는지 확인합니다.systemctl status nfs
[nfs-srv]# systemctl status nfs nfs-server.service - NFS Server Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/sysconfig/nfs파일을 편집하여RPCNFSDARGS플래그를"-V 4.2"로 설정합니다.Optional arguments passed to rpc.nfsd. See rpc.nfsd(8)
# Optional arguments passed to rpc.nfsd. See rpc.nfsd(8) RPCNFSDARGS="-V 4.2"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 서버를 다시 시작하고 실행 중인지 확인합니다. 출력에는 아래의 정보가 포함되어 있으며 타임스탬프만 다릅니다.
systemctl start nfs
[nfs-srv]# systemctl start nfsCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl status nfs
[nfs-srv]# systemctl status nfs nfs-server.service - NFS Server Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled) Active: active (exited) since Wed 2013-08-28 14:07:11 CEST; 4s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 클라이언트쪽에서 NFS 서버를 마운트합니다.
mount -o v4.2 server:mntpoint localmountpoint
[nfs-client]# mount -o v4.2 server:mntpoint localmountpointCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이제 모든 SELinux 레이블이 서버에서 클라이언트로 성공적으로 전달됩니다.
ls -Z file ls -Z file
[nfs-srv]$ ls -Z file -rw-rw-r--. user user unconfined_u:object_r:svirt_image_t:s0 file [nfs-client]$ ls -Z file -rw-rw-r--. user user unconfined_u:object_r:svirt_image_t:s0 fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow
17장. 영국 인터넷 이름 도메인 링크 복사링크가 클립보드에 복사되었습니다!
지정된 데몬을 사용하여 이름 확인 서비스를 수행합니다. BIND를 사용하면 숫자 주소가 아니라 이름별로 컴퓨터 리소스 및 서비스를 찾을 수 있습니다.
rpm -q bind
~]$ rpm -q bind
package bind is not installed
yum 유틸리티를 root 사용자로 사용하여 설치합니다.
yum install bind
~]# yum install bind
17.1. BIND 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
/var/named/slaves/, /var/named/dynamic/ 및 /var/named/data/ 디렉토리에 대한 기본 권한을 사용하면 영역 전송 및 동적 DNS 업데이트를 사용하여 영역 파일을 업데이트할 수 있습니다. /var/named/ 의 파일은 마스터 영역 파일에 사용되는 named_zone_t 유형으로 레이블이 지정됩니다.
/etc/named.conf 파일을 구성하여 /var/named/slaves/ 에 슬레이브 영역을 배치합니다. 다음은 testdomain.com 의 영역 파일을 /var/named/slaves/ 에 저장하는 슬레이브 DNS 서버의 /etc/named.conf 에 있는 도메인 항목의 예입니다.
영역 전송 및 동적 DNS가 영역 파일을 업데이트할 수 있도록 named_write_master_zones 부울을 활성화해야 합니다. 또한 이름이 지정된 사용자 또는 그룹이 읽기, 쓰기 및 실행 권한을 허용하도록 상위 디렉터리의 모드를 변경해야 합니다.
/var/named/ 의 영역 파일에 named_cache_t 유형으로 레이블이 지정되면 파일 시스템 재레이블 또는 restorecon -R /var/ 을 실행하면 해당 유형이 named_zone_t 로 변경됩니다.
17.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
named_zone_t- 마스터 영역 파일에 사용됩니다. 다른 서비스는 이 유형의 파일을 수정할 수 없습니다.
부울이 활성화된 경우에만 이 유형의 파일만 수정할 수 있습니다.named_write_master_zones named_cache_t- 기본적으로
named는 추가 부울을 설정하지 않고 이 유형으로 레이블이 지정된 파일에 쓸 수 있습니다./var/named/slaves/,/var/named/dynamic/및/var/named/data/디렉터리에 복사되거나 생성된 파일은 자동으로named_cache_t유형으로 레이블이 지정됩니다. named_var_run_t/var/run/bind/,/var/run/named/,/var/run/unbound/디렉터리에 복사되거나 생성된 파일은이름이_var_run_t유형으로 자동으로 레이블이 지정됩니다.named_conf_t- 일반적으로
/etc디렉터리에 저장된 BIND 관련 구성 파일은named_conf_t유형으로 레이블이 자동으로 지정됩니다. named_exec_t- 일반적으로
/usr/sbin/디렉터리에 저장된 BIND 관련 실행 파일은named_exec_t유형으로 레이블이 자동으로 지정됩니다. named_log_t- 일반적으로
/var/log/디렉터리에 저장된 BIND 관련 로그 파일은named_log_t유형으로 레이블이 자동으로 지정됩니다. named_unit_file_t/usr/lib/systemd/system/디렉터리의 실행 가능한 BIND 관련 파일은named_unit_file_t유형으로 자동으로 레이블이 지정됩니다.
17.3. 부울 링크 복사링크가 클립보드에 복사되었습니다!
named_write_master_zones- 비활성화하면 이 부울에서
유형으로 레이블이 지정된 영역 파일 또는 디렉터리에 쓸 수 없습니다. 데몬은 일반적으로 영역 파일에 쓸 필요가 없지만 이 부울이 필요한 경우 또는 보조 서버가 영역 파일에 작성해야 하는 경우 이 부울을 활성화하여 이 작업을 허용합니다.named_zone_t named_tcp_bind_http_port- 이 부울을 활성화하면 BIND에서 Apache 포트를 바인딩할 수 있습니다.
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
17.4. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
17.4.1. 동적 DNS 링크 복사링크가 클립보드에 복사되었습니다!
/var/named/dynamic/ 디렉터리를 사용합니다. 이 디렉토리에 생성되거나 복사된 파일은 named 가 해당 디렉토리에 쓸 수 있는 Linux 권한을 상속합니다. 이러한 파일은 named_cache_t 유형으로 레이블이 지정되므로 SELinux는 named 에서 해당 파일에 쓸 수 있도록 허용합니다.
/var/named/dynamic/ 의 영역 파일에 named_zone_t 유형으로 레이블이 지정되면 동적 DNS 업데이트가 병합되기 전에 저널에 기록해야 하므로 일정 기간 동안 성공하지 못할 수 있습니다. 저널이 병합하려고 할 때 named_zone_t 유형으로 영역 파일에 레이블이 지정되면 다음과 같은 오류가 기록됩니다.
named[PID]: dumping master file: rename: /var/named/dynamic/zone-name: permission denied
named[PID]: dumping master file: rename: /var/named/dynamic/zone-name: permission denied
setroubleshoot: SELinux is preventing named (named_t) "unlink" to zone-name (named_zone_t)
setroubleshoot: SELinux is preventing named (named_t) "unlink" to zone-name (named_zone_t)
restorecon 유틸리티를 root로 사용합니다.
restorecon -R -v /var/named/dynamic
~]# restorecon -R -v /var/named/dynamic
18장. 동시 버전 관리 시스템 링크 복사링크가 클립보드에 복사되었습니다!
rpm -q cvs
~]$ rpm -q cvs
package cvs is not installed
yum 유틸리티를 root로 사용하여 설치합니다.
yum install cvs
~]# yum install cvs
18.1. CVS 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
cvs 데몬은 cvs_t 유형으로 레이블이 지정됩니다. 기본적으로 Red Hat Enterprise Linux에서 CVS는 특정 디렉토리를 읽고 쓸 수 있습니다. cvs_data_t 레이블은 cvs 가 읽기 및 쓰기 액세스 권한이 있는 영역을 정의합니다. SELinux에서 CVS를 사용하는 경우 클라이언트가 CVS 데이터에 예약된 영역에 대한 전체 액세스 권한을 보유하려면 올바른 레이블을 할당해야 합니다.
18.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
cvs_data_t- 이 유형은 CVS 리포지토리의 데이터에 사용됩니다. CVS는 이러한 유형이 있는 경우에만 데이터에 대한 전체 액세스 권한을 얻을 수 있습니다.
cvs_exec_t- 이 유형은
/usr/bin/cvs바이너리에 사용됩니다.
18.3. 부울 링크 복사링크가 클립보드에 복사되었습니다!
cvs_read_shadow- 이 부울을 사용하면
cvs데몬이 사용자 인증을 위해/etc/shadow파일에 액세스할 수 있습니다.
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
18.4. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
18.4.1. CVS 설정 링크 복사링크가 클립보드에 복사되었습니다!
192.168.1.1 이고 호스트 이름이 cvs-client 이고 IP 주소가 192.168.1.100 인 cvs-srv 의 호스트 이름이 있는 CVS 서버가 사용됩니다. 두 호스트 모두 동일한 서브넷(192.168.1.0/24)에 있습니다. 이 예제는 cvs 및 xinetd 패키지가 설치되어 있고, SELinux 대상 정책이 사용되고 SELinux가 강제 모드로 실행 중이라고 가정하는 유일한 예입니다.
cvs-srv 에서 수행되어야 합니다.
- 이 예에서는 cvs 및 xinetd 패키지가 필요합니다. 패키지가 설치되었는지 확인합니다.
rpm -q cvs xinetd
[cvs-srv]$ rpm -q cvs xinetd package cvs is not installed package xinetd is not installedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 설치되지 않은 경우yum유틸리티를 root로 사용하여 설치합니다.yum install cvs xinetd
[cvs-srv]# yum install cvs xinetdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root로 다음 명령을 입력하여
CVS라는 그룹을 만듭니다.groupadd CVS
[cvs-srv]# groupadd CVSCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 작업은system-config-users유틸리티를 사용하여 수행할 수도 있습니다. - 사용자 이름으로
cvsuser를 만들고 이 사용자를 CVS 그룹의 멤버로 만듭니다. 이 작업은system-config-users를 사용하여 수행할 수 있습니다. /etc/services파일을 편집하고 CVS 서버가 다음과 유사한 항목의 주석을 제거했는지 확인합니다.cvspserver 2401/tcp # CVS client/server operations cvspserver 2401/udp # CVS client/server operations
cvspserver 2401/tcp # CVS client/server operations cvspserver 2401/udp # CVS client/server operationsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 파일 시스템의 루트 영역에 CVS 리포지토리를 만듭니다. SELinux를 사용하는 경우 다른 하위 디렉터리에 영향을 주지 않고 재귀 레이블을 제공할 수 있도록 루트 파일 시스템에 리포지토리가 있는 것이 가장 좋습니다. 예를 들어 root 로서 리포지토리를 저장할
/cvs/디렉터리를 만듭니다.mkdir /cvs
[root@cvs-srv]# mkdir /cvsCopy to Clipboard Copied! Toggle word wrap Toggle overflow /cvs/디렉터리에 모든 사용자에게 전체 권한을 부여합니다.chmod -R 777 /cvs
[root@cvs-srv]# chmod -R 777 /cvsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 주의이는 예제일 뿐이며 이러한 권한은 프로덕션 시스템에서 사용해서는 안 됩니다./etc/xinetd.d/cvs파일을 편집하고 CVS 섹션의 주석을 제거하고/cvs/디렉토리를 사용하도록 구성되어 있는지 확인합니다. 파일은 다음과 유사해야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow xinetd데몬을 시작합니다.systemctl start xinetd.service
[cvs-srv]# systemctl start xinetd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow system-config-firewall유틸리티를 사용하여 포트 2401에서 TCP를 통해 인바운드 연결을 허용하는 규칙을 추가합니다.- 클라이언트 측에서
cvsuser사용자로 다음 명령을 입력합니다.cvs -d /cvs init
[cvsuser@cvs-client]$ cvs -d /cvs initCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이때 CVS는 구성되었지만 SELinux는 여전히 로그인 및 파일 액세스를 거부합니다. 이를 확인하려면
cvs-client에서$CVSROOT변수를 설정하고 원격으로 로그인을 시도합니다. 다음 단계는cvs-client에서 수행해야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux가 액세스를 차단했습니다. SELinux가 이 액세스를 허용하도록 하려면cvs-srv:에서 다음 단계를 수행해야 합니다. /cvs/디렉터리의 기존 및 새 데이터에 반복적으로 레이블을 지정하려면 /cvs/ 디렉터리의/cvs/디렉터리의 컨텍스트를 root로 변경하여cvs_data_t유형을 지정합니다.semanage fcontext -a -t cvs_data_t '/cvs(/.*)?' restorecon -R -v /cvs
[root@cvs-srv]# semanage fcontext -a -t cvs_data_t '/cvs(/.*)?' [root@cvs-srv]# restorecon -R -v /cvsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이제 클라이언트
cvs-client가 이 리포지토리의 모든 CVS 리소스에 로그인하고 액세스할 수 있어야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
19장. Squiid 캐싱 프록시 링크 복사링크가 클립보드에 복사되었습니다!
rpm -q squid
~]$ rpm -q squid
package squid is not installed
yum 유틸리티를 root로 사용하여 설치합니다.
yum install squid
~]# yum install squid
19.1. Squiid 캐싱 프록시 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
- getenforce 명령을 실행하여 SELinux가 강제 모드에서 실행 중인지 확인합니다.
getenforce
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 SELinux가 강제 모드에서 실행되는 경우Enforcing을 반환합니다. - root 사용자로 다음 명령을 입력하여
squid데몬을 시작합니다.systemctl start squid.service
~]# systemctl start squid.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스가 실행 중인지 확인합니다. 출력에는 아래 정보가 포함되어야 합니다(시간 스탬프만 다릅니다).systemctl status squid.service
~]# systemctl status squid.service squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: active (running) since Mon 2013-08-05 14:45:53 CEST; 2s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여
squid프로세스를 확인합니다.ps -eZ | grep squid
~]$ ps -eZ | grep squid system_u:system_r:squid_t:s0 27018 ? 00:00:00 squid system_u:system_r:squid_t:s0 27020 ? 00:00:00 log_file_daemonCopy to Clipboard Copied! Toggle word wrap Toggle overflow squid프로세스와 관련된 SELinux 컨텍스트는system_u:system_r:squid_t:s0입니다. 컨텍스트의 마지막 부분인squid_t는 유형입니다. 유형은 프로세스 및 파일의 유형에 대한 도메인을 정의합니다. 이 경우 Squid 프로세스는squid_t도메인에서 실행됩니다.
squid_t 와 같이 제한된 도메인에서 실행되는 프로세스(예: 파일, 기타 프로세스, 일반적으로 시스템과 상호 작용하는 방법을 정의합니다. squid 액세스를 허용하려면 파일에 올바르게 레이블이 지정되어야 합니다.
/etc/squid/squid.conf 파일이 구성되어 있으므로 squid 가 기본 TCP 포트 3128, 3401 또는 4827 이외의 포트에서 수신 대기하면 semanage port 명령을 사용하여 SELinux 정책 구성에 필요한 포트 번호를 추가해야 합니다. 다음 예제에서는 SELinux 정책 구성에 처음 정의되지 않은 포트에서 수신 대기하도록 squid 를 구성하는 방법을 보여줍니다. 결과적으로 서버가 시작되지 않습니다. 이 예제에서는 데몬이 정책에 아직 정의되지 않은 비표준 포트에서 수신 대기하도록 SELinux 시스템을 구성하는 방법도 보여줍니다. 이 예에서는 squid 패키지가 설치되어 있다고 가정합니다. 예제에서 root 사용자로 각 명령을 실행합니다.
squid데몬이 실행 중이 아닌지 확인합니다.systemctl status squid.service
~]# systemctl status squid.service squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력이 다르면 프로세스를 중지합니다.systemctl stop squid.service
~]# systemctl stop squid.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여 SELinux를 통해
squid가 수신 대기할 수 있는 포트를 확인합니다.semanage port -l | grep -w -i squid_port_t
~]# semanage port -l | grep -w -i squid_port_t squid_port_t tcp 3401, 4827 squid_port_t udp 3401, 4827Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/squid/squid.conf를 root로 편집합니다.squid의 SELinux 정책 구성에 구성되지 않은 포트를 나열하도록http_port옵션을 구성합니다. 이 예에서는 데몬이 포트 10000에서 수신 대기하도록 구성되어 있습니다.Squid normally listens to port 3128
# Squid normally listens to port 3128 http_port 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow - setsebool 명령을 실행하여
squid_connect_any부울이 off로 설정되어 있는지 확인합니다. 이렇게 하면squid가 특정 포트에서만 작동할 수 있습니다.setsebool -P squid_connect_any 0
~]# setsebool -P squid_connect_any 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow squid데몬을 시작합니다.systemctl start squid.service
~]# systemctl start squid.service Job for squid.service failed. See 'systemctl status squid.service' and 'journalctl -xn' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 유사한 SELinux 거부 메시지가 기록됩니다.localhost setroubleshoot: SELinux is preventing the squid (squid_t) from binding to port 10000. For complete SELinux messages. run sealert -l 97136444-4497-4fff-a7a7-c4d8442db982
localhost setroubleshoot: SELinux is preventing the squid (squid_t) from binding to port 10000. For complete SELinux messages. run sealert -l 97136444-4497-4fff-a7a7-c4d8442db982Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이 예제에서 사용되는 대로
squid가 포트 10000에서 수신 대기하도록 허용하려면 다음 명령이 필요합니다.semanage port -a -t squid_port_t -p tcp 10000
~]# semanage port -a -t squid_port_t -p tcp 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다시
squid를 시작하고 새 포트에서 수신 대기하도록 합니다.systemctl start squid.service
~]# systemctl start squid.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Squid가 비표준 포트(이 예에서는 TCP 10000)에서 수신 대기하도록 SELinux가 구성되었으므로 이 포트에서 성공적으로 시작됩니다.
19.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
httpd_squid_script_exec_t- 이 유형은 Squid 및 해당 구성에 대한 다양한 통계를 제공하는
cachemgr.cgi와 같은 유틸리티에 사용됩니다. squid_cache_t/etc/squid/squid.conf의cache_dir지시문에 정의된 대로 Squid에 의해 캐시되는 데이터에 이 유형을 사용합니다. 기본적으로/var/cache/squid/및/var/spool/squid/디렉터리에 생성되거나 복사된 파일은squid_cache_t유형으로 레이블이 지정됩니다. /var/squidGuard/ 디렉터리에 복사되거나/var/디렉터리에 복사되는 squidGuard URL redirector 플러그인의 파일도squidGuard/squid_cache_t유형으로 레이블이 지정됩니다. Squid는 캐시된 데이터에 대해 이 유형으로 레이블이 지정된 파일과 디렉토리만 사용할 수 있습니다.squid_conf_t- 이 유형은 Squid에서 구성에 사용하는 디렉터리 및 파일에 사용됩니다. 기존 파일 또는
/etc/squid/및/usr/share/squid/디렉터리에 생성된 파일은 오류 메시지 및 아이콘을 포함하여 이 유형으로 레이블이 지정됩니다. squid_exec_t- 이 유형은
squid바이너리,/usr/sbin/squid에 사용됩니다. squid_log_t- 이 유형은 로그에 사용됩니다. 기존 파일 또는
/var/log/squid/또는/var/log/squidGuard/에 복사된 파일은 이 유형으로 라벨을 지정해야 합니다. squid_initrc_exec_t- 이 유형은
/etc/rc.d/init.d/squid에 있는 squid를 시작하는 데 필요한 초기화 파일에 사용됩니다. squid_var_run_t- 이 유형은
/var/run/디렉터리의 파일, 특히 실행 시 Squid에 의해 생성되는/var/run/squid.pid라는 프로세스 ID(PID)에서 사용합니다.
19.3. 부울 링크 복사링크가 클립보드에 복사되었습니다!
squid_connect_any- 이 부울을 사용하면 Squid가 모든 포트의 원격 호스트에 대한 연결을 시작할 수 있습니다.
squid_use_tproxy- 이 부울을 사용하면 Squid가 투명한 프록시로 실행될 수 있습니다.
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
19.4. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
19.4.1. 비표준 포트에 Squiid 연결 링크 복사링크가 클립보드에 복사되었습니다!
- squid 가 설치되었는지 확인합니다.
rpm -q squid
~]$ rpm -q squid package squid is not installedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 패키지가 설치되지 않은 경우yum유틸리티를 root로 사용하여 설치합니다.yum install squid
~]# yum install squidCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 기본 구성 파일
/etc/squid/squid.conf를 편집하고cache_dir지시문의 주석을 제거하고 다음과 유사한지 확인합니다.cache_dir ufs /var/spool/squid 100 16 256
cache_dir ufs /var/spool/squid 100 16 256Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 줄은 이 예제에서 사용할cache_dir지시문의 기본 설정을 지정합니다. 이는 Squid 스토리지 형식(ufs), 캐시가 있는 시스템의 디렉터리(/var/spool/squid), 캐시에 사용할 디스크 공간 양(100) 및 마지막으로 생성되는 첫 번째 수준 및 두 번째 수준 캐시 수(각각16)로 구성됩니다. - 동일한 구성 파일에서
http_access allow localnet지시문의 주석을 제거합니다. 이를 통해 Red Hat Enterprise Linux에 기본 Squid를 설치할 때 자동으로 구성된localnetACL의 트래픽이 허용됩니다. 이 간단한 예는 기존 RFC1918 네트워크의 클라이언트 시스템이 프록시를 통해 액세스할 수 있도록 합니다. - 동일한 구성 파일에서
visible_hostname지시문의 주석을 제거하고 시스템의 호스트 이름으로 구성되었는지 확인합니다. 값은 호스트의 FQDN(정규화된 도메인 이름)이어야 합니다.visible_hostname squid.example.com
visible_hostname squid.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로 다음 명령을 입력하여
squid데몬을 시작합니다. 이 명령은squid가 처음 시작되면 이 명령은cache_dir지시문에서 위에 지정된 대로 캐시 디렉토리를 초기화한 다음 데몬을 시작합니다.systemctl start squid.service
~]# systemctl start squid.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow squid가 성공적으로 시작되었는지 확인합니다. 출력에는 아래 정보가 포함되어 있으며 타임스탬프만 다릅니다.systemctl status squid.service
~]# systemctl status squid.service squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: active (running) since Thu 2014-02-06 15:00:24 CET; 6s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 값에 표시된 대로 squid 프로세스 ID(PID)가 제한된 서비스로 시작되었는지 확인합니다.squid_var_run_tls -lZ /var/run/squid.pid
~]# ls -lZ /var/run/squid.pid -rw-r--r--. root squid unconfined_u:object_r:squid_var_run_t:s0 /var/run/squid.pidCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이때 이전에 구성된
localnetACL에 연결된 클라이언트 시스템이 이 호스트의 내부 인터페이스를 프록시로 사용할 수 있습니다. 이 설정은 모든 일반 웹 브라우저 또는 시스템 전체의 설정에서 구성할 수 있습니다. 이제 Squid가 대상 시스템의 기본 포트(TCP 3128)에서 수신 대기하지만 대상 시스템은 공통 포트를 통해 인터넷의 다른 서비스에 대한 나가는 연결만 허용합니다. 이는 SELinux 자체에서 정의한 정책입니다. SELinux는 다음 단계에 표시된 대로 비표준 포트에 대한 액세스를 거부합니다. - 클라이언트가 TCP 포트 10000에서 수신 대기하는 웹 사이트와 같은 Squid 프록시를 통해 비표준 포트를 사용하여 요청하면 다음과 유사한 거부가 기록됩니다.
SELinux is preventing the squid daemon from connecting to network port 10000
SELinux is preventing the squid daemon from connecting to network port 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이 액세스를 허용하려면 기본적으로 비활성화되므로
squid_connect_any부울을 수정해야 합니다.setsebool -P squid_connect_any on
~]# setsebool -P squid_connect_any onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고setsebool 변경 사항을 재부팅해도 유지하지 않으려면-P옵션을 사용하지 마십시오. - Squid가 이제 클라이언트를 대신하여 모든 포트에 대한 연결을 시작할 수 있으므로 클라이언트는 인터넷에서 비표준 포트에 액세스할 수 있습니다.
20장. MariaDB(MySQL 대체) 링크 복사링크가 클립보드에 복사되었습니다!
mysqld) 및 많은 클라이언트 프로그램 및 라이브러리로 구성된 다중 사용자 다중 스레드 SQL 데이터베이스 서버입니다.[18]
rpm -q mariadb-server
~]$ rpm -q mariadb-server
package mariadb-server is not installed
yum 유틸리티를 root로 사용하여 설치합니다.
yum install mariadb-server
~]# yum install mariadb-server
20.1. MariaDB 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
- getenforce 명령을 실행하여 SELinux가 강제 모드에서 실행 중인지 확인합니다.
getenforce
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 SELinux가 강제 모드에서 실행되는 경우Enforcing을 반환합니다. - 다음 명령을 root 사용자로 입력하여
mariadb를 시작합니다.systemctl start mariadb.service
~]# systemctl start mariadb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스가 실행 중인지 확인합니다. 출력에는 아래 정보가 포함되어야 합니다(시간 스탬프만 다릅니다).systemctl status mariadb.service
~]# systemctl status mariadb.service mariadb.service - MariaDB database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled) Active: active (running) since Mon 2013-08-05 11:20:11 CEST; 3h 28min agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여
mysqld프로세스를 확인합니다.ps -eZ | grep mysqld
~]$ ps -eZ | grep mysqld system_u:system_r:mysqld_safe_t:s0 12831 ? 00:00:00 mysqld_safe system_u:system_r:mysqld_t:s0 13014 ? 00:00:00 mysqldCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysqld프로세스와 관련된 SELinux 컨텍스트는system_u:system_r:mysqld_t:s0입니다. 컨텍스트의 마지막 부분인mysqld_t는 유형입니다. 유형은 프로세스 및 파일의 유형에 대한 도메인을 정의합니다. 이 경우mysqld프로세스는mysqld_t도메인에서 실행됩니다.
20.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
mysqld 와 함께 사용됩니다. 다양한 유형을 사용하여 유연한 액세스를 구성할 수 있습니다.
mysqld_db_t- 이 유형은 MariaDB 데이터베이스의 위치에 사용됩니다. Red Hat Enterprise Linux에서 데이터베이스의 기본 위치는
/var/lib/mysql/디렉터리이지만 변경할 수 있습니다. MariaDB 데이터베이스의 위치가 변경되면 새 위치에 이 유형의 레이블이 지정되어야 합니다. 기본 데이터베이스 위치를 변경하는 방법과 새 섹션에 적절하게 레이블을 지정하는 방법에 대한 지침은 20.4.1절. “MariaDB 데이터베이스 위치 변경” 의 예제를 참조하십시오. mysqld_etc_t- 이 유형은 MariaDB 기본 구성 파일
/etc/my.cnf및/etc/mysql/디렉터리에 있는 기타 구성 파일에 사용됩니다. mysqld_exec_t- 이 유형은 Red Hat Enterprise Linux의 MariaDB 바이너리의 기본 위치인
/usr/libexec/mysqld에 있는mysqld바이너리에 사용됩니다. 다른 시스템은 이 유형으로 레이블이 지정되어야 하는/usr/sbin/mysqld에서 이 바이너리를 찾을 수 있습니다. mysqld_unit_file_t- 이 유형은 Red Hat Enterprise Linux에서 기본적으로
/usr/lib/systemd/system/디렉터리에 있는 실행 가능한 MariaDB 관련 파일에 사용됩니다. mysqld_log_t- 적절한 작업을 위해서는 MariaDB의 로그에 이 유형으로 레이블이 지정되어야 합니다.
mysql.*와일드카드와 일치하는/var/log/디렉터리의 모든 로그 파일은 이 유형으로 레이블이 지정되어야 합니다. mysqld_var_run_t- 이 유형은
/var/run/mariadb/디렉터리, 특히mysqld데몬에서 생성되는/var/run/mariadb/mariadb.pid라는 이름의 프로세스 ID(PID)에서 사용합니다. 이 유형은/var/lib/mysql/mysql.sock과 같은 관련 소켓 파일에도 사용됩니다. 이러한 파일에는 제한된 서비스로 올바르게 작동하려면 이러한 파일에 레이블이 올바르게 지정되어야 합니다.
20.3. 부울 링크 복사링크가 클립보드에 복사되었습니다!
selinuxuser_mysql_connect_enabled- 이 부울을 활성화하면 사용자가 로컬 MariaDB 서버에 연결할 수 있습니다.
exim_can_connect_db- 이 부울을 사용하면
eximmailer가 데이터베이스 서버에 대한 연결을 시작할 수 있습니다. ftpd_connect_db- 이 부울을 사용하면
ftp데몬이 데이터베이스 서버에 대한 연결을 시작할 수 있습니다. httpd_can_network_connect_db- 이 부울을 활성화하려면 웹 서버가 데이터베이스 서버와 통신하는 데 필요합니다.
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
20.4. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
20.4.1. MariaDB 데이터베이스 위치 변경 링크 복사링크가 클립보드에 복사되었습니다!
/var/lib/mysql/ 입니다. SELinux는 기본적으로 SELinux가 될 것으로 예상하므로 이 영역은 이미 mysqld_db_t 유형을 사용하여 적절하게 레이블이 지정됩니다.
auditd 서비스가 실행 중이고 /var/lib/mysql/ 의 기본 위치에 유효한 데이터베이스가 있다고 가정합니다.
mysql에 대한 기본 데이터베이스 위치의 SELinux 컨텍스트 보기:ls -lZ /var/lib/mysql
~]# ls -lZ /var/lib/mysql drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 데이터베이스 파일의 위치에 대한 기본 컨텍스트 요소인mysqld_db_t가 표시됩니다. 이 컨텍스트가 제대로 작동하려면 이 예제에서 사용할 새 데이터베이스 위치에 수동으로 적용해야 합니다.- 다음 명령을 입력하고
mysqldroot 암호를 입력하여 사용 가능한 데이터베이스를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow mariadb.service서비스를 중지합니다.systemctl stop mariadb.service
~]# systemctl stop mariadb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 데이터베이스의 새 위치에 대한 새 디렉터리를 만듭니다. 이 예에서는
/mysql/이 사용됩니다.mkdir -p /mysql
~]# mkdir -p /mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이전 위치의 데이터베이스 파일을 새 위치로 복사합니다.
cp -R /var/lib/mysql/* /mysql/
~]# cp -R /var/lib/mysql/* /mysql/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - mysql 사용자 및 그룹의 액세스를 허용하도록 이 위치의 소유권을 변경합니다. 이렇게 하면 SELinux가 계속 관찰할 기존 Unix 권한이 설정됩니다.
chown -R mysql:mysql /mysql
~]# chown -R mysql:mysql /mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여 새 디렉터리의 초기 컨텍스트를 확인합니다.
ls -lZ /mysql
~]# ls -lZ /mysql drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0 mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 새로 생성된 이 디렉터리의 컨텍스트usr_t는 현재 SELinux에 MariaDB 데이터베이스 파일의 위치로 적합하지 않습니다. 컨텍스트가 변경되면 MariaDB가 이 영역에서 제대로 작동할 수 있습니다. - 텍스트 편집기로 기본 MariaDB 구성 파일
/etc/my.cnf를 열고 새 위치를 참조하도록datadir옵션을 수정합니다. 이 예에서 입력해야 하는 값은/mysql:입니다.[mysqld] datadir=/mysql
[mysqld] datadir=/mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 파일을 저장하고 종료합니다. mariadb.service를 시작합니다. 서비스가 시작되지 않아야 하며 거부 메시지가/var/log/messages파일에 기록됩니다.systemctl start mariadb.service
~]# systemctl start mariadb.service Job for mariadb.service failed. See 'systemctl status mariadb.service' and 'journalctl -xn' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그러나감사데몬이setroubleshoot서비스와 함께 실행되는 경우 거부는 대신/var/log/audit/audit.log파일에 기록됩니다.SELinux is preventing /usr/libexec/mysqld "write" access on /mysql. For complete SELinux messages. run sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71
SELinux is preventing /usr/libexec/mysqld "write" access on /mysql. For complete SELinux messages. run sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 거부의 이유는 MariaDB 데이터 파일에 대해/mysql/레이블이 올바르게 레이블이 지정되지 않기 때문입니다. SELinux는 MariaDB가usr_t로 레이블이 지정된 콘텐츠에 액세스하지 못하도록 합니다. 이 문제를 해결하려면 다음 단계를 수행하십시오.- 다음 명령을 입력하여
/mysql/에 대한 컨텍스트 매핑을 추가합니다.semanage유틸리티는 기본적으로 설치되지 않습니다. 시스템에 누락된 경우 policycoreutils-python 패키지를 설치합니다.semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"
~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이 매핑은
/etc/selinux/targeted/contexts/files/file_contexts.local파일에 작성됩니다.grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local
~]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local /mysql(/.*)? system_u:object_r:mysqld_db_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이제
restorecon유틸리티를 사용하여 이 컨텍스트 매핑을 실행 중인 시스템에 적용합니다.restorecon -R -v /mysql
~]# restorecon -R -v /mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이제
/mysql/위치에 MariaDB에 대한 올바른 컨텍스트로 레이블이 지정되었으므로mysqld가 시작됩니다.systemctl start mariadb.service
~]# systemctl start mariadb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow /mysql/: 컨텍스트가 변경되었는지 확인합니다.ls -lZ /mysql
~]$ ls -lZ /mysql drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 위치가 변경되어 레이블이 지정되었으며
mysqld가 성공적으로 시작되었습니다. 이제 정상적인 작업을 확인하기 위해 실행 중인 모든 서비스를 테스트해야 합니다.
21장. PostgreSQL 링크 복사링크가 클립보드에 복사되었습니다!
rpm -q postgresql-server
~]# rpm -q postgresql-server
yum 유틸리티를 root로 사용하여 설치합니다.
yum install postgresql-server
~]# yum install postgresql-server
21.1. PostgreSQL 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
- getenforce 명령을 실행하여 SELinux가 강제 모드에서 실행 중인지 확인합니다.
getenforce
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 SELinux가 강제 모드에서 실행되는 경우Enforcing을 반환합니다. postgresql를 시작하려면 root 사용자로 다음 명령을 입력합니다.systemctl start postgresql.service
~]# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스가 실행 중인지 확인합니다. 출력에는 아래 정보가 포함되어야 합니다(시간 스탬프만 다릅니다).systemctl start postgresql.service
~]# systemctl start postgresql.service postgresql.service - PostgreSQL database server Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled) Active: active (running) since Mon 2013-08-05 14:57:49 CEST; 12sCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgresql프로세스를 보려면 다음 명령을 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow postgresql프로세스와 관련된 SELinux 컨텍스트는system_u:system_r:postgresql_t:s0입니다. 컨텍스트의 마지막 부분인postgresql_t는 유형입니다. 유형은 프로세스 및 파일의 유형에 대한 도메인을 정의합니다. 이 경우postgresql프로세스는postgresql_t도메인에서 실행됩니다.
21.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
postgresql 와 함께 사용됩니다. 다양한 유형을 사용하여 유연한 액세스를 구성할 수 있습니다. 아래 목록에서는 사용 가능한 전체 위치와 일치하는 몇 가지 정규 표현식을 사용합니다.
postgresql_db_t- 이 유형은 여러 위치에 사용됩니다. 이 유형으로 레이블이 지정된 위치는 PostgreSQL의 데이터 파일에 사용됩니다.
/usr/lib/pgsql/test/regres/usr/share/jonas/pgsql/var/lib/pgsql/data/var/lib/postgres(ql)?
postgresql_etc_t- 이 유형은
/etc/postgresql/디렉터리의 구성 파일에 사용됩니다. postgresql_exec_t- 이 유형은 여러 위치에 사용됩니다. 이 유형으로 레이블이 지정된 위치는 PostgreSQL의 바이너리에 사용됩니다.
/usr/bin/initdb(.sepgsql)?/usr/bin/(se)?postgres/usr/lib(64)?/postgresql/bin/.*/usr/lib(64)?/pgsql/test/regress/pg_regress
systemd_unit_file_t- 이 유형은
/usr/lib/systemd/system/디렉터리에 있는 실행 가능한 PostgreSQL 관련 파일에 사용됩니다. postgresql_log_t- 이 유형은 여러 위치에 사용됩니다. 이 유형으로 레이블이 지정된 위치는 로그 파일에 사용됩니다.
/var/lib/pgsql/logfile/var/lib/pgsql/pgstartup.log/var/lib/sepgsql/pgstartup.log/var/log/postgresql/var/log/postgres.log.*/var/log/rhdb/rhdb/var/log/sepostgresql.log.*
postgresql_var_run_t- 이 유형은 PostgreSQL의 런타임 파일(예:
/var/run/postgresql/디렉터리의 프로세스 ID)에 사용됩니다.
21.3. 부울 링크 복사링크가 클립보드에 복사되었습니다!
selinuxuser_postgresql_connect_enabled- 이 부울을 활성화하면 PostgreSQL에서 정의한 모든 사용자 도메인이 데이터베이스 서버에 연결할 수 있습니다.
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
21.4. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
21.4.1. PostgreSQL 데이터베이스 위치 변경 링크 복사링크가 클립보드에 복사되었습니다!
/var/lib/pgsql/data/ 입니다. SELinux는 기본적으로 SELinux가 될 것으로 예상하므로 이 영역은 이미 postgresql_db_t 유형을 사용하여 적절하게 레이블이 지정됩니다.
postgresql에 대한 기본 데이터베이스 위치의 SELinux 컨텍스트를 확인합니다.ls -lZ /var/lib/pgsql
~]# ls -lZ /var/lib/pgsql drwx------. postgres postgres system_u:object_r:postgresql_db_t:s0 dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow 데이터베이스 파일의 위치에 대한 기본 컨텍스트 요소인postgresql_db_t가 표시됩니다. 이 컨텍스트가 제대로 작동하려면 이 예제에서 사용할 새 데이터베이스 위치에 수동으로 적용해야 합니다.- 데이터베이스의 새 위치에 대한 새 디렉터리를 만듭니다. 이 예에서는
/opt/postgresql/data/가 사용됩니다. 다른 위치를 사용하는 경우 다음 단계의 텍스트를 해당 위치로 바꿉니다.mkdir -p /opt/postgresql/data
~]# mkdir -p /opt/postgresql/dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 새 위치의 디렉터리 목록을 수행합니다. 새 디렉터리의 초기 컨텍스트는
usr_t입니다. 이 컨텍스트는 SELinux가 PostgreSQL에 보호 메커니즘을 제공하는 데 충분하지 않습니다. 컨텍스트가 변경되면 새 영역에서 제대로 작동할 수 있습니다.ls -lZ /opt/postgresql/
~]# ls -lZ /opt/postgresql/ drwxr-xr-x. root root unconfined_u:object_r:usr_t:s0 dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow - postgres 사용자 및 그룹의 액세스를 허용하도록 새 위치의 소유권을 변경합니다. 이렇게 하면 SELinux가 계속 관찰할 기존의 Unix 권한이 설정됩니다.
chown -R postgres:postgres /opt/postgresql
~]# chown -R postgres:postgres /opt/postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 텍스트 편집기로
/etc/systemd/system/postgresql.service파일을 열고 새 위치를 가리키도록PGDATA및PGLOG변수를 수정합니다.vi /etc/systemd/system/postgresql.service
~]# vi /etc/systemd/system/postgresql.service PGDATA=/opt/postgresql/data PGLOG=/opt/postgresql/data/pgstartup.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 파일을 저장하고 텍스트 편집기를 종료합니다./etc/systemd/system/postgresql.service파일이 없는 경우 해당 파일을 생성하고 다음 내용을 삽입합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 새 위치에서 데이터베이스를 초기화합니다.
su - postgres -c "initdb -D /opt/postgresql/data"
~]$ su - postgres -c "initdb -D /opt/postgresql/data"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 데이터베이스 위치를 변경하면 이 시점에 서비스 시작이 실패합니다.
systemctl start postgresql.service
~]# systemctl start postgresql.service Job for postgresql.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux로 인해 서비스가 시작되지 않았습니다. 새 위치의 레이블이 올바르지 않기 때문입니다. 다음 단계에서는 새 위치(/opt/postgresql/)에 레이블을 지정하고 postgresql 서비스를 올바르게 시작하는 방법을 설명합니다. semanage유틸리티를 사용하여/opt/postgresql/및 그 내의 다른 디렉터리/파일에 대한 컨텍스트 매핑을 추가합니다.semanage fcontext -a -t postgresql_db_t "/opt/postgresql(/.*)?"
~]# semanage fcontext -a -t postgresql_db_t "/opt/postgresql(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이 매핑은
/etc/selinux/targeted/contexts/files/file_contexts.local파일에 작성됩니다.grep -i postgresql /etc/selinux/targeted/contexts/files/file_contexts.local
~]# grep -i postgresql /etc/selinux/targeted/contexts/files/file_contexts.local /opt/postgresql(/.*)? system_u:object_r:postgresql_db_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이제
restorecon유틸리티를 사용하여 이 컨텍스트 매핑을 실행 중인 시스템에 적용합니다.restorecon -R -v /opt/postgresql
~]# restorecon -R -v /opt/postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이제
/opt/postgresql/위치에 PostgreSQL에 대한 올바른 컨텍스트로 레이블이 지정되었으므로postgresql서비스가 성공적으로 시작됩니다.systemctl start postgresql.service
~]# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow /opt/postgresql/:에 대한 컨텍스트가 올바른지 확인합니다.ls -lZ /opt
~]$ ls -lZ /opt drwxr-xr-x. root root system_u:object_r:postgresql_db_t:s0 postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ps 명령을 사용하여
postgresql프로세스에 새 위치가 표시되는지 확인합니다.ps aux | grep -i postmaster
~]# ps aux | grep -i postmaster postgres 21564 0.3 0.3 42308 4032 ? S 10:13 0:00 /usr/bin/postmaster -p 5432 -D /opt/postgresql/data/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 위치가 변경되고 레이블이 지정되었으며
postgresql가 성공적으로 시작되었습니다. 이제 정상적인 작업을 확인하기 위해 실행 중인 모든 서비스를 테스트해야 합니다.
22장. rsync 링크 복사링크가 클립보드에 복사되었습니다!
rsync 유틸리티는 빠른 파일 전송을 수행하며 시스템 간에 데이터를 동기화하는 데 사용됩니다. [20]
rpm -q rsync
~]$ rpm -q rsync
package rsync is not installed
yum 유틸리티를 root로 사용하여 설치합니다.
yum install rsync
~]# yum install rsync
22.1. rsync 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
rsync 데몬을 사용하여 파일을 공유하려면 파일 및 디렉터리에 public_content_t 유형의 레이블을 지정해야 합니다. 대부분의 서비스와 마찬가지로 SELinux가 rsync 를 통해 보호 메커니즘을 수행하려면 올바른 레이블이 필요합니다.[21]
22.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
rsync 와 함께 사용됩니다. 유연한 액세스를 구성할 수 있는 다양한 유형:
public_content_trsync를 사용하여 공유할 파일 위치(및 실제 파일)에 사용되는 일반 유형입니다.rsync와 공유할 파일을 수용하기 위해 특수 디렉터리가 생성된 경우 디렉터리와 해당 콘텐츠가 이 라벨을 적용해야 합니다.rsync_exec_t- 이 유형은
/usr/bin/rsync시스템 바이너리에 사용됩니다. rsync_log_t- 이 유형은 기본적으로
/var/log/에 있는 rsync 로그 파일에 사용됩니다. 파일 rsync 로그의 위치를 로 변경하려면 런타임 시 rsync 명령에rsync.log--log-file=FILE옵션을 사용합니다. rsync_var_run_t- 이 유형은
/var/run/에 있는 rsyncd 잠금 파일에 사용됩니다. 이 잠금 파일은rsyncd.lockrsync서버에서 연결 제한을 관리하는 데 사용됩니다. rsync_data_t- 이 유형은 rsync 도메인으로 사용하려는 파일 및 디렉터리에 사용되며 다른 서비스의 액세스 범위에서 분리합니다. 또한
public_content_t는 일반 SELinux 컨텍스트 유형으로, 파일 또는 디렉터리가 여러 서비스(예: rsync 도메인으로 FTP 및 NFS 디렉토리)와 상호 작용할 때 사용할 수 있습니다. rsync_etc_t- 이 유형은
/etc디렉토리의 rsync 관련 파일에 사용됩니다.
22.3. 부울 링크 복사링크가 클립보드에 복사되었습니다!
rsync_anon_write- 이 부울을 활성화하면
도메인의 rsync가rsync_tpublic_content_rw_t유형의 파일, 링크 및 디렉터리를 관리할 수 있습니다. 공용 파일 전송 서비스에 사용되는 공용 파일인 경우가 많습니다. 파일과 디렉터리에는 이 유형의 레이블이 지정되어야 합니다. rsync_client- 이 부울을 활성화하면
rsync가rsync_port_t로 정의된 포트에 대한 연결을 시작하고 데몬에서rsync_data_t유형이 있는 파일, 링크 및 디렉터리를 관리할 수 있습니다. SELinux가 제어할 수 있도록도메인에 있어야 합니다. 이 장의 구성 예제에서는rsync_t도메인에서 실행되는 rsync를 보여줍니다.rsync_t rsync_export_all_ro- 이 부울을 활성화하면
도메인의 rsync가 클라이언트에 대한 읽기 전용 액세스 권한으로 NFS 및 CIFS 볼륨을 내보낼 수 있습니다.rsync_t
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
22.4. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
22.4.1. 데몬으로 rsync 링크 복사링크가 클립보드에 복사되었습니다!
rsync 데몬이 정상적으로 실행되도록 SELinux 정책을 수정하는 방법을 보여줍니다.
절차 22.1. rsync가 rsync로 시작됨_t
- getenforce 명령을 실행하여 SELinux가 강제 모드에서 실행 중인지 확인합니다.
getenforce
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 SELinux가 강제 모드에서 실행되는 경우Enforcing을 반환합니다. - 다음 명령을 실행하여 rsync 바이너리가 시스템 경로에 있는지 확인합니다.
which rsync
~]$ which rsync /usr/bin/rsyncCopy to Clipboard Copied! Toggle word wrap Toggle overflow - rsync를 데몬으로 실행하는 경우 구성 파일을 사용하고
/etc/rsyncd.conf로 저장해야 합니다. 이 예제에서 사용되는 다음 구성 파일은 매우 간단하며 사용 가능한 모든 옵션을 나타내는 것이 아니라rsync데몬을 시연하는 데 충분합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이제 rsync가 데몬 모드에서 작동하도록 간단한 구성 파일이 있으므로 다음 명령을 실행하여 시작할 수 있습니다.
systemctl start rsyncd.service
~]# systemctl start rsyncd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow rsyncd가 성공적으로 시작되었는지 확인합니다(아래 출력과 유사하게 표시되어야 하며 타임 스탬프만 다릅니다).Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이제rsync_t도메인에서 실행 중이므로 SELinux는rsync데몬을 통해 보호 메커니즘을 적용할 수 있습니다.ps -eZ | grep rsync
~]$ ps -eZ | grep rsync system_u:system_r:rsync_t:s0 3220 ? 00:00:00 rsyncCopy to Clipboard Copied! Toggle word wrap Toggle overflow
rsync_t 도메인에서 rsyncd 실행을 수행하는 방법을 보여줍니다. rsync는 소켓이 활성화된 서비스로도 실행할 수 있습니다. 이 경우 클라이언트가 서비스에 연결을 시도할 때까지 rsyncd 가 실행되지 않습니다. rsyncd 가 소켓 활성화 서비스로 실행되도록 하려면 위의 단계를 따르십시오. rsyncd 를 소켓 활성화 서비스로 시작하려면 root로 다음 명령을 입력합니다.
systemctl start rsyncd.socket
~]# systemctl start rsyncd.socket
절차 22.2. 기본이 아닌 포트에서 rsync 데몬 실행
/etc/rsyncd.conf파일을 수정하고 글로벌 구성 영역에 있는 파일 상단에port = 10000행을 추가합니다(즉, 파일 영역을 정의하기 전에). 새 구성 파일은 다음과 같이 나타납니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이 새 설정으로
rsync데몬을 시작하면 다음과 유사한 거부 메시지가 SELinux에 의해 기록됩니다.Jul 22 10:46:59 localhost setroubleshoot: SELinux is preventing the rsync (rsync_t) from binding to port 10000. For complete SELinux messages, run sealert -l c371ab34-639e-45ae-9e42-18855b5c2de8
Jul 22 10:46:59 localhost setroubleshoot: SELinux is preventing the rsync (rsync_t) from binding to port 10000. For complete SELinux messages, run sealert -l c371ab34-639e-45ae-9e42-18855b5c2de8Copy to Clipboard Copied! Toggle word wrap Toggle overflow semanage유틸리티를 사용하여rsync_port_t:의 SELinux 정책에 TCP 포트 10000을 추가합니다.semanage port -a -t rsync_port_t -p tcp 10000
~]# semanage port -a -t rsync_port_t -p tcp 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이제 TCP 포트 10000이
rsync_port_t의 SELinux 정책에 추가되었으므로rsyncd가 이 포트에서 정상적으로 시작되고 작동합니다.systemctl start rsyncd.service
~]# systemctl start rsyncd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow netstat -lnp | grep 10000
~]# netstat -lnp | grep 10000 tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 9910/rsyncCopy to Clipboard Copied! Toggle word wrap Toggle overflow
rsyncd 가 TCP 포트 10000에서 작동할 수 있도록 허용합니다.
23장. Postfix 링크 복사링크가 클립보드에 복사되었습니다!
rpm -q postfix
~]$ rpm -q postfix
package postfix is not installed
yum 유틸리티 root를 사용하여 설치합니다.
yum install postfix
~]# yum install postfix
23.1. Postfix 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
- getenforce 명령을 실행하여 SELinux가 강제 모드에서 실행 중인지 확인합니다.
getenforce
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 SELinux가 강제 모드에서 실행되는 경우Enforcing을 반환합니다. - 다음 명령을 root 사용자로 입력하여
postfix를 시작합니다.systemctl start postfix.service
~]# systemctl start postfix.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스가 실행 중인지 확인합니다. 출력에는 아래 정보가 포함되어야 합니다(시간 스탬프만 다릅니다).systemctl status postfix.service
~]# systemctl status postfix.service postfix.service - Postfix Mail Transport Agent Loaded: loaded (/usr/lib/systemd/system/postfix.service; disabled) Active: active (running) since Mon 2013-08-05 11:38:48 CEST; 3h 25min agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 실행하여
postfix프로세스를 확인합니다.ps -eZ | grep postfix
~]$ ps -eZ | grep postfix system_u:system_r:postfix_master_t:s0 1651 ? 00:00:00 master system_u:system_r:postfix_pickup_t:s0 1662 ? 00:00:00 pickup system_u:system_r:postfix_qmgr_t:s0 1663 ? 00:00:00 qmgrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 위의 출력에서 everything마스터프로세스와 연결된 SELinux 컨텍스트는system_u:system_r: Cryostat_master_t:s0입니다. 컨텍스트의 마지막 부분인postfix_master_t는 이 프로세스의 유형입니다. 유형은 프로세스 및 파일의 유형에 대한 도메인을 정의합니다. 이 경우master프로세스는postfix_master_t도메인에서 실행됩니다.
23.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
postfix_etc_t- 이 유형은
/etc/ Cryostat/디렉터리에 있는 Cryostat의 구성 파일에 사용됩니다. postfix_data_t- 이 유형은
/var/lib/ Cryostat/ 디렉터리의 Cryostat데이터 파일에 사용됩니다. postfix_var_run_t- 이 유형은
/run/디렉터리에 저장된 Cryostat 파일에 사용됩니다. postfix_initrc_exec_t- CloudEvent 실행 파일의 레이블은
postfix_initrc_exec_t유형으로 지정됩니다. 실행하면postfix_initrc_t도메인으로 전환됩니다. postfix_spool_t- 이 유형은
/var/spool/디렉터리에 저장된 Cryostat 파일에 사용됩니다.
grep postfix /etc/selinux/targeted/contexts/files/file_contexts
~]$ grep postfix /etc/selinux/targeted/contexts/files/file_contexts
23.3. 부울 링크 복사링크가 클립보드에 복사되었습니다!
postfix_local_write_mail_spool- 이 부울을 활성화하면 Postfix가 시스템의 로컬 메일 스풀에 쓸 수 있습니다. 로컬 스풀을 사용하는 경우 정상적인 작업에 이 부울을 활성화해야 합니다.
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
23.4. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
23.4.1. SpamAssassin 및 Postfix 링크 복사링크가 클립보드에 복사되었습니다!
rpm -q spamassassin
~]$ rpm -q spamassassin
package spamassassin is not installed
yum 유틸리티를 root로 사용하여 설치합니다.
yum install spamassassin
~]# yum install spamassassin
절차 23.1. 기본이 아닌 포트에서 SpamAssassin 실행
semanage유틸리티를 root로 사용하여 SELinux에서 기본적으로spamd데몬이 수신 대기할 수 있는 포트를 표시합니다.semanage port -l | grep spamd
~]# semanage port -l | grep spamd spamd_port_t tcp 783Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 출력은 TCP/783이 작동하는 SpamAssassin의 포트로spamd_port_t에 정의되어 있음을 보여줍니다./etc/sysconfig/spamassassin구성 파일을 편집하고 예제 TCP/10000에서 SpamAssassin을 시작하도록 수정합니다.Options to spamd
# Options to spamd SPAMDOPTIONS="-d -p 10000 -c m5 -H"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 행은 이제 SpamAssassin이 포트 10000에서 작동하도록 지정합니다. 이 예제의 나머지 부분은 이 소켓을 열 수 있도록 SELinux 정책을 수정하는 방법을 보여줍니다.- 시작 SpamAssassin 및 다음과 유사한 오류 메시지가 나타납니다.
systemctl start spamassassin.service
~]# systemctl start spamassassin.service Job for spamassassin.service failed. See 'systemctl status spamassassin.service' and 'journalctl -xn' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 출력은 SELinux가 이 포트에 대한 액세스를 차단했음을 의미합니다. - 다음과 유사한 거부 메시지가 SELinux에 의해 기록됩니다.
SELinux is preventing the spamd (spamd_t) from binding to port 10000.
SELinux is preventing the spamd (spamd_t) from binding to port 10000.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로
semanage를 실행하여 SpamAssassin이 예제 포트(TCP/10000)에서 작동할 수 있도록 SELinux 정책을 수정합니다.semanage port -a -t spamd_port_t -p tcp 10000
~]# semanage port -a -t spamd_port_t -p tcp 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 이제 SpamAssassin이 TCP 포트 10000에서 시작되고 작동하는지 확인합니다.
systemctl start spamassassin.service netstat -lnp | grep 10000
~]# systemctl start spamassassin.service ~]# netstat -lnp | grep 10000 tcp 0 0 127.0.0.1:10000 0.0.0.0:* LISTEN 2224/spamd.pidCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이 시점에서
spamd는 SELinux 정책에서 해당 포트에 액세스할 수 있으므로 TCP 포트 10000에서 올바르게 작동합니다.
24장. DHCP 링크 복사링크가 클립보드에 복사되었습니다!
dhcpd 데몬은 Red Hat Enterprise Linux에서 클라이언트에 대한 계층 3 TCP/IP 세부 정보를 동적으로 제공하고 구성하는 데 사용됩니다.
dhcpd 데몬을 제공합니다. 다음 명령을 입력하여 dhcp 패키지가 설치되어 있는지 확인합니다.
rpm -q dhcp
~]# rpm -q dhcp
package dhcp is not installed
yum 유틸리티를 root로 사용하여 설치합니다.
yum install dhcp
~]# yum install dhcp
24.1. DHCP 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
dhcpd 가 활성화되면 기본적으로 제한됩니다. 제한된 프로세스는 자체 도메인에서 실행되며 다른 제한된 프로세스와 분리됩니다. SELinux 정책 구성에 따라 공격자가 제한된 프로세스가 손상되면 공격자가 리소스에 대한 액세스와 가능한 손상을 제한합니다. 다음 예제에서는 dhcpd 및 자체 도메인에서 실행되는 관련 프로세스를 보여줍니다. 이 예제에서는 dhcp 패키지가 설치되어 있고 dhcpd 서비스가 시작되었다고 가정합니다.
- getenforce 명령을 실행하여 SELinux가 강제 모드에서 실행 중인지 확인합니다.
getenforce
~]$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 SELinux가 강제 모드에서 실행되는 경우Enforcing을 반환합니다. - root 사용자로 다음 명령을 입력하여
dhcpd:을 시작합니다.systemctl start dhcpd.service
~]# systemctl start dhcpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스가 실행 중인지 확인합니다. 출력에는 아래 정보가 포함되어야 합니다(시간 스탬프만 다릅니다).systemctl status dhcpd.service
~]# systemctl status dhcpd.service dhcpd.service - DHCPv4 Server Daemon Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled) Active: active (running) since Mon 2013-08-05 11:49:07 CEST; 3h 20min agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 실행하여
dhcpd프로세스를 확인합니다.ps -eZ | grep dhcpd
~]$ ps -eZ | grep dhcpd system_u:system_r:dhcpd_t:s0 5483 ? 00:00:00 dhcpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow dhcpd 프로세스와 관련된 SELinux 컨텍스트는system_u:system_r:dhcpd_t:s0입니다.
24.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
dhcp_etc_t- 이 유형은 주로 구성 파일을 포함하여
/etc디렉토리의 파일에 사용됩니다. dhcpd_var_run_t- 이 유형은
dhcpd의 PID 파일에/var/run/디렉터리에 사용됩니다. dhcpd_exec_t- 이 유형은 DHCP 실행 파일을
dhcpd_t도메인으로 전환하는 데 사용됩니다. dhcpd_initrc_exec_t- 이 유형은 DHCP 실행 파일을
dhcpd_initrc_t도메인으로 전환하는 데 사용됩니다.
dhcpd 의 전체 파일 목록과 해당 유형을 보려면 다음 명령을 입력합니다.
grep dhcp /etc/selinux/targeted/contexts/files/file_contexts
~]$ grep dhcp /etc/selinux/targeted/contexts/files/file_contexts
25장. Red Hat의 OpenShift 링크 복사링크가 클립보드에 복사되었습니다!
rpm -q openshift-clients
~]$ rpm -q openshift-clients
package openshift-clients is not installed
25.1. OpenShift 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
25.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
프로세스 유형
openshift_t- OpenShift 프로세스는
openshift_tSELinux 유형과 연결되어 있습니다.
실행 파일 유형
openshift_cgroup_read_exec_t- SELinux를 사용하면 이 유형의 파일이 실행 파일을
openshift_cgroup_read_t도메인으로 전환할 수 있습니다. openshift_cron_exec_t- SELinux를 사용하면 이 유형의 파일이 실행 파일을
openshift_cron_t도메인으로 전환할 수 있습니다. openshift_initrc_exec_t- SELinux를 사용하면 이 유형의 파일이 실행 파일을
openshift_initrc_t도메인으로 전환할 수 있습니다.
쓰기 가능한 유형
openshift_cgroup_read_tmp_t- 이 유형을 사용하면 OpenShift 제어 그룹(cgroup)이
/tmp디렉터리의 임시 파일을 읽고 액세스할 수 있습니다. openshift_cron_tmp_t- 이 유형을 사용하면 OpenShift cron 작업의 임시 파일을
/tmp에 저장할 수 있습니다. openshift_initrc_tmp_t- 이 유형을 사용하면 OpenShift
initrc임시 파일을/tmp에 저장할 수 있습니다. openshift_log_t- 이 유형의 파일은 OpenShift 로그 데이터로 취급되며 일반적으로
/var/log/디렉터리에 저장됩니다. openshift_rw_file_t- OpenShift는 이 유형으로 레이블이 지정된 파일에 읽고 쓸 수 있는 권한을 갖습니다.
openshift_tmp_t- 이 유형은 OpenShift 임시 파일을
/tmp에 저장하는 데 사용됩니다. openshift_tmpfs_t- 이 유형을 사용하면 OpenShift 데이터를 tmpfs 파일 시스템에 저장할 수 있습니다.
openshift_var_lib_t- 이 유형을 사용하면 OpenShift 파일을
/var/lib/디렉터리에 저장할 수 있습니다. openshift_var_run_t- 이 유형을 사용하면 OpenShift 파일을
/run/또는/var/run/디렉터리에 저장할 수 있습니다.
25.3. 부울 링크 복사링크가 클립보드에 복사되었습니다!
openshift_use_nfs- 이 부울을 활성화하면 NFS 공유에 OpenShift를 설치할 수 있습니다.
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
25.4. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
25.4.1. 기본 OpenShift 디렉터리 변경 링크 복사링크가 클립보드에 복사되었습니다!
openshift_var_lib_t SELinux 유형으로 레이블이 지정된 /var/lib/openshift/ 디렉터리에 저장합니다. OpenShift가 다른 디렉터리에 데이터를 저장할 수 있도록 하려면 새 디렉터리의 레이블을 적절한 SELinux 컨텍스트로 지정합니다.
/srv/openshift/:에 저장하기 위해 기본 OpenShift 디렉터리를 변경하는 방법을 보여줍니다.
절차 25.1. 데이터 저장을 위한 기본 OpenShift 디렉터리 변경
- root 로서
/srv디렉터리에 새openshift/디렉터리를 만듭니다. 새 디렉터리는var_t유형으로 레이블이 지정됩니다.mkdir /srv/openshift
~]# mkdir /srv/openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow ls -Zd /srv/openshift
~]$ ls -Zd /srv/openshift drwxr-xr-x. root root unconfined_u:object_r:var_t:s0 openshift/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root 로
semanage유틸리티를 사용하여/srv/openshift/를 적절한 SELinux 컨텍스트에 매핑합니다.semanage fcontext -a -e /var/lib/openshift /srv/openshift
~]# semanage fcontext -a -e /var/lib/openshift /srv/openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 그런 다음
restorecon유틸리티를 root로 사용하여 변경 사항을 적용합니다.restorecon -R -v /srv/openshift
~]# restorecon -R -v /srv/openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 이제
/srv/openshift/디렉터리에 올바른openshift_var_lib_t유형으로 레이블이 지정됩니다.ls -Zd /srv/openshift
~]$ ls -Zd /srv/openshift drwxr-xr-x. root root unconfined_u:object_r:openshift_var_lib_t:s0 openshift/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26장. IdM (Identity Management) 링크 복사링크가 클립보드에 복사되었습니다!
rpm -q ipa-server
~]$ rpm -q ipa-server
package ipa-server is not installed
yum install ipa-server
~]# yum install ipa-server
26.1. ID 관리 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
SSSD(System Security Services Daemon)는 특정 IdM 사용자에 대해 정의된 액세스 권한을 쿼리합니다. 그런 다음 pam_selinux 모듈은 IdM 액세스 권한에 따라 적절한 SELinux 컨텍스트로 사용자 프로세스를 시작하기 위해 커널에 요청을 보냅니다(예: guest_u:guest_r:guest_t:s0 ).
26.1.1. Active Directory 도메인 신뢰 링크 복사링크가 클립보드에 복사되었습니다!
WinSync 유틸리티를 사용했습니다. 이를 위해 WinSync 는 AD 서버에서 로컬 서버로 사용자 및 그룹 데이터를 복제하고 데이터를 동기화된 상태로 유지해야 했습니다.
SSSD 데몬은 AD 및 사용자와 함께 작동하도록 향상되었습니다. IdM과 AD 도메인 간에 신뢰할 수 있는 관계를 생성할 수 있습니다. 사용자 및 그룹 데이터는 AD 서버에서 직접 읽습니다. 또한 AD 및 IdM 도메인 간에SSO(Single Sign-On) 인증을 허용하는 Kerberos 교차 영역 신뢰도 제공됩니다. SSO가 설정된 경우 AD 도메인의 사용자는 암호 없이 IdM 도메인에 저장된 Kerberos로 보호되는 데이터에 액세스할 수 있습니다.
26.2. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
26.2.1. IdM 사용자에게 SELinux 사용자를 매핑 링크 복사링크가 클립보드에 복사되었습니다!
절차 26.1. SELinux 맵핑에 사용자 추가 방법
- 새 SELinux 매핑을 만들려면 다음 명령을 입력합니다. 여기서
SELinux_mapping은 새 SELinux 매핑의 이름이며--selinuxuser옵션은 특정 SELinux 사용자를 지정합니다.ipa selinuxusermap-add SELinux_mapping --selinuxuser=staff_u:s0-s0:c0.c1023
~]$ ipa selinuxusermap-add SELinux_mapping --selinuxuser=staff_u:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다음 명령을 입력하여
tuser사용자 이름이 있는 IdM 사용자를 SELinux 매핑에 추가합니다.ipa selinuxusermap-add-user --users=tuser SELinux_mapping
~]$ ipa selinuxusermap-add-user --users=tuser SELinux_mappingCopy to Clipboard Copied! Toggle word wrap Toggle overflow ipaclient.example.com이라는 새 호스트를 SELinux 매핑에 추가하려면 다음 명령을 입력합니다.ipa selinuxusermap-add-host --hosts=ipaclient.example.com SELinux_mapping
~]$ ipa selinuxusermap-add-host --hosts=ipaclient.example.com SELinux_mappingCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ipaclient.example.com 호스트에 로그인할 때
tuser사용자는staff_u:s0-s0:c0.c1023레이블을 가져옵니다.id -Z
[tuser@ipa-client]$ id -Z staff_u:staff_r:staff_t:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow
27장. Red Hat Gluster Storage 링크 복사링크가 클립보드에 복사되었습니다!
27.1. Red Hat Gluster Storage 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
glusterd (GlusterFS Management Service) 및 glusterfsd (NFS 서버) 프로세스에 대해 유연한 필수 액세스 제어를 제공하여 추가 보안 계층 역할을 합니다. 이러한 프로세스에는 glusterd_t SELinux 유형으로 고급 프로세스 격리가 바인딩되지 않습니다.
27.2. 유형 링크 복사링크가 클립보드에 복사되었습니다!
프로세스 유형
glusterd_t- Gluster 프로세스는
glusterd_tSELinux 유형과 연결됩니다.
실행 파일 유형
glusterd_initrc_exec_t- Gluster init 스크립트 파일의 SELinux별 스크립트 유형 컨텍스트입니다.
glusterd_exec_t- Gluster 실행 파일의 SELinux 특정 실행 파일 유형 컨텍스트입니다.
포트 유형
gluster_port_t- 이 유형은
glusterd에 대해 정의됩니다. 기본적으로glusterd는 204007-24027 및 38465-38469 TCP 포트를 사용합니다.
파일 문맥
glusterd_brick_t- 이 유형은
glusterdbrick 데이터로 위협된 파일에 사용됩니다. glusterd_conf_t- 이 유형은
glusterd구성 데이터와 연결되며 일반적으로/etc디렉토리에 저장됩니다. glusterd_log_t- 이 유형의 파일은
glusterd로그 데이터로 취급되며 일반적으로/var/log/디렉터리에 저장됩니다. glusterd_tmp_t- 이 유형은
/tmp디렉터리에glusterd임시 파일을 저장하는 데 사용됩니다. glusterd_var_lib_t- 이 유형을 사용하면
/var/lib/디렉터리에glusterd파일을 저장할 수 있습니다. glusterd_var_run_t- 이 유형을 사용하면 /run/ 또는
/var디렉터리에/run/glusterd파일을 저장할 수 있습니다.
27.3. 부울 링크 복사링크가 클립보드에 복사되었습니다!
gluster_export_all_ro- 이 부울을 사용하면
glusterfsd에서 파일과 디렉터리를 읽기 전용으로 공유할 수 있습니다. 이 부울은 기본적으로 비활성화되어 있습니다. gluster_export_all_rw- 이 부울을 활성화하면
glusterfsd에서 읽기 및 쓰기 액세스 권한이 있는 파일 및 디렉터리를 공유할 수 있습니다. 이 부울은 기본적으로 활성화되어 있습니다. gluster_anon_write- 이 부울을 활성화하면
glusterfsd에서public_content_rw_tSELinux 유형으로 레이블이 지정된 공용 파일을 수정할 수 있습니다.
getsebool -a | grep service_name
~]$ getsebool -a | grep service_name
sepolicy booleans -b boolean_name
~]$ sepolicy booleans -b boolean_name
sepolicy 유틸리티를 제공하는 추가 policycoreutils-devel 패키지가 필요합니다.
27.4. 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
27.4.1. Gluster brick에 레이블 지정 링크 복사링크가 클립보드에 복사되었습니다!
glusterd_brick_t 로 레이블이 지정되지 않은 경우 SELinux는 특정 파일 액세스 작업을 거부하고 다양한 AVC 메시지를 생성합니다.
/dev/rhgs/gluster )는 Gluster brick으로 사용됩니다.
절차 27.1. Gluster Brick에 레이블을 지정하는 방법
- 디렉터리를 만들어 이전에 포맷한 논리 볼륨을 마운트합니다. 예를 들어 다음과 같습니다.
mkdir /mnt/brick1
~]# mkdir /mnt/brick1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 논리 볼륨(이 경우
/dev/vg-group/gluster)을 이전 단계에서 생성한/mnt/brick1/디렉터리에 마운트합니다.mount /dev/vg-group/gluster /mnt/brick1/
~]# mount /dev/vg-group/gluster /mnt/brick1/Copy to Clipboard Copied! Toggle word wrap Toggle overflow mount 명령은 장치를 일시적으로만 마운트합니다. 장치를 영구적으로 마운트하려면 다음 항목과 유사한 항목을/etc/fstab파일에 추가합니다./dev/vg-group/gluster /mnt/brick1 xfs rw,inode64,noatime,nouuid 1 2
/dev/vg-group/gluster /mnt/brick1 xfs rw,inode64,noatime,nouuid 1 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 자세한 내용은 fstab(5) 도움말 페이지를 참조하십시오. /mnt/brick1/의 SELinux 컨텍스트를 확인합니다.ls -lZd /mnt/brick1/
~]$ ls -lZd /mnt/brick1/ drwxr-xr-x. root root system_u:object_r:unlabeled_t:s0 /mnt/brick1/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 디렉터리에 레이블이 지정되지 않은_t SELinux 유형으로 레이블이지정됩니다./mnt/brick1/의 SELinux 유형을glusterd_brick_tSELinux 유형으로 변경합니다.semanage fcontext -a -t glusterd_brick_t "/mnt/brick1(/.*)?"
~]# semanage fcontext -a -t glusterd_brick_t "/mnt/brick1(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow restorecon유틸리티를 사용하여 변경 사항을 적용합니다.restorecon -Rv /mnt/brick1
~]# restorecon -Rv /mnt/brick1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 마지막으로 컨텍스트가 성공적으로 변경되었는지 확인합니다.
ls -lZd /mnt/brick1
~]$ ls -lZd /mnt/brick1 drwxr-xr-x. root root system_u:object_r:glusterd_brick_t:s0 /mnt/brick1/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
28장. 참고 자료 링크 복사링크가 클립보드에 복사되었습니다!
서적
- 예제별 SELinux
- Mayer, MacMillan 및 CaplanPcurrentice Hall, 2007년
- SELinux: NSA의 오픈 소스 보안 강화 Linux
- Bill MctyO'Reilly Media Inc., 2004
튜토리얼 및 도움말
- Russell Coker의 튜토리얼 및 대화
- Dan Walsh's Journal
- Red Hat Knowledgebase
메일링 리스트
- Fedora SELinux 메일링 리스트
커뮤니티
- SELinux 프로젝트 Wiki
- SELinux 커뮤니티 페이지
- IRC
- iRC.freenode.net, #selinux
부록 A. 개정 내역 링크 복사링크가 클립보드에 복사되었습니다!
| 고친 과정 | |||
|---|---|---|---|
| 고침 0.3-06 | Fri Aug 9 2019 | ||
| |||
| 고침 0.3-05 | Sat Oct 20 2018 | ||
| |||
| 고침 0.3-03 | Tue Apr 3 2018 | ||
| |||
| 고침 0.3-01 | Thu Jul 13 2017 | ||
| |||
| 고침 0.2-18 | Wed Nov 2 2016 | ||
| |||
| 고침 0.2-11 | Sun Jun 26 2016 | ||
| |||
| 고침 0.2-10 | Sun Feb 14 2016 | ||
| |||
| 고침 0.2-9 | Thu Dec 10 2015 | ||
| |||
| 고침 0.2-8 | Thu Nov 11 2015 | ||
| |||
| 고침 0.2-7 | Thu Aug 13 2015 | ||
| |||
| 고침 0.2-6 | Wed Feb 18 2015 | ||
| |||
| 고침 0.2-5 | Fri Dec 05 2014 | ||
| |||
| 고침 0.2-4 | Thu Dec 04 2014 | ||
| |||
| 고침 0.1-41 | Tue May 20 2014 | ||
| |||
| 고침 0.1-1 | Tue Jan 17 2013 | ||
| |||