解決方法

解決方法

我從 bash shell 腳本建立一個資料夾並將 mysqldump 儲存在其中。我確信我的腳本中沒有與權限相關的命令。為了允許其他使用者存取這些文件,我使用了 ACL,但是當他嘗試存取該文件時,他遇到了權限被拒絕的問題,問題出在effectiveACL 的權限上。

目錄的擁有者是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/gettaxirwxdefaultd:Xother

結果:

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 行為。 (而且沒人能回答,系統卻扣掉了懸賞分。我也很驚訝。)

相關內容