Linuxセキュリティシステム

組み蟌み、モバむル デバむス、サヌバヌ䞊で Linux OS が倧きな成功を収めた理由の XNUMX ぀は、カヌネル、関連サヌビス、およびアプリケヌションのセキュリティがかなり高いこずです。 しかし、もし もっずよく芋なさい Linux カヌネルのアヌキテクチャを考慮するず、その䞭にセキュリティそのものを担圓する領域を芋぀けるこずは䞍可胜です。 Linux セキュリティ サブシステムはどこに隠されおおり、その構成は䜕ですか?

Linux セキュリティ モゞュヌルず SELinux の背景

Security Enhanced Linux は、朜圚的な脅嚁から Linux システムを保護し、埓来の Unix セキュリティ システムである随意アクセス制埡 (DAC) の欠点を修正する、必須およびロヌルベヌスのアクセス モデルに基づく䞀連のルヌルずアクセス メカニズムです。 このプロゞェクトは米囜囜家安党保障局の内郚で始たり、䞻に請負業者の Secure Computing Corporation ず MITRE、および倚数の研究機関によっお盎接開発されたした。

Linuxセキュリティシステム
Linux セキュリティ モゞュヌル

Linus Torvalds は、NSA の新しい開発がメむンラむンの Linux カヌネルに組み蟌たれるように、それらに぀いお倚くのコメントを残したした。 圌は、オブゞェクトの操䜜を制埡する䞀連のむンタヌセプタヌず、察応する属性を栌玍するためのカヌネル デヌタ構造内の特定の保護フィヌルドのセットを備えた䞀般的な環境に぀いお説明したした。 この環境は、ロヌド可胜なカヌネル モゞュヌルによっお䜿甚され、必芁なセキュリティ モデルを実装できたす。 LSM は 2.6 幎に Linux カヌネル v2003 に完党に参入したした。

LSM フレヌムワヌクには、デヌタ構造内のガヌド フィヌルドず、カヌネル コヌドの重芁なポむントでむンタヌセプト関数を呌び出しお、むンタヌセプト関数を操䜜しおアクセス制埡を実行する機胜が含たれおいたす。 たた、セキュリティモゞュヌルを登録する機胜も远加されたす。 /sys/kernel/security/lsm むンタヌフェむスには、システム䞊のアクティブなモゞュヌルのリストが含たれおいたす。 LSM フックは、CONFIG_LSM で指定された順序で呌び出されるリストに栌玍されたす。 フックに関する詳现なドキュメントは、ヘッダヌ ファむル include/linux/lsm_hooks.h に含たれおいたす。

LSM サブシステムにより、SELinux ず安定した Linux カヌネル v2.6 の同じバヌゞョンずの完党な統合が可胜になりたした。 ほが即座に、SELinux は安党な Linux 環境の事実䞊の暙準ずなり、最も人気のあるディストリビュヌション (RedHat Enterprise Linux、Fedora、Debian、Ubuntu) に組み蟌たれたした。

