Debian如何在
如何在/proc/1/ns/{ns}
中查看設備的設備號?
如何查看設備的設備號
/proc/1/ns/{ns}
?我已經閱讀了 Go 庫的程式碼(見下文),其中指出可以確定容器是否在主機命名空間中:未命名空間的設備號
/proc/1/ns/{ns}
是 4,其他任何東西都更高。現在,在沒有使用者命名空間或 cgroup 的新 Debian 容器中,我執行以下命令:
root@54d74f795843:/# ls -la /proc/1/ns total 0 dr-x--x--x 2 root root 0 Feb 29 17:18 . dr-xr-xr-x 9 root root 0 Feb 29 17:18 .. lrwxrwxrwx 1 root root 0 Feb 29 17:18 cgroup -> 'cgroup:[4026531835]' lrwxrwxrwx 1 root root 0 Feb 29 17:18 ipc -> 'ipc:[4026532290]' lrwxrwxrwx 1 root root 0 Feb 29 17:18 mnt -> 'mnt:[4026532288]' lrwxrwxrwx 1 root root 0 Feb 29 17:18 net -> 'net:[4026532293]' lrwxrwxrwx 1 root root 0 Feb 29 17:18 pid -> 'pid:[4026532291]' lrwxrwxrwx 1 root root 0 Feb 29 17:18 user -> 'user:[4026531837]' lrwxrwxrwx 1 root root 0 Feb 29 17:18 uts -> 'uts:[4026532289]'
**這裡的 4026531837 是什麼
'user:[4026531837]'
意思?**我不能是設備號,因為容器使用與主機相同的使用者命名空間(我已經驗證過)。如何列出文件的設備號
/proc/1/ns/{ns}
?該ls -la
命令顯示這些文件是符號連結,那麼它們怎麼會有設備號呢?amicontained/供應商/github.com/jessfraz/bpfd/proc/proc.go/
// HasNamespace determines if a container is using a particular namespace or the // host namespace. // The device number of an unnamespaced /proc/1/ns/{ns} is 4 and anything else is // higher. // Only works from inside a container. func HasNamespace(ns string) (bool, error) { file := fmt.Sprintf("/proc/1/ns/%s", ns) // Use Lstat to not follow the symlink. var info syscall.Stat_t if err := syscall.Lstat(file, &info); err != nil { return false, &os.PathError{Op: "lstat", Path: file, Err: err} } // Get the device number. If it is higher than 4 it is in a namespace. if info.Dev > 4 { return true, nil } return false, nil }
‘user: 中的 4026531837 是什麼意思?
$$ 4026531837 $$‘意思是這裡?
這些數字是文件系統實現的文件的 inode 編號,
nsfs
可以打開並使用它們將setns(2)
程序與命名空間相關聯。如何列出文件 /proc/1/ns/{ns} 的設備號?
根據 systemd 問題討論(通過 /proc/1/sched 進行虛擬化檢測不再適用於 Linux 4.14+):
在我可以測試的系統上(核心 4.15.1 的 Arch、核心 4.9.65 的 Debian Jessie 和核心 4.13.0 的 Ubuntu Artful),未命名空間的設備號
/proc/1/ns/pid
似乎總是 4,而在 PID 命名空間中它是一個不同的、更高的數字,顯然與(PID?)命名空間的數量有關。您可以使用以下命令進行嘗試:stat --format %d /proc/1/ns/pid 4 sudo unshare --pid --fork --mount-proc stat --format %d /proc/1/ns/pid 36