2011-09-11 109 views
75

我在Ubuntu上設置Apache時遇到了一些麻煩。我一直在關注this guideApache不會遵循符號鏈接(403 Forbidden)

# /usr/sbin/apache2 -v 
Server version: Apache/2.2.17 (Ubuntu) 
Server built: Feb 22 2011 18:33:02 

我的公共目錄/ var/www可以成功地提供並執行放置在其中的PHP頁面。但是,我想在/ var/www中創建一個符號鏈接,指向我的主文件夾中的一個目錄並在那裏提供頁面。

[root /var/www]# ll 
total 36 
drwxr-xr-x 3 root root 4096 2011-09-11 14:22 . 
drwxr-xr-x 14 root root 4096 2011-06-04 22:49 .. 
lrwxrwxrwx 1 root root 16 2011-09-11 13:21 about -> /root/site/about 

當我試圖訪問/關於瀏覽器,我得到

Forbidden 

You don't have permission to access /about on this server. 

據我所知,我給了足夠的權限來我要報效文件:

[root ~/site/about]# ll 
total 24 
drwxr-xr-x 5 root root 4096 2011-09-11 13:20 . 
drwxr--r-- 3 root root 4096 2011-09-11 13:19 .. 
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 contact 
-rwxr-xr-x 1 root root 1090 2011-09-11 13:19 index.php 
drwxr-xr-x 2 root root 4096 2011-09-11 13:20 me 
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 resume 

我知道FollowSymLinks選項,我相信它設置在我的/etc/apache2/ sites-enabled/000-default文件中:

DocumentRoot /var/www 
<Directory /> 
    Options FollowSymLinks 
    AllowOverride None 
</Directory> 
<Directory /var/www/> 
    Options FollowSymLinks Indexes MultiViews 
    AllowOverride None 
    Order allow,deny 
    allow from all 
</Directory> 

任何想法我可能會失蹤?

回答

112

檢查Apache是​​否擁有/root,/root/site/root/site/about的執行權限。

執行命令

chmod o+x /root /root/site /root/site/about 
+8

非常感謝......我沒想到的父目錄也必須是可執行的。 – Tim

+31

嗯,我沒有告訴它不會工作,但總的來說,在/ root上給o + x不是一個好主意;) –

+10

Michal是對的。我發現我可以使用ACL(至少在Mac中):'chmod -R + a「_www允許列表,搜索,readattr」/ root/root/site/root/site/about「,這些權限授予* * apache應用程序(_www),比「其他」更安全。 –

7

我遇到了類似的問題,我無法在新服務器上很久解決問題。除了palacsint的回答之外,還有一個很好的問題是:你使用的是Apache 2.4嗎?在Apache 2.4中,有一種不同的機制來設置使用上述配置時不起作用的權限,所以我使用了solution explained in this blog post

基本上,我需要做的是從轉換我的配置文件:

Alias /demo /usr/demo/html 

<Directory "/usr/demo/html"> 
    Options FollowSymLinks 
    AllowOverride None 
    Order allow,deny 
    allow from all 

</Directory> 

到:

Alias /demo /usr/demo/html 

<Directory "/usr/demo/html"> 
    Options FollowSymLinks 
    AllowOverride None 
    Require all granted 
</Directory> 

注意訂單如何讓系已由取代要求一切准予

+0

請注意,Order/Allow/Deny命令在大多數計算機上仍然可用。在更新的版本中,它在'access_compat'模塊中實現。如果啓用該模塊,則第一部分不可能按預期工作。如果它不在那裏,那麼嘗試啓動Apache2應該會失敗並出錯。 –

4

與這個問題有關,我只是想出了爲什麼我的虛擬主機給了我那個403.

我已經測試了這個問題的所有可能性和其他人沒有運氣。它幾乎讓我發瘋。

我正在通過符號鏈接設置一個類似於Capistrano方式部署版本的服務器,當我試圖訪問DocRoot文件夾(現在是當前版本文件夾的符號鏈接)時,它給了我403。

