Container Station - Ubuntu 系統磁碟裝置 - 驚人發現

我正在嘗試在 Linux 容器中做一些事情,但遇到了一些困難,也發現了一些令人驚訝的結果。

我想要找出 /dev 中作為安裝系統磁碟的裝置。然而,當我執行像 lsblk 這樣的指令時,我居然看到 NAS 上的所有磁碟!

首先,我原本以為容器安裝應該是和 NAS 其他部分「隔離」的。事實並非如此。看起來你無法從 NAS 端存取容器,但你卻能從容器存取 NAS 的其他部分。這真的很令人不安。

第二,掛載點從來沒有被列出。

root@45217fe699b0:/# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
loop0         7:0    0    64M  1 loop  
sda           8:0    0   1.8T  0 disk  
|-sda1        8:1    0 517.7M  0 part  
| `-md9       9:9    0 517.6M  0 raid1 
|-sda2        8:2    0 517.7M  0 part  
|-sda3        8:3    0   1.8T  0 part  
|-sda4        8:4    0 526.6M  0 part  
| `-md13      9:13   0 448.1M  0 raid1 
`-sda5        8:5    0  31.5G  0 part  
  `-md322     9:322  0  30.4G  0 raid1 [SWAP]
sdb           8:16   0   1.8T  0 disk  
|-sdb1        8:17   0 517.7M  0 part  
| `-md9       9:9    0 517.6M  0 raid1 
|-sdb2        8:18   0 517.7M  0 part  
|-sdb3        8:19   0   1.8T  0 part  
|-sdb4        8:20   0 526.6M  0 part  
| `-md13      9:13   0 448.1M  0 raid1 
`-sdb5        8:21   0  31.5G  0 part  
  `-md322     9:322  0  30.4G  0 raid1 [SWAP]
sdc           8:32   0   9.1T  0 disk  
|-sdc1        8:33   0 517.7M  0 part  
| `-md9       9:9    0 517.6M  0 raid1 
|-sdc2        8:34   0 517.7M  0 part  
|-sdc3        8:35   0   9.1T  0 part  
|-sdc4        8:36   0 526.8M  0 part  
| `-md13      9:13   0 448.1M  0 raid1 
`-sdc5        8:37   0  31.5G  0 part  
  `-md322     9:322  0  30.4G  0 raid1 [SWAP]
sdd           8:48   0   9.1T  0 disk  
|-sdd1        8:49   0 517.7M  0 part  
| `-md9       9:9    0 517.6M  0 raid1 
|-sdd2        8:50   0 517.7M  0 part  
|-sdd3        8:51   0   9.1T  0 part  
|-sdd4        8:52   0 526.8M  0 part  
| `-md13      9:13   0 448.1M  0 raid1 
`-sdd5        8:53   0  31.5G  0 part  
  `-md322     9:322  0  30.4G  0 raid1 [SWAP]
sde           8:64   0   9.1T  0 disk  
|-sde1        8:65   0 517.7M  0 part  
| `-md9       9:9    0 517.6M  0 raid1 
|-sde2        8:66   0 517.7M  0 part  
|-sde3        8:67   0   9.1T  0 part  
|-sde4        8:68   0 526.8M  0 part  
| `-md13      9:13   0 448.1M  0 raid1 
`-sde5        8:69   0  31.5G  0 part  
  `-md322     9:322  0  30.4G  0 raid1 [SWAP]
sdf           8:80   0   9.1T  0 disk  
|-sdf1        8:81   0 517.7M  0 part  
| `-md9       9:9    0 517.6M  0 raid1 
|-sdf2        8:82   0 517.7M  0 part  
|-sdf3        8:83   0   9.1T  0 part  
|-sdf4        8:84   0 526.8M  0 part  
| `-md13      9:13   0 448.1M  0 raid1 
`-sdf5        8:85   0  31.5G  0 part  
  `-md322     9:322  0  30.4G  0 raid1 [SWAP]
