CentOS의 Restorecon이 fcontext 순서를 따르지 않습니다.

CentOS의 Restorecon이 fcontext 순서를 따르지 않습니다.

파일 컨텍스트를 실험하면서 이상한 동작에 직면했고 뭔가 빠진 것 같습니다. 내가하는 일은 다음과 같습니다.

여러 개의 디렉토리와 파일 생성

# mkdir -p /virtual/www/cgi-bin
# touch /virtual/www/cgi-bin/script
# touch /virtual/www/webpage

몇 가지 규칙을 처음부터 설정하세요.

# semanage fcontext -D
# semanage fcontext -a -t httpd_sys_script_exec_t '/virtual/www/cgi-bin(/.*)?'
# semanage -a -t httpd_sys_content_t '/virtual/www(/.*)?'

테스트해보세요!

# restorecon -vr /virtual
restorecon reset /virtual/www context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /virtual/www/cgi-bin context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /virtual/www/cgi-bin/script context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /virtual/www/webpage context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

cgi-bin에 대한 보다 구체적인 규칙에도 불구하고 모든 파일/디렉토리는 httpd_sys_content_t 유형을 갖습니다. 그러나 나는 cgi-bin 디렉토리를 원하고 아래에는 httpd_sys_script_exec_t 유형이 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

CentOS 6 및 RedHat 7에서 동일한 결과로 테스트되었습니다.

답변1

selinux에서 사용하는 패턴은 정렬할 수 없기 때문에(예: .*b와 비교 b.*) selinux는 규칙을 구체적으로 정렬하지 않고 마지막 추가-마지막 적용 순으로 정렬합니다.

불행하게도 semanage fcontext -l은 간단한 문자열 비교를 통해 규칙을 정렬합니다. 이는 규칙을 찾는 데 도움이 되지만 여러 일치 규칙을 디버그해야 하는 경우에는 그렇지 않습니다.

실제로 적용된 순서를 볼 수 있습니다.

cat /etc/selinux/targeted/contexts/files/file_contexts.local

따라서 보다 일반적인 규칙을 먼저 추가한 다음 보다 구체적인 규칙을 추가해야 합니다. 또는 더 나은 방법은 파일당 하나의 규칙만 일치할 수 있는 방식으로 규칙을 작성하기 위해 최선을 다하는 것입니다.

관련 정보