Linux kernel namespace: erinevus redaktsioonide vahel

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti
(Uus lehekülg: '===Sissejuhatus=== TODO ===Misc=== <pre> kasutaja@ph-minio-01:~$ unshare --user --net --map-root-user /bin/bash root@ph-minio-01:~# ip addr 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 root@ph-minio-01:~# ip addr add 127.0.0.1 dev lo root@ph-minio-01:~# ip link set up dev lo root@ph-minio-01:~# ping -c 2 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0....')
 
 
(ei näidata sama kasutaja 22 vahepealset redaktsiooni)
2. rida: 2. rida:
   
 
TODO
 
TODO
  +
  +
===Tööpõhimõte===
  +
  +
Namespace dimensioonid, 2026 aasta alguses 8
  +
  +
* mnt (Mount): Filesystems
  +
* uts: Hostname/Domain
  +
* ipc: Shared memory/Message queues
  +
* pid: Process numbering
  +
* net: Network stack
  +
* user: UID/GID mapping (The "Key" to rootless)
  +
* cgroup: Control group hierarchy
  +
* time: System clock offset (the "newest" major one)
  +
  +
Väited
  +
  +
* süsteemi käivitamisel moodustatakse automaatselt esimene komplekt namespace'isid (root/initial/global namespace)
  +
* namespace ja kasutaja ei käi koos, nt global namespace kõik protsessid ei ole root kasutaja omad (unshare jt käskudega käsurealt sellist tulemust konstrueerida paistab ei olegi nii lihtne)
  +
* user namespace on eriline, mingis mõttes teised on tema all
  +
* namespace'il on omanik
  +
* tavaliselt on namespace'id anonüümsed mitte nimelised, st nad tekitatakse käigult (ja käigult eemaldatakse) - esimese asjasse puutuva protsessi tekkimisel tekitatakse ning viimase töötava protsessi kadumisel eemaldatakse
  +
* namespace'id moodustavad hierarhia (nt vaadata töökohaarvutis kus on käivitatud google chrome protsess, midagi snap põhiselt jne)
  +
* tavaliselt kaasneb süsteemi sisse loginud kasutajaga (mitte 'su - kasutajanimi') 'kasutaja namespace' tekitamine (systemd põhises süsteemis)
  +
  +
Käsurealt toimetamiseks namespace'idega on olulised sellised programmid
  +
  +
* nsenter - saab kinnituda/siseneda namespace'i
  +
* unshare - saab protsessile käivitamisel öelda, et tekitatakse ka uus namespace ja seejuures protsess loobuks mingitest ressurssidest (nt võrk)
  +
* lsns - esitada namespace'ide nimekiri
  +
  +
Iga protsess on seotud kõiki tüüpi namespace'idega, kui ei ole eraldi täpsustatud, siis on selleks protessi parent protsessi namespace'id, nt protsess 'cron'
  +
  +
<pre>
  +
root@dh-minio-01:~# ps aux | grep -v "\]" | grep -v grep | grep cron
  +
root 650 0.0 0.0 6856 2924 ? Ss Apr18 0:00 /usr/sbin/cron -f
  +
  +
root@dh-minio-01:~# lsns -p 650
  +
NS TYPE NPROCS PID USER COMMAND
  +
4026531834 time 132 1 root /sbin/init
  +
4026531835 cgroup 120 1 root /sbin/init
  +
4026531836 pid 119 1 root /sbin/init
  +
4026531837 user 112 1 root /sbin/init
  +
4026531838 uts 115 1 root /sbin/init
  +
4026531839 ipc 119 1 root /sbin/init
  +
4026531840 net 113 1 root /sbin/init
  +
4026531841 mnt 107 1 root /sbin/init
  +
</pre>
  +
  +
Kui protsessi juures on täpsustatud osa namespace'isid, siis ülejäänud on vanema omad, nt
  +
  +
<pre>
  +
root@dh-minio-01:~# ps aux | grep -v "\]" | grep -v grep | grep rsyslogd
  +
root 656 0.0 0.0 219680 5412 ? Ssl Apr18 0:01 /usr/sbin/rsyslogd -n -iNONE
  +
  +
root@dh-minio-01:~# lsns -p 656
  +
NS TYPE NPROCS PID USER COMMAND
  +
4026531834 time 132 1 root /sbin/init
  +
4026531835 cgroup 120 1 root /sbin/init
  +
4026531836 pid 119 1 root /sbin/init
  +
4026531837 user 112 1 root /sbin/init
  +
