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

関連情報