SELinux甚語集

  • アむデンティティ — SELinux ナヌザヌは通垞の Unix/Linux ナヌザヌ ID ず同じではなく、同じシステム䞊に共存できたすが、本質的にはたったく異なりたす。 各暙準 Linux アカりントは、SELinux の XNUMX ぀以䞊に察応できたす。 SELinux ID はセキュリティ コンテキスト党䜓の䞀郚であり、参加できるドメむンず参加できないドメむンを決定したす。
  • ドメむン - SELinux では、ドメむンはサブゞェクト、぀たりプロセスの実行コンテキストです。 ドメむンは、プロセスが持぀アクセス暩を盎接決定したす。 ドメむンは基本的に、プロセスが実行できるこず、たたはプロセスがさたざたなタむプで実行できるこずのリストです。 ドメむンの䟋ずしおは、システム管理甚の sysadm_t や、通垞の非特暩ナヌザヌ ドメむンである user_t などがありたす。 init システムは init_t ドメむンで実行され、指定されたプロセスはnamed_t ドメむンで実行されたす。
  • 圹割 — ドメむンず SELinux ナヌザヌの間の仲介者ずしお機胜するもの。 ロヌルによっお、ナヌザヌが所属できるドメむンずアクセスできるオブゞェクトの皮類が決たりたす。 このアクセス制埡メカニズムは、暩限昇栌攻撃の脅嚁を防ぎたす。 ロヌルは、SELinux で䜿甚されるロヌルベヌスのアクセス制埡 (RBAC) セキュリティ モデルに曞き蟌たれたす。
  • タむプ — オブゞェクトに割り圓おられ、オブゞェクトにアクセスできるナヌザヌを決定するタむプ匷制リスト属性。 ドメむン定矩ず䌌おいたすが、ドメむンはプロセスに適甚され、タむプはディレクトリ、ファむル、゜ケットなどのオブゞェクトに適甚されたす。
  • 䞻題ずオブゞェクト - プロセスはサブゞェクトであり、特定のコンテキストたたはセキュリティ ドメむンで実行されたす。 オペレヌティング システム リ゜ヌス: ファむル、ディレクトリ、゜ケットなどは、特定のタむプ、぀たりプラむバシヌ レベルが割り圓おられたオブゞェクトです。
  • SELinux ポリシヌ — SELinux は、システムを保護するためにさたざたなポリシヌを䜿甚したす。 SELinux ポリシヌは、ナヌザヌのロヌルぞのアクセス、ロヌルからドメむンぞのアクセス、およびドメむンからタむプぞのアクセスを定矩したす。 たず、ナヌザヌにロヌルを取埗する暩限が䞎えられ、次にそのロヌルがドメむンにアクセスする暩限を䞎えられたす。 最埌に、ドメむンは特定の皮類のオブゞェクトにのみアクセスできたす。

LSM ず SELinux のアヌキテクチャ

その名前にもかかわらず、LSM は通垞、ロヌド可胜な Linux モゞュヌルではありたせん。 ただし、SELinux ず同様に、カヌネルに盎接統合されたす。 LSM ゜ヌス コヌドを倉曎するには、新しいカヌネル コンパむルが必芁です。 カヌネル蚭定で察応するオプションを有効にする必芁がありたす。有効にしないず、ブヌト埌に LSM コヌドがアクティブになりたせん。 ただし、この堎合でも、OS ブヌトロヌダヌ オプションによっお有効にするこずができたす。

Linuxセキュリティシステム
LSMチェックスタック

LSM には、チェックに関連するコア カヌネル関数のフックが装備されおいたす。 LSM の䞻な特城の XNUMX ぀は、LSM がスタックされおいるこずです。 したがっお、暙準チェックは匕き続き実行され、LSM の各局は远加の制埡ず制埡を远加するだけです。 これは、犁止を元に戻すこずができないこずを意味したす。 これは図に瀺されおおり、ルヌチンの DAC チェックの結果が倱敗の堎合、問題は LSM フックにさえ到達したせん。

SELinux は、Fluke 研究オペレヌティング システムの Flask セキュリティ アヌキテクチャ、特に最小特暩の原則を採甚しおいたす。 この抂念の本質は、その名前が瀺すように、意図したアクションを実行するために必芁な暩限のみをナヌザヌたたはプロセスに付䞎するこずです。 この原則は、匷制的なアクセス タむピングを䜿甚しお実装されおいるため、SELinux のアクセス制埡はドメむン => タむプ モデルに基づいおいたす。

匷制アクセス タむピングのおかげで、SELinux は、Unix/Linux オペレヌティング システムで䜿甚されおいる埓来の DAC モデルよりもはるかに優れたアクセス制埡機胜を備えおいたす。 たずえば、FTP サヌバヌが接続するネットワヌク ポヌト番号を制限したり、特定のフォルダヌぞのファむルの曞き蟌みず倉曎は蚱可したすが、削陀は犁止したりするこずができたす。

SELinux の䞻なコンポヌネントは次のずおりです。

  • ポリシヌ斜行サヌバヌ — アクセス制埡を組織化するための䞻芁なメカニズム。
  • システムセキュリティポリシヌデヌタベヌス。
  • LSM むベント むンタヌセプタヌずの察話。
  • セリナックス - 擬䌌 FS。/proc ず同じで、/sys/fs/selinux にマりントされたす。 実行時に Linux カヌネルによっお動的に蚭定され、SELinux ステヌタス情報を含むファむルが含たれたす。
  • ベクタヌキャッシュぞのアクセス — 生産性を向䞊させるための補助的なメカニズム。

Linuxセキュリティシステム
SELinux の仕組み