4026531839 ipc 119 1 root /sbin/init
  +
4026531840 net 113 1 root /sbin/init
  +
4026532411 uts 1 656 root ├─/usr/sbin/rsyslogd -n -iNONE
  +
4026532461 mnt 1 656 root └─/usr/sbin/rsyslogd -n -iNONE
  +
</pre>
   
 
===Misc===
 
===Misc===
  +
  +
Käitatakse shell (bash) ning seejuures tekitatakse temaga seoses mitu namespace'i
  +
  +
* user - see on paratamatult vajalik
  +
* net - võrgunduse dimensioon
  +
* TODO
  +
* illustratsiooniks seadistatakse ka lo võrguseadmele ip aadress
   
 
<pre>
 
<pre>
24. rida: 96. rida:
 
rtt min/avg/max/mdev = 0.016/0.018/0.020/0.002 ms
 
rtt min/avg/max/mdev = 0.016/0.018/0.020/0.002 ms
 
</pre>
 
</pre>
  +
  +
ning
  +
  +
<pre>
  +
root@ph-minio-01:~# lsns -n | grep kasutaja
  +
4026532406 user 1 5124 kasutaja /bin/bash
  +
4026532407 net 1 5124 kasutaja /bin/bash
  +
  +
root@ph-minio-01:~# lsns 4026532406
  +
PID PPID USER COMMAND
  +
5124 4954 kasutaja /bin/bash
  +
  +
root@ph-minio-01:~# lsns 4026532407
  +
PID PPID USER COMMAND
  +
5124 4954 kasutaja /bin/bash
  +
</pre>
  +
  +
Piiratud keskkonna moodustamine
  +
  +
<pre>
  +
kasutaja@ph-minio-01:~$ unshare --user --net --pid --map-root-user --mount --fork /bin/bash
  +
  +
root@ph-minio-01:~# mount --make-rprivate /
  +
  +
root@ph-minio-01:~# mount -t proc proc /proc
  +
  +
root@ph-minio-01:~# mount -t sysfs sysfs /sys
  +
  +
root@ph-minio-01:~# mkdir /tmp/empty
  +
  +
root@ph-minio-01:~# mount --bind /tmp/empty /sys/bus/pci
  +
</pre>
  +
  +
Tulemusena
  +
  +
<pre>
  +
root@ph-minio-01:~# lspci
  +
lspci: Cannot open /sys/bus/pci/devices
  +
  +
root@ph-minio-01:~# /usr/sbin/driverctl list-devices
  +
driverctl: No overridable devices found. Kernel too old?
  +
  +
root@ph-minio-01:~# dmesg
  +
dmesg: read kernel buffer failed: Operation not permitted
  +
  +
root@ph-minio-01:~# netstat -ant
  +
Active Internet connections (servers and established)
  +
Proto Recv-Q Send-Q Local Address Foreign Address State
  +
</pre>
  +
  +
ning lsns vaatest
  +
  +
<pre>
  +
kasutaja@ph-minio-01:~$ lsns
  +
NS TYPE NPROCS PID USER COMMAND
  +
...
  +
4026532406 user 2 6065 kasutaja ├─unshare --user --net --pid --map-root-user --mount --fork /bin/bash
  +
4026532407 mnt 2 6065 kasutaja ├─unshare --user --net --pid --map-root-user --mount --fork /bin/bash
  +
4026532408 pid 1 6066 kasutaja │ └─/bin/bash
  +
4026532409 net 2 6065 kasutaja └─unshare --user --net --pid --map-root-user --mount --fork /bin/bash
  +
</pre>
  +
  +
unshare väljumisest sobib öelda exit
  +
  +
<pre>
  +
root@ph-minio-01:~# exit
  +
kasutaja@ph-minio-01:~$
  +
</pre>
  +
  +
systemd varjab namespace abil protsessi eest ära osa failisüsteemist
  +
  +
<pre>
  +
root@dh-minio-01:~# lsns --tree=owner
  +
NS TYPE NPROCS PID USER COMMAND
  +
4026531837 user 110 1 root /sbin/init
  +
├─4026531834 time 110 1 root /sbin/init
  +
├─4026531835 cgroup 110 1 root /sbin/init
  +
├─4026531836 pid 110 1 root /sbin/init
  +
├─4026531838 uts 106 1 root /sbin/init
  +
├─4026531839 ipc 110 1 root /sbin/init
  +
├─4026531840 net 110 1 root /sbin/init
  +
├─4026531841 mnt 105 1 root /sbin/init
  +
