授予其他使用者檔案的群組權限

授予其他使用者檔案的群組權限

我正在使用 Debian 7 並建立了一個新使用者(網站),其 htdocs 目錄如下:

$ sudo adduser website
$ sudo mkdir -p /home/website/htdocs
$ sudo chown -R website /home/website

現在我希望另一個群組(開發人員)的使用者能夠存取該使用者的目錄。我努力了:

$ sudo chown -R :developers /home/website

我可以看到該群組已分配(使用ls -lastat)並且使用者位於該群組中,但他們沒有存取權限?

drwxr-xr-x     3     website     developers     4096 May 3 09:09     website

我也想:

  • 允許另一組「承包商」存取網站文件

  • 限制網站使用者僅存取其主目錄

  • 確保新的網站檔案繼承這些權限

您是否必須使用存取控制清單 - 或者是否有更好的方法來執行此操作(例如不對每個網站使用單獨的使用者)?

答案1

在不了解作業系統或分佈的情況下很難給出精確的命令;是的! ACL 可以運作,但也有一個標準方法。

adduseruseradd,您的發行版上的其中之一可能會自動建立使用者的主目錄。如果是這樣,那麼目錄的內容/etc/skel/將複製到使用者的主目錄中,設定權限,並且可能會執行一些其他適當的操作。

可能存在預先定義的共享群組,例如「工作人員」;但是,如果我們想創建自己的群組進行共享,那也沒有什麼問題。因此,建立一個新群組或使用現有群組。確保已使用 、 或根據作業系統定義了要成為該群組成員usermodmoduser使用者vigr。目前登入的每個使用者都必須登出並重新登入才能成為新群組的成員。

建立一個對所有使用者通用的目錄,例如/home/share_directory/或任何其他對您的情況最有意義的目錄。相關的最佳實踐是不使用目錄之內任何使用者的主目錄。如果除了所有者和群組之外沒有人能夠看到該目錄中的文件,則將該目錄的權限更改為0770。 。

chown root:group_name /home/share_directory/

接下來,更改 setuid 位元。

chmod +s /home/share_directory/

如果沒有使用者應該能夠修改另一個使用者的文件,那麼也要設定黏位。

chmod +t /home/share_directory/

這些範例使用以下命令同時設定 setuid 和黏性位八進位表示法

chmod 5775 /home/share_directory/

或者

chmod 5770 /home/share_directory/

對於更新的問題,ACL 似乎是正確的工具。現在大多數 Linux 發行版都acl在選項中包含了該選項defaults。如果您的發行版預設不包含該acl選項,那麼需要做一些工作才能開始使用它。首先使用acl/etc/fstab 中的選項掛載檔案系統。

sudo vim /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,acl 0 1

如有需要,重新掛載檔案系統:sudo mount -o remount,acl /。然後為此目的建立一個使用者可能所屬的群組。您可能還需要安裝 ACL 工具:apt-get install acl

sudo groupadd developers
sudo usermod -a -G developers $username

(或者該群組可能是「承包商」。)目前登入的使用者必須登出並再次登入才能成為新群組的成員。當然,如果您想保留 /var/www 目錄中的內容,請不要執行此操作,但這只是為了說明將其設為啟動:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root:developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -d -m u::rwx,g:contractors:rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g:contractors:rwx,o::r-x /var/www/public

上面的命令之間的差異setfacl如下:第一個實例使用預設群組(目錄的群組擁有者),而第二個實例明確指定群組。此開關為目錄中的所有新檔案系統物件-d建立預設遮罩 ( )。-m然而,我們還需要再次執行該指令,而不需要-d將 ACL 套用到目錄本身。然後在設定檔中將對“/var/www”的引用替換為“/var/www/public”並重新載入。

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

如果我們想要限制除創建文件的用戶之外的所有用戶的刪除和重命名:sudo chmod +t /var/www/public.這樣,如果我們想為 Apache 文件根目錄之外的框架建立目錄,或者建立伺服器可寫目錄,這仍然很容易。

Apache 可寫入日誌目錄:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Apache可讀的函式庫目錄:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/logs
sudo chmod 0750 /var/www/logs

在無關緊要的目錄中進行一點“播放”應該有助於使其適合您的情況。

在限制方面,我使用兩種不同的方法:shellrssh旨在提供 SCP/SFTP 訪問,但不提供 SSH 訪問;或者,要限制對主目錄的使用,您可以使用內部 sftp 子系統,在/etc/ssh/sshd_config.

Subsystem sftp internal-sftp

Match group sftponly
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

建立一個名為 sftponly 的群組。使用戶成為 sftponly 群組的成員。/由於 chroot,將其主目錄更改為。目錄 /home/username 應歸 root 所有。您也可以將使用者的 shell 設定為 /bin/false 以阻止 SSH 存取。我主要關心互動式訪問,因此通常遵循該rssh路徑。 (除了我定義的寫入能力之外,他們不能在任何地方寫入。)

相關內容