Linux
.htaccess 和 linux 權限
我有一些我試圖保護的繼承的 php 程式碼。但是,從文件上傳目錄中刪除執行權限會引發權限錯誤。這是一個快速的綱要:
apache 指向 /root/www/(系統上只有 root 使用者)
圖像上傳通過 /root/www/admin/files 的符號連結保存到 /files(我不知道為什麼文件保存到 /)
權限:
drwxrwxrwx 8 root root 4096 2011-04-06 16:51 root (root home directory) drwxr-xr-x 8 www-data www-data 4096 2011-04-01 19:34 www (folder in /root/) lrwxrwxrwx 1 root root 21 2011-03-04 20:32 files -> /files/ (symlink) drw------- 4 www-data www-data 61440 2011-04-06 16:12 files (folder in root directory) -rwxrwx--- 1 www-data www-data 81 2011-04-06 15:56 .htaccess (file in /files/)
Apache 錯誤日誌摘錄:
[Wed Apr 06 16:58:24 2011] [crit] [client 1.2.3.4] (13)Permission denied: /root/www/admin/files/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://example.com
我想將 /files/ 的權限從 700 更改為 600。我不明白為什麼 .htaccess 僅在設置執行權限時才可讀。
我懷疑您在這裡的困惑源於對類 Unix 文件權限的常見誤解,特別是:在目錄上,“執行”並不意味著“執行”。
我懷疑您正在嘗試確保無法執行上傳到上傳目錄的文件,對嗎?這是很好的常識。但是,您的方法有缺陷:在目錄上,“執行”位並不意味著“允許執行此處的文件”,而是“允許使用者遍歷此目錄”。換句話說,刪除使用者/組/世界目錄上的執行位會刪除相關使用者訪問其中任何文件或目錄的能力——這正是 Apache 現在抱怨它無法做到的。
您需要上傳目錄保持“可執行”。相反,您需要的是一個 umask 來確保上傳的文件不可執行。(實際上,即使這樣也沒有必要,因為預設情況下文件在 *nix 上是不可執行的。)