ユーザー向けのSELinuxモジュールの開発

これはシリーズの2番目の記事です。



今日は、SELinuxユーザー、その作成、バインディング、権利などについてお話します。



どうしてですか? 多くの理由があります。 私にとって、主な理由は、重要なデータへのアクセスやシステム機能の変更なしに、定期的な操作(再起動、ログのクリーニング、診断など)の技術サポートへのアクセスを提供することでした。



仮定



テキストには多くの技術情報が含まれているため、著者は読者が次のことを想定しています。





これはあなたのことですか? それでは行こう!



ユーザーとロール



ユーザーの主な目的は、使用できるロールのリストを保持することです。

デフォルトでは、ユーザーはすでにターゲットポリシーまたは最小ポリシーで表されています。semanageuser -lコマンドを確認できます。







前回の記事からわかるように、 タイプのコンテナであるのはロールです 。つまり、必要なルールはすべてタイプにかかっています。



したがって、ユーザーはこのツリーを単純に拡張し、より多くのオプションを作成します。 注:ユーザーがこの役割またはその役割を持っている場合、 newroleコマンドを使用して個別に切り替えることができます。 したがって、ユーザーにsysadm_rまたはunconfined_rの役割を許可することにより、システムに対する無制限の権限を自動的に付与します。



ユーザーとユーザー



Unixユーザー(UIDを持つユーザー)とSELinuxユーザー(コンテキストを持つユーザー)の間には、 semanage loginコマンドを使用して制御できる微妙な接続があります 。 接続は一方向です。id-Z user1は何も表示しません。 特別なユーザー__default__は、システムにリストされていないすべてのユーザーを示します。







ユーザーの作成(簡単な方法)



事前定義されたロールからユーザーを作成する最も簡単な方法は、 semanage user -aを使用することです



追加のロールセットを持つ新しいユーザーが必要だとします。







したがって、Webを管理できるユーザーを取得しました。 これで、ユーザーをユーザーに設定できます。







コンテキスト



これについてはほとんど書かれていませんが、ユーザーを作成するだけでは十分ではありません。 コンテキストがdefault_contextと異なる場合は、そのコンテキストファイルを設定する必要があります。 詳細については、 man user_contextsを参照してください。



webadm_uのファイルを設定します。







確認する



webadmユーザーになります:







uidを0に変更し、何かを「ブレーク」しようとします。







ロールをwebadm_rに変更して、今すぐ試してください。







証明に必要なもの-Webのみを管理できる管理者を作成しました。 残念ながら、デフォルトの役割の数は非常に限られています。 リストはここにあります



ユーザーの作成(正しい方法)



同じことをしましょう。ただし、例えばdockerを管理し、ゼロから作成します。



モジュールは非常にシンプルです。 何を許可する必要がありますか?



  1. SSHログイン
  2. sudoへのアクセス(誰もUNIXの権利をキャンセルしていません)*
  3. ファイル、フォルダー、Dockerサービスの管理
  4. Dockerバイナリ(docker、runco​​n)の実行
  5. Dockerソケット接続


*
CentOS7の最新バージョンのdockerグループは、デフォルトでは/run/docker.sockにアクセスできません。



モジュールとコンテキストファイルを書きましょう。



#   policy_module(dockeradm, 1.0.3) #    role dockeradm_r; #    - userdom_unpriv_user_template(dockeradm) #  dac_override allow dockeradm_t self:capability { dac_override dac_read_search }; #  sudo sudo_role_template(dockeradm, dockeradm_r, dockeradm_t) #       container_admin(dockeradm_t) #      container_runtime_exec(dockeradm_t) #      container_stream_connect(dockeradm_t) #  gen_user   -,  semanage user -a #         gen_user(dockeradm_u, dockeradm, dockeradm_r, s0, s0)
      
      





モジュールをコンパイルしてインストールします。







ユーザーとコンテキストを設定します。







システムに許可されていることを確認しましょう。







私たちの権利を確認してください:







Apacheが言うように、 うまくいきます!



まとめ



SELinuxユーザーの作成は、各従業員が自分のビジネスに従事し、他の従業員に干渉しない本格的な作業環境を作成するための重要なステップです。 ホスティングプロバイダー、開発スタジオ、銀行など、アクセスの共有が必要な状況は常に存在します。 SELinuxを有効にして楽しんでください:)



All Articles