배경

배경

데몬 프로세스가 있습니다(아파치/삼바/vsftpd/…)이 SELinux가 활성화된 시스템에서 실행되고 있으며 기본 위치가 아닌 위치에 있는 파일을 사용하도록 허용해야 합니다. 표준 파일 권한은 액세스를 허용하도록 구성됩니다.

데몬이 허용 모드에서 실행 중이면 모든 것이 잘 작동합니다. 다시 실행하면 더 이상 작동하지 않습니다.SELinux AVC 거부 메시지.

시행 모드 액세스를 허용하도록 시스템을 어떻게 구성합니까?

답변1

배경

SELinux는 Linux 시스템에 또 다른 권한 검사 계층을 추가합니다. SELinux 지원 시스템에서는 일반 DAC 권한을 먼저 확인하고 액세스가 허용되면 SELinux정책상담을 받으세요. SELinux 정책이 액세스를 거부하는 경우 /var/log/audit/audit.log감사 로그에 로그 항목이 생성되거나 auditd시스템에서 실행되지 않는 경우 dmesg에 로그 항목이 생성됩니다.

SELinux는 다음과 같은 라벨을 할당합니다.보안 컨텍스트, 시스템의 모든 개체(파일, 프로세스 등)에:

  • 문서확장된 속성에 보안 컨텍스트를 저장합니다. 이는 를 통해 볼 수 있습니다 ls -Z.

    SELinux는 경로 패턴을 기본 파일 컨텍스트에 매핑하는 데이터베이스를 유지 관리합니다. 이 데이터베이스는 기본 파일 컨텍스트를 수동으로 복원하거나 시스템 레이블을 다시 지정해야 할 때 사용됩니다. 데이터베이스는 다음을 통해 쿼리할 수 있습니다.semanage도구.

  • 프로세스실행 파일이 실행될 때( 시스템 호출) execve보안 컨텍스트가 할당됩니다 . 프로세스 보안 컨텍스트는 ps Z $PID.

  • 다른 태그가 지정된 개체도 존재하지만 이 답변과 관련이 없습니다.

SELinux정책포함하다규칙컨텍스트 간에 허용되는 작업을 지정합니다. SELinux는 다음에서 실행됩니다.화이트리스트규칙에 따라 정책에서 명시적으로 허용하지 않는 모든 콘텐츠는 거부됩니다. 이것참고정책일반적으로 SELinux를 지원하는 배포판에서 사용되는 정책인 많은 애플리케이션에 대한 정책 모듈이 포함되어 있습니다. 이 답변은 주로 참조 기반 전략을 사용하는 방법을 설명하며, 배포판에서 제공하는 전략을 사용할 경우 가장 많이 사용할 가능성이 높습니다.

일반 사용자로 애플리케이션을 실행하면 기본 구성이 사용자를무제한문맥. 프로세스는 다음에서 실행됩니다.무제한컨텍스트에는 제한이 거의 없습니다. 제한되지 않은 컨텍스트의 사용자 셸에서 프로그램을 문제 없이 실행할 수 있지만 init 시스템을 사용하여 부팅하면 더 이상 제한된 컨텍스트에서 작동하지 않을 수 있습니다.

일반적인 질문

파일이 기본 위치가 아닌 위치(기본 정책에 설명되지 않음)에 있는 경우 문제는 일반적으로 다음과 같은 이유와 관련됩니다.

  • 파일에 올바르지 않거나 호환되지 않는 파일 컨텍스트가 있습니다.: 이동된 파일은 mv이전 위치의 파일 보안 컨텍스트를 포함하여 메타데이터를 유지합니다. 새 위치에 생성된 파일은 상위 디렉터리 또는 생성 프로세스의 컨텍스트를 상속합니다.

  • 여러 데몬이 동일한 파일을 사용하도록 허용: 기본 정책에는 관련 보안 컨텍스트 간의 상호 작용을 허용하는 규칙이 포함되어 있지 않습니다.

보안 컨텍스트가 잘못된 파일

이러한 파일이 다른 데몬(또는 기타 제한된 프로세스)에서 사용되지 않고 유일한 변경 사항이 파일이 저장된 위치인 경우 SELinux 구성에 필요한 변경 사항은 다음과 같습니다.

  • 파일 컨텍스트 데이터베이스에 새 규칙 추가
  • 기존 파일에 올바른 파일 컨텍스트 적용

