允許 php/apache 刪除 ftp 目錄和子文件夾中的文件
基本上,我遇到了一個 php 腳本能夠移動或刪除文件的問題,我知道這與權限有關,因為這是 php 錯誤
unlink()
告訴我的,但我不確定如何修復它。所以我希望如果我解釋這種情況,有人可能會指出我正確的方向,因為我在 linux CLI 方面是個菜鳥……好的,所以我有一個 ftp 保管箱位置,假設它位於
/var/ftp/client/dropbox/
我已經創建了一個 ftp 帳戶
pure-ftpd
。所以當一個文件上傳到這個目錄時,它的所有者是ftp-user
,它的組是ftp-group
,這就是pure-ftpd
執行的方式。該目錄的使用者/組分別設置為ftp-user
和ftp-group
。因此,第 3 方腳本負責將報告(文件)發送到此保管箱位置。ftp 帳戶應該能夠在此目錄中創建子目錄,以對文件進行分類。
例如,文件結構可能如下所示:
/var/ftp/client/dropbox/invoices/ /var/ftp/client/dropbox/invoices/bal_2013-06-01_2013-06-30.pdf /var/ftp/client/dropbox/reports/ /var/ftp/client/dropbox/reports/visits/ /var/ftp/client/dropbox/reports/visits/bal_2013-06-01_2013-06-30.xlsx
“主”目錄
/var/ftp/client/dropbox/
chmod 是drwxrwxr-x
當一個子目錄(例如
invoices/
)由創建時ftp-user
,它正在chmod
獲取drwxr-xr-x
當文件由 上傳(例如
invoices/bal_2013-06-01_2013-06-30.pdf
)時ftp-user
,它正在chmod
獲取-rw-r--r--
同時…
我有一個位於say的php腳本
/var/www/client/
該腳本應該打開文件並執行諸如使用類別名稱(子目錄名稱)和文件名等更新數據庫之類的操作。到目前為止,一切都很好。然而….
那麼問題來了…
然後腳本應該根據原因移動或刪除文件(但不是子目錄)。但是使用
File::delete()
(Laravel 4) 或直接unlink()
使用/path/to/file
會返回“權限被拒絕”錯誤。
top
因此,當我的腳本執行時,它看起來像使用它,它(apache)在www-user
and下執行www-group
。有意義的是,它將作為不同的使用者/組執行。但是我該怎麼做才能授予 apache/php 移動/刪除文件的權限?我已經嘗試
www-user
加入該ftp-group
組,但它仍然給我“權限被拒絕”錯誤。從研究中,我懷疑它可能與粘性位或其他東西有關,但我不確定,坦率地說,目前所有這些目錄/文件權限的東西都讓我有點不知所措。蘇…關於在這裡做什麼有什麼建議嗎?
編輯
我的一個想法是,我可以將 /path/to/files 以及需要執行的操作插入數據庫,而不是讓*這個腳本刪除/移動文件。*然後有一個單獨的腳本來執行該操作,然後將該腳本放在 cronjob 上
root
(或作為ftp-user
..我可以這樣做嗎?我不確定..)。我認為這應該可行,但我不確定這樣做是否是個好主意,而且似乎更好的解決方案是整理權限..
通過將 www 使用者添加到 ftp 組,您走在了正確的軌道上。不幸的是,您創建的文件沒有設置組寫入權限。所以只有所有者(ftp 使用者)才能寫入/刪除它們。您還需要為組(ftp-group)創建具有寫入權限的文件。(這將
rw-rw-r--
代替rw-r--r--
)新文件的預設權限通過名為
umask
. Pure-FTP 在其配置文件中支持 umask 指令。本質上,您需要進入umask 113:003
配置文件或-U 113:003
命令行,以獲得正確的權限。