見出し画像

333.2 強制アクセス制御


課題 333: Access Control
333.2 強制アクセス制御

LPIC303の試験範囲である主題331~335まであるうちの「333 Access Control」から「333.2 強制アクセス制御」についてのまとめ

  • 総重量:5

  • 説明:
    Linuxの強制アクセス制御(MAC: mandatory access control)の知識がある 特にSELinux全体の知識がある。Linuxの他の強制アクセス制御の知識も必要である。これには、システムの主な機能が含まれるが、設定や利用に関しては含まれない。

  • 主要な知識範囲:

    • Type Enforcement・ロールベースアクセス制御(RBAC: role based access control)・強制アクセス制御・任意アクセス制御の概念を理解している。

    • SELinuxを管理・設定する。

    • AppArmorとSmackの知識

  • 重要なファイル、用語、ユーティリティ:

    • getenforce

    • setenforce

    • selinuxenabled

    • getsebool

    • setsebool

    • togglesebool

    • fixfiles

    • restorecon

    • setfiles

    • newrole

    • setcon

    • runcon

    • chcon

    • semanage

    • sestatus

    • seinfo

    • apol

    • seaudit

    • audit2why

    • audit2allow

    • /etc/selinux/*


Type Enforcement・ロールベースアクセス制御(RBAC: role based access control)・強制アクセス制御・任意アクセス制御の概念を理解している。

Type Enforcement

  • プロセスレベルのリソース制限機能

RBAC

  • RBAC: role based access control / ロールベースアクセス制御

強制アクセス制御

  • MAC:Mandatory Access Control

  • 管理者によって設定されるアクセス制御

  • SELinux

  • AppArmor

  • Smack

任意アクセス制御

  • DAC:Discretionary Access Control

  • 利用者によって設定されるアクセス制御

  • chmod, chown

  • setfacl, getfacl

  • setfattr, getfattr


SELinuxを管理・設定する

SELinux

  • RedHat系ディストリビューションで使われている強制アクセス制御

  • セキュリティコンテキストをファイルの拡張属性として保持する

  • ファイルの拡張属性に対応していないファイルシステムでは利用不可

パッケージ

  • setools-console

  • policycoreutils

  • libselinux-utils

操作系コマンド

  • getenforce(libselinux-utils)
    現在の動作モードの表示

  • setenforce(libselinux-utils)
    動作モードの一時的な変更

  • selinuxenabled(libselinux-utils)
    SELinuxが有効かどうかを数値で返す

  • getsebool(libselinux-utils)
    真偽値で示されるポリシーの状態取得

  • setsebool(policycoreutils)
    真偽値で示されるポリシーの設定

  • togglesebool(libselinux-utils)
    真偽値で示されるポリシーの変更

  • fixfiles
    SELinuxの設定ファイルに従ってすべてのファイルにラベルを付与する

  • setfiles(policycoreutils)
    指定された設定ファイルに従ってファイルにラベルを付与する

  • restorecon(policycoreutils)
    セキュリティコンテキストを復元する

  • newrole
    指定したロールに変更してシェルを起動する

  • setcon
    ???

  • runcon
    指定されたセキュリティコンテキストでコマンドを実行する

  • chcon
    ファイルやディレクトリのセキュリティコンテキストを変更する

  • semanage(policycoreutils-python)
    SELinuxに関する各種操作を行う

  • sestatus
    SELinuxの状況を表示する

  • seinfo(setools-console)
    SELinuxの各種情報を表示する

  • secon(policycoreutils)
    SELinuxのコンテキストを表示(See)

  • semodule(policycoreutils)

  • load_policy(policycoreutils)

  • avcstat(libselinux-utils)

  • matchpathcon(libselinux-utils)

  • selinuxconlist(libselinux-utils)

  • selinuxdefcon(libselinux-utils)

  • setools-console パッケージ

  • sesearch(setools-console)

  • sechecker(setools-console)

  • findcon(setools-console)

  • replcon(setools-console)

  • indexcon(setools-console)

  • chcat(policycoreutils-python)

解析系コマンド

  • apol(setools-console/setools-gui)
    SELinuxのポリシーを分析するGUIツール

  • seaudit(setools-console/setools-gui)
    SELinuxの監査ログ(auditlog)を分析するGUIツール

  • audit2why(policycoreutils-python)
    アクセス拒否が発生した原因と解決方法を提示する

  • audit2allow(policycoreutils-python)
    アクセス拒否が生じないルールを提示する

  • sediff(setools-console/setools-gui)

  • seaudit-report(setools-console)
    監査ログ(auditlog)のSELinux用のレポートを作成する

設定ファイル

  • /etc/selinux/

[root@rocky9 ~]#
[root@rocky9 ~]# cd /etc/selinux
[root@rocky9 selinux]# pwd
/etc/selinux
[root@rocky9 selinux]#
[root@rocky9 selinux]# tree
.
├── config
├── semanage.conf
└── targeted
    ├── booleans.subs_dist
    ├── contexts
    │   ├── customizable_types
    │   ├── dbus_contexts
    │   ├── default_contexts
    │   ├── default_type
    │   ├── failsafe_context
    │   ├── files
    │   │   ├── file_contexts
    │   │   ├── file_contexts.bin
    │   │   ├── file_contexts.homedirs
    │   │   ├── file_contexts.homedirs.bin
    │   │   ├── file_contexts.local
    │   │   ├── file_contexts.subs
    │   │   ├── file_contexts.subs_dist
    │   │   └── media
    │   ├── initrc_context
    │   ├── lxc_contexts
    │   ├── openssh_contexts
    │   ├── removable_context
    │   ├── securetty_types
    │   ├── sepgsql_contexts
    │   ├── snapperd_contexts
    │   ├── systemd_contexts
    │   ├── userhelper_context
    │   ├── users
    │   │   ├── guest_u
    │   │   ├── root
    │   │   ├── staff_u
    │   │   ├── sysadm_u
    │   │   ├── unconfined_u
    │   │   ├── user_u
    │   │   └── xguest_u
    │   ├── virtual_domain_context
    │   ├── virtual_image_context
    │   └── x_contexts
    ├── logins
    ├── policy
    │   └── policy.33
    ├── setrans.conf
    └── seusers

6 directories, 38 files
[root@rocky9 selinux]#

参考


AppArmorとSmackの知識

AppArmor

  • Ubuntuで使われる強制アクセス制御

  • SELinux よりもシンプルで使いやすい

  • プロファイルを使ってアプリケーションを制御する

  • セキュリティコンテキストをファイルパスで保持する

  • 拡張属性に対応していないファイルシステムでも利用可能

AppArmor:パッケージ

  • apparmor

  • libapparmor1

  • apparmor-profiles

  • apparmor-utils

  • python3-apparmor

  • python3-libapparmor

AppArmor:コマンド

  • aa-audit

  • aa-autodep

  • aa-cleanprof

  • aa-complain
    complain mode に変更する

  • aa-decode

  • aa-disable
    disable に変更する

  • aa-easyprof

  • aa-enabled

  • aa-enforce
    disable または complain mode から enforce mode に変更する

  • aa-exec

  • aa-features-abi

  • aa-genprof
    プロファイルを作成する

  • aa-logprof

  • aa-mergeprof
    プロファイルをマージする

  • aa-remove-unknown

  • aa-status
    現在のAppArmorの状態を確認する
    apparmor_status と同じ

  • aa-teardown

  • aa-unconfined

  • aa-update-browser

  • apparmor_parser

  • apparmor_status
    現在のAppArmorの状態を確認する
    aa-statusと同じ

AppArmor:設定ファイル

root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# tree /etc/apparmor.d/
/etc/apparmor.d/
├── abi
│   ├── 3.0
│   ├── kernel-5.4-outoftree-network
│   └── kernel-5.4-vanilla
├── abstractions
│   ├── X
│   ├── apache2-common
│   ├── apparmor_api
│   │   ├── change_profile
│   │   ├── examine
│   │   ├── find_mountpoint
│   │   ├── introspect
│   │   └── is_enabled
│   ├── aspell
│   ├── audio
│   ├── authentication
│   ├── base
│   ├── bash
│   ├── consoles
│   ├── crypto
│   ├── cups-client
│   ├── dbus
│   ├── dbus-accessibility
│   ├── dbus-accessibility-strict
│   ├── dbus-network-manager-strict
│   ├── dbus-session
│   ├── dbus-session-strict
│   ├── dbus-strict
│   ├── dconf
│   ├── dovecot-common
│   ├── dri-common
│   ├── dri-enumerate
│   ├── enchant
│   ├── exo-open
│   ├── fcitx
│   ├── fcitx-strict
│   ├── fonts
│   ├── freedesktop.org
│   ├── gio-open
│   ├── gnome
│   ├── gnupg
│   ├── gtk
│   ├── gvfs-open
│   ├── hosts_access
│   ├── ibus
│   ├── kde
│   ├── kde-globals-write
│   ├── kde-icon-cache-write
│   ├── kde-language-write
│   ├── kde-open5
│   ├── kerberosclient
│   ├── ldapclient
│   ├── libpam-systemd
│   ├── likewise
│   ├── mdns
│   ├── mesa
│   ├── mir
│   ├── mozc
│   ├── mysql
│   ├── nameservice
│   ├── nis
│   ├── nss-systemd
│   ├── nvidia
│   ├── opencl
│   ├── opencl-common
│   ├── opencl-intel
│   ├── opencl-mesa
│   ├── opencl-nvidia
│   ├── opencl-pocl
│   ├── openssl
│   ├── orbit2
│   ├── p11-kit
│   ├── perl
│   ├── php
│   ├── php-worker
│   ├── php5
│   ├── postfix-common
│   ├── private-files
│   ├── private-files-strict
│   ├── python
│   ├── qt5
│   ├── qt5-compose-cache-write
│   ├── qt5-settings-write
│   ├── recent-documents-write
│   ├── ruby
│   ├── samba
│   ├── smbpass
│   ├── snap_browsers
│   ├── ssl_certs
│   ├── ssl_keys
│   ├── svn-repositories
│   ├── ubuntu-bittorrent-clients
│   ├── ubuntu-browsers
│   ├── ubuntu-browsers.d
│   │   ├── chromium-browser
│   │   ├── java
│   │   ├── kde
│   │   ├── mailto
│   │   ├── multimedia
│   │   ├── plugins-common
│   │   ├── productivity
│   │   ├── text-editors
│   │   ├── ubuntu-integration
│   │   ├── ubuntu-integration-xul
│   │   └── user-files
│   ├── ubuntu-console-browsers
│   ├── ubuntu-console-email
│   ├── ubuntu-email
│   ├── ubuntu-feed-readers
│   ├── ubuntu-gnome-terminal
│   ├── ubuntu-helpers
│   ├── ubuntu-konsole
│   ├── ubuntu-media-players
│   ├── ubuntu-unity7-base
│   ├── ubuntu-unity7-launcher
│   ├── ubuntu-unity7-messaging
│   ├── ubuntu-xterm
│   ├── user-download
│   ├── user-mail
│   ├── user-manpages
│   ├── user-tmp
│   ├── user-write
│   ├── video
│   ├── vulkan
│   ├── wayland
│   ├── web-data
│   ├── winbind
│   ├── wutmp
│   ├── xad
│   ├── xdg-desktop
│   └── xdg-open
├── apache2.d
│   └── phpsysinfo
├── bin.ping
├── disable
│   └── usr.sbin.rsyslogd -> /etc/apparmor.d/usr.sbin.rsyslogd
├── force-complain
├── local
│   ├── README
│   ├── bin.ping
│   ├── lsb_release
│   ├── nvidia_modprobe
│   ├── php-fpm
│   ├── samba-bgqd
│   ├── sbin.dhclient
│   ├── sbin.klogd
│   ├── sbin.syslog-ng
│   ├── sbin.syslogd
│   ├── usr.bin.man
│   ├── usr.bin.tcpdump
│   ├── usr.lib.snapd.snap-confine.real
│   ├── usr.sbin.avahi-daemon
│   ├── usr.sbin.dnsmasq
│   ├── usr.sbin.identd
│   ├── usr.sbin.mdnsd
│   ├── usr.sbin.nmbd
│   ├── usr.sbin.nscd
│   ├── usr.sbin.rsyslogd
│   ├── usr.sbin.smbd
│   ├── usr.sbin.smbldap-useradd
│   └── usr.sbin.traceroute
├── lsb_release
├── nvidia_modprobe
├── php-fpm
├── samba-bgqd
├── sbin.dhclient
├── sbin.klogd
├── sbin.syslog-ng
├── sbin.syslogd
├── tunables
│   ├── alias
│   ├── apparmorfs
│   ├── dovecot
│   ├── etc
│   ├── global
│   ├── home
│   ├── home.d
│   │   ├── site.local
│   │   └── ubuntu
│   ├── kernelvars
│   ├── multiarch
│   ├── multiarch.d
│   │   └── site.local
│   ├── proc
│   ├── run
│   ├── securityfs
│   ├── share
│   ├── sys
│   ├── xdg-user-dirs
│   └── xdg-user-dirs.d
│       └── site.local
├── usr.bin.man
├── usr.bin.tcpdump
├── usr.lib.snapd.snap-confine.real
├── usr.sbin.avahi-daemon
├── usr.sbin.dnsmasq
├── usr.sbin.identd
├── usr.sbin.mdnsd
├── usr.sbin.nmbd
├── usr.sbin.nscd
├── usr.sbin.rsyslogd
├── usr.sbin.smbd
├── usr.sbin.smbldap-useradd
└── usr.sbin.traceroute

12 directories, 192 files
root@lpic303-ubuntu35:~#

Smack/SMACK

  • Simplified Mandatory Access Control Kernel

  • 設定がシンプル

  • セキュリティコンテキストをファイルの拡張属性として保持する

  • ファイルの拡張属性に対応していないファイルシステムでは利用不可

参考

この記事が気に入ったらサポートをしてみませんか?