本發(fā)明涉及服務(wù)器的領(lǐng)域,尤其是涉及于一種網(wǎng)頁服務(wù)器及其執(zhí)行請求指令的方法。
背景技術(shù):
在現(xiàn)有的網(wǎng)頁服務(wù)器中,當(dāng)接收到使用者所傳送的一請求指令時,服務(wù)器會根據(jù)使用者的身分及/或所述請求指令所要求存取的內(nèi)容(例如是讀取靜態(tài)網(wǎng)頁(*.html)或是執(zhí)行網(wǎng)頁程序(*.php))來選擇具有不同權(quán)限的工作者(worker)身分來執(zhí)行。然而,這些不同的工作者身分在某些情況下會造成彼此之間的溝通問題,進(jìn)而造成網(wǎng)頁程是在設(shè)計上的困難。
技術(shù)實現(xiàn)要素:
因此,本發(fā)明的目的之一在于公開一種網(wǎng)頁服務(wù)器,其中的網(wǎng)頁服務(wù)模塊僅使用一種工作者身分來執(zhí)行請求指令,以解決現(xiàn)有技術(shù)中的問題。此外,為了可以存取任何所需要的檔案內(nèi)容,此工作者身分具有高的訪問權(quán)限,因此,本發(fā)明的實施例另外設(shè)計了安全模塊來限制請求指令的存取范圍,以在高的存取效能下可以兼顧數(shù)據(jù)的安全性。
依據(jù)本發(fā)明一實施例,一服務(wù)器包括一網(wǎng)頁服務(wù)模塊以及一共通網(wǎng)關(guān)接口模塊,其中所述網(wǎng)頁服務(wù)模塊包括一配置文件,其中所述配置文件描述了具有權(quán)限以存取所述服務(wù)器內(nèi)的檔案的一應(yīng)用程序。在所述服務(wù)器的操作上,所述網(wǎng)頁服務(wù)模塊用以接收來自所述服務(wù)器外部的一請求指令,并將所述請求指令轉(zhuǎn)送到所述共通網(wǎng)關(guān)接口模塊,以判斷所述請求指令是否具有執(zhí)行的權(quán)限,并將判斷結(jié)果回傳至所述網(wǎng)頁服務(wù)模塊;若是所述請求指令具有執(zhí)行的權(quán)限且所述請求指令符合所述配置文件內(nèi)所描述的所述應(yīng)用程序,則所述 網(wǎng)頁服務(wù)模塊讀取所述請求指令所要求的檔案,并回傳所述檔案。
依據(jù)本發(fā)明另一實施例,一種執(zhí)行一請求指令的方法包括:使用一網(wǎng)頁服務(wù)模塊來接收所述請求指令,并將所述請求指令傳送到一共通網(wǎng)關(guān)接口模塊;使用所述共通網(wǎng)關(guān)接口模塊來判斷所述請求指令是否具有執(zhí)行的權(quán)限;將所述共通網(wǎng)關(guān)接口模塊的判斷結(jié)果回傳至所述網(wǎng)頁服務(wù)模塊;使用所述網(wǎng)頁服務(wù)模塊判斷所述請求指令所對應(yīng)到的應(yīng)用程序是否符合一配置文件的內(nèi)容;以及若是所述請求指令具有執(zhí)行的權(quán)限,且所述請求指令所對應(yīng)到的應(yīng)用程序符合所述配置文件的內(nèi)容,則使用所述網(wǎng)頁服務(wù)模塊讀取所述請求指令所要求的檔案,并回傳所述檔案。
依據(jù)本發(fā)明另一實施例,一服務(wù)器包括一網(wǎng)頁服務(wù)模塊,其中所述網(wǎng)頁服務(wù)模塊用以接收來自所述服務(wù)器外部的一請求指令,并根據(jù)所述請求指令所對應(yīng)到的應(yīng)用程序來判斷所述請求指令是否具有下載文件的權(quán)限;若是所述請求指令具有下載文件的權(quán)限,則重新設(shè)定一檔案路徑,以讀取并回傳所述檔案;以及若是所述請求指令不具有下載文件的權(quán)限,則不會將所述檔案路徑設(shè)為正確的檔案路徑,且回傳一讀取失敗的通知。
依據(jù)本發(fā)明另一實施例,一種執(zhí)行一請求指令的方法包括:接收來自一服務(wù)器外部的一請求指令;根據(jù)所述請求指令所對應(yīng)到的應(yīng)用程序來判斷所述請求指令是否具有下載文件的權(quán)限;若是所述請求指令具有下載文件的權(quán)限,則重新設(shè)定一檔案路徑,以讀取并回傳所述檔案;以及若是所述請求指令不具有下載文件的權(quán)限,則不會將所述檔案路徑設(shè)為正確的檔案路徑,且回傳一讀取失敗的通知。
附圖說明
圖1為依據(jù)本發(fā)明一實施例的一服務(wù)器的示意圖。
圖2為依據(jù)本發(fā)明一實施例的服務(wù)器執(zhí)行來自電子裝置的一請求指令的示意圖。
圖3為依據(jù)本發(fā)明另一實施例的服務(wù)器執(zhí)行來自電子裝置的一請求指令的示意圖。
圖4為對應(yīng)至不同應(yīng)用程序的多個儲存區(qū)塊的示意圖。
圖5為依據(jù)本發(fā)明一實施例的執(zhí)行一請求指令的流程圖。
其中,附圖標(biāo)記說明如下:
100服務(wù)器
102電子裝置
110處理器
120儲存單元
130網(wǎng)頁服務(wù)模塊
140共通網(wǎng)關(guān)接口模塊
410_1~410_3儲存區(qū)塊
500~514步驟
具體實施方式
請參考圖1,其為依據(jù)本發(fā)明一實施例的一服務(wù)器100的示意圖。如圖1所示,服務(wù)器100至少包括了一處理器110以及一儲存單元120,其中儲存單元120包括了一網(wǎng)頁服務(wù)模塊130以及一共通網(wǎng)關(guān)接口(commongatewayinterface,cgi)模塊140。在此實施例中,服務(wù)器100是一多功能網(wǎng)絡(luò)附加儲存服務(wù)器,也就是包括了網(wǎng)頁服務(wù)器的功能,而服務(wù)器100可通過網(wǎng)頁服務(wù)模塊130接收來自用戶端的電子裝置102所傳送來的一請求指令,以進(jìn)行靜態(tài)網(wǎng)頁數(shù)據(jù)或是網(wǎng)頁程序的存取,舉例來說,服務(wù)器100可通過網(wǎng)頁服務(wù)模塊130接收來自用戶端所傳送來的一網(wǎng)絡(luò)地址(uniformresourcelocator,url),也就是接收來自使用者端的一超文本傳輸協(xié)議(hypertexttransferprotocol,http)請求,并對所述網(wǎng)絡(luò)地址進(jìn)行處理,以提供http回復(fù)給使用者端;然而,本發(fā)明并不以此為限,服務(wù)器100亦可包括其他的服務(wù)器功能。
實作上,網(wǎng)頁服務(wù)模塊130以及共通網(wǎng)關(guān)接口模塊140是以軟件的方式來執(zhí)行,也就是處理器110執(zhí)行儲存單元120中的一或多組程序代碼后來執(zhí)行網(wǎng)頁服務(wù)模塊130以及共通網(wǎng)關(guān)接口模塊140的操作。
網(wǎng)頁服務(wù)模塊130在執(zhí)行來自用戶端的請求指令時,指派至少一工作者(worker)執(zhí)行所述操作請求。在本實施例中,網(wǎng)頁服務(wù)模塊130采用nginx網(wǎng)頁服務(wù)器的架構(gòu)來實作,且網(wǎng)頁服務(wù)模塊130中所有的工作者都具有相同的權(quán)限(也就是說,同一種工作者身分),詳細(xì)來說,nginx網(wǎng)頁服務(wù)器中有關(guān)于"工作者"的執(zhí)行模式有兩種,即主程序(masterprocess)以及工作者程序(workerprocess),其中主程序用來監(jiān)控工作者程序的狀態(tài)以及數(shù)量,且主程序會在服務(wù)器100開機(jī)時建立出多個具有相同權(quán)限的工作者,且來自外部的請求指令均由這些工作者來負(fù)責(zé)執(zhí)行。此外,網(wǎng)頁服務(wù)模塊130采用了linux能力(linuxcapability)的設(shè)定方式來讓所有的工作者都具有最高的權(quán)限。詳細(xì)來說,網(wǎng)頁服務(wù)模塊130可以設(shè)定linux系統(tǒng)中的cap_dac_read_search或cap_dac_override指令為具有最高讀取能力,以使得網(wǎng)頁服務(wù)模塊130可以無視其他傳統(tǒng)unix系統(tǒng)的權(quán)限檢查,而讀取任意檔案的內(nèi)容。
此外,由于網(wǎng)頁服務(wù)模塊130的工作者均被設(shè)定可以讀取服務(wù)器100中的任意檔案,為了避免使用者存取到不該被讀取的檔案內(nèi)容,例如系統(tǒng)程序檔案,因此,本實施例另外在網(wǎng)頁服務(wù)模塊130包括一配置文件,其中此配置文件描述了具有權(quán)限以存取所述服務(wù)器內(nèi)的檔案的應(yīng)用程序。換言之,配置文件設(shè)定有哪些應(yīng)用程序才可以被允許存取所需的檔案,以限制使用者的存取范圍,其中此配置文件可以在服務(wù)器100安裝操作系統(tǒng)的同時進(jìn)行設(shè)定,或是在其他任何適合的時間點來進(jìn)行設(shè)定。此外,服務(wù)器100也再通過共通網(wǎng)關(guān)接口模塊140來審查用戶的身分是否有資格進(jìn)行檔案存取,以確保服務(wù)器100中的數(shù)據(jù)安全性。
詳細(xì)來說,請參考圖2,其為依據(jù)本發(fā)明一實施例的服務(wù)器100執(zhí)行來自電子裝置102的一請求指令的示意圖。如圖2所示,首先,當(dāng)使用者需要自服 務(wù)器100下載一檔案時,電子裝置102會傳送一請求指令至服務(wù)器100中,在本實施例中,請求指令為一網(wǎng)絡(luò)地址或是相關(guān)的一檔案路徑"/volume1/share/a.txz"。接著,網(wǎng)頁服務(wù)模塊130接收此所述請求指令,并將所述請求指令轉(zhuǎn)送到共通網(wǎng)關(guān)接口模塊140,或是將所述請求指令作處理后轉(zhuǎn)送到共通網(wǎng)關(guān)接口模塊140。共通網(wǎng)關(guān)接口模塊140在接收到所述請求指令之后,會先判斷所述請求指令是否具有執(zhí)行的權(quán)限,以產(chǎn)生一判斷結(jié)果。更具體來說,由于用戶在通過電子裝置102聯(lián)機(jī)到服務(wù)器100會登錄本身的使用者身分(也就是使用者賬號),故共通網(wǎng)關(guān)接口模塊140可以通過判斷所述請求指令的一用戶身分與一檔案路徑來決定出所述請求指令是否具有執(zhí)行的權(quán)限。在判斷完所述請求指令是否具有執(zhí)行的權(quán)限之后,共通網(wǎng)關(guān)接口模塊140傳送所述判斷結(jié)果至網(wǎng)頁服務(wù)模塊130,并同時回傳欲下載的檔案的檔案路徑至網(wǎng)頁服務(wù)模塊130,在本實施例中,共通網(wǎng)關(guān)接口模塊140使用nginx網(wǎng)頁服務(wù)器的x-accel機(jī)制來傳送檔案路徑"/volume1/share1/a.txz"至網(wǎng)頁服務(wù)模塊130。
網(wǎng)頁服務(wù)模塊130在收到來自共通網(wǎng)關(guān)接口模塊140的判斷結(jié)果以及檔案路徑之后,會根據(jù)所述請求指令是否具有執(zhí)行的權(quán)限且所述請求指令是否符合所述配置文件內(nèi)所描述的所述應(yīng)用程序,來決定是否將所接收到的檔案路徑重新設(shè)定為一正確的檔案路徑。具體來說,假設(shè)網(wǎng)頁服務(wù)模塊130中的配置文件描述了檔案管理應(yīng)用程序(filestation)以及音樂播放應(yīng)用程序(audiostation)可以允許下載操作,則當(dāng)所述請求指令是屬于檔案管理應(yīng)用程序或是音樂播放應(yīng)用程序時,網(wǎng)頁服務(wù)模塊130會將所接到的檔案路徑"/volume1/share1/a.txz"重新設(shè)定為正確的檔案路徑,例如將接收到的檔案路徑的前面加上"^\volume\d+/"以產(chǎn)生正確的檔案路徑;之后,網(wǎng)頁服務(wù)模塊130根據(jù)此正確的檔案路徑自服務(wù)器100中取得檔案,并將所讀取的檔案回傳給電子裝置102。
另一方面,假設(shè)所述請求指令不屬于檔案管理應(yīng)用程序或是音樂播放應(yīng)用程序時,也就是說,所述請求指令所屬的應(yīng)用程序沒有被描述在網(wǎng)頁服務(wù)模塊130的配置文件中時,則網(wǎng)頁服務(wù)模塊130便不會將所接收到的檔案路徑重新設(shè)定為正確的檔案路徑。以圖3所示的為例,若是所述請求指令所屬的應(yīng) 用程序沒有被描述在網(wǎng)頁服務(wù)模塊130的配置文件中時,則網(wǎng)頁服務(wù)模塊130會將所接收到的檔案路徑"/volume1/share1/a.txz"轉(zhuǎn)換為不正確的檔案路徑"/usr/syno/synoman/volume1/share1/a.txz",因而造成網(wǎng)頁服務(wù)模塊130無法正確地讀取所需的檔案。
在以上的實施例中,有關(guān)于檔案的存取全部都是由網(wǎng)頁服務(wù)模塊130來完成;而共通網(wǎng)關(guān)接口模塊140只會傳送檔案路徑給網(wǎng)頁服務(wù)模塊130,而不會針對請求指令來進(jìn)行檔案的存取,以降低服務(wù)器100在操作上的負(fù)擔(dān)。此外,當(dāng)請求指令所請求的檔案為一靜態(tài)檔案時,此方式可具有較佳的存取效能。
第2、3圖所示的使用轉(zhuǎn)換路徑來限制檔案存取的方式可視為是一種使用者空間(userspace)的安全性保護(hù)方式,此外,在本發(fā)明的另一實施例中,也可以同時再采用一種核心空間(kernelspace)的保護(hù)方式來更進(jìn)一步提升安全性。具體來說,請參考圖4,其繪示了多個儲存區(qū)塊410_1-410_3,其可設(shè)置于儲存單元120中或是服務(wù)器100內(nèi)的任何儲存裝置,其中每一個儲存區(qū)塊410_1-410_3具有其特定的存取目錄,例如圖標(biāo)的“/volume1”、“/volume2”、“/volume3”,且每一個儲存區(qū)塊410_1-410_3只可以由特定應(yīng)用程序所對應(yīng)到的請求指令來存取。舉例來說,假設(shè)儲存區(qū)塊410_1是用來儲存檔案管理應(yīng)用程序(filestation)的檔案數(shù)據(jù),則當(dāng)用戶通過電子裝置102并使用檔案管理應(yīng)用程序來傳送請求指令時,網(wǎng)頁服務(wù)模塊130及共通網(wǎng)關(guān)接口模塊140所產(chǎn)生的檔案路徑便只會鏈接到儲存區(qū)塊410_1,而不會連接到其他的儲存區(qū)塊,以避免讀取到其他不適合被讀取的檔案,例如系統(tǒng)密碼文件及敏感的系統(tǒng)信息。舉另一例子來說,假設(shè)儲存區(qū)塊410_2是用來儲存音樂播放應(yīng)用程序(audiostation)的檔案數(shù)據(jù),則當(dāng)用戶通過電子裝置102并使用音樂播放應(yīng)用程序來傳送請求指令時,網(wǎng)頁服務(wù)模塊130及共通網(wǎng)關(guān)接口模塊140所產(chǎn)生的檔案路徑便只會鏈接到儲存區(qū)塊410_2,而不會連接到其他的儲存區(qū)塊。此外,在本實施例中,上述核心空間的保護(hù)方式是以linux安全模塊(linuxsecuritymodule,lsm)的apparmor來實作。
參考以上的公開內(nèi)容,本發(fā)明的執(zhí)行一請求指令的流程可以如圖5所示,其中圖5所示的流程步驟如下。
步驟500:流程開始。
步驟502:使用一網(wǎng)頁服務(wù)模塊來接收所述請求指令,并將所述請求指令傳送到一共通網(wǎng)關(guān)接口模塊。
步驟504:使用所述共通網(wǎng)關(guān)接口模塊來判斷所述請求指令是否具有執(zhí)行的權(quán)限。
步驟506:將所述共通網(wǎng)關(guān)接口模塊的判斷結(jié)果以及一檔案路徑回傳至所述網(wǎng)頁服務(wù)模塊。
步驟508:使用所述網(wǎng)頁服務(wù)模塊判斷所述請求指令所對應(yīng)到的應(yīng)用程序是否符合一配置文件的內(nèi)容。
步驟510:根據(jù)所述共通網(wǎng)關(guān)接口模塊的判斷結(jié)果以判斷所述請求指令是否具有執(zhí)行的權(quán)限,并判斷所述請求指令所對應(yīng)到的應(yīng)用程序是否符合所述配置文件的內(nèi)容。若是,流程進(jìn)入步驟512;若否,則流程進(jìn)入步驟514。
步驟512:重新設(shè)定所述檔案路徑,以直接讀取并回傳所述檔案。
步驟514:不會將所述檔案路徑設(shè)為正確的檔案路徑,且回傳一讀取失敗的通知。
簡要歸納本發(fā)明,在本發(fā)明的服務(wù)器中,其中的網(wǎng)頁服務(wù)模塊僅使用一種工作者身分來執(zhí)行請求指令,且為了可以存取任何所需要的檔案內(nèi)容,此工作者身分具有高的訪問權(quán)限;此外,為了避免高訪問權(quán)限所造成的安全性問題,本發(fā)明的實施例另外在核心空間與使用者空間上分別設(shè)計了安全模塊來限制請求指令的存取范圍,以在高的存取效能下可以兼顧數(shù)據(jù)的安全性。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù) 范圍之內(nèi)。