linux下使用mount來掛載目錄或磁碟,我們一般會使用這樣的指令
意思是將磁碟分割 /dev/sdc1 指定掛載到 /home/hdd 這個目錄,簡單的操作可以參考[2]。
掛載完畢後,切換到 /home/hdd 這個目錄,其餘他是使用了另一個磁區 /dev/sdc1,而且他是屬於 root 的
如果這個磁區的檔案類型和你的系統一樣的話(例如 ext3, ext4, xfs),你可以使用 chmod, chcon, chgrp, chown 等指令去修改權限沒有任何問題。
但假設你掛載的檔案類型不是linux的類型的話,上面修改權限的指令將不會有任何作用,假設 /home/hdd 不是linux常見的檔案類型,而是例如常見的 cifs、nfs 類型。
<結果是能跑完不會有任何錯誤,但是結果是完全沒有用>
換句話說,就是使用者和群組並不會改變成為 user
此外,Centos上還有 selinux的機制,要是沒被關掉的話,可能還會有selinux導致權限的問題。
使用 -o參數來指定權限及context
使用 mount 指令時,可以加上 -o 來指定 selinux 的 context,例如:
上面的指令中defcontext指定沒有selimux標籤的檔案會給予預設的selinux權限[4],原則上對於非linux相關的檔案類型的話,也可以用 context=,兩者是等義。
mount只是暫時的,在重開機後就消失,希望能永久掛載的話,可以修改 /etc/fstab
修改 /etc/fstab 來解決掛載後的權限問題
假設我要把 nas 掛載後指令給 apache (uid=48),同時也要指定selinux 的context,另外要掛載後能讀寫,並且目錄具有 讀寫的權限
修改 /etc/fstab,加入以下內容:
上面把nas(192.168.1.20)掛載上 /path/to/uploads 的目錄,nas的檔案型態是cifs。登入nas的帳密就寫在後面
uid=48 指定目錄的擁有者是 apache, 適應給selinux的內容作為apache可讀寫。
這裡要注意的是 rw 是指掛載完後可以讀寫這個目錄,如果沒有指定uid,預設會是 root(uid=0),如此這個目錄只有root可以讀寫。你也可以把他指定成777,像這樣[5]:
├── dir_mode=0777 目錄可讀寫,要注意這和 dmask 不一樣,dmask在cifs中是無效的
└── file_mode=0666 檔案可讀寫
錯誤排除
沒有檔案 mount.cifs 的話,請安裝 mount.cifs檔案:
# dnf install cifs-utils