MariaDBが選択した方法でSElinuxコンテキストを設定することができるかどうかを教えてください。
現在の構成:
ls -lZ /etc/my.cnf
lrwxrwxrwx. root root system_u:object_r:mysqld_etc_t:s0 /etc/my.cnf -> /app/program/cfg/mysql/etc/my.cnf
ls -lZ /app/program/cfg/mysql/etc/my.cnf
-rw-r--r--. root root system_u:object_r:default_t:s0 /app/program/cfg/mysql/etc/my.cnf
ls -l /app/program/cfg
lrwxrwxrwx. 1 user user 26 Jun 12 16:25 /app/program/cfg -> cfg-ver1
(2番目のファイルのコンテキストを何度も変更しましたが、成功しませんでした。)
現在、MariaDBを使用してこれを取得することはできませんが、うまくenforcing
機能しますpermissive
。
!include
UPD:また、他の設定ファイルを含めるためにディレクティブを使用してみましたが、上記のようにパスに/etc/my.cnf
シンボリックリンクが含まれている場合、MariaDBはそれを選択しません。
type=AVC msg=audit(1560419317.130:75): avc: denied { read } for pid=4359 comm="mysqld" name="cfg" dev="xvda1" ino=205 scontext=system_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:default_t:s0 tclass=lnk_file permissive=0
Was caused by:
Missing type enforcement (TE) allow rule.
そしてcfg
シンボリックリンクです。 /etc/my.cnfの次の行は機能します(ターゲットファイルの正しいSelinuxコンテキストを使用)。
!include /app/program/cfg-ver1/mysql/etc/my.cnf
実行後:
sudo chcon -t mysqld_etc_t /app/program/cfg/mysql/etc/my.cnf
次に続く:
[root@ip-172-31-60-102 etc]# ls -lZ my.cnf
lrwxrwxrwx. root root system_u:object_r:mysqld_etc_t:s0 my.cnf -> /app/program/cfg/mysql/etc/my.cnf
[root@ip-172-31-60-102 etc]# ls -lZ /app/program/cfg/mysql/etc/my.cnf
-rw-r--r--. root root system_u:object_r:mysqld_etc_t:s0 /app/program/cfg/mysql/etc/my.cnf
mariadb が再起動されましたが、設定ファイルが尊重されませんでした。
答え1
プロセスがファイルにアクセスできるようにするには、みんなファイルパスであるディレクトリには、プロセスがファイルを読み取ろうとするための適切な権限が必要です。これは、既存のUNIX権限とSELinuxコンテキストの両方に当てはまります。
従来の UNIX では、「適切な権限」は、x
シンボリックリンクの権限ではなく、ディレクトリ内のビットのみを表します。
ただし、SELinuxコンテキストでは、ディレクトリに対する「検索」権限が必要な場合と同様に、シンボリックリンクに対する「読み取り」権限が必要です。
あなたの抜粋audit.log
によれば、あなたのシンボリックリンクには、実行中の型がMariaDBで許可されていない型がcfg
あります。default_t
mysql_t
ファイルパスの一部であるシンボリックリンクchcon
にコマンドを適用してみてください。シンボリックリンクが参照するターゲットではなく、シンボリックリンク自体に適用するパラメータを指定します。cfg
.cnf
-h
chcon
それは:
sudo chcon -ht mysqld_etc_t /app/program/cfg
すべてが期待どおりに機能する場合、SELinuxは常にこれらのディレクトリをMariaDB設定の一部として認識し、ディレクトリに対して自動的に作業を実行しないように、ディレクトリに一致する(一連の)正規表現を作成できます。あなたまたはSELinuxラベルを再割り当てしてください。
たとえば、次のようになります。
semanage fcontext -a -t mysqld_etc_t '/app/program/cfg.*(/.*)?'
以下に指定されたcfg*
すべての項目が含まれています/app/program
。
必要なセキュリティレベルに応じて正規表現の範囲を絞り込むか、そのディレクトリの下のファイルに追加のコマンドを提供して、semanage fcontext
よりカスタマイズされた構成を提供できます。