Felhasználói eszközök

Eszközök a webhelyen


podman:chroot

Ez a dokumentum egy előző változata!


Chroot

A chroot utasítás segítségével az operációs rendszer egy könyvtárában alakítjuk ki a program futásához szükséges környezetet. Ebben a környezetben a futtatáshoz szükséges összes állományt a forrás fájlrendszer struktúráját követve adjuk meg.

Programok futtatása

Egyszerű shell futtatása

Létrehozzuk a chroot könyvtárat, majd bemásoljuk a 'bash' programot. majd 'chroot' paramétereként.

# mkdir -p /opt/chroot/01-shell-minimal

# type bash
bash: /usr/sbin/bash

# mkdir -p /opt/chroot/01-shell-minimal/usr/bin
cp -a /usr/bin/bash /opt/chroot/01-shell-minimal/usr/bin

Futtatjuk a programot chroot nélkül. Ellenőrizzük a szülö shell PID-jét, a futtatot program PID-jét, majd kilépés után újra a szülőt.

# echo $$
4595

# /opt/chroot/01-shell-minimal/usr/bin/bash 
# echo $$
5121
# exit
exit

# echo $$
4595

Futtassuk a programot 'chroot' segítségével. Hibát kapunk, mert a programhoz tartozó megosztott függvényeket tartalmazó állományok hiányoznak.

# chroot /opt/chroot/01-shell-minimal /usr/bin/bash
chroot: failed to run command ‘/usr/bin/bash’: No such file or directory

Ellenőrizzük mire van szükség.

# ldd /usr/bin/bash
	linux-vdso.so.1 (0x00007f5879c64000)
	libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007f5879aa9000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f58798b6000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f5879c66000)
<code>

A hiányzó állományok listájában három típust különböztetünk meg:

  - a programhoz linkelt állomány 'linux-vdso.so.1 (0x00007f5879c64000)' nincs vele teendő.
  - dinamikusan linkelt állomány amit a program hivatkozás segítségével ér el 'libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007f5879aa9000)'.
  - statikusan megadott állomány, amelynek helye nem módosítható '/lib64/ld-linux-x86-64.so.2 (0x00007f5879c66000)'.

Hozzuk létre a könyvtárstruktúrát és másoljuk be az állományokat. A példában a szimbolikus linkeket is létrehozzuk.

<code>
# mkdir /opt/chroot/01-shell-minimal/usr/lib64

# ln -s usr/bin /opt/chroot/01-shell-minimal/bin

# ln -s usr/lib64 /opt/chroot/01-shell-minimal/lib64

# cp -a /lib64/libtinfo.so.6* /lib64/libc.so.6* /lib64/ld-linux-x86-64.so.2 /opt/chroot/01-shell-minimal/usr/lib64/

# tree /opt/chroot/01-shell-minimal/
/opt/chroot/01-shell-minimal/
├── bin -> usr/bin
├── lib64 -> usr/lib64
└── usr
    ├── bin
    │   └── bash
    └── lib64
        ├── ld-linux-x86-64.so.2
        ├── libc.so.6
        ├── libtinfo.so.6 -> libtinfo.so.6.5
        └── libtinfo.so.6.5

6 directories, 5 files

Futtassuk ismét a 'bash' programot chroot környezetben.

# chroot /opt/chroot/01-shell-minimal /usr/bin/bash
bash-5.3# exit
exit

Bővített környezet segédprogramokkal

A chroot-ban futtatott 'bash' shell csak a beépített utasításokat képes futtatni (pwd, cd). Minden külső program (ls, cat) hiányzik. A programok futtatásához és ellenőrzéséhez szükséges minimális programokat be kell másolni a strukrtúrába.

# chroot /opt/chroot/01-shell-minimal /usr/bin/bash
bash-5.3# ls
bash: ls: command not found
bash-5.3# exit
exit

Készítsünk másolatot a könyvtárról és bővítsük az alapvető utasításokkal.