기본 위치의 파일 컨텍스트를 새 위치의 템플릿으로 사용할 수 있습니다. 대부분의 전략 모듈에는 매뉴얼 페이지 문서가 포함되어 있습니다(다음을 사용하여 생성됨).sepolicy manpages) 가능한 대체 파일 컨텍스트와 해당 액세스 의미를 설명합니다.

파일 컨텍스트 데이터베이스는 정규식 구문을 사용하므로 중복되는 사양을 작성할 수 있습니다. 애플리케이션 컨텍스트가 발견된 마지막 사양이라는 점은 주목할 가치가 있습니다.[원천].

파일 컨텍스트 데이터베이스에 새 항목을 추가하려면 다음을 수행하십시오.

semanage fcontext -a -t <type> "/path/here/(/.*)?"

데이터베이스에 새 컨텍스트 항목을 추가한 후 다음 명령을 사용하여 데이터베이스의 컨텍스트를 파일에 적용할 수 있습니다.restorecon <files>. restorecon플래그를 사용하여 실행하면 -vn변경 사항이 적용되지 않고 변경될 파일 컨텍스트가 표시됩니다.

데이터베이스에 새 항목을 추가하지 않고 새 파일 컨텍스트 테스트

컨텍스트를 수동으로 변경할 수 있습니다.chcon도구. 이는 파일 컨텍스트 데이터베이스에 항목을 추가하지 않고 새 파일 컨텍스트를 테스트하려는 경우에 유용합니다.

새 파일 컨텍스트는 의 매개변수에 지정됩니다 chcon. 옵션과 함께 사용하면 --reference=참조 파일의 보안 컨텍스트가 대상 파일에 복사됩니다.

특정 컨텍스트 사용( default_t):

chcon -t default_t <target files>

또는 참조를 사용하십시오.

chcon --reference=<path to default location> <target files>

다양한 파일 시스템 및 마운트 지점에 대한 참고 사항

새 위치가 자체 마운트 지점인 경우 다음을 사용할 수 있습니다.설치 옵션. 마운트 옵션을 사용하여 설정된 컨텍스트는 디스크에 저장되지 않으므로 확장 속성을 지원하지 않는 파일 시스템에서도 사용할 수 있습니다.

mount <device> <mount point> -o context="<context>"

서로 다른 보안 컨텍스트에서 실행되는 프로세스가 동일한 파일을 사용하도록 허용

옵션 1: 부울

참조 전략에는 다음과 같은 조정 가능한 옵션이 포함됩니다.부울 값, 일부 추가 규칙을 활성화/비활성화합니다. 이들 중 다수는 일반적으로 동일한 파일을 사용하지 않는 다양한 시스템 데몬의 상호 운용성을 허용합니다.

가능한 모든 조정 가능 옵션 목록과 해당 설명이 제공됩니다 semanage boolean -l.audit2allow어떤 부울 값을 활성화해야 하는지 직접 결정하는 것도 가능할 수도 있습니다.

부울 값을 활성화/비활성화하려면 다음을 사용하십시오.semanage:

semanage boolean --on <boolean name>
semanage boolean --off <boolean name>

부울 값은 전략을 수정하는 가장 간단한 방법입니다. 그러나 부울 값을 전환하여 가능한 모든 상황을 해결할 수 있는 것은 아닙니다. 일부 부울은 너무 광범위하여 매우 광범위한 액세스를 허용합니다.

옵션 2: 새 모듈로 전략 확장

액세스를 허용하는 부울 값이 없으면 사용자 정의 모듈을 추가하여 정책을 수정해야 합니다.

audit2allow액세스를 허용하는 데 필요한 규칙을 추가하는 간단한 모듈은 다음 단계를 사용하여 로그 파일에서 생성할 수 있습니다.

  1. 데몬 프로세스 설정필드(보안 컨텍스트)허용 모드. 완화 모드에서는 정책이 적용되지 않습니다.억지로 시키다하지만 정책이 일반적으로 거부하는 액세스에 대한 로그를 생성합니다.

    semanage permissive -a <domain>
    
  2. 로그 항목을 생성하려면 일반 작업에서 데몬을 테스트하세요.

  3. 새로운 전략 모듈을 생성하고 삽입하세요.

    audit2allow -a -M <name>
    semodule -i <name>.pp'
    
  4. 시행 모드를 다시 활성화합니다.

    semanage permissive -d <domain>
    

