Apache-2.4
apache:僅在另一個文件系統上“不允許符號連結或連結目標不可訪問”
我在遠端目錄中有一個文件,它被轉換為 apache DocRoot 樹。當我嘗試從該目錄下載文件(而不是寫入)時,我得到 403:
AH00037: Symbolic link not allowed or link target not accessible: /var/www/b2b/web/var
我嘗試了什麼:
- Selinux 被禁用
Options +FollowSymLinks
存在- 如果我用同一個 FS 上的連結替換另一個 FS 的連結 - 它可以工作!
文件:
namei -l /var/www/b2b/web/var/assets/75259_box1_v29.jpg f: /var/www/b2b/web/var/assets/75259_box1_v29.jpg dr-xr-xr-x root root / drwxr-xr-x root root var drwxr-xr-x root root www drwxrwxrwx www-data www-data b2b drwxrwxrwx www-data www-data web lrwxrwxrwx root root var -> /var/www/b2b/nfs/b2b-web-var dr-xr-xr-x root root / drwxr-xr-x root root var drwxr-xr-x root root www drwxrwxrwx www-data www-data b2b drwxrwxrwx www-data www-data nfs drwxrwxrwx www-data www-data b2b-web-var drwxrwxrwx www-data www-data assets -rwxrwxrwx www-data www-data 75259_box1_v29.jpg
所以,在
/var/www/b2b/web/
我有:lrwxrwxrwx 1 root root 28 Oct 3 09:10 var -> /var/www/b2b/nfs/b2b-web-var
我創建
var1
的內容與 /var/www/b2b/nfs/b2b-web-var 相同,如果我喜歡下面的內容(連結是本地的),那麼一切正常:lrwxrwxrwx 1 root root 4 Oct 3 18:15 var -> var1 drwxr-xr-x 4 root root 4096 Oct 3 18:13 var1
/etc/fstab:
fs-1111111111:/ /var/www/b2b/nfs efs defaults,_netdev 0 0
DocumentRoot 是
/var/www/b2b/web
我也試過
strace
了,但不明白到底出了什麼問題:[pid 11381] stat("/var/www/b2b/web/var/assets/75259_box1_v29.jpg", [wait(0x857f) = 11381] WIFSTOPPED,sig=133 {st_mode=S_IFREG|0777, st_size=201249, ...}) = 0 [pid 11381] gettimeofday( [wait(0x857f) = 11381] WIFSTOPPED,sig=133 [pid 11419] semop(2326532, {{0, -1, SEM_UNDO|IPC_NOWAIT}}, 1 <unfinished ...> [pid 11416] semop(2326532, {{0, -1, SEM_UNDO|IPC_NOWAIT}}, 1 <unfinished ...> [pid 11381] stat("/var/www/b2b/web/var/assets/75259_box1_v29.jpg", [wait(0x857f) = 11419] WIFSTOPPED,sig=133 [pid 11419] <... semop resumed> ) = -1 EAGAIN (Resource temporarily unavailable) [pid 11416] <... semop resumed> ) = -1 EAGAIN (Resource temporarily unavailable) [pid 11381] <... stat resumed> {st_mode=S_IFREG|0777, st_size=201249, ...}) = 0 [pid 11381] lstat("/var/www/b2b/web/var", [wait(0x857f) = 11381] WIFSTOPPED,sig=133 [pid 11381] stat("/var/www/b2b/web/var", [wait(0x857f) = 11381] WIFSTOPPED,sig=133 [pid 11381] gettimeofday( [wait(0x857f) = 11381] WIFSTOPPED,sig=133 [pid 11381] write(7, "[Thu Oct 03 18:34:35.430672 2019"..., 175 [wait(0x857f) = 11381] WIFSTOPPED,sig=133 [pid 11381] gettimeofday( [wait(0x857f) = 11381] WIFSTOPPED,sig=133 [pid 11381] read(12, [wait(0x857f) = 11381] WIFSTOPPED,sig=133 0x555c658e7068, 8000) = -1 EAGAIN (Resource temporarily unavailable) [pid 11381] gettimeofday( [wait(0x857f) = 11381] WIFSTOPPED,sig=133 [pid 11381] writev(12, [{"HTTP/1.1 403 Forbidden\r\nDate: Th"..., 172}, {"<!DOCTYPE HTML PUBLIC \"-//IETF//"..., 357}], 2 [wait(0x857f) = 11381] WIFSTOPPED,sig=133
我考慮過超時,但我可以使用
su apache
then 讀取文件內容,例如 withhead /var/www/b2b/web/var/assets/75259_box1_v29.jpg | less
。那麼,這裡有什麼問題?
解決方案:符號連結的所有者必須與網站的其餘部分相同:
# pwd /var/www/b2b/web # chown -h www-data.www-data var #voila!
注意:
-SymLinksIfOwnerMatch
在我的情況下還不夠,我知道為什麼。注意2:不要忘記’-h’,否則 chownn 將在應用的目標上,而不是在連結本身上。如果你想 chown 連結到目錄,那麼不要添加斜杠!