Przestrzenie nazw i punkty montowania

0

Istnieje sposób na tworzenie ukrytych punktów montowania, jeśli użytkownik root udostępni wspólną przestrzeń nazw i zamontuje katalogi bez aktualizacji mtab. Czy istnieje prosty sposób na umieszczenie tego na liście bez konieczności filtrowania przez system plików proc?


źródło
masz tego przykład? jakie są polecenia? Uważam, że oba mounti findmntzgłaszają wszystkie wierzchowce.
Jasen
@Jasen:, unshare --mount --propagation=slavetego właśnie używają pojemniki takie jak Docker.
grawity

Odpowiedzi:

1

Istnieje sposób na tworzenie ukrytych punktów montowania, jeśli użytkownik root udostępni wspólną przestrzeń nazw i zamontuje katalogi bez aktualizacji mtab. Czy istnieje prosty sposób na umieszczenie tego na liście bez konieczności filtrowania przez system plików proc?

Przede wszystkim /proc jest podstawowym sposobem dostępu do aktualnych informacji o montowaniu w systemie Linux.

Wiele współczesnych dystrybucji Linuksa nigdy nie aktualizuje mtab; jest to po prostu dowiązanie symboliczne do /proc/self/mounts. (Zarówno możliwość cofnięcia udostępnienia przestrzeni nazw montowania, jak i ukrywanie montowań poprzez „zapomnienie” aktualizacji mtab, są głównymi przyczynami tej zmiany. I oczywiście, po co powtarzać pracę, którą jądro już wykonuje?)

Podobnie, same identyfikatory przestrzeni nazw są ujawniane tylko przez /proc/$PID/ns/mnt. Nie ma innego sposobu sprawdzenia, które procesy znajdują się w oddzielnych przestrzeniach nazw od głównego.

Powiedziawszy to, najszybszym sposobem wylistowania wszystkich wierzchowców jest cat /proc/*/mounts. Ale jeśli nie chcesz tego robić, util-linux v2.28 wprowadza narzędzie lsns , które może szybko wyświetlić listę wszystkich unikalnych przestrzeni nazw oraz ich „pierwszy” proces:

$ sudo lsns --type = mnt
        POLECENIE UŻYTKOWNIKA PID NPROCS TYP NS
4026531840 mnt 300 1 root / sbin / init
4026531860 mnt 1 38 root kdevtmpfs
4026532247 mnt 1 271 root / usr / lib / systemd / systemd-udevd
4026532359 mnt 2524 root / usr / bin / NetworkManager --no-daemon
4026532369 mnt 2 267304 root nginx: master process / usr / bin / nginx -g pid /run/nginx.pid
4026532557 mnt 1 892 colord / usr / lib / colord

A kiedy już masz identyfikator procesu, możesz zobaczyć jego tabelę montowania za pomocą:

$ sudo findmnt --tab = / proc / 267304 / mountinfo

(Zawsze powinieneś używać /proc/$PID/mountinfopliku, ponieważ zawiera on nieco więcej informacji niż mountslub / etc / mtab. Na przykład opisuje on faktyczną hierarchię, gdy montowania nakładają się w nieoczekiwany sposób, i dokładniej zgłasza „źródło” montowania wiązania gdy jest to plik lub podkatalog).

Jeśli chodzi o jedno narzędzie, które po prostu pokazuje, jakich wierzchowców „brakuje” w głównej przestrzeni nazw - nie znam żadnego. (W tej chwili nie ma tu coreutils ani util-linux, choć napisanie jednego nie powinno być trudne, jeśli pozwolisz mu się przekopać / proc.)

grawitacja
źródło
Hmmm okazuje się, że za każdym razem, gdy uruchamiam Firefoksa, moja wersja lsns nic nie wyświetla. Od tego czasu zastąpiłem to innym lsns z github z Linuksa.
munchkin