Linux

你如何製作一個指向 SMB 網路共享的 apache vhost?

  • May 14, 2017

我的本地網路上有一個 SMB 文件共享。我將所有網站都儲存在此伺服器上。我有另一台執行 CentOS 的伺服器託管 Apache Web 伺服器。您將如何創建一個指向 SMB 共享的虛擬主機?

SMB 伺服器的路徑是smb://10.0.0.177/fms%20studios/Websites.

這是我目前在我的httpd-vhosts.conf文件中的內容。

<VirtualHost *:80>
ServerAdmin flyingmcsquid@gmail.com
ServerName tree.fmsds.xyz
ServerAlias www.tree.fmsds.xyz
DocumentRoot "smb://10.0.0.177/fms%20studios/Websites/"
<Directory  "smb://10.0.0.177/fms%20studios/Websites/">
   Options +Indexes +Includes +FollowSymLinks +MultiViews
   AllowOverride All
   Require all granted
</Directory>
</VirtualHost>

有兩個不同的問題可以解決您的問題:

  1. 身份驗證:假設您的 Windows 機器正在為“ fms studios ”網路共享服務,那麼這種共享受到“保護”的可能性很高,因此遠端訪問需要使用者名/密碼對;
  2. 訪問方法:您的 Apache 需要知道其虛擬主機的文件根目錄在哪裡。根據您的問題,您“猜測”“smb://”前綴將使 Apache 知道/處理對 SMB 共享的遠端訪問。

讓我們開始解決第 2 點。正如您從官方文件中看到的那樣,“ DocumentRoot ”指令需要一個目錄路徑。這通常是在本地機器的文件系統中定義的“本地”路徑。

這對您來說不是問題,因為完全可以“掛載”遠端 SMB 網路共享,“內部”我們的本地文件系統。在您喜歡的搜尋引擎上搜尋“linux smb mount”或從這裡開始調查。這將使您的 SMB 共享可以在類似/mnt/server_win2012/fms%20studios. 您可以將其視為與 Windows 世界一樣 - 使用映射到遠端路徑的驅動器號訪問網路共享,而不是\\<something>直接從資源管理器訪問 UNC 路徑(…以 a 開頭)。

因此,現在您可以讓 Apache 請求訪問網路 SMB 共享。

讓我們進入第 1) 點,“身份驗證”。正如您在已經提到的文件的“ Common mount.cifs options ”部分中看到的,您可以在掛載資源時指定“ user= ”和“ pass= ”選項。

請花一些時間仔細考慮此類選項的目的,特別是與其他兩個附加選項“ uid= ”和“ gid= ”相關:前兩個(user=pass=)用於遠端身份驗證,因此,應該匹配伺服器上定義的一些使用者名。最後一對(uid= 和 gid=)在客戶端上用於告訴本地作業系統,一旦掛載到本地文件系統上,將是“擁有”文件的使用者和組,因此,當它們可能所有人都可以訪問使用者在本地定義(顯然,與伺服器完全不同的集合——至少在“常見”場景中)。一開始這聽起來有點棘手,但是……一旦你想到它,很快就會清楚:-)

至於你的具體情況,我猜你想指定一個匹配你本地“httpd”使用者的“uid=”和“gid=”,這樣Apache就可以訪問遠端資源。

我不會進一步討論身份驗證問題和/或在啟動時自動掛載 SMB 共享的正確配置,因為它們超出了 OP 的範圍,因此,請自行行動。儘管如此,我還是敦促您謹慎行事,以避免對 web-server 的一般寫入權限。更一般地說,在將本地/網路資源的訪問權限授予映射到 Internet/公共服務(如 Web 伺服器)的 uid 時,要格外小心。盡量避免這種訪問,如果絕對需要,請授予它絕對最小的權限集(我建議:從只讀掛載開始,或者對只讀網路共享進行讀寫掛載,如果還不夠的話。 ..稍後嘗試擴展它…)

引用自:https://serverfault.com/questions/849990