CentOS 7-VSLinux를 통해 생성 된 디렉토리가 SELinux 컨텍스트를 상속하지 않음


8

우리 회사에는 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 컨텍스트를 상속하도록하려면 어떻게해야합니까?


보안을 위해 FTP를 전혀 지원하지 않는 것이 좋습니다. SFTP를 대신 사용하도록 파일 전송 클라이언트를 구성하는 방법에 대한 정보를 제거하고 고객에게이 문제를 제거하는 방법을 고려하십시오.
Michael Hampton

고마워 마이클. 동의하지만 고객의 경우 "ftp.domain.com"을 사용하지 않으며 서버의 공개 IP 주소 (서버는 NginX 프록시 뒤에 있음)를 공개하지 않으므로 FTP 보안은 문제가되지 않습니다. 우리를 위해. FTP 주소를 보낸 사람 만이 FTP를 통해 연결할 서버의 IP 주소를 찾을 수 있습니다.
Juan Pablo Barrios

답변:


6

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

여기서 주목할 사항 :

/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.


1
안녕 매튜, 그 트릭을했다! 내가 이것에 미치게되면서 당신의 도움에 감사드립니다. 내가 파일을 만든 : 나는 확실히 내가 조금 인터넷 검색 및 다음 내가 무슨 짓을했는지, 그래서 내가 SELinux를 사용자 정의 적이 당신이 쓴 정책 모듈과 함께 일을하지 않았다 local_ftpd.te그때 내가 한, 정책 모듈 make -f /usr/share/selinux/devel/Makefile local_ftpd.pp다음과 semodule -i local_ftpd.pp. 이거 괜찮아? 이제 FTP를 통해 생성 된 파일이 원하는 컨텍스트를 상속합니다. 다시 감사합니다!
Juan Pablo Barrios
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.