SELinuxの基本概念と基本配置
19321 ワード
SELinuxは現れてから今まで、すでに13年近くの歴史を歩んできたが、Linux関連QQ技術群やLinux関連フォーラムでは、httpdのような各構成は正常だが、お客様はアクセスできないことが多い.また、vsftpdの構成は正常ですが、クライアントアクセスプロンプトではホームディレクトリを変換できません.そこで多くの人がSELinuxに対して大きな偏見を持っていて、SELinuxがもたらしたのは面倒なようだと思っています.そこで、多くの人がシステムをインストールする最初のことはSELinuxを無効にすることです.しかし、0-dayセキュリティの脆弱性が増加するにつれて、SELinuxは多くの場合、私たちに重要な保障を与えています.
SELinux全称Security Enhanced Linux(セキュリティ強化Linux)は、米国国家安全保障局が2000年にGNU GPLで発表したMAC(Mandatory Access Control、強制アクセス制御システム)の実現であり、あるプロセスがどのソース(ファイル、ネットワークポートなど)にアクセスできるかを明確に示すことを目的としている.強制アクセス制御システムの用途は、0-Day攻撃(未公開の脆弱性を利用した攻撃行為)を防ぐシステムの能力を強化することにある.そのため、ネットワークファイアウォールやACLの代替品ではなく、用途でも繰り返しません.現在のほとんどのリリースでは、デフォルトではカーネルにSELinuxが統合されています.
たとえば、システム上のApacheには、リモート・ユーザーがシステム上の機密ファイル(例えば/etc/passwd)にアクセスできるようにする脆弱性が発見され、セキュリティ・ホールを修復するApache更新パッチはまだ解放されていない.このときSELinuxは,この脆弱性を補う緩和策として機能する./etc/passwdはApacheのアクセスラベルを持たないため、/etc/passwdに対するApacheのアクセスはSELinuxによってブロックされます.SELinuxは、他の強制的なアクセス制御システムに比べて、次のようなメリットがあります.制御ポリシーは、プログラムが表示されないのではなく、クエリー可能である. は、サービスを再起動または停止することなく、ポリシーを熱的に変更することができる. は、プロセス初期化、継承、およびプログラム実行の3つの態様からポリシーによって制御することができる. 制御範囲は、ファイルシステム、ディレクトリ、ファイル、ファイル起動記述子、ポート、メッセージインタフェース、およびネットワークインタフェースをカバーする. では、SELinuxはシステムのパフォーマンスにどのような影響を及ぼしますか?Phoronixが2009年にFedora 11を用いた横比較から見ると,オンSELinuxは少数の場合にシステム性能の約5%の低下をもたらした.
SELinuxは一般的なデスクトップアプリケーションやプログラム開発に非常に影響するのではないでしょうか.なぜなら、SELinuxのポリシーは主にサーバ環境を対象としているからです.しかし、SELinuxの13年間の広範な応用に伴い、現在、SELinux戦略は一般的なデスクトップとプログラム開発環境の下で依然として安全性と利便性の要求を同時に満たすことができる.発表されたばかりのFedora 15を例にとると、筆者は完全な娯楽(複数のサードパーティ原生LinuxゲームやWineゲームを含む)や開発環境(Android SDK+Eclipse)を構築する過程で、Wineプログラムの初回実行時のみSELinuxデフォルトポリシーに阻まれ、グラフィック化された「SELinuxトラブルシューティングプログラム」の助けでボタンをクリックするだけで解決した.
getenforce
結果を返すには、Enforcing、Permissive、Disabledの3つがあります.DisabledはSELinuxを表し、Permissiveはセキュリティ警告のみを記録し、不審な行為を阻止しないことを表し、Enforcingは警告を記録し、不審な行為を阻止することを表す.
現在一般的なリリース版では、RHEL、CentOS、FedoraなどがデフォルトでEnforcingに設定されており、残りはOpenSUSEなどがPermissiveとなっている.
setenforce [ Enforcing | Permissive | 1 | 0 ]
このコマンドはすぐにSELinuxの運転状態を変更し、EnforcingとPermissiveの間を切り替え、結果的にシャットダウンに保つことができます.典型的な用途は、SELinuxがサービスまたはプログラムを実行できないかどうかを確認することです.setenforce 0以降もサービスやプログラムが実行できない場合は、SELinuxによるものではないことは間違いありません.
システムSELinux実行環境を永続的に変更する場合は、プロファイル/etc/selinux/configを変更することで実現できます.注意DisabledからPermissiveまたはEnforcingモードに切り替えると、コンピュータを再起動し、ファイルシステム全体にセキュリティラベルを再作成する必要があります(touch/.autorelabel&&reboot).
プロファイル/etc/selinux/configには、変数SELINUXTYPEの値を変更することによって実現されるSELinux実行ポリシーの情報も含まれています.targetedは、事前に作成されたいくつかのネットワークサービスとアクセス要求に対してのみSELinux保護を使用し、strictはすべてのネットワークサービスとアクセス要求がSELinuxを通過することを意味します.
RHEL、CentOS、Fedoraなどのデフォルト設定はtargetedで、ほとんどの一般的なネットワークサービスに対するSELinuxポリシー構成が含まれており、デフォルトでインストールされており、変更することなく直接使用できます.SELinuxポリシーを自分で編集したい場合は、コマンドラインのポリシーエディタseeditおよびEclipseの編集プラグインeclipse-slideも用意されています.
一般的なcoreutilsに属するツール、例えばps、lsなどは、Zオプションを追加することでSELinuxに関する情報を知ることができます.
このようにZオプションは、ほとんどのcoreutilsツールに適用できます.
以上のように、ls-ZメソッドでクエリされたファイルSELinuxコンテキストがデフォルトの要件と一致しないと、SELinuxがhttpサービスを要求するWebディレクトリやファイルのコンテキストがhttp_sys_content_t,そうでなければクライアントはアクセスできない.
NagiosサーバのWebディレクトリコンテキストのデフォルトはunconfined_です.u:object_r:usr_t:s 0の場合、クライアントはアクセスできません.
...以下略......
chconを使用して/usr/local/nagios/share/ディレクトリとその下のすべてのファイルセキュリティコンテキストを変更するにはunconfined_u:object_r:httpd_sys_content_t
クエリの結果:
httpサービスを再起動する必要がなく、クライアントはすでにアクセスできます.
semanageツールは非常に強力で、基本的にすべてのSELinux構成を実現することができますが、多くの場合、SELinuxがどこに間違っているのか分かりません.グラフィックインタフェースの下にグラフィック化された分析ツールがあり、端末インタフェースの下にも非常に強力な分析ツールsealertがありますが、デフォルトでは、この2つのツールはインストールされていません.semanageツールとsealertツールをインストールする必要があります.
注意:semanageの使用は、私のもう一つのブログ:Selinux管理ツールsemanageを参照してください.
デフォルトではApacheは80、443などいくつかのポートのみをリスニングし、808ポートを直接指定するとservice httpd restartでエラーが発生します.
/var/log/messagesファイルを表示すると、次のようなエラーが表示されます.
ヒントに従って、sealert-l 2 ad 073 a 4-7 c 64-4175-93 ff-9 d 78 f 75133 afを実行し、SELinuxレポートを生成します.
ここでPORT_TYPEは次のいずれかです:ntop_port_t, http_cache_port_t, http_port_t, puppet_port_t, jboss_messaging_port_t, jboss_management_port_t.
プロンプトに従ってsemanage port-a-t PORT_を実行します.TYPE-p tcp 808、ここでPORT_TYPEをhttp_に置き換えるport_t
クエリの結果:
サービスの再起動:
[root@web2~]#service httpd start httpdを起動中:[OK]
ユーザが~/www/にファイルを配置することによって自分の個人サイトを作成できるようにするには、Apacheポリシーでその操作を許可する必要がある.次の操作を行います.
デフォルトではsetseboolの設定は次の再起動まで保持されます.永続的に有効にするには、次のようなPパラメータを追加する必要があります.
setseboolは、ブール値によって制御されるSELinuxポリシーを切り替えるために使用され、現在のブール値ポリシーの状態はgetseboolによって知ることができる.httpdに関連するブール値を表示するには、次の手順に従います.
以上、httpdサービスの一般的なselinux構成を列挙し、他のサービス(vsftpdなど)も同様の方法で処理することができる.
転載先:SELinuxの一つ:SELinux基本概念及び基本配置|旺旺知識ベース
SELinuxとは?
SELinux全称Security Enhanced Linux(セキュリティ強化Linux)は、米国国家安全保障局が2000年にGNU GPLで発表したMAC(Mandatory Access Control、強制アクセス制御システム)の実現であり、あるプロセスがどのソース(ファイル、ネットワークポートなど)にアクセスできるかを明確に示すことを目的としている.強制アクセス制御システムの用途は、0-Day攻撃(未公開の脆弱性を利用した攻撃行為)を防ぐシステムの能力を強化することにある.そのため、ネットワークファイアウォールやACLの代替品ではなく、用途でも繰り返しません.現在のほとんどのリリースでは、デフォルトではカーネルにSELinuxが統合されています.
たとえば、システム上のApacheには、リモート・ユーザーがシステム上の機密ファイル(例えば/etc/passwd)にアクセスできるようにする脆弱性が発見され、セキュリティ・ホールを修復するApache更新パッチはまだ解放されていない.このときSELinuxは,この脆弱性を補う緩和策として機能する./etc/passwdはApacheのアクセスラベルを持たないため、/etc/passwdに対するApacheのアクセスはSELinuxによってブロックされます.SELinuxは、他の強制的なアクセス制御システムに比べて、次のようなメリットがあります.
SELinuxは一般的なデスクトップアプリケーションやプログラム開発に非常に影響するのではないでしょうか.なぜなら、SELinuxのポリシーは主にサーバ環境を対象としているからです.しかし、SELinuxの13年間の広範な応用に伴い、現在、SELinux戦略は一般的なデスクトップとプログラム開発環境の下で依然として安全性と利便性の要求を同時に満たすことができる.発表されたばかりのFedora 15を例にとると、筆者は完全な娯楽(複数のサードパーティ原生LinuxゲームやWineゲームを含む)や開発環境(Android SDK+Eclipse)を構築する過程で、Wineプログラムの初回実行時のみSELinuxデフォルトポリシーに阻まれ、グラフィック化された「SELinuxトラブルシューティングプログラム」の助けでボタンをクリックするだけで解決した.
SELinuxの理解と構成
1.現在のSELinux運転状態を取得する
getenforce
結果を返すには、Enforcing、Permissive、Disabledの3つがあります.DisabledはSELinuxを表し、Permissiveはセキュリティ警告のみを記録し、不審な行為を阻止しないことを表し、Enforcingは警告を記録し、不審な行為を阻止することを表す.
現在一般的なリリース版では、RHEL、CentOS、FedoraなどがデフォルトでEnforcingに設定されており、残りはOpenSUSEなどがPermissiveとなっている.
2.SELinux運転状態の変更
setenforce [ Enforcing | Permissive | 1 | 0 ]
このコマンドはすぐにSELinuxの運転状態を変更し、EnforcingとPermissiveの間を切り替え、結果的にシャットダウンに保つことができます.典型的な用途は、SELinuxがサービスまたはプログラムを実行できないかどうかを確認することです.setenforce 0以降もサービスやプログラムが実行できない場合は、SELinuxによるものではないことは間違いありません.
システムSELinux実行環境を永続的に変更する場合は、プロファイル/etc/selinux/configを変更することで実現できます.注意DisabledからPermissiveまたはEnforcingモードに切り替えると、コンピュータを再起動し、ファイルシステム全体にセキュリティラベルを再作成する必要があります(touch/.autorelabel&&reboot).
[root@web2 ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
3.SELinux実行ポリシー
プロファイル/etc/selinux/configには、変数SELINUXTYPEの値を変更することによって実現されるSELinux実行ポリシーの情報も含まれています.targetedは、事前に作成されたいくつかのネットワークサービスとアクセス要求に対してのみSELinux保護を使用し、strictはすべてのネットワークサービスとアクセス要求がSELinuxを通過することを意味します.
RHEL、CentOS、Fedoraなどのデフォルト設定はtargetedで、ほとんどの一般的なネットワークサービスに対するSELinuxポリシー構成が含まれており、デフォルトでインストールされており、変更することなく直接使用できます.SELinuxポリシーを自分で編集したい場合は、コマンドラインのポリシーエディタseeditおよびEclipseの編集プラグインeclipse-slideも用意されています.
4.coreutilsツールのSELinuxモード
一般的なcoreutilsに属するツール、例えばps、lsなどは、Zオプションを追加することでSELinuxに関する情報を知ることができます.
4.1 psを使用して取得:
[barlow@web1 ~]$ ps -auxZ |grep httpd |head -5
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ unconfined_u:system_r:httpd_t:s0 apache 1393 0.0 0.2 279648 2272 ? S Jun27 0:01 /usr/sbin/httpd unconfined_u:system_r:httpd_t:s0 apache 1395 0.0 1.5 272964 15528 ? S Jun27 0:02 /usr/sbin/httpd unconfined_u:system_r:httpd_t:s0 apache 1399 0.0 1.7 272964 17828 ? S Jun27 0:02 /usr/sbin/httpd unconfined_u:system_r:httpd_t:s0 apache 1405 0.0 1.2 272964 12732 ? S Jun27 0:02 /usr/sbin/httpd unconfined_u:system_r:httpd_t:s0 apache 1409 0.0 1.4 272968 14784 ? S Jun27 0:03 /usr/sbin/httpd
4.2 ls取得の使用
[barlow@web1 ~]$ ls -Z /var/www/ drwxrwxrwx. apache barlow unconfined_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin drwxrwxrwx. apache barlow unconfined_u:object_r:httpd_sys_content_t:s0 error drwxrwxrwx. apache barlow unconfined_u:object_r:httpd_sys_content_t:s0 html drwxrwxrwx. apache barlow unconfined_u:object_r:httpd_sys_content_t:s0 icons drwxrwxrwx. apache barlow system_u:object_r:httpd_sys_content_t:s0 lost+found
このようにZオプションは、ほとんどのcoreutilsツールに適用できます.
5.httpdサービスに関するSELinuxポリシーの変更方法をよく使う:
以上のように、ls-ZメソッドでクエリされたファイルSELinuxコンテキストがデフォルトの要件と一致しないと、SELinuxがhttpサービスを要求するWebディレクトリやファイルのコンテキストがhttp_sys_content_t,そうでなければクライアントはアクセスできない.
5.1 chconを使用してhttpdディレクトリまたはファイルセキュリティコンテキストを変更します。
NagiosサーバのWebディレクトリコンテキストのデフォルトはunconfined_です.u:object_r:usr_t:s 0の場合、クライアントはアクセスできません.
[root@nagios ~]# ll -Z /usr/local/nagios/share/
-rwxrwxr-x. nagios apache system_u:object_r:usr_t:s0 config.inc.php
drwxrwxr-x. nagios apache unconfined_u:object_r:usr_t:s0 contexthelp
drwxrwxr-x. nagios apache unconfined_u:object_r:usr_t:s0 docs
drwxrwxr-x. nagios apache unconfined_u:object_r:usr_t:s0 images
drwxrwxr-x. nagios apache unconfined_u:object_r:usr_t:s0 includes
-rwxrwxr-x. nagios apache system_u:object_r:usr_t:s0 index.html
-rwxrwxr-x. nagios apache system_u:object_r:usr_t:s0 index.php
...以下略......
chconを使用して/usr/local/nagios/share/ディレクトリとその下のすべてのファイルセキュリティコンテキストを変更するにはunconfined_u:object_r:httpd_sys_content_t
[root@nagios ~]# chcon -R unconfined_u:object_r:httpd_sys_content_t:s0 /usr/local/nagios/share/
クエリの結果:
[root@nagios ~]# ls -Z /usr/local/nagios/share/
-rwxrwxr-x. nagios apache unconfined_u:object_r:httpd_sys_content_t:s0 config.inc.php
drwxrwxr-x. nagios apache unconfined_u:object_r:httpd_sys_content_t:s0 contexthelp
drwxrwxr-x. nagios apache unconfined_u:object_r:httpd_sys_content_t:s0 docs
drwxrwxr-x. nagios apache unconfined_u:object_r:httpd_sys_content_t:s0 images
drwxrwxr-x. nagios apache unconfined_u:object_r:httpd_sys_content_t:s0 includes
-rwxrwxr-x. nagios apache unconfined_u:object_r:httpd_sys_content_t:s0 index.html
-rwxrwxr-x. nagios apache unconfined_u:object_r:httpd_sys_content_t:s0 index.php
drwxrwxr-x. nagios apache unconfined_u:object_r:httpd_sys_content_t:s0 locale
-rwxrwxr-x. nagios apache unconfined_u:object_r:httpd_sys_content_t:s0 main.html
httpサービスを再起動する必要がなく、クライアントはすでにアクセスできます.
5.2 semanageツールを使用して、httpdに非標準ポートをサポートさせる:
semanageツールは非常に強力で、基本的にすべてのSELinux構成を実現することができますが、多くの場合、SELinuxがどこに間違っているのか分かりません.グラフィックインタフェースの下にグラフィック化された分析ツールがあり、端末インタフェースの下にも非常に強力な分析ツールsealertがありますが、デフォルトでは、この2つのツールはインストールされていません.semanageツールとsealertツールをインストールする必要があります.
[root@web2 ~]# yum -y install policycoreutils-python setroubleshoot
注意:semanageの使用は、私のもう一つのブログ:Selinux管理ツールsemanageを参照してください.
デフォルトではApacheは80、443などいくつかのポートのみをリスニングし、808ポートを直接指定するとservice httpd restartでエラーが発生します.
[root@web2 ~]# service httpd start
httpd:(13)Permission denied: make_sock: could not bind to address 0.0.0.0:808
no listening sockets available, shutting down
Unable to open logs [ ]
/var/log/messagesファイルを表示すると、次のようなエラーが表示されます.
[root@web2 ~]# tail /var/log/messages
Jun 29 10:30:51 web2 setroubleshoot: SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket . For complete SELinux messages. run sealert -l 2ad073a4-7c64-4175-93ff-9d78f75133af
ヒントに従って、sealert-l 2 ad 073 a 4-7 c 64-4175-93 ff-9 d 78 f 75133 afを実行し、SELinuxレポートを生成します.
[root@web2 ~]# sealert -l 2ad073a4-7c64-4175-93ff-9d78f75133af
# semanage port -a -t PORT_TYPE -p tcp 808
ここでPORT_TYPEは次のいずれかです:ntop_port_t, http_cache_port_t, http_port_t, puppet_port_t, jboss_messaging_port_t, jboss_management_port_t.
プロンプトに従ってsemanage port-a-t PORT_を実行します.TYPE-p tcp 808、ここでPORT_TYPEをhttp_に置き換えるport_t
[root@web2 ~]# semanage port -a -t http_port_t -p tcp 808
クエリの結果:
[root@web2 ~]# semanage port -l|grep http
http_cache_port_t tcp 3128, 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 808, 80, 443, 488, 8008, 8009, 8443 ## 808
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
サービスの再起動:
[root@web2~]#service httpd start httpdを起動中:[OK]
5.3 selinuxブール値を変更し、プライベートWebサイトの作成を許可
ユーザが~/www/にファイルを配置することによって自分の個人サイトを作成できるようにするには、Apacheポリシーでその操作を許可する必要がある.次の操作を行います.
[root@web2 ~]# setsebool httpd_enable_homedirs 1
デフォルトではsetseboolの設定は次の再起動まで保持されます.永続的に有効にするには、次のようなPパラメータを追加する必要があります.
[root@web2 ~]# setsebool -P httpd_enable_homedirs 1
setseboolは、ブール値によって制御されるSELinuxポリシーを切り替えるために使用され、現在のブール値ポリシーの状態はgetseboolによって知ることができる.httpdに関連するブール値を表示するには、次の手順に従います.
[root@web2 ~]# getsebool -a |grep http
allow_httpd_anon_write --> off
allow_httpd_mod_auth_ntlm_winbind --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> on
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> on
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> on
httpd_execmem --> off
httpd_manage_ipa --> off
httpd_read_user_content --> off
httpd_run_stickshift --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_tmp_exec --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_gpg --> off
httpd_use_nfs --> on
httpd_use_openstack --> off
httpd_verify_dns --> off
named_bind_http_port --> off
以上、httpdサービスの一般的なselinux構成を列挙し、他のサービス(vsftpdなど)も同様の方法で処理することができる.
転載先:SELinuxの一つ:SELinux基本概念及び基本配置|旺旺知識ベース