저는 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.credentials
admin_home_t
automount_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_t
user_home_t