Apache PHP 上傳 - 所有權和權限
我正在邁出安裝 VPS Web 伺服器(Debian 8 + Apache 2 + PHP 5.6)的第一步,並且需要一些文件/文件夾權限方面的幫助。
我已經找到了一些關於這個主題的類似主題(不完全相同),而且都是 4 或 5 歲的。其中一些指向使用不推薦使用的 PHP 方法的解決方案。也許今天有一些新的方法或解決方案。
嗯,有 Apache 2 在
www-data
使用者/組中執行。所以我創建了一個名為 的使用者webadmin
,將其放入www-data
組中並將其配置為主網站文件夾的所有者:adduser webadmin usermod -a -G www-data webadmin chown -R webadmin:www-data /var/www/website.com
我還更改了public_html文件夾的權限,如下所示:
find /var/www/website.com/public_html -type f -exec chmod 644 {} + find /var/www/website.com/public_html -type d -exec chmod 755 {} + find /var/www/website.com/public_html -type d -exec chmod g+s {} +
並創建了將接收上傳文件的文件夾(僅靜態文件 - 圖像):
mkdir /var/www/website.com/public_html/uploads chown webadmin:www-data /var/www/website.com/public_html/uploads chmod 774 /var/www/website.com/public_html/uploads
現在,發生了什麼:我使用 SFTP 上傳的所有文件夾和 PHP/Html 文件(記錄為
webadmin
)當然會webadmin
成為所有者。當我使用 PHP 創建子文件夾並上傳圖像時,他們將www-data
使用者作為所有者。在這種情況下,我遇到了一些權限問題,例如通過 SFTP 刪除文件。我可以指定 Apache 作為
webadmin
使用者和www-data
組執行,但我認為我可能會遇到安全問題(不是嗎?)。請問,是否有標準和最佳實踐來配置將創建文件夾並上傳文件的伺服器或 PHP 腳本以避免此問題?
您的問題是新文件不可組寫。不要在目錄上使用setgid來設置組,而是使用ACL來提供更大的靈活性。
新文件和目錄繼承預設 ACL條目,授予 ACL 中定義的權限。為組設置預設 ACL條目
webadmin
以允許rwx
:setfacl -m default:g:webadmin:rwx /var/www/website.com/public_html/uploads
在目錄中創建的新文件對於 group 將是可讀寫的
webadmin
。如果 ACL 不是一個選項,您需要更改umask,它決定了新文件的預設 UNIX 權限。新umask的明智選擇是
002
(世界可寫位被屏蔽)和007
(所有世界權限位被屏蔽,即只有組和所有者有權訪問)。要設置 Apache umask,請將 systemd 單元文件複製到*/etc*:
cp /lib/systemd/system/apache2.service /etc/systemd/system/
通過附加到部分來配置umask。請注意,這會影響 Apache 創建的所有文件。
/etc/systemd/system/apache2.service
UMask=<umask>
[Service]
僅當您需要從 PHP/Apache 更改上傳的文件/目錄時,才需要更改sftp的**umask。預設的 umask創建文件組和世界可讀,但不是組可寫。為sftp配置預設umask的最簡單方法是使用.
022
pam_umask
要僅為特定組中的使用者並且僅在使用sftp時應用您的自定義**umask,請附加:
/etc/pam.d/sshd
session [default=1 success=ignore] pam_succeed_if.so user notingroup <yourgroup> session optional pam_umask.so umask=<umask>
第一條規則告訴pam 如果使用者不在組中則跳過下一條規則
<yourgroup>
,即僅在使用者在組中時應用下一條規則<yourgroup>
。第二條規則將 umask 設置為<umask>
。附錄:請注意,移動的現有文件
mv
保留其原始權限和所有權。您可以通過複製文件來應用 umask 和目錄 setgid/ACLs 的預設權限cp -d
。