(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
。