Linux

使只讀 /etc 可寫

  • September 29, 2016

我正在處理執行 Linux 的嵌入式設備。該設備的製造商對其進行了設置,以便將根文件系統載入為只讀。

從 /etc/mtab:

rootfs / rootfs rw 0 0
/dev/root / squashfs ro,relatime 0 0

這意味著我無法修改 /etc 中的任何文件,例如添加新使用者。

我試過重新掛載根目錄:

mount -o remount,rw -t squashfs /dev/root /

但我只是得到一個錯誤

mount: cannot remount block device /dev/root read-write, is write-protected

我查了這個錯誤,人們說要使用 blockdev。系統沒有安裝blockdev,所以我交叉編譯並複制它。然後我跑了

blockdev --setrw rootfs

但我又遇到了一個錯誤:

blockdev: cannot open rootfs: No such file or directory

如果還沒有,是否可以使 /etc 可寫?我對系統具有 root 訪問權限,但我無法“離線”訪問文件系統,所有更改都必須通過 Bash 命令完成。

squashfs是一個只讀的壓縮文件系統。它沒有規定在創建後對其進行修改。因此,即使可以使底層塊設備可寫,您也無法對其進行寫入。您需要使用您的修改創建整個文件系統的新 squashfs 映像,並將其刻錄到儲存該文件系統的儲存設備,這在實時系統中會出現問題。

另一種選擇是在/etc. 如果核心支持,它可以通過聯合掛載,它通常將兩個文件系統合併在一起,一個文件系統只記錄對基本只讀文件系統的更改。

檢查核心配置中對 AUFS_FS 或 OVERLAY_FS 的支持。

例如,如果系統沒有永久可寫儲存,則在您的情況下聯合掛載一個目錄/tmp(希望可寫,儘管可能在記憶體中(因此在重新啟動時不會持久))tmpfs

mkdir -p /tmp/etc/work /tmp/etc/upper
mount -t overlay \
     -o lowerdir=/etc,upperdir=/tmp/etc/upper,workdir=/tmp/etc/work \
      overlay /etc

然後/etc將是可寫的,您對其所做的修改實際上將儲存在/tmp/etc/upper.

或者,如果您只想修改幾個文件,您可以從儲存在可寫文件系統中的版本綁定安裝它們(是的,您可以安裝在任何文件上,而不僅僅是目錄):

cp /etc/passwd /tmp
mount --bind /tmp/passwd /etc/passwd

然後/etc/passwd將是可寫的。當然,您也可以對整個 of 執行此操作/etc。( cp -a /etc /tmp && mount --bind /tmp/etc /etc)。

引用自:https://unix.stackexchange.com/questions/313124