2014-02-19 27 views
2

我們的網站運行在Apache服務器上,使用httpd和php。在該服務器上安裝一個來自Windows服務器的特定目錄,比如說/mnt/some_directory/。我可以使用我自己的用戶帳戶使用WinSCP或SSH瀏覽此目錄。允許Apache/PHP對安裝的目錄具有讀/寫訪問權

我也可以執行SSH如下:

php -r "print_r(file_get_contents('/mnt/some_directory/file_name.txt'));" 

,看到文件的內容。

我們需要從該目錄讀取文件並進行解析,以便將其導入到網站使用的數據庫中。但是,當在網站上的fopen或file_get_contents我們得到一個權限被拒絕的錯誤。

我對Web服務器的訪問受限(以及有限的* nix和apache配置知識),但應該明顯解決這個問題的管理員也缺乏這方面的知識,我需要解決這個問題,這就是爲什麼我在這裏問。

管理員所做的是將安裝目錄的組和所有權設置爲「apache」,這是httpd進程運行的用戶。但是這並沒有幫助。

據我所知默認情況下不允許訪問webroot之外的文件。在httpd.conf中爲/mnt/some_directory/設置一個DIRECTORY指令是否足夠?或者還有什麼要做的?

+0

可以鏈接目錄一樣的/ var/www/linkedtomntsomething?真的不知道它是否有效(現在無法測試) –

+0

它可能是Selinux權限問題。 –

+0

謝謝。根據'ps -ZC httpd',httpd進程由一個「unconfined_u」運行,所以我猜Selinux用戶映射將用戶「apache」映射爲「unconfined_u」。爲apache更改此映射會保存嗎? –

回答

0

鏈接的安裝目錄您的www根目錄和名稱的鏈接「分享」

ln -s /mnt/some_directory /path/to/your/www/root/directory/share 

不是試圖讀取該文件

php -r "print_r(file_get_contents('/path/to/your/www/root/directory/share/file_name.txt'));" 

...或者你可以允許(如果你有足夠的權限來編輯網絡服務器的配置)

<Directory /mnt/somedirectory > 
    Allow from All 
<Directory> 
+1

我在''上試過一個指令,但它沒有改變任何東西。 –

+0

試試這個:在你的裏應該是裏面應該是Options + FollowSymLinks指令。 – enterx

0

我看到了與cifs mo相同的問題unt linux/unix apache,用戶可以訪問已安裝的卷,但不能訪問apache。

也看到這一點:EnableSendfile關

但關閉時,Apache可能慢慢地工作, 在.htaccess,只爲CIFS安裝路徑,它應該工作...。

http://httpd.apache.org/docs/current/en/mod/core.html

問候 L.Tomas

3

我們的團隊有同樣的問題,我的隊友能夠通過增加context安裝選項來解決這個問題。

我們正在使用的安裝窗口共享文件夾下面的格式到Linux Apache會能夠訪問:

mount -v -t cifs <//$hostname/$(windows shared dir)> <mount directory> -o username="<username>",password=<password>,domain=<domain name>,iocharset=utf8,file_mode=0777,dir_mode=0777,context="system_u:object_r:httpd_sys_content_t:s0" 

例如:

mount -v -t cifs //192.168.1.19/sample_dir /mnt/mount_dir -o username="admin",password=adminpwd,domain=MIINTER,iocharset=utf8,file_mode=0777,dir_mode=0777,context="system_u:object_r:httpd_sys_content_t:s0" 
相關問題