一次性付費進群,長期免費索取教程,沒有付費教程。
進微信群回複公衆号:微信群;QQ群:460500587
教程清單 見微信公衆号底部菜單 | 本文底部有推薦書籍

微信公衆号:計算機與網絡安全
ID:Computer-network
MediaWiki是一種熱門的開源Wiki engine,是一個在Linux上闡述建構Web 伺服器 (通常稱為LAMP伺服器)過程的好方式。通過部署MediaWiki,可以了解組建Linux Web 伺服器 的軟體包。 1、建立LAMP伺服器 如果您或您的企業有資訊、應用程式或服務,那麼很可能希望将它們提供給Web浏覽器使用。網絡伺服器(Web server)是在計算機上運作的軟體,它允許托管在本地的資源被網站的通路者檢視和使用。顯然,這個術語也經常被用來描述承載Web 伺服器 軟體的計算機。 下面示例建構一個動态網站。這種網站的網頁是在伺服器端操作幫助下生成的。同樣還可以建立靜态網站,在大多數情況下,這些網站僅提供将全部工作委托給用戶端Web浏覽器的純HTML檔案。 如圖1所示,大多數Linux Web 伺服器 都建立在稱為LAMP伺服器的四大支柱上。字母LAMP代表Linux、Apache Web 伺服器 管理軟體、MySQL或MariaDB資料庫引擎和PHP 伺服器 端腳本語言(或者,Perl或Python)。
圖1 Apache網絡伺服器軟體使基于HTTP的資源向外部使用者公開并協調内部服務 LAMP伺服器是一種如此常見的Linux配置,至少在Ubuntu上有它自己的安裝包。本例末尾的脫字元(^)将目标辨別為綁定在一起的特殊包,以簡化公共軟體堆棧的安裝:
在要求建立資料庫 密碼 之後,該指令會将一個正在運作的Web 伺服器 自動放入系統,除了建立一些網站内容,什麼也不需要做。在Web浏覽器中輸入伺服器的IP位址,則會顯示安裝Apache時建立的歡迎頁面。 但是自動化并不總是最好的解決方案。有時想定制釋出版本來自定義軟體棧以保證應用相容性,或者用一個包代替另一個包(例如用MariaDB覆寫MySQL)。在這種情況下,手動設定将特别有用,因為它将使您更好地了解每個部分的工作原理。這裡有一個清單,列出了需要做什麼才能達到目标: 1)安裝Apache; 2)向Web文檔的根目錄中添加一兩個網頁; 3)安裝SQL引擎(在本例中是MariaDB); 4)安裝PHP 伺服器 端腳本語言; 5)安裝和配置MediaWiki。 2、手動設定Apache Web伺服器 Web伺服器軟體有一個主要任務——引導站點通路者通路伺服器 主機 上的正确目錄和檔案,以提供恰當的網站資源。實際上,在浏覽器位址欄中輸入統一資源定位符(URL)位址實際上是對在遠端網站主機上運作的Web伺服器軟體的請求,以便從主機檔案系統檢索網頁、視訊或其他資源并将其加載到浏覽器中。Web伺服器軟體通常與主機伺服器上的其他系統緊密內建,如網絡系統、安全系統和檔案系統工具等,以便很好地管理對本地資源的通路。 盡管市場不穩定,但開源Apache HTTP伺服器在所有平台上往往都主導Web伺服器市場。因為Apache非常流行,盡管它有很多包括Nginx(也是跨平台)和Microsoft的IIS(隻在Windows伺服器上運作)等強有力的競争對手。 (1)在Ubuntu上安裝Apache Web伺服器 安裝Apache本身很容易。在Debian/Ubuntu上,即apt install apache2。如果正在Ubuntu機器上進行操作,一旦安裝了Apache,打開浏覽器通路網站,将看到圖2所示的介紹頁面。
圖2 在浏覽器中輸入伺服器URL或IP位址時顯示的Apache預設頁面中包括一些重要的基本配置和導航資訊 将用來通路的在工作站上運作的Apache站點的URL是本地主機(localhost)。相反,如果選擇在LXC容器或VirtualBox VM上工作,那麼将使用該虛拟機的IP位址作為URL。為了確定能夠對運作在VirtualBox VM上的站點進行網絡通路,确認它被配置為使用橋接擴充卡。 (2)填充網站文檔root 考慮到除了Apache歡迎頁面網站上什麼也沒有,需要添加一些内容。要做到這一點,需要知道内容在哪裡。 内容的位置由Apache配置檔案中的DocumentRoot設定控制。在CentOS系統中,配置資訊在/etc/httpd/conf/目錄下的httpd.conf檔案中。Ubuntu使用者将在/etc/apache2/sites-available/目錄下的000-default.conf檔案中找到。無論哪種方式,在配置檔案中搜尋DocumentRoot都會顯示一個這樣的值:
這意味着Apache會将所有傳入的浏覽器請求引導到/var/www/html/目錄下的檔案中。可以将該值更改為指向希望的檔案系統中的任何位置。如果計劃在伺服器上托管多個網站,可以指向多個檔案系統位置。 可以在文檔根目錄中建立一個名為index.html的文本檔案(該檔案将覆寫使用相同名字的Apache歡迎頁面)。在檔案中輸入自己的歡迎文本以及到第二個HTML檔案的連結和圖形圖像。確定在建立第二個檔案的同時建立一個圖檔檔案。index.html檔案可能是這樣的:
3、安裝SQL資料庫 網站還有很多方法使用動态通路安裝在背景的資料庫引擎。用于類似BLS項目(或MediaWiki站點)的資料庫引擎類型稱為關系資料庫(relational database),它是一種将資料組織成由列和行構成的表的工具。單個行中包含的資料稱為記錄(record)。一個記錄由一個被稱為鍵(key)的ID值辨別,它可以用來引用表之間的記錄。 結構化查詢語言(Structured Query Language,SQL)是一種在關系資料庫上管理的資料标準化文法。資料庫引擎(database engine),用于管理關系資料庫資料,并将其開放給管理者和使用SQL文法的自動化程序的軟體。 首先,必須安裝自己的資料庫引擎:
為什麼選擇MariaDB而不是MySQL?它們都使用完全相同的MySQL标準運作。事實上,它們最初是由同一個人創造的。兩者都很棒,但至少現在,MariaDB似乎受益于更積極的開發和支援。除了這兩個,還有其他重要的SQL資料庫引擎在IT界廣泛使用,包括Oracle、PostgreSQL和Amazon的Aurora。 可以使用systemctl來确認DB正在運作:
(1)強化SQL 當安裝了MariaDB,加強資料庫安全性總是一個好主意,是以需要運作mysql_secure_installation工具。如果在安裝過程中沒有被提示建立root MariaDB密碼(這是非常常見的),那麼需要運作mysql_secure_installation,這也是設定身份驗證的方式。運作該工具會呈現以下互動式對話框:
mysql_secure_installtion需要設定的密碼旨在防止匿名使用者和遠端使用者通路資料。除非計劃将這些資料庫隻用于測試,并且它不包含重要或敏感的資料,否則不要接受預設值。 如果mysql_secure_installation必須使用sudo權限,那麼就使用這種方式建立密碼。 (2)SQL管理 下面展示一些簡單的資料庫管理指令。事實上,可能永遠不需要直接運作這些指令中的任何一個,因為大多數資料庫是從應用程式代碼中通路的,而非從指令行中通路。手動管理SQL資料庫中通常包含的數千條甚至數百萬條資料記錄很不友善。 有時可能需要手動搭建資料庫。當內建一個新的應用程式時,可能需要處理一些測試資料。或者,也許新業務起步緩慢,不是投資一個新的應用程式,而是手動管理客戶,至少應該知道這是如何做的。 預設情況下,将使用root使用者通路和管理MariaDB或MySQL中的資料庫。出于安全原因,單個資料庫應該由正常資料庫使用者擁有和管理,這些使用者隻獲得了執行特定任務所需的權限。在這個示範中,簡單起見,直接使用root使用者。稍後,在展示如何設定MediaWiki資料庫時,将通過建立非root使用者來正确地執行它。 通路資料庫 無論安裝了MariaDB還是MySQL,使用mysql後接-u root登入shell。告訴資料庫,希望作為root使用者進行身份驗證。-p意味着将被提示輸入MariaDB密碼:
除非以sudo權限運作mysql指令,否則MariaDB可能不允許登入。如果發生這種情況,請使用sudo登入并提供建立的MariaDB密碼。然後在MySQL提示下運作這三個指令(用your-password替換密碼):
下次登入時,應該不再需要sudo,更重要的是,MediaWiki應該能夠正确地完成它的工作。下面是如何建立一個新的資料庫:
假設您的公司需要存儲客戶聯系資訊。可以在資料庫中為聯系人建立一個新表,如下所示:
以下是如何輸入新的資訊:
若要顯示新Contacts表中的所有資料,請輸入select*:
注意表中的ID值,它可以用作記錄的鍵值。當全部完成後,可以通過輸入exit來關閉MariaDB shell。 如果永遠不需要手動執行那些任務,為什麼要這麼麻煩呢?因為,為了将自動化操作與資料庫內建在一起,幾乎肯定有一天需要在腳本和應用程式代碼中包含各種MySQL語句。即使是最簡單的網上購物門戶也依賴于外部資料。 建立MediaWiki資料庫使用者 MariaDB在建立時就伴随着一個可用的root使用者。因為root使用者對系統中的所有表都具有完全的管理權限,是以在日常操作中使用root不是一個好主意。相反,從安全性的角度看,最好為每個資料庫建立唯一的使用者,并且隻給他們需要的通路權限。 讓我們再次登入到MariaDB,并為MediaWiki建立一個名為wikidb的新資料庫以備使用。之後将建立一個名為mw-admin的使用者。FLUSH PRIVILEGES指令啟用新的設定,并授予mw-admin使用者對wikidb資料庫的完全控制權: 4、安裝PHP LAMP最後的部分是PHP腳本語言。PHP是一種工具,可以用來編寫自己的Web應用程式。預先建構的PHP應用程式經常被第三方應用程式(如MediaWiki)用來通路和處理系統資源。是以,假設在使用LAMP伺服器時需要安裝的Pin碼是安全的。 (1)在Ubuntu中安裝PHP 想要最新的PHP嗎?apt install php就能在Ubuntu中搞定一切。希望它與Apache和諧運作,同樣還需要一個擴充:
在更改Web伺服器的系統配置時,應該養成重新啟動Apache的習慣。如下:
就是這樣。現在PHP應該是可用的了。 (2)測試PHP安裝 為了確定PHP安裝是可用的(以及了解PHP的本地環境和資源內建),在Apache Web文檔的root目錄中使用.php檔案擴充名建立一個新檔案。然後在檔案中填充如下的文本行:
現在轉到浏覽器,輸入正在運作PHP的機器的IP位址(或本地主機)以及建立的檔案的名稱:
将看到一個長的Web頁面(如圖3所示),被分成許多部分,這些部分描述計算機和PHP與之對話的方式。
圖3 phpinfo顯示的配置和環境資料樣本 完成後,請確定删除或者限制對testmyphp.php檔案的通路。将此類系統資訊向公衆公開是一個嚴重的安全漏洞。 5、安裝和配置MediaWiki
下面是如何一步步實作這個過程的步驟:
1)下載下傳并打開MediaWiki壓縮包;
2)識别和安裝必要的軟體擴充;
3)将MediaWiki連接配接到MariaDB資料庫;
4)運作并測試安裝。
轉到MediaWiki下載下傳頁面(www.mediawiki.org/wiki/Download),單擊Download MediaWiki擷取最新的安裝包。如果希望通過指令行将檔案直接拉入伺服器,可以右鍵單擊Download連結,選擇Copy Link Address,并将位址與wget程式一起粘貼到終端視窗:
如果在運作之前的指令時,顯示-bash:wget:Command Not Found錯誤,那麼需要安裝wget。 對下載下傳的壓縮包運作tar建立一個包含所有解壓縮檔案和目錄的新目錄。希望将整個目錄層次結構複制到檔案系統上的某個位置,在那裡它将完成它的工作。如果MediaWiki是伺服器上唯一的Web應用程式,那麼這可能意味着Web root目錄如下所示:
如果MediaWiki隻是衆多應用程式中的一個,那麼可能希望在文檔root中建立一個子目錄,該子目錄将以實用和可以被推定的方式公開服務。例如,将檔案放入名為/var/www/html/mediawiki的目錄中,意味着使用者将在www.example.com/mediawiki上找到MediaWiki,假設使用example.com作為公共域名。 從這裡開始,MediaWiki浏覽器接口接管工作。在浏覽器中輸入伺服器IP(或是本地主機)以及MediaWiki目錄中的index.php檔案位址。如果将檔案複制到/var/www/html/root,那麼它将看起來像這樣:
相反,如果為MediaWiki建立了一個子目錄,它可能是這樣的:
通常,當第一次安裝一個應用程式時,會遵循一個友好的線上指南的指導,最好是一個由項目開發人員自己建立和維護的指南。更常見的情況是,這樣的指南将提供給一個包依賴項的冗長清單,一般會快速閱讀,然後複制并粘貼到apt install指令中。 在這裡隻安裝了Apache、MariaDB和PHP包的基本部分。 (1)缺少擴充的故障排除 設計MediaWiki安裝過程的人明智地預見事情不會總是順利進行。如果是配置中缺少了某些内容,将得到一個包含錯誤資訊的頁面。在這種情況下,如圖4所示,似乎缺少了兩個PHP擴充:mbstring和xml。
圖4 一個有用的錯誤頁面顯示我的系統缺少兩個擴充,并提供了到對應的PHP文檔頁面的連結 使用apt search來檢視什麼包與mbstring相關。因為正在運作PHP 7,是以php7.0-mbstring包似乎最有可能讓MediaWiki重新綻放笑容:
類似地,對xml和php(apt search xml|grep php)的搜尋告訴您一個名為php7.0-xml的包似乎可能滿足MediaWiki的XML需求。将安裝這兩個包,然後使用systemctl重新啟動Apache:
所有這些有效方式的美好之處在于,不需要了解多位元組字元串編碼或者甚至不需要了解XML是什麼,也不需要了解為什麼沒有它們,MediaWiki會完全無法工作。隻要我們能夠信任應用程式的開發人員,遵循他們的指令就沒有錯了。整個Linux包管理系統的基本原則建立在官方存儲庫的管理人員已經為我們完成了審查工作的前提上。我們能做的就隻有希望他們是對的。 回到我們的示例,如果一切都按照計劃進行,重新整理浏覽器頁面應該會回到最初的MediaWiki介紹頁面。當頁面加載時,會看到一個關于丢失LocalSettings.php檔案的警告和設定wiki的連結。當點選該連結,将選擇一個語言選項,然後會顯示MediaWiki環境檢查頁面以及……更多的麻煩! 最大的問題是缺少資料庫驅動(database driver)。這是用于PHP和本例中MariaDB談判的軟體。沒有安裝這個軟體,确實是一個大麻煩。盡管圖5所示建議的包是php5-mysql,apt search告訴我們,我們使用php-mysql包更有可能成功。
圖5 醒目的x表示最嚴重的問題,其他記錄表示不太嚴重的警告 附帶安裝APCu(緩存和優化PHP中間代碼的架構的一部分)和ImageMagick(圖像處理工具)這兩個推薦的PHP擴充程式。再次重新開機Apache并再次重新整理浏覽器視窗,應該完全成功了:
将看到頁面底部的“繼續”按鈕。點選它。 (2)将MediaWiki連接配接到資料庫 通過Connect to Database頁面提供的資訊告訴MediaWiki: ● 在系統上安裝了什麼樣的資料庫(本例中是MySQL或相容的); ● 資料庫所在的位置(可以是遠端的,甚至是基于雲的,但是本例中在本地伺服器上,是以localhost是正确的值); ● 想給MediaWiki使用的資料庫名稱(将使用wikidb作為資料庫名稱); ● 現有資料庫使用者賬戶的名稱(本例中為mw-admin); ● 目前資料庫賬戶的密碼(這允許MediaWiki通路MariaDB并建立和管理其資料庫;參見圖6)。
圖6 部分MySQL設定頁面,在這裡告知MediaWiki如何連接配接到資料庫 如果MediaWiki無法連接配接到資料庫,請确認正在使用正确的密碼,但也要確定能夠從指令行登入到MariaDB Shell。 如果一切順利,将看到螢幕上的一系列顯示,并輸入配置細節,如資料庫設定、wiki的名稱(類似于本例中Company Documentation)以及wiki管理者賬戶的使用者名、密碼和聯系電子郵件位址。這個賬戶與已經擁有的Linux 主機 或MariaDB上的賬戶沒有聯系。 一些可選的設定問題允許設定使用者權限的偏好、wiki内容的版權、用于發送通知郵件的電子郵件伺服器,以及用于浏覽器内WikiEditor或反垃圾郵件插件等軟體擴充。可能除了傳回的電子郵件位址之外,預設值應該都可用。 當完成後,MediaWiki開始它的安裝過程。安裝完成後,它提示下載下傳一個名為LocalSettings.php的檔案,然後将其儲存到MediaWiki根目錄(在本例中是/var/www/html/)。可以用scp将儲存的檔案複制到使用者的主目錄:
然後,用伺服器上的指令,将它移到文檔根目錄:
一切就緒後,傳回與前面使用的位址相同的浏覽器頁面(如10.0.3.184/index.php)。這一次,如在圖7中看到的,會在全新wiki的首頁上發現自己。
圖7 可以點選頁面頂部的Edit标簽添加并編輯網頁内容和連結 6、在CentOS上安裝Apache Web伺服器 如果想避免我們在Ubuntu安裝工作中遇到的一些麻煩,可以考慮進行一些先發制人的研究,以确定LAMP難題的各個部分都需要哪些發行版本。快速浏覽MediaWiki安裝需求頁面(http://mng.bz/4Bp1)應該可以獲得安裝Apache Web 伺服器 (或在CentOS上的httpd)所需的所有資訊。一旦完成,得到軟體很簡單:
預設情況下,Apache不會運作。還記得如何在systemd上處理它嗎?
systemctl start指令啟動服務,enable使它能夠在計算機每次啟動時啟動。為了确認Apache正在運作,可以使用curl列印網頁到控制台終端,輸入localhost以告訴curl您在本地服務預設頁面。可能需要安裝curl,截止目前一切順利。如果curl輸出如下的内容,那麼Apache顯然在做正确的事:
成功的curl指令意味着Apache正在運作。但可能仍然無法從GUI浏覽器加載頁面。有可能會得到“This Site Can抰Be Reached”的錯誤資訊。問題出在什麼地方呢? 這個錯誤說明了Ubuntu的機理與CentOS的另一個有趣的不同之處。預設情況下,Ubuntu沒有任何防火牆。Apache已經準備好在安裝後立即接受傳入的外部通信量。CentOS安全地緊閉所有端口。如果希望Web伺服器接收入站HTTP請求,首先需要打開HTTP端口(通常是端口80)。 (1)了解網絡端口 什麼是網絡端口(network point)?它僅僅是一種給網絡使用者識别特殊伺服器資源的方法。假設伺服器正在托管兩個單獨的應用程式。通路者可以使用其公共IP位址或者相應的DNS域名(如google.com的172.217.1.174)通路伺服器。但是浏覽器如何知道您要加載兩個應用程式中的哪一個? 當特定的端口被提前指定時,才能告知應用程式偵聽伺服器的流量。是以,一個應用程式可以使用端口50501,另一個使用端口50502。如圖8所示,第一個應用程式将使用192.168.2.10:50501來響應傳入的請求(假設192.168.2.10是伺服器的IP位址),而第二個應用程式使用192.168.2.10:50502。
圖8 配置為偵聽單獨網絡端口的應用程式(80=insecure HTTP;443=secure HTTPS;30303=a custom application) (2)網絡流量控制 如何控制對網絡的通路?一種方法是通過防火牆規則(firewall rule)。在CentOS上,通過防火牆服務和它的firewall-cmd工具來處理。在這種情況下,需要添加http服務,并且通過--permanent标志,確定規則在每次重新啟動服務或啟動計算機時都是可用的。應用這些更改,重新啟動服務:
這樣,就可以成功加載CentOS版本的Apache測試頁面(圖9)。
圖9 CentOS Apache Web伺服器上的預設頁面 (3)在CentOS上安裝MariaDB 安裝本身是簡單的。需要手動啟動MariaDB,然後用enable配置它并加載到系統啟動:
從這裡開始,可以按照Ubuntu安裝過程中介紹MariaDB設定步驟的那一部分進行操作。 (4)在CentOS上安裝PHP 要記住新版本的軟體包和舊版本的軟體包在軟體倉庫中可以共存。 可以進行選擇,并且最新的一個版本并不總是想要的。 可能是因為正在使用的某個應用程式會由于這個包的最新版本而中斷,或者對項目來說,新版本可能不夠穩定或不安全。 某天很有可能需要安裝一個非官方Linux軟體倉庫中的軟體包。 需要保證其他服務和應用程式的相容性得到滿足,還需要確定非官方包和配置在系統更新後仍然存在。 當然,必須格外小心,確定包本身不包含惡意軟體。 不論是否應用官方CentOS PHP軟體倉庫中的版本,也許需要手動添加單個子產品以支援操作。 遵循線上指南來設定将是有益的。 可以運作yum search php-來檢查可用的子產品,然後運作yum info并選取一個想了解的檔案名來了解某個特定包的更多内容:
安裝好PHP和任何附加的PHP子產品後,重新啟動Apache以確定Apache可以将新子產品相容到它的服務中:
使用phpinfo來确認PHP已正确安裝。
微信公衆号:計算機與網絡安全
ID:Computer-network
【推薦書籍】