Ubuntu

如何為任何 linux 機器製作具有完全 RW 權限的 ext4 格式的 USB 驅動器?

  • September 14, 2018

我想將我的 USB 記憶棒格式化ext4並像使用任何其他典型的非 Linux 格式驅動器(、、、FAT32exFAT一樣使用NTFS

也就是說,我希望能夠將 U 盤插入我的任何一台 linux 機器,並對其進行讀/寫,而無需調整權限,例如做chmod或其他chown事情。

我更喜歡使用 GParted 之類的 GUI 分區軟體,而不是命令行命令,儘管我歡迎任何解決方案!

我確信這樣的文章對某些人來說是重複的旗幟天堂,但是在瀏覽了 6~10 個 SO 和Google的論壇文章之後,我沒有找到一個簡單的解決方案來解決我的問題。似乎一切都是關於在每個使用者的基礎上調整權限。也許您只是無法使用ext4NTFS.

與任何 Unix 風格的文件系統一樣,ext4 包括標準的 Unix 文件所有權和權限約定。也就是說,使用者由一個 UID 號標識,每個使用者將屬於一個或多個組,每個組由其 GID 號標識。每個文件都有一個所有者 UID 和一個組所有者 GID。三個經典的 Unix 文件權限集是:

  • 所有者的一組權限,由所有者的 UID 號標識
  • 組所有者的一組權限,由組的 GID 號標識
  • 其他所有人的一組權限

為了能夠在不需要調整權限的情況下訪問記憶棒,您必須確保在記憶棒上創建的任何文件和目錄都將自動具有非限制性權限。問題是,對創建的任何新文件的權限都由該umask值控制……並且您真的不想繼續將其更改000為在 USB 記憶棒上創建文件並恢復為預設值(通常為002022)以供正常使用. 一個錯誤可能會導致您創建具有廣泛權限的重要配置文件,這可能會危及您的使用者帳戶的安全性或導致其他更小的問題。

如果您可以確保您的普通使用者的 UID 號在所有 Linux 系統中都相同,並且您只關心該使用者的訪問權限(當然還有 root 使用者),那麼您只需將 USB 記憶棒格式化為 ext4 就可以了,第一次掛載它,並在開始使用文件系統之前將其根目錄的所有權分配給您的正常使用者帳戶。

假設這/dev/sdX1是您希望在其中創建文件系統的 USB 記憶棒分區,並且<username>是您的使用者名,您可以在設置 USB 記憶棒以供使用時執行此操作:

sudo mkfs.ext4 /dev/sdX1
sudo mount /dev/sdX1 /mnt
sudo chown <username>: /mnt
sudo umount /mnt

但是如果你不能保證匹配 UID/GID 號碼,和/或有多個使用者可能想要使用 U 盤,你需要做一些更複雜的事情,但在創建 ext4 後仍然是一次性操作棒上的文件系統。

我們需要在 U 盤文件系統的根目錄上設置一個預設 ACL,為任何新文件或目錄上的每個人分配完全訪問權限。並且為了確保在啟用 ACL 支持的情況下掛載儲存棒,我們需要使用tune2fs來調整儲存在文件系統元數據中的預設掛載選項。

sudo mkfs.ext4 /dev/sdX1
sudo tune2fs -o acl /dev/sdX1
sudo mount /dev/sdX1 /mnt
sudo chown <username>: /mnt
chmod 777 /mnt
setfacl -m d:u::rwx,d:g::rwx,d:o::rwx /mnt
sudo umount /mnt

假設您的所有系統都支持 ext4 文件系統上的 ACL,並且您可能使用的任何可移動媒體安裝工具都不會選擇忽略acl安裝選項,那麼您現在應該有一個 USB 記憶棒,在上面創建的所有文件都將具有權限-rw-rw-rw-和所有創建的子目錄將是drwxrwxrwx+. 加號表示子目錄將有一個 ACL:為棒的根目錄配置的自定義預設權限集也將被子目錄繼承,並且它們的行為相同。

所有者 UID/GID 仍將匹配在文件系統上創建文件的使用者的 UID 和主 GID,但由於放寬了文件和目錄權限,這應該不是什麼大問題。

我可能預料到的唯一問題是,將文件複製到 USB 記憶棒預設情況下會嘗試複製原始文件的文件權限,在這種情況下您不希望這樣做。

例如,如果您在系統 A 上創建一個具有 -rw-r–r– 權限的文件並將其複製到記憶棒,然後將記憶棒移動到具有不匹配 UID 號的系統 B。您仍然可以在系統 B 上讀取文件,但如果不先明確刪除或重命名原始文件,則無法在記憶棒上覆蓋它。但是你可以這樣做,只要你對文件所在的目錄有寫權限。

這實際上可能是一個有用的功能:如果您在多個系統上修改同一個文件,這將推動您每次保存文件的新版本,而不是覆蓋一個真實文件……如果文件很重要,那可能實際上是一件好事。

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