Permissions

在 Linux 上獲取新文件以繼承組權限

  • December 4, 2020

我在 Linux 伺服器上遇到權限問題。我習慣了BSD。當一個目錄由一個組擁有時,擁有它的使用者不在 www-data 中,在其中創建的文件將歸該組所有。這很重要,因為我希望網路伺服器可以讀取文件(我不會以 root 身份執行),但使用者仍然可以將新文件放入目錄中。我不能將使用者放在 www-data 中,因為這樣他們就可以閱讀所有其他使用者的網站。

我希望網路伺服器能夠讀取所有網站,我希望使用者能夠更改自己的。

目前在文件夾上設置的權限是這樣的……

drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john

以這種方式工作的權限是 BSD 上的標準行為。我如何讓 Linux 做到這一點?

聽起來您正在描述setgid 位功能,當設置了它的目錄時,將強制在其中創建的任何新文件將其組設置為與父目錄上設置的組相同的組。

例子

$ whoami
saml

$ groups
saml wheel wireshark

設置具有 perms + 所有權的目錄

$ sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ sudo chown saml.apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml apache 4096 Feb 17 20:10 somedir/

在此目錄中以 saml 形式觸摸文件

$ whoami
saml

$ touch somedir/afile
$ ll somedir/afile 
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile

這將為您提供您想要的大致聲音。如果您確實想要您所描述的內容,我認為您需要藉助訪問控制列表功能來獲得它(ACL)。

ACL

如果您想更好地控制在目錄下創建的文件的權限somedir,您可以添加以下 ACL 規則來設置預設權限,如下所示。

$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir

設置權限

$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/

請注意+末尾的 ,這意味著該目錄已應用 ACL。

$ getfacl somedir
# file: somedir
# owner: saml
# group: apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:apache:r-x
default:mask::r-x
default:other::---

$ touch somedir/afile
$ ll somedir/afile 
-rw-r-----+ 1 saml apache 0 Feb 17 21:27 somedir/afile
$ 

$ getfacl somedir/afile
# file: somedir/afile
# owner: saml
# group: apache
user::rw-
group::r-x              #effective:r--
group:apache:r-x        #effective:r--
mask::r--
other::---

請注意預設權限 ( setfacl -Rdm) 設置,以便權限r-x預設為 ( ) ( g:apache:rx)。這會強制任何新文件只r啟用它們的位。

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