루트가 selinux의 루트에 있는 파일에 액세스하기 위해 스크립트를 소유/실행할 수 있도록 허용하는 가장 현명하고 안전한 방법

루트가 selinux의 루트에 있는 파일에 액세스하기 위해 스크립트를 소유/실행할 수 있도록 허용하는 가장 현명하고 안전한 방법

저는 CIFS 공유를 자동으로 마운트하는 autofs 프로그램을 기반으로 매핑을 작성하여 ~/.smb특정 사용자 폴더에 있는 파일에서 자격 증명을 얻었습니다. 여러 자격 증명 파일이 있을 수 있으며 각 파일 이름은 대상 CIFS 서버의 도메인 이름과 일치합니다.

automounter(8)Autofs 마운트는 내 Centos 7 버전에서 systemd 서비스로 정의된 에 의해 실행됩니다 . Automounter는 루트로 실행되며, autofs 매핑 스크립트는 루트가 소유하고 0700 권한으로 설정되며, 0600 권한을 가진 자격 증명 파일이 있습니다 /root/.smb. 논리적으로는 자동 설치 프로그램이 자격 증명 파일을 읽을 수 있어야 한다고 생각합니다.

즉, SELinux가 나타날 때까지 audit.log에 기록됩니다(가독성을 위해 줄 바꿈이 추가됨).

type=AVC msg=audit(1508458225.901:143): avc:  
    denied  { read } for  
    pid=4786 
    comm="auto.smb-user" 
    name="mydomain.credentials" 
    dev="sda1" 
    ino=10180973 
    scontext=system_u:system_r:automount_t:s0
    tcontext=unconfined_u:object_r:admin_home_t:s0 
    tclass=file

물론 자동 마운트 프로세스는 잘 작동 setenforce 0하지만 SELinux를 항상 비활성화하는 것보다 SELinux에 익숙해지는 편이 낫습니다.

감사 로깅은 파일이 표시되어 있고 표시된 프로세스가 해당 파일에 액세스할 수 없기 때문에 내 스크립트에 액세스할 수 없다는 auto.smb-user의미 인 것 같습니다 .mydomain.credentialsadmin_home_tautomount_t

우선 내가 이 글을 제대로 읽고 있는 걸까? 그렇지 않다면 어떻게 더 잘 설명할 수 있을까요?

~/.smb둘째, 이 스크립트가 루트를 포함한 모든 사용자에 대해(바람직하게는 자동 마운트를 통해 실행되는 경우에만) 아래의 모든 자격 증명 파일에 액세스할 수 있도록 최소한의 SELinux "예외"를 어떻게 현명하게 추가합니까 yum update?

답변1

예 - 출력을 올바르게 읽고 있습니다.

소스 컨텍스트는 이고 automount_t, 대상 컨텍스트는 이며 admin_home_t, automount_t읽기 권한이 없어 거부되었습니다 admin_home_t.

이를 확인하려면 다음 명령을 사용할 수 있습니다.

sesearch -d -A -s autmount_t -t admin_home_t

빈 줄을 반환한다는 것을 알 수 있습니다. 이는 automount_t아무 의미도 없습니다 admin_home_t.

이제 두 가지 옵션이 있습니다.

  • 더 간단하고 합리적인 해결책은 파일의 파일 컨텍스트를 로 변경하는 것 입니다 automount_var_run_t. 그러면 SELinux는 해당 파일이 자동 마운트에 의해 소유된 것으로 생각하여 읽기 및 쓰기를 포함한 거의 모든 작업을 수행할 수 있습니다(그러나 명심할 점 유효한 결과는 여전히 일반 파일 권한이나 ACL에 의해 무시될 수 있습니다!)
  • automount_t더 포괄적이고 미친 솔루션인 정책 패키지를 추가하세요. 정책 패키지는 읽기 액세스 권한을 제공 admin_home_t하지만 "소유자" 액세스 권한이 아닌 읽기 액세스 권한만 제공합니다.
  • (처음 두 옵션을 결합하여 더 복잡하게 만드는 세 번째 옵션이 있습니다. 자신만의 컨텍스트 유형을 생성하고 이를 이러한 파일에 적용한 다음 automount_t가 해당 유형에 액세스할 수 있도록 허용하는 정책 모듈을 생성합니다. 이에 대해서는 논의하지 않겠습니다. 상세히).

파일 컨텍스트를 automount_var_run_t로 변경

이것은 더 간단한 옵션입니다. 파일의 파일 컨텍스트를 /root/.smb다음으로 변경하면 됩니다 automount_var_run_t. 그러면 해당 유형으로 실행되는 모든 프로세스가 automount_t해당 파일에 액세스할 수 있습니다. 그러나 이 경우에는 추가 권한도 갖게 됩니다. 테스트를 통해 sesearch -d -A -s autmount_t -c file알 수 있는 내용:

allow automount_t automount_var_run_t : file { ioctl read write getattr lock add_name remove_name search open } ;

자동 마운트에 이러한 파일에 대한 권한이 있다는 데 동의하는 경우 실제로 파일의 컨텍스트를 automount_var_run_t로 변경하고 다음을 수행할 수 있습니다.

semanage fcontext -a -t automount_var_run_t "/root/.smb"
restorecon /root/.smb

루트 파일에 액세스하려면 자동으로 마운트되어야 합니다. 이제 다른 모든 사용자에 대한 액세스를 추가하려면(기본 집 위치가 있다고 가정하고...) 다음을 수행하십시오.

semanage fcontext -a -t autmount_var_run_t "/home/(.*)+/.smb"
restorecon -R /home

이렇게 하면 설명하는 방식으로 자동 마운트가 작동할 수 있습니다.

admin_home_t에 automount_t 읽기 권한 부여

그러면 automount_t에 읽기 권한이 부여됩니다.모두컨텍스트가 admin_home_t인 파일. 아마도 당신이 정말로 원하는 것은 아닐 것입니다. 그러나 완전성을 위해

관련 audit.log 줄을 가져와 파일(예: automount-audit.log. 그런 다음 다음 명령을 실행하십시오.

audit2allow -i automount-audit.log -m automount > automount-audit.te

그러면 감사 로그 줄에서 다음과 같은 유형 적용 파일이 생성됩니다.

module automount-smb 1.0;

require {
    type admin_home_t;
    type automount_t;
    class file read;
}

#============== autmount_t ==============
allow automount_t admin_home_t:file read;

user_home_t에 대한 액세스도 허용하려면(루트가 아닌 일반 사용자의 경우) 끝에 다음 줄을 추가하면 됩니다.

allow automount_t user_home_t:file read;

그런 다음 다음을 사용하여 모듈을 컴파일해야 합니다.

checkmodule -M -m -o automount-smb.mod automount-smb.te

모듈에서 전략 패키지를 만듭니다.

semodule_package -o automount-smb.pp -m automount-smb.mod

마지막으로 (짜잔!) 정책 패키지를 커널에 삽입합니다.

semodule -i automount-smb.pp

이제 태그가 지정된 프로세스에는 또는 컨텍스트가 automount_t있는 모든 파일에 대한 읽기 액세스가 허용되어야 합니다 .admin_home_tuser_home_t

관련 정보