sdg           8:96   1   1.8T  0 disk  
|-sdg1        8:97   1 517.7M  0 part  
| `-md9       9:9    0 517.6M  0 raid1 
|-sdg2        8:98   1 517.7M  0 part  
|-sdg3        8:99   1   1.8T  0 part  
|-sdg4        8:100  1 526.6M  0 part  
| `-md13      9:13   0 448.1M  0 raid1 
`-sdg5        8:101  1  31.5G  0 part  
  `-md322     9:322  0  30.4G  0 raid1 [SWAP]
sdh           8:112  1 931.5G  0 disk  
|-sdh1        8:113  1 517.7M  0 part  
| `-md9       9:9    0 517.6M  0 raid1 
|-sdh2        8:114  1 517.7M  0 part  
|-sdh3        8:115  1   898G  0 part  
|-sdh4        8:116  1 526.2M  0 part  
| `-md13      9:13   0 448.1M  0 raid1 
`-sdh5        8:117  1  31.5G  0 part  
  `-md322     9:322  0  30.4G  0 raid1 [SWAP]
sdi           8:128  0 372.6G  0 disk  
|-sdi1        8:129  0   200M  0 part  
`-sdi2        8:130  0 372.3G  0 part  
sdj           8:144  1   4.6G  0 disk  
|-sdj1        8:145  1   5.1M  0 part  
|-sdj2        8:146  1 488.4M  0 part  
|-sdj3        8:147  1 488.4M  0 part  
|-sdj4        8:148  1     1K  0 part  
|-sdj5        8:149  1   8.1M  0 part  
|-sdj6        8:150  1   8.5M  0 part  
`-sdj7        8:151  1   2.7G  0 part  
sdk           8:160  0  10.9T  0 disk  
`-sdk1        8:161  0  10.9T  0 part  
sdl           8:176  0   1.8T  0 disk  
`-sdl1        8:177  0   1.8T  0 part  
nbd0         43:0    0     0B  0 disk  
nbd1         43:32   0     0B  0 disk  
nbd2         43:64   0     0B  0 disk  
nbd3         43:96   0     0B  0 disk  
nbd4         43:128  0     0B  0 disk  
nbd5         43:160  0     0B  0 disk  
nbd6         43:192  0     0B  0 disk  
nbd7         43:224  0     0B  0 disk  
fbsnap0     250:0    0     0B  0 disk  
fbsnap1     250:1    0     0B  0 disk  
fbsnap2     250:2    0     0B  0 disk  
fbsnap3     250:3    0     0B  0 disk  
fbsnap4     250:4    0     0B  0 disk  
fbsnap5     250:5    0     0B  0 disk  
fbsnap6     250:6    0     0B  0 disk  
fbsnap7     250:7    0     0B  0 disk  
fbdisk0     251:0    0     0B  0 disk  
fbdisk1     251:1    0     0B  0 disk  
fbdisk2     251:2    0     0B  0 disk  
fbdisk3     251:3    0     0B  0 disk  
fbdisk4     251:4    0     0B  0 disk  
fbdisk5     251:5    0     0B  0 disk  
fbdisk6     251:6    0     0B  0 disk  
fbdisk7     251:7    0     0B  0 disk  
nvme1n1     259:0    0   1.8T  0 disk  
|-nvme1n1p1 259:1    0 517.7M  0 part  
| `-md9       9:9    0 517.6M  0 raid1 
|-nvme1n1p2 259:2    0 517.7M  0 part  
|-nvme1n1p3 259:3    0   1.8T  0 part  
|-nvme1n1p4 259:4    0 526.6M  0 part  
| `-md13      9:13   0 448.1M  0 raid1 
`-nvme1n1p5 259:5    0  31.5G  0 part  
  `-md321     9:321  0  30.4G  0 raid1 [SWAP]
nvme0n1     259:6    0   1.8T  0 disk  
|-nvme0n1p1 259:7    0 517.7M  0 part  
| `-md9       9:9    0 517.6M  0 raid1 
|-nvme0n1p2 259:8    0 517.7M  0 part  
|-nvme0n1p3 259:9    0   1.8T  0 part  
|-nvme0n1p4 259:10   0 526.6M  0 part  
| `-md13      9:13   0 448.1M  0 raid1 
`-nvme0n1p5 259:11   0  31.5G  0 part  
  `-md321     9:321  0  30.4G  0 raid1 [SWAP]