# cp -a /opt/chroot/01-shell-minimal /opt/chroot/02-shell-extended

# cp -a /usr/bin/cat /usr/bin/id /usr/bin/ls /opt/chroot/02-shell-extended/usr/bin

# chroot /opt/chroot/02-shell-extended /usr/bin/bash
bash-5.3# ls
ls: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory

Hiányzik egy újabb megosztott könyvtári függvényeket tartalmazó állomán. Át kell nézni a bemásolt programokat és be kell másolni a hiányzó állományokat.

# ldd /usr/bin/cat
	linux-vdso.so.1 (0x00007f6c600ce000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f6c5feb9000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f6c600d0000)

A 'cat parancs futtatásához szükséges állományok már rendelkezésre állnak.

# ldd /usr/bin/id
	linux-vdso.so.1 (0x00007fa0165b3000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fa01655f000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fa01636c000)
	libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007fa0162bf000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fa0165b5000)

# ldd /usr/bin/ls
	linux-vdso.so.1 (0x00007f53cf8f6000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f53cf888000)
	libcap.so.2 => /lib64/libcap.so.2 (0x00007f53cf87c000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f53cf689000)
	libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f53cf5dc000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f53cf8f8000)

A hiányzó állományok másolását el kell végezni.

# cp -a /lib64/libselinux.so.1* /lib64/libcap.so.2* /lib64/libpcre2-8.so.0* /opt/chroot/02-shell-extended/usr/lib64

# tree /opt/chroot/02-shell-extended
/opt/chroot/02-shell-extended
├── bin -> usr/bin
├── lib64 -> usr/lib64
└── usr
    ├── bin
    │   ├── bash
    │   ├── cat
    │   ├── id
    │   └── ls
    └── lib64
        ├── ld-linux-x86-64.so.2
        ├── libcap.so.2 -> libcap.so.2.76
        ├── libcap.so.2.76
        ├── libc.so.6
        ├── libpcre2-8.so.0 -> libpcre2-8.so.0.15.0
        ├── libpcre2-8.so.0.15.0
        ├── libselinux.so.1
        ├── libtinfo.so.6 -> libtinfo.so.6.5
        └── libtinfo.so.6.5

6 directories, 13 files

Ellenőrizzük a környezetet

# chroot /opt/chroot/02-shell-extended /usr/bin/bash
bash-5.3# ls
bin  lib64  usr
bash-5.3# exit
exit

Végezzünk el néhány szépészeti beavatkozást. Létrehozzuk a '/etc' és a '/root' könyvtárakat és bemásoljuk az inicializáló állományokat.

# mkdir -p /opt/chroot/02-shell-extended/etc

# mkdir -p /opt/chroot/02-shell-extended/root

# cp -a /etc/skel/.bash* /opt/chroot/02-shell-extended/root/

# cp -a /etc/bashrc /opt/chroot/02-shell-extended/etc/

Futtassuk a 'bash' utasítást a chroot környezetben. A prompt megváltozik.

# chroot /opt/chroot/02-shell-extended /usr/bin/bash
[I have no name!@gepnev /]# id
uid=0 gid=0 groups=0

[I have no name!@gepnev /]# exit
exit

Az 'I have no name!' üzenet azért jelenik meg, mert a rendszer nem talál bejegyzést a futtató felhasználóhoz és a csoporthoz. Ez a bejegyzés a '/etc/passwd' és '/etc/group' fájlokban találhatók.

# echo 'root::0:0:Super User:/root:/bin/bash' > /opt/chroot/02-shell-extended/etc/passwd

# echo 'root::0:' > /opt/chroot/02-shell-extended/etc/group

# echo $$
4595

# chroot /opt/chroot/02-shell-extended /usr/bin/bash
[root@gepnev /]# echo $$
9737
[root@gepnev /]# exit
exit

# echo $$
4595

NGINX szerver futtatása chroot környezetben

podman/chroot.1776149499.txt.gz · legutóbbi módosítás: – Szerkesztő: riba.zoltan