├─4026531862 mnt 1 32 root kdevtmpfs
  +
├─4026532333 mnt 1 322 systemd-timesync /usr/lib/systemd/systemd-timesyncd
  +
├─4026532336 mnt 1 353 root /usr/lib/systemd/systemd-udevd
  +
├─4026532337 uts 1 322 systemd-timesync /usr/lib/systemd/systemd-timesyncd
  +
├─4026532338 uts 1 353 root /usr/lib/systemd/systemd-udevd
  +
├─4026532406 mnt 1 11405 root /usr/sbin/rsyslogd -n -iNONE
  +
├─4026532407 uts 1 11405 root /usr/sbin/rsyslogd -n -iNONE
  +
├─4026532461 uts 1 653 root /usr/lib/systemd/systemd-logind
  +
├─4026532468 mnt 1 653 root /usr/lib/systemd/systemd-logind
  +
  +
root@dh-minio-01:~# nsenter -m -t 322 findmnt | grep inacc
  +
TARGET SOURCE FSTYPE OPTIONS
  +
  +
├─/home tmpfs[/systemd/inaccessible/dir] tmpfs ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
  +
│ ├─/proc/kallsyms tmpfs[/systemd/inaccessible/reg] tmpfs ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
  +
│ ├─/proc/kcore tmpfs[/systemd/inaccessible/reg] tmpfs ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
  +
│ ├─/proc/kmsg tmpfs[/systemd/inaccessible/reg] tmpfs ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
  +
│ ├─/run/credentials tmpfs[/systemd/inaccessible/dir] tmpfs ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
  +
├─/root tmpfs[/systemd/inaccessible/dir] tmpfs ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
  +
├─/usr/lib/modules tmpfs[/systemd/inaccessible/dir] tmpfs ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
  +
  +
root@dh-minio-01:~# systemctl show systemd-timesyncd | grep ^Prote
  +
ProtectClock=no
  +
ProtectKernelTunables=yes
  +
ProtectKernelModules=yes
  +
ProtectKernelLogs=yes
  +
ProtectControlGroups=yes
  +
ProtectControlGroupsEx=yes
  +
ProtectHome=yes
  +
ProtectSystem=strict
  +
ProtectProc=invisible
  +
ProtectHostname=yes
  +
</pre>
  +
  +
Kui nt vaikimisi midagi mitte varjavale postgresqli serviceile lisada
  +
  +
<pre>
  +
root@dh-minio-01:~# systemctl edit postgresql@17-main
  +
  +
[Service]
  +
ProtectKernelModules=yes
  +
</pre>
  +
  +
siis postgresql protsessid saavad omale isikliku namespace'i
  +
  +
<pre>
  +
root@dh-minio-01:~# lsns --tree=owner
  +
NS TYPE NPROCS PID USER COMMAND
  +
4026531837 user 115 1 root /sbin/init
  +
├─4026531834 time 115 1 root /sbin/init
  +
├─4026531835 cgroup 115 1 root /sbin/init
  +
├─4026531836 pid 115 1 root /sbin/init
  +
├─4026531838 uts 111 1 root /sbin/init
  +
├─4026531839 ipc 115 1 root /sbin/init
  +
├─4026531840 net 115 1 root /sbin/init
  +
├─4026531841 mnt 104 1 root /sbin/init
  +
├─4026531862 mnt 1 32 root kdevtmpfs
  +
├─4026532333 mnt 1 322 systemd-timesync /usr/lib/systemd/systemd-timesyncd
  +
├─4026532336 mnt 1 353 root /usr/lib/systemd/systemd-udevd
  +
├─4026532337 uts 1 322 systemd-timesync /usr/lib/systemd/systemd-timesyncd
  +
├─4026532338 uts 1 353 root /usr/lib/systemd/systemd-udevd
  +
├─4026532406 mnt 1 11405 root /usr/sbin/rsyslogd -n -iNONE
  +
├─4026532407 uts 1 11405 root /usr/sbin/rsyslogd -n -iNONE
  +
├─4026532408 mnt 6 146129 postgres /usr/lib/postgresql/17/bin/postgres -D /var/lib/postgresql/17/main -c config_file=/etc/postgresql/17/main/postgresql.conf
  +
├─4026532461 uts 1 653 root /usr/lib/systemd/systemd-logind
  +
├─4026532468 mnt 1 653 root /usr/lib/systemd/systemd-logind
  +
</pre>
  +
  +