nbd8         43:256  0     0B  0 disk  
nbd9         43:288  0     0B  0 disk  
nbd10        43:320  0     0B  0 disk  
nbd11        43:352  0     0B  0 disk  
nbd12        43:384  0     0B  0 disk  
nbd13        43:416  0     0B  0 disk  
nbd14        43:448  0     0B  0 disk  
nbd15        43:480  0     0B  0 disk  
root@45217fe699b0:/# 

第三,更令人不安的是。昨天我在 Alpine 容器裡嘗試做我要的事。我想要重啟 Alpine 實例,所以我輸入了這個指令:

echo "b" > /proc/sysrq-trigger

結果是整台 NAS 都重開機了!

這真的很可怕。這代表如果有惡意人士取得 Linux 容器的存取權,他們可以搞亂整個系統。這完全不是容器應該有的行為!


我是不是完全搞錯了?

但我們現在討論的是 LXC,不是 Docker,對吧?

不。LXC 是我嘗試安裝 CentOS 的地方,但我無法弄清楚如何登入。

Alpine 和 Ubuntu 都是 Docker,並且都暴露了整個 NAS 檔案系統。

你給了他們什麼權限?

如果你在 compose 中設定,你可以為容器掛載各種資源。

我在 compose 裡什麼都沒設定。我是用 Container Station 的「部署」功能來部署那個容器。我把特權模式(privileged mode)開啟,因為我需要 root 權限。最初在 Alpine 裡沒這麼做,導致無法執行 root 指令。

基本上,我正在嘗試用 Mikrotik 的 RouterOS 在容器裡做測試。我需要用 RouterOS 取代 Linux 作業系統。我之前已經在遠端 VPS 上做過這件事,但現在想在本地測試一些東西。

想知道那個容器是否預設使用綁定掛載(bind mounts)

看起來確實如此。不幸的是,使用 QNAP 預設的「部署」選項時,無法編輯或存取 YAML。他們真的應該讓大家知道這一點。

昨天我以為自己在重新啟動 Alpine 實例,結果卻重啟了整台 NAS,這讓我嚇了一跳。我還擔心自己會把 NAS 上的 Linux 系統也覆蓋掉,幸好並沒有發生這種事。

我想我可以試著用 Compose 設定一個容器。對於 Linux 安裝來說,我本來擔心這會太複雜,所以才選擇直接「部署」。

我會將此問題轉交給我們的內部團隊進一步分析。感謝您的回報!

你不能在 virtual station 裡面把 routerOS 安裝成 VM 嗎?你應該可以在這裡下載 iso 檔案

https://download.mikrotik.com/routeros/7.20.7/mikrotik-7.20.7.iso

除非你特別需要用 docker 來執行?

我甚至沒想到可以把它安裝成真正的虛擬機(VM)。我之前不知道這是可行的。我一直在嘗試建立某種「Linux」然後安裝RouterOS。我找到了一些Docker套件,但它們的行為都有點奇怪。我有一個正在運行,但它加了一種我無法控制的額外NAT,導致運作變得很奇怪。

我想我會試試你的方法……

好的。再次感謝你!這真的很完美。我能夠做我需要的所有測試。

太棒了,很高興事情順利解決

1個讚

經過內部驗證,我們已確認此情況是由啟用特權模式(Privileged Mode)所導致,因此屬於預期行為。

我們團隊將持續完善有關特權模式(Privileged Mode)的說明和指引,以便未來能提供更清楚的資訊。感謝您的回饋!

所以你們這樣做有以下問題:

1.) 你可能希望擁有 Linux 容器的 root 權限,但又不想將整個 QNAP 硬碟和儲存空間暴露給容器。

2.) 我發送的重啟容器指令絕不應該導致 NAS 重新啟動。

運行任何東西在容器中的目的就是要讓它與主系統隔離。現在這樣的設計是一個巨大的安全風險。

1個讚