332.3 リソース制御
課題 332: ホストセキュリティ
332.3 リソース制御
LPIC303の試験範囲である主題331~335まであるうちの「332: ホストセキュリティ」から「332.3 リソース制御」についてのまとめ
総重量:3
説明:
サービスとプログラムが利用可能なリソースを制限できる。主要な知識範囲:
ulimitsの理解と設定
クラス・リミット・アカウンティングを含むcgroupsの理解。
cgroupsの管理と、cgroup associationの加工。
スライスを含む、systemdリソース制御の理解
systemdユニットのリソース制限の設定。
cgmanagerとlibcgroupユーティリティーの知識。
重要なファイル、用語、ユーティリティ:
ulimit
/etc/security/limits.conf
pam_limits.so
/sys/fs/group/
/proc/cgroups
systemd-cgls
systemd-cgtop
ulimitsの理解と設定
ulimitの理解
ulimitコマンド
-a
現在の設定-H
ハードリミット
変更できるのはrootユーザーのみ-S
ソフトリミット
ハードリミットの範囲内であれば一般ユーザーも変更可能
ulimitで設定できる項目
設定項目 (単位, コマンドオプション) 設定値
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# ulimit -a
real-time non-blocking time (microseconds, -R) unlimited
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 6897
max locked memory (kbytes, -l) 8192
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 6897
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[root@lpic303-rocky34 ~]#
設定ファイル
/etc/security/limits.conf
"/etc/security/limits.conf" で設定したリソース制限は "pam_limits.so" によって適用される
設定例)
<domain>:制限の対象(ユーザーやグループ)
<type>:hard(ハードリミット) or soft(ソフトリミット)
<item>:制限する項目
<value>:制限する値
#<domain> <type> <item> <value>
#
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
pam_limits.so
RockyLinux9の場合
/usr/lib64/security/pam_limits.so
"/etc/pam.d/system-auth" で設定されている
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authselect is run.
auth required pam_env.so
auth sufficient pam_unix.so try_first_pass nullok
auth required pam_deny.so
account required pam_unix.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so try_first_pass use_authtok nullok sha512 shadow
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so <---★これ
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
[root@lpic303-rocky34 ~]#
Ubuntu22.04の場合
/usr/lib/x86_64-linux-gnu/security/pam_limits.so
"/etc/pam.d/~" で設定されている
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# grep "pam_limits" /etc/pam.d/*
/etc/pam.d/cron:session required pam_limits.so
/etc/pam.d/login:session required pam_limits.so
/etc/pam.d/runuser:session required pam_limits.so
/etc/pam.d/sshd:session required pam_limits.so
/etc/pam.d/su:session required pam_limits.so
/etc/pam.d/sudo:session required pam_limits.so
/etc/pam.d/sudo-i:session required pam_limits.so
root@lpic303-ubuntu35:~#
cgroupsの理解
クラス
<・・・調査中・・・>
リミット
<・・・調査中・・・>
アカウンティング
<・・・調査中・・・>
コントローラー(cgroup-v1)
blkio:ブロックデバイスへの入出力アクセスを制限
cpu:Completely Fair Scheduler (CFS) パラメーターを調整
cpuacct:CPU リソースに関する自動レポートを作成
cpuset:指定された CPU のサブセットでのみ実行されるように制限
devices:デバイスへのアクセスを制御
freezer:一時停止または再開
hugetlb:容量の仮想メモリーページの使用を制限
memory:メモリー使用の制限
net_cls:ネットワークトラフィックの制限
net_prio:ネットワークトラフィックの優先度を設定
perf_event:perf ツールでモニタリングできるようにする
pids:多数のプロセスとその子プロセスに制限
rdma:Remote Direct Memory Access/InfiniB 固有リソースに制限
コントローラー(cgroup-v2)
cpu
cpuset
device
freezer
hugetlb
io:cgroup-v1の blkio に相当
memory
misc
perf_event
pids
rdma
★RockyLinux9★
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# cat /sys/fs/cgroup/cgroup.controllers
cpuset cpu io memory hugetlb pids rdma misc
[root@lpic303-rocky34 ~]#
★Ubuntu22.04★
root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# cat /sys/fs/cgroup/cgroup.controllers
cpuset cpu io memory hugetlb pids rdma misc
root@lpic303-ubuntu35:~#
参考
cgroupsの管理と、cgroup associationの加工
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 0 65 1
cpu 0 65 1
cpuacct 0 65 1
blkio 0 65 1
memory 0 65 1
devices 0 65 1
freezer 0 65 1
net_cls 0 65 1
perf_event 0 65 1
net_prio 0 65 1
hugetlb 0 65 1
pids 0 65 1
rdma 0 65 1
misc 0 65 1
[root@lpic303-rocky34 ~]#
スライスを含む、systemdリソース制御の理解
systemdのユニットタイプ
サービス
name.service
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# systemctl -t service
UNIT LOAD ACTIVE SUB DESCRIPTION >
auditd.service loaded active running Security Auditing Service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
dbus-broker.service loaded active running D-Bus System Message Bus
dracut-shutdown.service loaded active exited Restore /run/initramfs on shutdown
getty@tty1.service loaded active running Getty on tty1
kdump.service loaded active exited Crash recovery kernel arming
kmod-static-nodes.service loaded active exited Create List of Static Device Nodes
lvm2-monitor.service loaded active exited Monitoring of LVM2 mirrors, snapshots etc. using dm>
NetworkManager-wait-online.service loaded active exited Network Manager Wait Online
NetworkManager.service loaded active running Network Manager
nis-domainname.service loaded active exited Read and set NIS domainname from /etc/sysconfig/net>
rsyslog.service loaded active running System Logging Service
sshd.service loaded active running OpenSSH server daemon
systemd-boot-update.service loaded active exited Automatic Boot Loader Update
systemd-journal-flush.service loaded active exited Flush Journal to Persistent Storage
systemd-journald.service loaded active running Journal Service
systemd-logind.service loaded active running User Login Management
systemd-modules-load.service loaded active exited Load Kernel Modules
systemd-network-generator.service loaded active exited Generate network units from Kernel command line
systemd-random-seed.service loaded active exited Load/Save Random Seed
systemd-remount-fs.service loaded active exited Remount Root and Kernel File Systems
systemd-sysctl.service loaded active exited Apply Kernel Variables
systemd-tmpfiles-setup-dev.service loaded active exited Create Static Device Nodes in /dev
systemd-tmpfiles-setup.service loaded active exited Create Volatile Files and Directories
systemd-udev-trigger.service loaded active exited Coldplug All udev Devices
systemd-udevd.service loaded active running Rule-based Manager for Device Events and Files
systemd-update-utmp.service loaded active exited Record System Boot/Shutdown in UTMP
systemd-user-sessions.service loaded active exited Permit User Sessions
user-runtime-dir@1000.service loaded active exited User Runtime Directory /run/user/1000
user@1000.service loaded active running User Manager for UID 1000
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
32 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
[root@lpic303-rocky34 ~]#
スコープ
name.scope
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# systemctl -t scope
UNIT LOAD ACTIVE SUB DESCRIPTION
init.scope loaded active running System and Service Manager
session-1.scope loaded active running Session 1 of User rocky
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
2 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
[root@lpic303-rocky34 ~]#
スライス
parent-name.slice-.slice:ルートスライス
system.slice:システムサービス
user.slice:ユーザーセッション
machine.slice:仮想マシンとコンテナのスライス
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# systemctl -t slice
UNIT LOAD ACTIVE SUB DESCRIPTION
-.slice loaded active active Root Slice
system-getty.slice loaded active active Slice /system/getty
system-modprobe.slice loaded active active Slice /system/modprobe
system-sshd\x2dkeygen.slice loaded active active Slice /system/sshd-keygen
system-systemd\x2dhibernate\x2dresume.slice loaded active active Slice /system/systemd-hibernate-resume
system.slice loaded active active System Slice
user-1000.slice loaded active active User Slice of UID 1000
user.slice loaded active active User and Session Slice
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
8 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
[root@lpic303-rocky34 ~]#
systemdユニットのリソース制限の設定
systemctlコマンド
systemctl set-property <UNIT名> <設定項目=設定値>
"/etc/systemd/system/<UNIT名>/override.conf" が生成される。systemctl revert <UNIT名>
"override.conf" が削除される=ユニットの初期状態に戻る
systemd-cglsコマンド
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# systemd-cgls
Control group /:
-.slice
├─user.slice (#975)
│ → user.invocation_id: 16de66fd14424a43b97454ad731dfba6
│ → trusted.invocation_id: 16de66fd14424a43b97454ad731dfba6
│ └─user-1000.slice (#2598)
│ → user.invocation_id: f606f6290f8f4b82b448d8bdb5337711
│ → trusted.invocation_id: f606f6290f8f4b82b448d8bdb5337711
│ ├─user@1000.service … (#2668)
│ │ → user.delegate: 1
│ │ → trusted.delegate: 1
│ │ → user.invocation_id: 0d86fbae97854b06b8fbdbbf188f98cb
│ │ → trusted.invocation_id: 0d86fbae97854b06b8fbdbbf188f98cb
│ │ └─init.scope (#2703)
│ │ ├─1194 /usr/lib/systemd/systemd --user
│ │ └─1196 (sd-pam)
│ └─session-1.scope (#2843)
│ ├─1189 sshd: rocky [priv]
│ ├─1203 sshd: rocky@pts/0
│ ├─1204 -bash
│ ├─1225 sudo su
: :
systemd-cgtop コマンド
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# systemd-cgtop
Control Group Tasks %CPU Memory Input/s Output/s
/ 114 5.9 258.4M - -
user.slice 9 1.4 17.1M - -
user.slice/user-1000.slice 9 1.4 17.1M - -
user.slice/user-1000.slice/session-1.scope 7 1.4 12.7M - -
system.slice 20 0.0 129.6M - -
system.slice/rsyslog.service 3 0.0 2.2M - -
dev-hugepages.mount - - 52.0K - -
dev-mqueue.mount - - 4.0K - -
init.scope 1 - 33.5M - -
sys-fs-fuse-connections.mo
:
cgmanagerとlibcgroupユーティリティーの知識
cgmanager
<・・・調査中・・・>
libcgroup
<・・・調査中・・・>
参考文献
How to understand the linux control groups cgroups - YouTube
Using Linux cgroups to control how processes share server resources - YouTube
この記事が気に入ったらサポートをしてみませんか?