2011-08-02 59 views
6

我在生產模式的Rails 3.0.9運行Ubuntu的遠程VPS機器上運行紅寶石10.04 LTS(在開發模式我使用的RoR上的MAC OS雪豹),我想知道如何管理下面的情況。處理回形針文件夾和文件的權限

我用的Apache2的Phusion客運和我已經設置虛擬主機的,就像這樣:

<VirtualHost *:80> 
    ServerName project_name.com 
    DocumentRoot /srv/www/project_name.com/public 

    <Directory /srv/www/project_name.com/public> 
    AllowOverride all 
    Options -MultiViews 
    </Directory> 
</VirtualHost> 

更多,我用的是回形針寶石,並作爲對很多人在生產模式下使用它的網絡,我得到以下錯誤的處理(圖像)文件:

Errno::EACCES (Permission denied - /srv/www/project_name.com/public/images/001): 
... 

我聽說,爲了解決避免這些き錯誤的nd是設置適當的文件夾權限(手動! - 我不知道是否可以自動化「設置」過程...順便說一句:有可能嗎?)但我認爲有更好的方法來解決這個問題。如果是這樣,我該怎麼辦?

回答

2

@M。 Cypher很接近,但我看到的最大問題是您允許用戶上傳任意文件,然後將其標記爲全部可執行文件。這是尋找一個可以發生的地方的災難。

find /srv/www/project_name.com/public -type d -exec chmod 755 {}\; 
find /srv/www/project_name.com/public -type f -exec chmod 644 {}\; 

這將在目錄(必要)上設置可執行文件,但不在文件上。

1

爲什麼自動化它,它只需要一個簡單的命令在服務器上。

sudo chmod -R 777 /srv/www/project_name.com/public 

編輯:我有一個共享目錄中的所有我的曲別針的圖像,例如/srv/www/project/shared/...這樣,當我使用Capistrano部署新版本時,它們不會受到影響,我只需設置文件夾權限(使用上述命令或類似命令)即可。這就是爲什麼我認爲自動化不是必需的,因爲您需要只運行一次命令,而不是在每次部署之後運行。

btw,chmod -R 777可能不是最好的選擇,因爲它不分青紅皁白地設置每個子文件夾中的每個文件,以便每個人都可以訪問。它確實有用,但是我確定有更多Linux技能的人可以指出爲什麼不那麼極端的版本會更聰明。

+1

我認爲755是比777更好的選擇 – slotishtype