이 방법은 소수의 보안 컨텍스트만 관련된 경우에 가장 효과적입니다. 복잡한 구성에서는 자체 정책 모듈을 작성해야 할 가능성이 높습니다. 시작하는 데 필요한 일부 리소스는 다음과 같습니다.젠투 위키그리고참조 정책 API문서.

답변2

다음 명령을 사용하십시오.

# semanage fcontext -l /oldpath/

시스템 폴더에서 기본 SElinux 컨텍스트를 확인할 수 있으므로 이 명령을 사용하면 데몬 폴더의 기본 컨텍스트를 볼 수 있습니다.

따라서 콘텐츠를 이동하려는 디렉터리에 구성되어야 하는 SELinux 컨텍스트가 있는지 확인할 수 있습니다.

다음 컨텍스트(아파치 컨텍스트)가 포함된 데몬 폴더가 있다고 가정해 보겠습니다.

# semanage fcontext -l
...
/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0

그런 다음 이러한 컨텍스트를 다음과 같은 새 경로에 적용합니다(아파치 데몬 기본 보안 컨텍스트를 사용하는 예).

# semanage fcontext -a -t httpd_sys_content_t '/newpath(/.*)?'

이 작업을 완료한 후에는 콘텐츠가 이미 새 경로에 있다는 점을 고려하여 해당 경로 아래의 모든 항목이 해당 컨텍스트를 갖도록 강제해야 합니다.

# restorecon -RFvv /newpath

다음 명령을 사용하여 작동하는지 확인할 수 있습니다.

# ls -Zd /newpath/

디렉터리나 파일을 mv하면 보안 컨텍스트가 유지된다는 점을 기억하세요. 폴더나 디렉터리를 cp하면 컨텍스트가 상위 디렉터리의 컨텍스트로 설정됩니다.

특정 소프트웨어에 대한 매뉴얼 페이지를 확인해야 하는 경우 다음 명령을 사용하여 매뉴얼 페이지를 설치할 수 있습니다.

# yum install -y selinux-policy-devel

man 데이터베이스를 다시 색인화하려면 다음 명령을 실행하는 것을 잊지 마십시오.

# mandb

그런 다음 이것을 실행하고 모든 selinux 매뉴얼 페이지를 확인할 수 있습니다.

# man -k selinux

차이점을 확인하려면 패키지를 설치하기 전과 후에 이 명령을 실행하는 것이 좋습니다.

# man -k selinux | wc -l

답변3

SELinux 읽기/쓰기 권한에 참을성이 없는 사람들을 위한 빠른 답변입니다(lins의 설명에 추가됨).

Getenforce # see current mode.
getsebool -a # find al boolean values
Sudo setenforce 0 # shut it down, but its back at reboot -NOT RECOMMENDED other than debug.

영구적인 해결책은 다음과 같습니다.

아래 라인 2는 작동하지만 이름 바꾸기 및 복원 작업에서는 유지되지 않습니다(이러한 경우에는 라인 3이 유지됩니다).

 ls -dZ /var/www/html  # See SELinux context of 
 sudo chcon -R -t httpd_sys_content_t /var/www/html/website-document-root
 sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?" 

또한 과거에 Apache에 쓰기 액세스 권한을 부여하기 위해 다음을 수행했습니다.

Selinux는 httpd가 /var/www/html/my-project를 읽고 쓸 수 있도록 허용합니다.

sudo chcon -R -t httpd_sys_script_rw_t /var/www/html/my-project/
sudo chcon -R -t httpd_sys_script_rw_t /var/www/my-Symfony-project/var/log/

SELinux 참조:

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-managing_confined_services-the_apache_http_server-types

내용이나 맥락에 대한 논의를 반복하지 않습니다. 위의 답변이나 위의 링크를 참조하세요(결국 참을성이 없는 분들을 위한 것입니다).

관련 정보