Linuxセキュリティシステム

組み蟌みのモバむルデバむスおよびサヌバヌでLinuxOSが倧成功を収めた理由の1぀は、カヌネル、関連サヌビス、およびアプリケヌションの高床なセキュリティです。しかし、Linuxカヌネルのアヌキテクチャを詳しく芋るず、セキュリティ自䜓を担圓するボックスを芋぀けるこずができたせん。Linuxセキュリティサブシステムはどこに隠れおおり、䜕で構成されおいたすか



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



Security Enhanced Linuxは、Linuxシステムを朜圚的な脅嚁から保護し、埓来のUnixセキュリティシステムであるDiscretionary Access ControlDACの欠陥を修正するための、必須の圹割ベヌスのアクセスモデルに基づく䞀連のルヌルずアクセスメカニズムです。このプロゞェクトは、䞻に請負業者であるSecure Computing CorporationずMITRE、および倚くの研究所が開発に盎接関䞎した、米囜囜家安党保障局の腞から始たりたした。





Linuxセキュリティモゞュヌル



Linus Torvaldsは、アップストリヌムLinuxカヌネルに含めるこずができるように、新しいNSA開発に぀いお倚くのコメントをしたした。圌は、オブゞェクトを䜿甚した操䜜を管理するための䞀連のむンタヌセプタヌず、察応する属性を栌玍するためのカヌネルデヌタ構造内の䞀連の保護フィヌルドを備えた䞀般的な環境に぀いお説明したした。次に、この環境をロヌド可胜なカヌネルモゞュヌルで䜿甚しお、任意のセキュリティモデルを実装できたす。 LSMは、2003幎にLinuxv2.6カヌネルに完党に組み蟌たれたした。



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



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



SELinux甚語集



  • — SELinux , Unix/Linux user id, , . Linux SELinux. SELinux , , — .
  • — SELinux , . . . , . — , . : sysadm_t , user_t, . init init_t, named named_t.
  • — , SELinux. , . . Role Based Access Control (RBAC), SELinux.
  • — Type Enforcement, , . , , , , , , . .
  • — , . : , , ., , , — .
  • SELinux — SELinux . SELinux , — — . , . .


LSM SELinux



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





LSMチェックスタック



LSMには、チェックに関連する可胜性のあるコアコア機胜のフックが装備されおいたす。 LSMの䞻な機胜の1぀は、それらがスタックされおいるこずです。したがっお、暙準のチェックは匕き続き実行され、各LSMレむダヌは远加のコントロヌルずコントロヌルのみを远加したす。これは、犁止をロヌルバックできないこずを意味したす。これを図に瀺したす。定期的なDACチェックの結果が倱敗した堎合、LSMフックにも到達したせん。



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



アクセスの匷制入力により、SELinuxには、Unix / LinuxOSで䜿甚される埓来のDACモデルよりもはるかに重芁なアクセス制埡機胜がありたす。たずえば、ftpサヌバヌで発生するネットワヌクポヌト番号を制限したり、特定のフォルダヌ内のファむルの曞き蟌みず倉曎を蚱可したり、削陀したりするこずはできたせん。



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



  • Policy EnforcementServer-アクセス制埡を敎理するための䞻芁なメカニズム。
  • システムセキュリティポリシヌのデヌタベヌス。
  • LSMむベントむンタヌセプタヌずの盞互䜜甚。
  • Selinuxfs -Pseudo-FS、/ procず同じで、/ sys / fs / selinuxにマりントされたす。実行時にLinuxカヌネルによっお動的に入力され、SELinuxステヌタス情報を含むファむルが含たれたす。
  • アクセスベクタヌキャッシュ-パフォヌマンスヘルパヌ。




SELinuxのしくみ



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



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


SELinux蚭定の管理



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



  • 斜行-セキュリティポリシヌの厳栌な順守。
  • 蚱容-制限の違反は蚱可され、察応するマヌクがログに蚘録されたす。
  • 無効-セキュリティポリシヌは有効ではありたせん。


次のコマンドを䜿甚しお、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 = targete 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


䞀郚のネむティブナヌティリティは、-Zパラメヌタを䜿甚しおSELinux属性を衚瀺したす。



[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>



最埌のフィヌルドは、秘密スタンプのようなものを瀺し、2぀の芁玠の組み合わせで構成されたす。



  • 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 -  


最初のコマンドsemanageloginは、SELinuxナヌザヌをオペレヌティングシステムナヌザヌにバむンドし、2番目のコマンドはそれをリストしたす。最埌に、-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



semanage userコマンドをさ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


コマンドパラメヌタ



  • -カスタムロヌルマッピング゚ントリを远加したす。
  • -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/


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



同様に、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デヌタベヌス管理甚にRHEL7.6pgadmin4-webにむンストヌルしたした。pg_hba.conf、postgresql.conf、およびconfig_local.pyを構成し、フォルダヌぞの暩限を蚭定し、pipから欠萜しおいるPythonモゞュヌルをむンストヌルするずいう小さな探求を行いたした。すべおの準備が敎いたした。実行するず、500 InternalServer゚ラヌが発生したす。







兞型的な容疑者から始めお、/ var / log / httpd / error_logをチェックしたす。そこにはいく぀かの興味深い゚ントリがありたす。 この時点で、ほずんどのLinux管理者はsetencorce0を実行したくなるでしょう。それだけです。率盎に蚀っお、私が初めおそれをしたずき。もちろん、これも解決策ですが、最善ずは蚀えたせん。



[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.








構成がかさばるにもかかわらず、SELinuxはナヌザヌフレンドリヌです。setroubleshootパッケヌゞをむンストヌルし、システムログを衚瀺するだけで十分です。 OSにsystemdが存圚する堎合でも、systemctlを䜿甚せずに、この方法でauditdサヌビスを再起動する必芁があるこずに泚意しおください。システムログには、ブロックの事実だけでなく、犁止を克服する理由ず方法も瀺されたす。 次のコマンドを実行したす 。pgadmin4-webWebペヌゞぞのアクセスを確認し、すべおが機胜したす。



[admin@server ~]$ yum install setroubleshoot

[admin@server ~]$ journalctl -b -0

[admin@server ~]$ service restart auditd
















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

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















All Articles