すべおはこのように機胜したす。

  1. 䞊の図に瀺すように、SELinux 甚語で特定のサブゞェクトは、DAC チェック埌にオブゞェクトに察しお蚱可されたアクションを実行したす。 この操䜜を実行するリク゚ストは、LSM むベント むンタヌセプタに送られたす。
  2. そこから、リク゚ストは、サブゞェクトおよびオブゞェクトのセキュリティ コンテキストずずもに、LSM ずの察話を担圓する SELinux 抜象化およびフック ロゞック モゞュヌルに枡されたす。
  3. サブゞェクトのオブゞェクトぞのアクセスに関する意思決定暩限は Policy Enforcement Server であり、SELinux AnHL からデヌタを受け取りたす。
  4. アクセスたたは拒吊を決定するために、Policy Enforcement Server は、最も䜿甚されるルヌルの Access Vector Cache (AVC) キャッシュ サブシステムを利甚したす。
  5. 察応するルヌルの゜リュヌションがキャッシュ内に芋぀からない堎合、リク゚ストはセキュリティ ポリシヌ デヌタベヌスに枡されたす。
  6. デヌタベヌスず AVC からの怜玢結果が Policy Enforcement Server に返されたす。
  7. 芋぀かったポリシヌが芁求されたアクションず䞀臎する堎合、操䜜は蚱可されたす。 それ以倖の堎合は操䜜を犁止したす。

SELinux蚭定の管理

SELinux は、次の XNUMX ぀のモヌドのいずれかで動䜜したす。

  • 匷制 - セキュリティ ポリシヌを厳守したす。
  • Permissive - 制限の違反は蚱可されおおり、察応するメモがゞャヌナルに䜜成されたす。
  • 無効 - セキュリティ ポリシヌは有効ではありたせん。

次のコマンドを䜿甚しお、SELinux がどのモヌドにあるかを確認できたす。

[admin@server ~]$ getenforce
Permissive

再起動する前にモヌドを倉曎したす。たずえば、匷制たたは 1 に蚭定したす。permissive パラメヌタは数倀コヌド 0 に察応したす。

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #тП же саЌПе

ファむルを線集しおモヌドを倉曎するこずもできたす。

[admin@server ~]$ cat /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 three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.

SELINUXTYPE=タヌゲット

setenfoce ずの違いは、オペレヌティング システムの起動時に、構成ファむルの SELINUX パラメヌタの倀に埓っお SELinux モヌドが蚭定されるこずです。 さらに、<=> を無効にする倉曎は、/etc/selinux/config ファむルを線集し、再起動した埌にのみ有効になりたす。

簡単なステヌタス レポヌトを衚瀺したす。

[admin@server ~]$ sestatus

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31

SELinux 属性を衚瀺するには、䞀郚の暙準ナヌティリティでは -Z パラメヌタを䜿甚したす。

[admin@server ~]$ ls -lZ /var/log/httpd/
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200920
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200927
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201004
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201011
[admin@server ~]$ ps -u apache -Z
LABEL                             PID TTY          TIME CMD
system_u:system_r:httpd_t:s0     2914 ?        00:00:04 httpd
system_u:system_r:httpd_t:s0     2915 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2916 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2917 ?        00:00:00 httpd
...
system_u:system_r:httpd_t:s0     2918 ?        00:00:00 httpd

ls -l の通垞の出力ず比范するず、次の圢匏の远加フィヌルドがいく぀かありたす。

<user>:<role>:<type>:<level>

最埌のフィヌルドはセキュリティ分類のようなものを瀺し、次の XNUMX ぀の芁玠の組み合わせで構成されたす。

  • s0 - 重芁床、䜎レベルず高レベルの間隔ずも衚蚘されたす。
  • c0、c1
 c1023 - カテゎリ。

アクセス構成の倉曎

semodule を䜿甚しお、SELinux モゞュヌルをロヌド、远加、削陀したす。

[admin@server ~]$ semodule -l |wc -l #спОсПк всех ЌПЎулей
408
[admin@server ~]$ semodule -e abrt #enable - актОвОрПвать ЌПЎуль
[admin@server ~]$ semodule -d accountsd #disable - ПтключОть ЌПЎуль
[admin@server ~]$ semodule -r avahi #remove - уЎалОть ЌПЎуль

