私は自動的にCIFS共有をマウントするautofsプログラムに基づいてマッピングを作成し、特定の~/.smb
ユーザーフォルダ内のファイルから資格情報を取得しました。複数の資格情報ファイルがあり、各ファイル名はターゲットCIFSサーバーのドメイン名と一致します。
automounter(8)
Autofsマウントは、私のCentos 7バージョンでsystemdサービスとして定義されていることによって実行されます。 Automounterはrootとして実行され、autofsマッピングスクリプトはrootが所有し、0700権限に設定され、0600権限を持つ資格情報ファイルがあります/root/.smb
。論理的には、サイレントインストーラが資格情報ファイルを読み取ることができる必要があると思います。
つまり、SELinuxが表示されるまでaudit.logに記録されます(読みやすくするために改行が追加されました)。
type=AVC msg=audit(1508458225.901:143): avc:
denied { read } for
pid=4786
comm="auto.smb-user"
name="mydomain.credentials"
dev="sda1"
ino=10180973
scontext=system_u:system_r:automount_t:s0
tcontext=unconfined_u:object_r:admin_home_t:s0
tclass=file
もちろん、自動マウントプロセスはうまく機能しますsetenforce 0
が、SELinuxを常に無効にするよりもSELinuxに慣れている方が良いです。
監査ログは、ファイルが表示され、表示されたプロセスがそのファイルにアクセスできないため、私のスクリプトにアクセスできないことを意味しているauto.smb-user
ようです。mydomain.credentials
admin_home_t
automount_t
まず、私がこの記事を正しく読んでいるのでしょうか?そうでなければ、どのようにしてよりよく説明できますか?
~/.smb
次に、このスクリプトがルートを含むすべてのユーザーに対して(好ましくは自動マウントを介して実行される場合にのみ)、下のすべての資格情報ファイルにアクセスできるように、最小限のSELinux「例外」をどのように賢明に追加しますかyum update
?
答え1
はい - 出力を正しく読み込んでいます。
ソースコンテキストはでありautomount_t
、ターゲットコンテキストはでありadmin_home_t
、automount_t
読み取り権限がないため拒否されましたadmin_home_t
。
これを確認するには、次のコマンドを使用できます。
sesearch -d -A -s autmount_t -t admin_home_t
空行を返すことがわかります。これはautomount_t
何の意味もありませんadmin_home_t
。
今、2つのオプションがあります。
- より簡単で合理的な解決策は、ファイルのファイルコンテキストをに変更することです
automount_var_run_t
。これにより、SELinuxはそのファイルが自動マウントによって所有されていると考えて、読み取りと書き込みを含むほぼすべての操作を実行できます(ただし、覚えておくと、有効な結果は通常のファイル権限またはACLによって無視される可能性があります)。 automount_t
より包括的でクレイジーなソリューションであるポリシーパッケージを追加します。ポリシーパッケージは読み取りアクセスを提供しますadmin_home_t
が、「所有者」アクセスではなく読み取りアクセスのみを提供します。- (最初に2つのオプションを組み合わせてより複雑にする3番目のオプションがあります。独自のコンテキストタイプを作成し、それらをこれらのファイルに適用して、automount_tがそのタイプにアクセスできるようにするポリシーモジュールを作成します。議論しません。
ファイルコンテキストをautomount_var_run_tに変更
これはより簡単なオプションです。ファイルのファイルコンテキストを/root/.smb
次のように変更するだけですautomount_var_run_t
。これにより、そのタイプで実行されているすべてのプロセスがautomount_t
そのファイルにアクセスできます。ただし、この場合は追加の権限もあります。テストでsesearch -d -A -s autmount_t -c file
知ることができる内容:
allow automount_t automount_var_run_t : file { ioctl read write getattr lock add_name remove_name search open } ;
自動マウントにこれらのファイルに対する権限があることに同意する場合は、実際にファイルのコンテキストをautomount_var_run_tに変更して、次のことを実行できます。
semanage fcontext -a -t automount_var_run_t "/root/.smb"
restorecon /root/.smb
ルートファイルにアクセスするには、自動的にマウントする必要があります。他のすべてのユーザーへのアクセスを追加するには(デフォルトの家の場所があるとします。)、次の手順を実行します。
semanage fcontext -a -t autmount_var_run_t "/home/(.*)+/.smb"
restorecon -R /home
これにより、説明した方法で自動マウントが機能します。
admin_home_tへのautomount_t読み取り権限の付与
これにより、automount_tに読み取り権限が付与されます。みんなコンテキストがadmin_home_tのファイル。おそらくあなたが本当に欲しいものではありません。しかし、完全性のために
関連する audit.log 行をインポートし、ファイル (例: automount-audit.log
. 次に、次のコマンドを実行します。
audit2allow -i automount-audit.log -m automount > automount-audit.te
これにより、監査ログ行に次の種類の適用ファイルが生成されます。
module automount-smb 1.0;
require {
type admin_home_t;
type automount_t;
class file read;
}
#============== autmount_t ==============
allow automount_t admin_home_t:file read;
user_home_tへのアクセスを許可するには(ルート以外の一般ユーザーの場合)、最後に次の行を追加します。
allow automount_t user_home_t:file read;
次に、次のようにモジュールをコンパイルする必要があります。
checkmodule -M -m -o automount-smb.mod automount-smb.te
モジュールから戦略パッケージを作成します。
semodule_package -o automount-smb.pp -m automount-smb.mod
最後に(チャット!)ポリシーパッケージをカーネルに挿入します。
semodule -i automount-smb.pp
これで、タグ付きプロセスには、またはコンテキストを持つautomount_t
すべてのファイルへの読み取りアクセスを許可する必要があります。admin_home_t
user_home_t