SELinux - CentOSx86_64:ユーザーコマンドの制限
SELinuxはそのタスクに適したツールですか?それでは、最良のアプローチは何ですか?
特定のユーザーが、事前定義されたいくつかのコマンド/スクリプトのリスト(おそらくホームディレクトリから)のみを実行するように制限したいと思います。また、ユーザースクリプトには、ユーザーが直接実行できないコマンドを実行する権限がある場合があります。たとえば、userscript test.shは "ping localhost"を呼び出すことができますが、ユーザーはコマンドラインから直接 "ping localhost"を呼び出すことはできません。これらの制限には、1つのユーザーアカウントしか必要とは思わないことに言及する価値があります(他のユーザーアカウントに複数の他の構成は必要ありません)。
オペレーティングシステムはCentOSx86_64です。次のようにSELinuxを有効にします。
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
私はSELinuxを初めて使用していますが、次のことを試しました。
(1)私はMLSポリシーが最も適していると思います(このリンクは有望に見えます:http://www.centos.org/docs/5/html/Deployment_Guide-en-US/sec-mcs-getstarted.html)この作業のために最初に開いてみました。 「SELinux管理GUI」にはターゲットポリシーを変更するオプションがありませんので、/etc/selinux/configを直接変更してみました。再起動後、「カーネルパニック」が発生し、元のインストール戦略(ターゲットの指定など)を使用することにしました。
(2)SELinux管理GUIで、「最小エンドユーザーロール」ポリシータイプで新しいポリシーを作成しました。 「名前」は「制限されたユーザー」と呼びます。私はそれが切り替えられる役割を選択していません。私は別の役割を選択していません。バインド/接続する「すべての」TCPおよびUDPポートを選択しました。戦略にブール値を追加していません。生成された.shを実行した後、新しいSELinuxユーザーとロールが作成されました。その後、「制限されたユーザー」にログインを割り当てました。予想通り、これは非常に制限された権限を持つユーザーを提供します。
(3)最初に、この新しいユーザーはホームディレクトリにスクリプトを作成できますが、実行することはできません。 「allow_guest_exec_content」というブール値を設定した後、ユーザーはスクリプトを実行できます。最初はスクリプトに "echo"だけが含まれていましたが、それをpingに変更すると再び失敗しました。この新しいユーザーが「ping」できるようにするために、ブールuser_pingをオフにしました(これはuser_uにのみ適用され、guest_uには適用されないと思います)。私が望むことをするために、他のオプションは "user_u"に基づいて型を定義してから権限を削除することです(guest_uベースの型を使用して権限を追加する私がとったアプローチの代わりに)。いいえ、私はこれをどうするかわかりません!)。
(4)多くのオンラインリソースがsrcディレクトリにあるポリシーファイルについて議論していますが、ファイルがインストールされていないため、追加するためにどのパッケージをインストールするのかわかりません。次のselinux関連パッケージをインストールしました。
libselinux.x86_64 2.0.94-5.3.el6 installed
libselinux-devel.x86_64 2.0.94-5.3.el6 installed
libselinux-python.x86_64 2.0.94-5.3.el6 installed
libselinux-utils.x86_64 2.0.94-5.3.el6 installed
selinux-policy.noarch 3.7.19-126.el6_2.4 @updates
selinux-policy-targeted.noarch 3.7.19-126.el6_2.4 @updates
setools-console.x86_64 3.3.7-4.el6 @base
setools-devel.x86_64 3.3.7-4.el6 @base
setools-gui.x86_64 3.3.7-4.el6 @base
setools-libs.x86_64 3.3.7-4.el6 @base
setools-libs-java.x86_64 3.3.7-4.el6 @base
setools-libs-python.x86_64 3.3.7-4.el6 @base
setools-libs-tcl.x86_64 3.3.7-4.el6 @base
(5) 私は別の限られた殻を研究した。http://lshell.ghantoos.org/しかし、私たちの会社はSELinuxを使用するか、オペレーティングシステムによってすでに提供されている機能(bash制限など)を使用する必要がありますが、それはそれほど安全ではないかもしれません。
次のカスタムポリシーを定義する必要があると思います。
(a)ユーザーが自分のホームディレクトリにあるファイルを実行できるようにします。
(b)ユーザーが権限のないコマンドを実行するためにユーザースクリプトを別のタイプにキャストできるようにします。
SELinux管理GUI(および私が知っている構成ファイル)を使用してこれを行う方法がわかりません。
あなたが提供できる助けに感謝します。
答え1
提案rbash
どおりに何かを提供します。これは、すでにPATHにある実行可能ファイルにのみ実行を制限し、実行時環境のほとんどの詳細を変更することを禁止します。しかし、もちろん、どのプログラムにアクセス権を与えるかを非常に気にしない限り、誰かがそれをハッキングするのはとても簡単です(perlやPythonなどのインタプリタにアクセス権を与えるのは終わりです)。
別の伝統的なソリューションには、通常、chrootおよび/または慎重に選択されたインストールオプションが含まれます。これらの機能を無効にするファイルシステムまたはをnoexec
マウントできます。nosuid
したがって、書き込み可能なファイルシステムをマウントすると、noexec
読み取り専用システムではなくプログラムの実行が防止されます。これを組み合わせることで、できることを厳密に制御する特別なchroot環境を作成できます。