Linux下挂载QNAP NFS 共享权限异常处理
前言
在Linux 上掛載QNAP的NFS共享且啟用ACL可能會遇到ROOT用戶正常,但非ROOT用戶卻有時能讀寫,有時又不能讀寫的情況.
現象
- root 用戶正常讀寫
- non-root 用戶開始正常,一會兒又不能讀寫
- non-root 用戶能複製文件進去,但無法編輯
- non-root 用戶 touch 文件時會提示
touch: setting times of `xxx': Permission denied
或直接顯示Permission denied
- 使用
ll
可以看到有問題的文件的權限為----rw-r-+
這也就是這個最神奇的地方,owner是沒有權限的!
處理
因為是時好時壞,所以走了很多彎路,一直在client/server的參數上調試,甚至在client/server上面建立了相同uid/gid的user/group.結果是白廢功夫.
最后發現是共享目錄的ACL是不正常的才導致
[/share/Backup] # getfacl SS
# file: SS
# owner: nfsbackup
# group: 501
user::---
group::rwx
other::rwx
default:user::---
default:user:bonne:rwx
default:user:1003:rwx
default:user:guest:---
default:group::rwx
default:group:administrators:rwx
default:mask::rwx
default:other::---
上面有個uid 1003是因為QNAP界面上建立的用戶和組是從1000開始的,而我的linux 上是500我就改了用戶的id,導致這里認不到了.同樣group 501是因為NAS上沒有gid為501的group.
重點在于default:user::---
代表新建的內容owner是沒權限的.
在NAS上重設權限,然後就好了
setfacl -d -m u::rwx XXX
相關命令
getfacl
讀取ACL
setfacl
設定ACL
usermod
用戶修改,改uid的用
groupmod
QNAP上不能用,修改群組
NFS 配置中的權限壓縮
all_squash/root_squash/no_root_squash
all_squash
:不管nfs client上是哪個用戶,在server上都降級為anonymous
root_squash
:只有nfs client上是root時,在server上降級為anonymous
no_root_squash
:nfs client上是root時,在server側也是root.
簡單來說:
一對一分享,就用no_root_squash
一對多一般用root_squash
,這樣clientA上的root就動不了ClientB放上去的東西
all_squash
一般要配合anonuid/anongid
來用,這樣不管client用戶是誰在server側都是相同的身份