Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2023-05-12 21:52:06

  andrewdre - Użytkownik

andrewdre
Użytkownik
Zarejestrowany: 2014-12-19

unshare chroot z chromium - czy da się z włączonym sanboxem?

Cześć.
próbuję uruchomić chromium w chroocie odizolowanym od systemu za pomocą unshare, a dokładnie:

Kod:

unshare --ipc --mount --pid --uts --user --cgroup --fork --kill-child --mount-proc --map-user=1000 --map-group=users --root=/home/ja/nowyroot

Mam dwa pytania:
1. Czy da się uruchomić chromium z włączonym sandboxem? Log błedu:

Kod:

[18:18:0512/203402.482738:FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /usr/lib/chromium/chrome-sandbox is owned by root and has mode 4755.
[0512/203402.491240:ERROR:file_io_posix.cc(144)] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2)
[0512/203402.491292:ERROR:file_io_posix.cc(144)] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or directory (2)
Trace/breakpoint trap (core dumped)

Problem oczywiście znika jak uruchomię:

Kod:

chromium --no-sandbox

2. Jak rozwiązać problem z GPU:

Kod:

chromium --no-sandbox
[83:97:0512/203708.546719:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
Gtk-Message: 20:37:08.591: Failed to load module "canberra-gtk-module"
[83:102:0512/203708.652527:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[83:102:0512/203708.652601:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[83:97:0512/203708.656770:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory
[83:97:0512/203708.656852:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory
[83:83:0512/203708.672744:ERROR:chrome_browser_cloud_management_controller.cc(162)] Cloud management controller initialization aborted as CBCM is not enabled.
[83:97:0512/203708.686943:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory
[83:97:0512/203708.687036:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory
[83:83:0512/203708.725322:ERROR:gpu_process_host.cc(947)] GPU process launch failed: error_code=1002
[83:83:0512/203708.750757:ERROR:gpu_process_host.cc(947)] GPU process launch failed: error_code=1002
[83:125:0512/203708.751178:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[83:125:0512/203708.751262:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[83:125:0512/203708.751338:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[83:125:0512/203708.751423:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[83:125:0512/203708.751554:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[83:83:0512/203708.761190:ERROR:gpu_process_host.cc(947)] GPU process launch failed: error_code=1002
[83:96:0512/203708.775705:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory
[83:83:0512/203708.810028:ERROR:gpu_process_host.cc(947)] GPU process launch failed: error_code=1002
[83:97:0512/203708.830483:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory
[83:97:0512/203708.831018:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory
[83:83:0512/203709.217332:ERROR:object_proxy.cc(623)] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: 
[83:94:0512/203709.217509:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory
[83:83:0512/203709.244514:ERROR:gpu_process_host.cc(947)] GPU process launch failed: error_code=1002
[83:83:0512/203709.338314:ERROR:object_proxy.cc(623)] Failed to call method: org.freedesktop.DBus.NameHasOwner: object_path= /org/freedesktop/DBus: unknown error type: 
[83:94:0512/203709.338474:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/user/1000/bus: No such file or directory
[83:83:0512/203709.343500:ERROR:gpu_process_host.cc(947)] GPU process launch failed: error_code=1002
[83:83:0512/203709.343535:FATAL:gpu_data_manager_impl_private.cc(440)] GPU process isn't usable. Goodbye.
[0512/203709.372017:ERROR:file_io_posix.cc(144)] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2)
[0512/203709.372110:ERROR:file_io_posix.cc(144)] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or directory (2)
Trace/breakpoint trap (core dumped)

Chromium uruchamia się poleceniem:

Kod:

chromium --no-sandbox --in-process-gpu

ale nie można otworzyć żadnej strony internetowej. Dodam, że firefox uruchamia się bez problemu.

Ostatnio edytowany przez andrewdre (2023-05-12 21:54:09)

Offline

 

#2  2023-05-13 02:05:46

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: unshare chroot z chromium - czy da się z włączonym sanboxem?

Unshare nie tworzy chroota, tylko osobną przestrzeń adresową (linux namespaces).
tego samego mechanizmu namespaces używają sandboxy firefoxa i chromium,
o ile masz w kernelu włączoną opcję

Kod:

# root ~> grep -i CONFIG_USER_NS /boot/config-$(uname -r)
CONFIG_USER_NS=y

Także z ushare prochu nie wymyślisz, zainteresuj się Apparmorem, albo skryptem firejail.
Jest jeszcze nowszy projekt bubblewrap, który jest podobno konkurencją dla firejail.

Sznurki:
https://wiki.debian.org/AppArmor/HowToUse
https://wiki.archlinux.org/title/firejail
https://wiki.archlinux.org/title/Bubblewrap

Ostatnio edytowany przez Jacekalex (2023-05-13 02:08:31)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2023-05-13 17:13:29

  andrewdre - Użytkownik

andrewdre
Użytkownik
Zarejestrowany: 2014-12-19

Re: unshare chroot z chromium - czy da się z włączonym sanboxem?

Na Linuksach znasz się lepiej ode mnie, ale:

Kod:

strace -f -p pid_termniala_z_unshare
3587  execve("/usr/bin/unshare", ["unshare", "--ipc", "--mount", "--pid", "--uts", "--user", "--cgroup", "--fork", "--kill-child", "--mount-proc", "--map-user=1000", "--map-group=users", "--root=/home/ja/nowyroot"], 0x55d11d2de380 /* 36 vars */) = 0
...
3588  chroot("/home/ja/nowyroot") = 0

Jeśli dobrze rozumiem chroot jest tworzony. Dzięki za dobre chęci, ale uparłem się na unshare :) Prosiłbym o odpowiedź jak wygląda jego współpraca z chromium.

Ostatnio edytowany przez andrewdre (2023-05-13 17:17:21)

Offline

 

#4  2023-05-13 23:13:46

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: unshare chroot z chromium - czy da się z włączonym sanboxem?

andrewdre napisał(-a):

Na Linuksach znasz się lepiej ode mnie, ale:

Kod:

strace -f -p pid_termniala_z_unshare
3587  execve("/usr/bin/unshare", ["unshare", "--ipc", "--mount", "--pid", "--uts", "--user", "--cgroup", "--fork", "--kill-child", "--mount-proc", "--map-user=1000", "--map-group=users", "--root=/home/ja/nowyroot"], 0x55d11d2de380 /* 36 vars */) = 0
...
3588  chroot("/home/ja/nowyroot") = 0

Jeśli dobrze rozumiem chroot jest tworzony. Dzięki za dobre chęci, ale uparłem się na unshare :) Prosiłbym o odpowiedź jak wygląda jego współpraca z chromium.

Tylko potem Chromium nie ma uprawnień, żeby w tym unsharowym chroocie stworzyć drugiego chroota przy pomocy chrome-sandbox.
Dlatego to u Ciebie nie działa.

Ostatnio edytowany przez Jacekalex (2023-05-14 07:46:05)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5  2023-05-15 16:22:06

  andrewdre - Użytkownik

andrewdre
Użytkownik
Zarejestrowany: 2014-12-19

Re: unshare chroot z chromium - czy da się z włączonym sanboxem?

Chciałbym jeszcze zapytać Cie o trzy sprawy :)
1. Czy jest w ogóle jakiś sposób by unshare współpracowało z chromium i umożliwiło mu tworzenie sandboxa (przy założeniu, że używam unshare w sposób, który wcześniej opisałem)?
2. Co jest bezpieczniejsze unshare z chromium bez sandboxa, czy chromium bez unshare?
3. Chcę użyć chroota by chromium nie miało dostępu do żadnego z plików głownego systemu. Czy są jakieś inne sposoby, poza tymi które wymieniłeś wcześniej i maszynami wirtualnymi?

Offline

 

#6  2023-05-16 04:10:51

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: unshare chroot z chromium - czy da się z włączonym sanboxem?

Moim zdaniem nie ma.

Chromium w chroocie nie ma uprawnień do tworzenia takiego samego chroota i kropka.
Unshare i chrome-sandbox używają tego samego mechanizmu namespaces.

Prochu tu nie wymyślisz.

Możesz Chromium i Firefoxa uzbroić profilami apparmora, ale sanboxy zostaw mechanizmom zawartym w przeglądarkach, programiści tych przeglądarek troszkę lepiej znają swoje produkty niż użytkownicy.
Zwłaszcza, że unshare to nie jest produkcyjny mechanizm  tyko referencyjny mechanizm demonstracyjny, do tworzenia w locie sanboxów są inne narzędzia jak bubblewrap czy firejail.

Z resztą bubblewrap to jest mechanizm sanboxa wyciągnięty z przeglądarki chromium dla zewnętrznych aplikacji.

Ostatnio edytowany przez Jacekalex (2023-05-16 15:40:39)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#7  2023-07-21 22:57:53

  andrewdre - Użytkownik

andrewdre
Użytkownik
Zarejestrowany: 2014-12-19

Re: unshare chroot z chromium - czy da się z włączonym sanboxem?

Odgrzewam kotlet;) Dzięki @Jacekalex za odpowiedzi – przekonałeś mnie. Zrezygnowałem z  „unshare --user”. Zamiast tego użyłem setuid. Pobawiłem się też trochę filtrem seccomp: tutaj kod źródłowy programu, który zwraca filtr seccomp w postaci Drzewa AVL, a tu w postaci drzewca (bądźcie wyrozumiali - nie jestem programistą, co pewnie widać ;) ). W pierwszym przepadku plik wejściowy powinien zawierać listę wywołań systemowych (po jednym na linijkę), a w drugim w każdej linii priorytet i wywołanie systemowe.
W zasadzie wszystko działało. Jeśli jednak chciałem skorzystać z przestrzeni nazw sieciowych pojawiały się błędy. Skorzystałem z tego tutoriala (do punktu czwartego - ostatnie polecenie to "sudo iptables -A FORWARD -i veth0 -o eth0 -j ACCEPT"). Oprócz "unshare" użyłem:

Kod:

int namespace_fd = open("/var/run/netns/afirefox", O_RDONLY|O_CLOEXEC);
setns(namespace_fd, CLONE_NEWNET)

Chromium wyrzuca błąd (curl za to działa):

Kod:

[3:3:0721/210403.008132:ERROR:ozone_platform_x11.cc(239)] Missing X server or $DISPLAY
[3:3:0721/210403.008334:ERROR:env.cc(255)] The platform failed to initialize.  Exiting.

strace:

Kod:

connect(29, {sa_family=AF_UNIX, sun_path=@"/tmp/.X11-unix/X0"}, 20) = -1 ECONNREFUSED (Połączenie odrzucone)
connect(29, {sa_family=AF_INET6, sin6_port=htons(6000), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_scope_id=0}, 28) = -1 ECONNREFUSED (Połączenie odrzucone)
connect(29, {sa_family=AF_INET, sin_port=htons(6000), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 ECONNREFUSED (Połączenie odrzucone)

Jeśli wywalę te linijki (odpowiadające za utworzenie chroota) to mogę uruchomić Chromium w systemie głównym w przestrzeni nazw sieciowych "afirefox":

Kod:

mount("none", "/", NULL, MS_PRIVATE|MS_REC, NULL);
chroot("/path/to/new/root/");
chdir("/");
mount("proc", "/proc", "proc", MS_NOSUID|MS_NODEV|MS_NOEXEC, NULL);

Cały kod programu: https://wklej.dug.net.pl/5441

Znalazłem jeszcze tutorial wykorzystujący:

Kod:

clone(CLONE_NEWNET)

Pojawia się ten sam błąd i po usunięciu kodu tworzącego chroota chromium się uruchamia. Kod źródłowy: https://wklej.dug.net.pl/5442

Offline

 

#8  2023-07-22 01:30:02

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: unshare chroot z chromium - czy da się z włączonym sanboxem?

Apparmor Ci nie starczy?
https://gitlab.com/morfikov/apparmor/-/blob/master/ … omium-browser
tu masz troszkę więcej profili:
https://gitlab.com/morfikov/apparmor/-/tree/master/profiles

W Chromium lepiej nie dawać mu setuid, ma wbudowany mechanizm namespaces ten sam, z którego korzysta unshare.


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#9  2023-07-22 23:37:04

  andrewdre - Użytkownik

andrewdre
Użytkownik
Zarejestrowany: 2014-12-19

Re: unshare chroot z chromium - czy da się z włączonym sanboxem?

Dzięki za dobre chęci, ale poświęciłem temu projektowi trochę czasu i chciałbym go skończyć, zawsze to coś swojego ;)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)