ルートがselinuxのルート上のファイルにアクセスするためにスクリプトを所有/実行できるようにする最も賢明で安全な方法

ルートがselinuxのルート上のファイルにアクセスするためにスクリプトを所有/実行できるようにする最も賢明で安全な方法

私は自動的に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.credentialsadmin_home_tautomount_t

まず、私がこの記事を正しく読んでいるのでしょうか?そうでなければ、どのようにしてよりよく説明できますか?

~/.smb次に、このスクリプトがルートを含むすべてのユーザーに対して(好ましくは自動マウントを介して実行される場合にのみ)、下のすべての資格情報ファイルにアクセスできるように、最小限のSELinux「例外」をどのように賢明に追加しますかyum update

答え1

はい - 出力を正しく読み込んでいます。

ソースコンテキストはでありautomount_t、ターゲットコンテキストはでありadmin_home_tautomount_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_tuser_home_t

関連情報