Freetds用の空のconfファイルを作成したところ、権限が間違っていることに気づきました。
[root@box etc]# touch freetds.conf.new
[root@box etc]# ll -lZ freetds.conf*
-rw-r--r--. root root system_u:object_r:etc_t:s0 freetds.conf
-rw-rw----. root root unconfined_u:object_r:etc_t:s0 freetds.conf.new
だから私は試しました:
[root@box]# semanage fcontext -a -t system_u /etc/freetds.conf.new
しかし、これは失敗します:
ValueError: Type system_u is invalid, must be a file or device type
Freetds.conf.newファイルのラベルをunconfined_u
からsystem_u
に変更するには、何を使用すればよいですか?
「一時的な」ラベルの変更は、chcon
コマンドを介して行われます。
bash-4.2# touch freetds.conf.new
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0 freetds.conf.new
bash-4.2# chcon -t etc_t -u system_u freetds.conf.new
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root system_u:object_r:etc_t:s0 freetds.conf.new
永続的な変更は、semanage
コマンドを介して行われます。これにより、/etc/selinux/targeted/contexts/files/file_contexts.local
に行が追加(または変更)され、restorecon
で適用できます。
では、新しいファイルから始めましょう。
bash-4.2# rm freetds.conf.new
bash-4.2# touch freetds.conf.new
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0 freetds.conf.new
このためのルールを追加できます。
bash-4.2# semanage fcontext -a -t etc_t -s system_u /etc/freetds.conf.new
bash-4.2# cat /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Do not edit directly.
/etc/freetds.conf.new system_u:object_r:etc_t:s0
しかし、これはまだファイルを変更していません
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0 freetds.conf.new
だから今それを適用します:
bash-4.2# restorecon -vF /etc/freetds.conf.new
restorecon reset /etc/freetds.conf.new context unconfined_u:object_r:etc_t:s0->system_u:object_r:etc_t:s0
bash-4.2# ls -lZ /etc/freetds.conf.new
-rw-r--r--. root root system_u:object_r:etc_t:s0 /etc/freetds.conf.new
ETA:更新後、freetds.conf.new
をfreetds.conf
にコピーする場合は、おそらくchcon
コマンドを使用します。それはより簡単で、既存のルールセットは、正しい名前が付いている場合にラベルの付け直しを処理します。これが最終的な名前になる場合は、semanage
フォームのみを使用します。