Apache-2.2

允許 php/apache 刪除 ftp 目錄和子文件夾中的文件

  • February 21, 2014

基本上,我遇到了一個 php 腳本能夠移動或刪除文件的問題,我知道這與權限有關,因為這是 php 錯誤unlink()告訴我的,但我不確定如何修復它。所以我希望如果我解釋這種情況,有人可能會指出我正確的方向,因為我在 linux CLI 方面是個菜鳥……

好的,所以我有一個 ftp 保管箱位置,假設它位於

/var/ftp/client/dropbox/

我已經創建了一個 ftp 帳戶pure-ftpd。所以當一個文件上傳到這個目錄時,它的所有者是ftp-user,它的組是ftp-group,這就是pure-ftpd執行的方式。該目錄的使用者/組分別設置為ftp-userftp-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-userand下執行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命令行,以獲得正確的權限。

引用自:https://serverfault.com/questions/577382