nsenter abil saab enam-vähem sama tulemuse, mis 'docker exec -ti container_name bash'
  +
  +
<pre>
  +
nsenter -t $CPID -m -u -i -n -p bash
  +
</pre>
  +
  +
kus
  +
  +
* ei rakendu kõnealuse protsessi cgroups kitsendused
  +
* ei rakendu kõnealuse protsessi capabilities kitsendused
  +
* minnakse otse suhtlema kerneliga st mööda dockerd jms osakondadest
  +
  +
===namespace mõju töökohaarvutile===
  +
  +
Töökohaarvuti kasutusjuhtumile on iseloomulikud lõppkasutaja kasutamisele iseloomulikud namespace'id
  +
  +
[[Fail:20260415-namespace-ubuntu-desktop-2404-02.png|1300px]]
  +
  +
kus
  +
  +
* chrome brauseri töötamisega kaasneb hulka protsesse, paljud asuvad suhteliselt isiklikus namespace'is
  +
* snap kujul publitseeritud tarkvara kasutab ka ohtralt namespace'isid
  +
* kasutajaga seotud namespace kasutuse puhul on iseloomulik nö sügavama hierarhia moodustamine
   
 
===Kasulikud lisamaterjalid===
 
===Kasulikud lisamaterjalid===

Viimane redaktsioon: 22. aprill 2026, kell 12:14

Sissejuhatus

TODO

Tööpõhimõte

Namespace dimensioonid, 2026 aasta alguses 8

  • mnt (Mount): Filesystems
  • uts: Hostname/Domain
  • ipc: Shared memory/Message queues
  • pid: Process numbering
  • net: Network stack
  • user: UID/GID mapping (The "Key" to rootless)
  • cgroup: Control group hierarchy
  • time: System clock offset (the "newest" major one)

Väited

  • süsteemi käivitamisel moodustatakse automaatselt esimene komplekt namespace'isid (root/initial/global namespace)
  • namespace ja kasutaja ei käi koos, nt global namespace kõik protsessid ei ole root kasutaja omad (unshare jt käskudega käsurealt sellist tulemust konstrueerida paistab ei olegi nii lihtne)
  • user namespace on eriline, mingis mõttes teised on tema all
  • namespace'il on omanik
  • tavaliselt on namespace'id anonüümsed mitte nimelised, st nad tekitatakse käigult (ja käigult eemaldatakse) - esimese asjasse puutuva protsessi tekkimisel tekitatakse ning viimase töötava protsessi kadumisel eemaldatakse
  • namespace'id moodustavad hierarhia (nt vaadata töökohaarvutis kus on käivitatud google chrome protsess, midagi snap põhiselt jne)
  • tavaliselt kaasneb süsteemi sisse loginud kasutajaga (mitte 'su - kasutajanimi') 'kasutaja namespace' tekitamine (systemd põhises süsteemis)

Käsurealt toimetamiseks namespace'idega on olulised sellised programmid

  • nsenter - saab kinnituda/siseneda namespace'i
  • unshare - saab protsessile käivitamisel öelda, et tekitatakse ka uus namespace ja seejuures protsess loobuks mingitest ressurssidest (nt võrk)
  • lsns - esitada namespace'ide nimekiri

Iga protsess on seotud kõiki tüüpi namespace'idega, kui ei ole eraldi täpsustatud, siis on selleks protessi parent protsessi namespace'id, nt protsess 'cron'

root@dh-minio-01:~# ps aux | grep -v "\]" | grep -v grep | grep cron
root         650  0.0  0.0   6856  2924 ?        Ss   Apr18   0:00 /usr/sbin/cron -f

root@dh-minio-01:~# lsns -p 650
        NS TYPE   NPROCS PID USER COMMAND
4026531834 time      132   1 root /sbin/init
4026531835 cgroup    120   1 root /sbin/init
4026531836 pid       119   1 root /sbin/init
4026531837 user      112   1 root /sbin/init
4026531838 uts       115   1 root /sbin/init
4026531839 ipc       119   1 root /sbin/init
4026531840 net       113   1 root /sbin/init
4026531841 mnt       107   1 root /sbin/init

Kui protsessi juures on täpsustatud osa namespace'isid, siis ülejäänud on vanema omad, nt

root@dh-minio-01:~# ps aux | grep -v "\]" | grep -v grep | grep rsyslogd
root         656  0.0  0.0 219680  5412 ?        Ssl  Apr18   0:01 /usr/sbin/rsyslogd -n -iNONE

root@dh-minio-01:~# lsns -p 656
        NS TYPE   NPROCS   PID USER COMMAND