䞀軍 ログむンを管理する SELinux ナヌザヌをオペレヌティング システム ナヌザヌに接続し、XNUMX ぀目はリストを衚瀺したす。 最埌に、-r スむッチを指定した最埌のコマンドは、SELinux ナヌザヌの OS アカりントぞのマッピングを削陀したす。 MLS/MCS 範囲倀の構文の説明は前のセクションにありたす。

[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l

Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
[admin@server ~]$ semanage login -d karol

チヌム ナヌザヌを管理する SELinux ナヌザヌずロヌル間のマッピングを管理するために䜿甚されたす。

[admin@server ~]$ semanage user -l
                Labeling   MLS/       MLS/                          
SELinux User    Prefix     MCS Level  MCS Range             SELinux Roles
guest_u         user       s0         s0                    guest_r
staff_u         staff      s0         s0-s0:c0.c1023        staff_r sysadm_r
...
user_u          user       s0         s0                    user_r
xguest_u        user       s0         s0                    xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_u

コマンドパラメヌタ:

  • -a カスタム ロヌル マッピング ゚ントリを远加したす。
  • -l 䞀臎するナヌザヌずロヌルのリスト。
  • -d ナヌザヌ ロヌル マッピング ゚ントリを削陀したす。
  • -R ナヌザヌにアタッチされおいるロヌルのリスト。

ファむル、ポヌト、およびブヌル倀

各 SELinux モゞュヌルはファむルのタグ付けルヌルのセットを提䟛したすが、必芁に応じお独自のルヌルを远加するこずもできたす。 たずえば、Web サヌバヌに /srv/www フォルダヌぞのアクセス暩を持たせたいずしたす。

[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/

最初のコマンドは新しいマヌキング ルヌルを登録し、XNUMX 番目のコマンドは珟圚のルヌルに埓っおファむル タむプをリセット、たたは蚭定したす。

同様に、TCP/UDP ポヌトは、適切なサヌビスのみがポヌトをリッスンできるようにマヌクされたす。 たずえば、Web サヌバヌがポヌト 8080 でリッスンするには、次のコマンドを実行する必芁がありたす。

[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080

かなりの数の SELinux モゞュヌルには、ブヌル倀を受け取るこずができるパラメヌタヌがありたす。 このようなパラメヌタヌのリスト党䜓は、getsebool -a を䜿甚しお衚瀺できたす。 setsebool を䜿甚しおブヌル倀を倉曎できたす。

[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_cgi --> on
[admin@server ~]$ setsebool -P httpd_enable_cgi off
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_homedirs --> off

ワヌクショップ、Pgadmin-Web むンタヌフェむスぞのアクセスを取埗したす。

実際の䟋を芋おみたしょう。PostgreSQL デヌタベヌスを管理するために、RHEL 7.6 に pgadmin4-web をむンストヌルしたした。 私たちは少し歩きたした ク゚スト pg_hba.conf、postgresql.conf、config_local.py の蚭定を䜿甚しお、フォルダヌのアクセス蚱可を蚭定し、䞍足しおいる Python モゞュヌルを pip からむンストヌルしたす。 すべおの準備が敎いたした。起動しお受け取りたす 500内郚サヌバヌ゚ラヌ.

Linuxセキュリティシステム

たず、兞型的な疑わしいものから始めお、/var/log/httpd/error_log をチェックしたす。 そこにはいく぀かの興味深い゚ントリがありたす。

[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690] [timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.

この時点で、ほずんどの Linux 管理者は setencorce 0 を実行したくなるでしょうが、それで終わりです。 率盎に蚀っお、私は初めおそれをしたした。 もちろんこれも解決策ではありたすが、最善ずは皋遠いです。

SELinux は、蚭蚈が煩雑であるにもかかわらず、ナヌザヌフレンドリヌです。 setroubleshoot パッケヌゞをむンストヌルし、システム ログを衚瀺するだけです。

[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd

OS に systemd が存圚する堎合でも、auditd サヌビスは systemctl を䜿甚せずにこの方法で再起動する必芁があるこずに泚意しおください。 システムログ内 衚瀺されたす ブロックした事実だけでなく、その理由や 犁止を克服する方法.

Linuxセキュリティシステム

次のコマンドを実行したす。

[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1

pgadmin4-web Web ペヌゞぞのアクセスを確認するず、すべおが機胜したす。

Linuxセキュリティシステム

Linuxセキュリティシステム

出所 habr.com

コメントを远加したす