우리 회사에는 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를 사용하여 디렉토리에 항목을 만들 때 파일 또는 디렉토리의 레이블을 결정하는 규칙은 인용하는 정규 표현식에 의해 지시되지 않고 다음과 같은 다른 규칙에 의해 지시됩니다 (이것이 올바른 순서라고 생각하지만 무언가를 놓쳤을 수도 있습니다) .
- 명시적인 명명 된
type_transition
규칙이 있습니다. - 명시적인 명명되지 않은
type_transition
규칙이 있습니다. - 부모 디렉토리와 동일한 컨텍스트를 상속하십시오.
- 을 적용하십시오
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
.