4026531834 time      132     1 root /sbin/init
4026531835 cgroup    120     1 root /sbin/init
4026531836 pid       119     1 root /sbin/init
4026531837 user      112     1 root /sbin/init
4026531839 ipc       119     1 root /sbin/init
4026531840 net       113     1 root /sbin/init
4026532411 uts         1   656 root ├─/usr/sbin/rsyslogd -n -iNONE
4026532461 mnt         1   656 root └─/usr/sbin/rsyslogd -n -iNONE

Misc

Käitatakse shell (bash) ning seejuures tekitatakse temaga seoses mitu namespace'i

  • user - see on paratamatult vajalik
  • net - võrgunduse dimensioon
  • TODO
  • illustratsiooniks seadistatakse ka lo võrguseadmele ip aadress
kasutaja@ph-minio-01:~$ unshare --user --net --map-root-user /bin/bash

root@ph-minio-01:~# ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

root@ph-minio-01:~# ip addr add 127.0.0.1 dev lo
root@ph-minio-01:~# ip link set up dev lo

root@ph-minio-01:~# ping -c 2 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.020 ms

--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1023ms
rtt min/avg/max/mdev = 0.016/0.018/0.020/0.002 ms

ning

root@ph-minio-01:~# lsns -n | grep kasutaja
4026532406 user       1  5124 kasutaja         /bin/bash
4026532407 net        1  5124 kasutaja         /bin/bash

root@ph-minio-01:~# lsns 4026532406
  PID  PPID USER     COMMAND
 5124  4954 kasutaja /bin/bash

root@ph-minio-01:~# lsns 4026532407
  PID  PPID USER     COMMAND
 5124  4954 kasutaja /bin/bash

Piiratud keskkonna moodustamine

kasutaja@ph-minio-01:~$ unshare --user --net --pid --map-root-user --mount --fork /bin/bash

root@ph-minio-01:~# mount --make-rprivate /

root@ph-minio-01:~# mount -t proc proc /proc

root@ph-minio-01:~# mount -t sysfs sysfs /sys

root@ph-minio-01:~# mkdir /tmp/empty

root@ph-minio-01:~# mount --bind /tmp/empty /sys/bus/pci

Tulemusena

root@ph-minio-01:~# lspci
lspci: Cannot open /sys/bus/pci/devices

root@ph-minio-01:~# /usr/sbin/driverctl list-devices
driverctl: No overridable devices found. Kernel too old?

root@ph-minio-01:~# dmesg
dmesg: read kernel buffer failed: Operation not permitted

root@ph-minio-01:~# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State

ning lsns vaatest

kasutaja@ph-minio-01:~$ lsns
        NS TYPE   NPROCS   PID USER     COMMAND
...
4026532406 user        2  6065 kasutaja ├─unshare --user --net --pid --map-root-user --mount --fork /bin/bash
4026532407 mnt         2  6065 kasutaja ├─unshare --user --net --pid --map-root-user --mount --fork /bin/bash
4026532408 pid         1  6066 kasutaja │ └─/bin/bash
4026532409 net         2  6065 kasutaja └─unshare --user --net --pid --map-root-user --mount --fork /bin/bash

unshare väljumisest sobib öelda exit

root@ph-minio-01:~# exit
kasutaja@ph-minio-01:~$

systemd varjab namespace abil protsessi eest ära osa failisüsteemist

root@dh-minio-01:~# lsns --tree=owner
NS           TYPE   NPROCS   PID USER             COMMAND
4026531837   user      110     1 root             /sbin/init
├─4026531834 time      110     1 root             /sbin/init
├─4026531835 cgroup    110     1 root             /sbin/init
├─4026531836 pid       110     1 root             /sbin/init
├─4026531838 uts       106     1 root             /sbin/init
├─4026531839 ipc       110     1 root             /sbin/init
├─4026531840 net       110     1 root             /sbin/init
├─4026531841 mnt       105     1 root             /sbin/init
├─4026531862 mnt         1    32 root             kdevtmpfs
├─4026532333 mnt         1   322 systemd-timesync /usr/lib/systemd/systemd-timesyncd
├─4026532336 mnt         1   353 root             /usr/lib/systemd/systemd-udevd
├─4026532337 uts         1   322 systemd-timesync /usr/lib/systemd/systemd-timesyncd
├─4026532338 uts         1   353 root             /usr/lib/systemd/systemd-udevd
├─4026532406 mnt         1 11405 root             /usr/sbin/rsyslogd -n -iNONE
├─4026532407 uts         1 11405 root             /usr/sbin/rsyslogd -n -iNONE
├─4026532461 uts         1   653 root             /usr/lib/systemd/systemd-logind
├─4026532468 mnt         1   653 root             /usr/lib/systemd/systemd-logind

