我從 bash shell 腳本建立一個資料夾並將 mysqldump 儲存在其中。我確信我的腳本中沒有與權限相關的命令。為了允許其他使用者存取這些文件,我使用了 ACL,但是當他嘗試存取該文件時,他遇到了權限被拒絕的問題,問題出在effective
ACL 的權限上。
目錄的擁有者是ola
,嘗試存取該資料夾的新使用者是,uber
資料夾是gettaxi
父親目錄的權限
[/omega/olabooktmp]# getfacl .
# file: .
# owner: ola
# group: ola
user::rwx
user:uber:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
子目錄的權限
[/omega/olabooktemp]# getfacl gettaxi/
# file: gettaxi/
# owner: ola
# group: ola
user::rwx
user:uber:rwx #effective:---
group::r-x #effective:---
mask::---
other::---
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
我看到新的目錄gettaxi
遮罩權限是mask::---
,所以我認為這導致了問題,但我無法完全理解以及如何解決這個問題。
任何建議都非常感謝。
謝謝。
答案1
您可以使用以下命令變更遮罩:
setfacl -m m:rwx filename/directory
答案2
如果我很好地理解你的問題,使用者ola
正在目錄中建立檔案:/omega/olabooktmp/gettaxi
並且您想要限制對這些文件的訪問,但向使用者授予訪問權限uber
。
註:/omega/olabooktmp/gettaxi
擁有者為ola
讓我們在沒有 ACL 的情況下開始:
ls -ld /omega/olabooktmp/gettaxi
drwxr-x--- 2 ola ola 4096 mars 21 08:16 /omega/olabooktmp/gettaxi
為了授予使用 ACL 的rwx
權限uber
,您可以使用:
setfacl -m u:uber:rwx,d:u:uber:rwX,o:--- /omega/olabooktmp/gettaxi
這將允許用戶對資料夾的權限uber
,並且還授予和。它授予對資料夾中先前存在的檔案的權限,並向檔案授予繼承的授權。當然,也要刪除其他所有權限以進行限制。所有者仍然擁有自己的許可證。rwx
/omega/olabooktmp/gettaxi
rwx
default
d:
X
other
結果:
getfacl /omega/olabooktmp/gettaxi
getfacl: Removing leading '/' from absolute path names
# file: omega/olabooktmp/gettaxi
# owner: ola
# group: ola
user::rwx
user:uber:rwx
group::r-x
mask::rwx
other::---
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::---
測試:
ola
建立一些檔案(以 root 身分執行):
su - ola -c "for i in {1..3}; do date > /omega/olabooktmp/gettaxi/$RANDOM; done"
結果:
ls -l /omega/olabooktmp/gettaxi/
total 32
-rw-r----- 1 ola users 32 mars 21 08:43 17606
-rw-r----- 1 ola users 32 mars 21 08:43 22286
-rw-r----- 1 ola users 32 mars 21 08:42 31484
-rw-r----- 1 ola users 32 mars 21 08:43 31848
-rw-r----- 1 ola users 32 mars 21 08:42 667
-rw-r----- 1 ola users 4 mars 21 08:16 one
-rw-r----- 1 ola users 6 mars 21 08:16 three
-rw-r----- 1 ola users 4 mars 21 08:16 two
普通用戶無法存取(以 root 身分運行):
su - debian -c "ls -l /omega/olabooktmp/gettaxi"
ls: cannot open directory '/omega/olabooktmp/gettaxi': Permission denied
但 uber 可以(以 root 身分運行):
su - uber -c "ls -l /omega/olabooktmp/gettaxi"
total 32
-rw-r----- 1 ola users 32 Mar 21 08:43 17606
-rw-r----- 1 ola users 32 Mar 21 08:43 22286
-rw-r----- 1 ola users 32 Mar 21 08:42 31484
-rw-r----- 1 ola users 32 Mar 21 08:43 31848
-rw-r----- 1 ola users 32 Mar 21 08:42 667
-rw-r----- 1 ola users 4 Mar 21 08:16 one
-rw-r----- 1 ola users 6 Mar 21 08:16 three
-rw-r----- 1 ola users 4 Mar 21 08:16 two
如果您透過某些測試破壞了 ACL,則可以使用下列命令刪除所有 ACL:
setfacl -R -b /omega/olabooktmp/gettaxi
並重新開始。
答案3
是的,面具正在降低權限。有效權限是權限和遮罩的和。 (user::
(擁有用戶),且other
不受遮罩影響)。
您可以使用以下命令更改遮罩:例如setfacl -m m:r-x file-name
。
當您執行 a 時ls -l
,如果模式以 a 結尾+
,則中間模式位元(傳統上為組位)就是遮罩。
有時,模式位元會根據 中的組位進行設定umask
。我還沒有製定關於何時發生這種情況以及何時使用預設遮罩的規則。用於cp
複製文件,似乎使用umask
.
解決方法
確保使用者有自己的群組,並且將其設定為預設群組。然後將umask
設為 007
。
答案4
我懷疑這種行為是個錯誤。我上個月發布了此內容(請參閱 unix.stackexchange.com/questions/570795)。發生的情況是 cp 指令將來源檔案的檔案權限複製到 acl 遮罩中。這是我對 cp -p 的期望,而不是 cp。我發現我可以使用 cat 進行複製
cat afile > bfile
或透過焦油管道
(cd A; tar -cf -)|(cd B; tar-xf -)
並且 acls 按預期受到尊重。
我還懸賞以解釋這種 cp 行為。沒有人解釋一下。我正在考慮提交錯誤報告。也就是說,這應該是「cp -p」行為,而不是普通的 cp 行為。 (而且沒人能回答,系統卻扣掉了懸賞分。我也很驚訝。)