sudo를 호출할 때 다른 도메인으로 전환하는 방법은 무엇입니까?

sudo를 호출할 때 다른 도메인으로 전환하는 방법은 무엇입니까?

(smartctl을 통해) 데이터 수집 스크립트를 실행하는 데몬(collectd)이 있습니다.

Collectd의 exec-plugin을 사용하려면 사용자 != 루트에서 외부 스크립트를 실행해야 합니다.

계획은 다음과 같이 설정됩니다.

  • Collectd가 사용자를 변경하고 스크립트를 실행하도록 허용합니다(SELinux를 통해).
  • 현재 작업에 대한 시스템 사용자 X를 생성합니다.
  • X가 smartctl을 실행할 수 있도록 sudo를 구성합니다.
  • a) sudo가 무제한 도메인으로 변환되도록 SELinux를 구성합니다. b) 사용자 X의 setuid(또는 스크립트 실행)가 무제한 도메인으로 변환됩니다.

나는 마지막 단계를 생각해 냈습니다. 그렇지 않으면 번역이 없고 모든 smartctl 관련 하위 수준 권한(예: sys_rawio, ioctl,execute_no_trans...)의 수집을 허용해야 하기 때문에 피하고 싶습니다.

Sudo는 SELinux 관련 속성을 제공하는 것으로 보입니다. 예를 들어 sudoer 줄에 다음 내용을 넣을 수 있습니다.

TYPE=unconfined_t ROLE=unconfined_r

그러나 sudo는 다음과 같이 불평합니다.

sudo: 강제 모드를 확인할 수 없습니다. : 권한이 거부되었습니다
sudo: /usr/sbin/smartctl을 실행할 수 없습니다: 권한이 거부되었습니다.

TYPE/ROLE을 sudo(CentOS 7에서)와 함께 어떻게 사용해야 합니까?

b) 경로는 어떻습니까? 사용자 정의 SELinux 정책 파일로 구성하는 방법은 무엇입니까?

답변1

.te다음과 같이 사용자 정의 정책 파일( )에서 변환을 지정할 수 있습니다 .

module collectdlocalexec 1.0;

require {
        type collectd_t;
        type user_home_t;
        type unconfined_t;
        type shell_exec_t;
        class capability {setgid setuid };
        class file { execute read open };
        class process transition;
}

allow collectd_t self:capability { setgid setuid };
allow collectd_t user_home_t:file { execute read open };
allow collectd_t shell_exec_t:file execute;
allow collectd_t unconfined_t:process transition;

type_transition collectd_t user_home_t:process unconfined_t;

수집 스크립트는 사용자의 홈 디렉토리(및 레이블이 지정됨)에 있다고 가정합니다 user_home_t.

관련 정보