root@dh-minio-01:~# nsenter -m -t 322 findmnt | grep inacc
TARGET                    SOURCE                              FSTYPE      OPTIONS

├─/home                   tmpfs[/systemd/inaccessible/dir]    tmpfs       ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
│ ├─/proc/kallsyms        tmpfs[/systemd/inaccessible/reg]    tmpfs       ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
│ ├─/proc/kcore           tmpfs[/systemd/inaccessible/reg]    tmpfs       ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
│ ├─/proc/kmsg            tmpfs[/systemd/inaccessible/reg]    tmpfs       ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
│ ├─/run/credentials      tmpfs[/systemd/inaccessible/dir]    tmpfs       ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
├─/root                   tmpfs[/systemd/inaccessible/dir]    tmpfs       ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64
├─/usr/lib/modules        tmpfs[/systemd/inaccessible/dir]    tmpfs       ro,nosuid,nodev,noexec,relatime,size=605312k,mode=755,inode64

root@dh-minio-01:~# systemctl show systemd-timesyncd | grep ^Prote
ProtectClock=no
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectKernelLogs=yes
ProtectControlGroups=yes
ProtectControlGroupsEx=yes
ProtectHome=yes
ProtectSystem=strict
ProtectProc=invisible
ProtectHostname=yes

Kui nt vaikimisi midagi mitte varjavale postgresqli serviceile lisada

root@dh-minio-01:~# systemctl edit postgresql@17-main

[Service]
ProtectKernelModules=yes

siis postgresql protsessid saavad omale isikliku namespace'i

root@dh-minio-01:~# lsns --tree=owner
NS           TYPE   NPROCS    PID USER             COMMAND
4026531837   user      115      1 root             /sbin/init
├─4026531834 time      115      1 root             /sbin/init
├─4026531835 cgroup    115      1 root             /sbin/init
├─4026531836 pid       115      1 root             /sbin/init
├─4026531838 uts       111      1 root             /sbin/init
├─4026531839 ipc       115      1 root             /sbin/init
├─4026531840 net       115      1 root             /sbin/init
├─4026531841 mnt       104      1 root             /sbin/init
├─4026531862 mnt         1     32 root             kdevtmpfs
├─4026532333 mnt         1    322 systemd-timesync /usr/lib/systemd/systemd-timesyncd
├─4026532336 mnt         1    353 root             /usr/lib/systemd/systemd-udevd
├─4026532337 uts         1    322 systemd-timesync /usr/lib/systemd/systemd-timesyncd
├─4026532338 uts         1    353 root             /usr/lib/systemd/systemd-udevd
├─4026532406 mnt         1  11405 root             /usr/sbin/rsyslogd -n -iNONE
├─4026532407 uts         1  11405 root             /usr/sbin/rsyslogd -n -iNONE
├─4026532408 mnt         6 146129 postgres         /usr/lib/postgresql/17/bin/postgres -D /var/lib/postgresql/17/main -c config_file=/etc/postgresql/17/main/postgresql.conf
├─4026532461 uts         1    653 root             /usr/lib/systemd/systemd-logind
├─4026532468 mnt         1    653 root             /usr/lib/systemd/systemd-logind

nsenter abil saab enam-vähem sama tulemuse, mis 'docker exec -ti container_name bash'

nsenter -t $CPID -m -u -i -n -p bash

kus

  • ei rakendu kõnealuse protsessi cgroups kitsendused
  • ei rakendu kõnealuse protsessi capabilities kitsendused
  • minnakse otse suhtlema kerneliga st mööda dockerd jms osakondadest

namespace mõju töökohaarvutile

Töökohaarvuti kasutusjuhtumile on iseloomulikud lõppkasutaja kasutamisele iseloomulikud namespace'id

20260415-namespace-ubuntu-desktop-2404-02.png

kus

  • chrome brauseri töötamisega kaasneb hulka protsesse, paljud asuvad suhteliselt isiklikus namespace'is
  • snap kujul publitseeritud tarkvara kasutab ka ohtralt namespace'isid
  • kasutajaga seotud namespace kasutuse puhul on iseloomulik nö sügavama hierarhia moodustamine

Kasulikud lisamaterjalid

  • TODO