我的虛擬主機是:

DocumentRoot /var/www/site.com/html 
<Directory /var/www/site.com/html> 
     AllowOverride All 
     Options +FollowSymLinks 
     Require all granted 
</Directory> 

和我的主要httpd.conf文件是(默認的Apache 2.4安裝):

DocumentRoot "/var/www" 
<Directory "/var/www"> 
    Options -Indexes -FollowSymLinks -Includes 
(...) 

事實證明,主要選項定義是優先於我vhosts場(對我來說,這是反直覺)。所以我把它改爲:

DocumentRoot "/var/www" 
<Directory "/var/www"> 
    Options -Indexes +FollowSymLinks -Includes 
(...) 

和尤里卡! (注意:在主httpd.conf文件的FollowSymLinks前的加號。 希望這會幫助其他一些迷失的靈魂。

+0

在Apache 2.4中,您的解決方案將使配置無效,並且httpd將無法啓動,因爲您無法在單個選項行中組合'+'和' - '。 – deesto

0

還有另一種方式,符號鏈接可能會失敗,你,我在我的情況下發現的。如果你有一個SELinux的系統作爲服務器,並且符號鏈接指向NFS加載的文件夾(其他文件系統可能會產生類似的症狀),httpd可能會看到錯誤的上下文並拒絕提供目標文件夾的內容

在我的情況下SELinux上下文/var/www/html(您可以從ls -Z獲得)是unconfined_u:object_r:httpd_sys_content_t:s0/var/www/html中的符號鏈接將具有相同的上下文,但其目標的上下文,作爲一個NFS安裝文件夾,是system_u:object_r:nfs_t:s0

解決方法是將fscontext=unconfined_u:object_r:httpd_sys_content_t:s0添加到mount選項(例如# mount -t nfs -o v3,fscontext=unconfined_u:object_r:httpd_sys_content_t:s0 <IP address>:/<server path> /<mount point>)。 rootcontext不相關,defcontext被NFS拒絕。我本身並沒有嘗試context

0

首先禁用SELinux(VIM的/ etc/selinux的/配置)以下爲符號鏈接線和目錄索引

VIM /etc/httpd/conf/httpd.conf中編輯:

documentroot /var/www/html 
<directory /var/www/html> 
    Options Indexes FollowSymLinks 
    AllowOverride None 
</directory> 

如果htaccess的然後AllowOverride全部

11

403錯誤也可能是由加密文件系統引起的,例如一個到加密的主文件夾的符號鏈接。

如果符號鏈接指向加密文件夾,即使apache和文件/文件夾權限設置正確,apache用戶(例如www-data)也無法訪問內容。所述www數據用戶可以與這樣的呼叫進行測試的訪問:

sudo -u www-data ls -l /var/www/html/<your symlink>/ 

有變通/這一解決方案,例如將www-data用戶添加到您的私人組(將加密數據公開給網絡用戶)或設置未加密的rsynced文件夾(可能相當安全)。我自己可能會在開發過程中使用rsync解決方案。

https://askubuntu.com/questions/633625/public-folder-in-an-encrypted-home-directory

一個方便的工具,我的目的是lsyncd。這使我可以直接在加密的主文件夾中工作,並能夠在apache網頁中幾乎立即看到變化。同步由文件系統中的更改觸發,即調用rsync。由於我只是在相當小的網頁和腳本上工作,所以同步速度非常快。我決定在rsync啓動之前使用1秒的短暫延遲,儘管可以設置延遲0秒

安裝lsyncd(在Ubuntu):

sudo apt-get install lsyncd 

啓動後臺服務:

lsyncd -delay 1 -rsync /home/<me>/<work folder>/ /var/www/html/<web folder>/ 
+2

'sudo -u www-data ...'是檢查是否存在權限問題的好方法!請注意,根據您的發行版,用戶可能是www-data,apache或其他內容。 – mkasberg

+0

終於!我已經懷疑我最基本的能力了! – kalabalik

+0

失去了這個小時,最後是加密! – myol