我在本機安裝了 Dokuwiki,我定期使用 rsync 將其同步到我的伺服器。我也會給我的一個朋友 ssh 帳戶,並託管他的公共 Dokuwiki 安裝。但是,我遇到了存取權限問題 - 即使鏡像是唯讀的,Dokuwiki 仍然需要對資料目錄的寫入權限以進行快取等。它重置權限。
根據本網站上的一些其他答案,我嘗試使用 setfacl 設定預設權限,但它似乎不起作用 - getfacl 指示權限存在,但 Dokuwiki 不會運行,當我嘗試將文件寫入為用戶www-data,它也不起作用。我缺什麼?
wiki/data$ sudo su www-data
$ pwd
/var/www/wiki/data
$ whoami
www-data
$ touch hi
touch: cannot touch `hi': Permission denied
$ getfacl /var/www/wiki/data
getfacl: Removing leading '/' from absolute path names
# file: var/www/wiki/data
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
這是我用來設定權限的命令:
setfacl -R -d -m u:www-data:7 /var/www/*
答案1
問題#1:Rsync 正在刪除 ACL
套用 ACL 權限後,您需要注意,當您執行該操作時,rsync
您將使用-A
或--acls
開關。這指示rsync
確保在進行同步時保留這些。
摘自 rsync 手冊頁
-A, --acls preserve ACLs (implies -p)
問題#2:沒有 ACL 權限
在查看您的範例時,它確實包含以下權限。
傳統燙髮
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
ACL
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
但這些 ACL 是用於建立新物件的,並且並非完全按照您的想法工作。www-data
除了預設的 ACL 權限之外,您還需要為使用者建立一個條目。
例子
$ pwd
/tmp/somedir
$ mkdir data
$ setfacl -R -d -m u:gopher:7 data
$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
一個實驗
現在讓我們嘗試data
以 user 身分將檔案寫入目錄gopher
。
$ sudo -u gopher touch /tmp/somedir/data/afile
touch: cannot touch `/tmp/somedir/data/afile': Permission denied
看起來熟悉?
新增額外的 ACL 權限
這是因為您需要為使用者新增 ACL www-data
,預設規則不是用於訪問,而是用於建立新檔案/目錄。
$ setfacl -R -m u:gopher:7 data
現在再檢查data
目錄:
$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
user:gopher:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
唯一的區別是我們現在有一個 ACL 表示用戶gopher
有權rwx
訪問:
user:gopher:rwx
重複實驗
嘗試再次向目錄寫入資料:
$ sudo -u gopher touch /tmp/somedir/data/afile
$
有效!仔細檢查產生的文件:
$ ls -l /tmp/somedir/data/afile
-rw-rw-r--+ 1 gopher gopher 0 Oct 7 21:36 /tmp/somedir/data/afile