CentOS 7-VSLinux를 통해 생성 된 디렉토리가 SELinux 컨텍스트를 상속하지 않음 system_u:object_r:httpd_sys_rw_content_t:s0 그래서, 난에 디렉토리에 다른 서버에서

우리 회사에는 CentOS 7을 사용하는 웹 서버가 있으며 고객은 FTP (vsftpd)를 통해 웹 사이트를 관리합니다. SELinux가 적용 모드입니다.

문제는 VSFTPD를 통해 생성 / 업로드 된 데이터가 적절한 SELinux 컨텍스트를 상속하지 않는다는 것입니다. 설명하겠습니다.

예를 들어, WordPress 사이트의 경우 서버에 기본적으로 이미 다음을 사용하여 볼 수있는 몇 가지 규칙이 있습니다 semanage fcontext -l |grep '/var/www'.

/var/www/html(/.*)?/uploads(/.*)?                  all files          system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)?               all files          system_u:object_r:httpd_sys_rw_content_t:s0

그래서, 난에 디렉토리에 다른 서버에서 워드 프레스 사이트하자 말을 복사 할 때 /var/www/html/SSH, 폴더로 wp-content/wp-content/uploads/적절한있는 httpd_sys_rw_content_t보안 컨텍스트를. 그러나 FTP를 통해 해당 폴더를 만들 때 컨텍스트는 httpd_sys_content_t( rw 없음 )입니다. 이는 고객이 서버에 업로드 한 사이트가 Apache 사용자 / 그룹에 쓰기 권한을 부여하더라도 해당 디렉토리에 쓸 수 없으므로 WordPress 관리자가 작동하지 않음을 의미합니다. 따라서 사이트를 업로드 할 때이 문제를 해결하려면 지원을 요청해야합니다. 이는 모든 관련자에게 시간 낭비입니다.

고객이 자신의 사이트를에 업로드했다고 가정 해 보겠습니다 httpdocs.SSH를 통해 mv httpdocs/ httpdocs.2/ && cp -pr httpdocs.2/ httpdocs/ && rm httpdocs.2/ -fr문제가 해결되면 데이터에 아무런 문제가 없습니다.

restorecon -Rv httpdocs/문제를 해결하기 위해 할 수도 있습니다 .

따라서 질문은 다음과 같습니다. VSFTPD를 통해 생성 / 업로드 된 디렉토리가 SSH를 통해 디렉토리를 생성 / 업로드 할 때 상속되는 것처럼 적절한 SELinux 컨텍스트를 상속하도록하려면 어떻게해야합니까?



답변

런타임에 발생하는 기본 레이블링과 서버에 적용되는 정규식 기반 레이블링 후 정책에는 차이가 있습니다.

여기서 주목할 사항 :

/var/www/html(/.*)?/uploads(/.*)?                  all files          system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)?               all files         system_u:object_r:httpd_sys_rw_content_t:s0

게시물 라벨 정책입니다.

문제에서 논의하는 것은 실제로 런타임 정책과 관련이 있습니다.

SELinux를 사용하여 디렉토리에 항목을 만들 때 파일 또는 디렉토리의 레이블을 결정하는 규칙은 인용하는 정규 표현식에 의해 지시되지 않고 다음과 같은 다른 규칙에 의해 지시됩니다 (이것이 올바른 순서라고 생각하지만 무언가를 놓쳤을 수도 있습니다) .

  1. 명시적인 명명 된 type_transition규칙이 있습니다.
  2. 명시적인 명명되지 않은 type_transition규칙이 있습니다.
  3. 부모 디렉토리와 동일한 컨텍스트를 상속하십시오.
  4. 을 적용하십시오 default_context.

따라서 SSH를 통해 다른 서버에서 / var / www / html /의 디렉토리로 WordPress 사이트를 복사하면 wp-content / 및 wp-content / uploads / 폴더에 올바른 httpd_sys_rw_content_t 보안 컨텍스트가 있습니다.

따라서 그렇습니다. 그렇다고 생각하는 이유는 아닙니다. 포스트 라벨링 정책 때문이 아닙니다.

type_transition동작을 제공 하는 특정 명명 된 규칙이 존재 하기 때문에 발생합니다 .

$ sesearch -C -T -s unconfined_t -t httpd_sys_content_t -c dir

Found 4 named file transition filename_trans:
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "wp-content";
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "smarty";
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "uploads";
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "upgrade";

이것은 기본적으로 말합니다.

  • 당신이 경우 unconfined_t
  • 대상 유형에서 작업을 수행하는 경우 httpd_sys_content_t
  • 새 항목의 클래스가 디렉토리 인 경우
  • 새 항목의 이름이 “업로드”인 경우
  • 새로운 유형은 httpd_sys_rw_content_t

SSHD에서 작동하는 이유는 로그인 한 후이 unconfined_t규칙이 적용되는 소스 컨텍스트가 제공되기 때문 입니다.

이 서비스의 소스 컨텍스트가 ftpd_t일치하는 규칙 이 없기 때문에 FTP 서비스에서는 작동하지 않습니다 .

따라서 FTP의 다른 항목에서도 볼 수있는 명명 된 파일 규칙을 준수하도록 SELinux의 동작을 변경하도록 정책을 수정해야합니다.

Fedora 23에는 최소한이를 허용하는 인터페이스가 있으며 이와 같은 정책 모듈이이를 수행합니다.

policy_module(local_ftpd, 7.2.0)

require {
  type ftpd_t;
}

apache_filetrans_named_content(ftpd_t)

selinux-policy-devel패키지가 설치되어 실행 중인지 확인하여로드 할 수 있습니다 make -f /usr/share/selinux/devel/Makefile load.


답변