跳到主要內容

Fedora 29 架站實務 之 Part 7 安全與權限問題

在前一個章節裡:

Part 6 安裝phpMyAdmin


對外檢測,四個問題,先問自己


  • 什麼開了 ? (防火牆或網頁放行了什麼服務 ?)
  • 什麼要用加密保護的 ? (這些開放的服務哪些可以不要密碼或登入,哪些需要? 哪些需要加密通訊,哪些不用 ?)
  • 什麼不該被看到 ? (別人不能夠看到這些東西)
  • 什麼應該要能讓別人看到的 ? (這些服務別人要能夠存取)

所以如果架設到現在:


  • 什麼開了: WWW(HTTP), Secure WWW(HTTPS), SSH, Cockpit
  • 什麼要用加密保護: Secure WWW(HTTPS), SSH(有加密保護), Cockpit(有加密保護)
  • 什麼不該被看到: [網站]/phpMyAdmin/setup/ (這我稍後會解釋)
  • 什麼應該要能讓別人看到: [網站]

對內檢測,三個問題,先問自己:


  • 內外對應的服務有哪幾個 ? (開放的Port與對應的服務)
  • 內外對應的資料夾有哪些 ? (別人存取的到的東西,實際上在伺服器上的哪個位置 ?)
  • 內外對應的資料夾權限是否正確 ? (是否屬於正確的擁有者,讀、寫、執行權是否都正確的設定 ?)

所以如果從架設到現在:


內外對應的服務:
nginx < WWW(HTTP)
nginx < Secure WWW(HTTPS)
sshd < SSH
cockpit < Cockpit

內外對應的資料夾:
/usr/share/nginx/html < http://[網站]
/usr/share/phpMyAdmin/ < http://[網站]/phpMyAdmin

內外對應的資料夾權限:
/usr/share/nginx/html/ : 擁有者: root,屬於Group: root,權限d, rwx, r-x, r-x
/usr/share/phpMyAdmin/ : 擁有者: root,屬於Group: root,權限 d, rwx, r-x, r-x

我們分別可以從以下者另看到這些資料夾對應的權限:

# ls -l /usr/share/nginx | grep html
# ls -l /usr/share/ | grep phpMyAdmin


而現在我們來簡單的說明一下權限概念:

Linux 對於一個檔案或資料夾的權限分為: 擁有者能夠做什麼 ? 屬於Group內的使用者可以做什麼 ? 如果不屬於擁有者也不是在Group內的使用者可以做什麼,這會分別表示成像以下這樣的東西:
drwxrwxrwx,而讀法是: d, rwx, rwx, rwx,我們分別把他以第一區塊,第二區塊,第三區塊,第四區塊來說明:


  • 第一區塊: d = 這個是目錄, l = 這個是連結, - = 這是個檔案
  • 第二區塊: 擁有者可以對這個項目施行的權限範圍
  • 第三區塊: 屬於Group內的使用者可以對這個項目施行的權限範圍
  • 第四區塊: 既不是擁有者,也不是Group內的使用者可以對這個項目施行的權限範圍

而第二到第四區塊施行的權限範圍接以rwx表示: r = 可讀取, w = 可寫入, x = 可執行

所以我們以一個例子來說明,當您執行ls -l 看到某個資料夾的權限如下:
drwxr-x---. 12 root nginx 10月 27, 11:25 website2 這代表website2 這個資料夾:
  • 對於擁有者root來說: 可以對讀取資料夾內容,可以寫入這個資料夾,可以執行資料夾內的檔案(無論是Script或Binary File)
  • 對於屬於Group nginx 內的使用者來說: 可以讀取資料夾內容,不可寫入資料夾,可以執行資料夾內的檔案 (無論是Script或Binary File)
  • 而如果對於一個不是root,也不是nginx 這個Group內的使用者: 不可讀取、不可寫入、不可執行這個資料夾內的內容。
這也是您熟悉的chmod 指令在對於權限的管理與變更的依據:
chmod [-R(是否連同資料夾下所有檔案與子資料夾都要套用] [權限ID(三個數字,第一個數字描寫擁有者的權限,第二個數字描寫屬於Group的權限,第三個數字描寫不屬於擁有者也不屬於Group的權限] [資料夾名稱]
所以這也是熟悉的chmod 777 /some/folder/some/file 的由來,而每個數字的ID表述如下,而為什麼這些數字ID是表示這些權限,這跟Binary 表示有關,往後有時間會再提及,目前提供各為一個簡表參考:
7 = rwx
6 = rw-
5 = r-x
4 = r--
3 = -wx
2 = -w-
1 = --x
0 = ---

所以我們來看一個例子:

# ls -l
1個項目
drwx------. 2 root nginx 3月 26, 11:45 website2
# chmod -R 754 ./website2
# ls -l
1個項目
drwxr-xr--. 2 root nginx 3月 26, 11:45 website2
#


當然chmod 有沒有更簡單的使用方式 ? 當然有,只是使用數字ID是最簡便的,而不參照數字的用法是這樣:

chmod [-R(是否連同資料夾下所有檔案與子資料夾都要套用] [要針對誰] [要賦予什麼權限] [資料夾或檔案]
要針對誰有四個選項 u, g, o, a :
u = 針對擁有者
g = 針對屬於Group
o = 針對既不是擁有者也不是Group內
a = 全部

要賦予什麼權限是靠 +號 -號 =號來賦予:
+[你要的權限] = 對指定的物件加上你要的權限
-[你要的權限] = 對指定的物件移除你要的權限
=[你要的權限] = 對指定的物件直接賦予你要的權限

所以我們來看一個例子:

# ls -l
1個項目
drwxr-xr--. 2 root nginx 3月 26, 11:27 website2
# chmod -R g-x ./website2
# chmod -R o-r ./website2
# ls -l
1個項目
drwxr-----. 2 root nginx 3月 26, 11:27 website2
# chmod -R g=rwx ./website2
# ls -l
drwxrwx---. 2 root nginx 3月 26, 11:27 website2
#


講完這麼多權限設定的東西,現在言歸正傳:

所以當我們去檢查html 與phpMyAdmin 這兩個資料夾時:
drwxr-xr-x. 2 root root 118 3月09:50 html
drwxr-xr-x. 11 root root 4096 3月25 21:15 phpMyAdmin

我們來驗證一下權限:
這兩個資料夾分別都能在[網站]/ 與[網站]/phpMyAdmin看到
而nginx 要能讀取這兩個資料夾,php-fpm 也要能夠執行裡面的php檔案,故這兩個程式都需要r 和 x的權限來執行。
而nginx與php-fpm 經由我們設定都是由使用者 nginx 來執行的
所以在這兩個資料夾中 nginx 不屬於root,也不是root的Group,屬於其他,而我們可以看到這兩個資料夾對於其他人的權限都是r-x,所以是權限設定是沒問題的。

PhpMyAdmin 是個討厭的個案:

為什麼我會把phpMyAdmin 拉來最後面說呢 ? 這是個很複雜的問題: phpMyAdmin 原先是需要透過執行/setup/ 來進行安裝,爾後必須要把setup資料夾刪除,解決方法很簡單啊,一點也不糾結,那為什麼不把/phpMyAdmin 底下的setup資料夾刪除就好 ? 還要搞這麼多問題… 這要先講到Fedora對於軟體更新:

Fedora 對於軟體的更新經常是: 更新所有、不動設定(也就是除了那些/etc/xx.conf 或是什麼xx.conf之類的),其他屬於軟體一部份的,無論是不是使用者對軟體有做出直接實體的修改,更新時候會被Patch 回去。

這代表的意義: 即使setup資料夾刪除了,下次如果Fedora 對於軟體庫內的phpMyAdmin 有了更新,刪除的setup資料夾是可能會再回來的,也就是刪除setup並不是一個一勞永逸的方法,除非我們自己手動安裝phpMyAdmin 而不透過Fedora 的軟體庫安裝。

當然要解決的方法有很多種:
我們自己去phpMyAdmin上下載來安裝就好了 => 但是麻煩
透過改權限的方法把setup資料夾變成chmod 600 => 聽起來不錯,但下次更新會不會改回來 ?
在nginx 設定中直接禁止存取/phpMyAdmin/setup => 似乎是最好的方法

請注意:
由於往後我們會再額外提到nginx設定檔的撰寫方法,所以現在我們只以處理phpMyAdmin進行個案處理,對於nginx設定檔不做詳加說明。

# nano /etc/nginx/default.d/phpMyAdmin.conf
在最後面輸入:
location /phpMyAdmin/setup/ {
          deny all;
}



完成後儲存離開,並且重新載入nginx

# systemctl restart nginx


這時再開啟網頁瀏覽器,輸入: http://[你的IP]/phpMyAdmin/setup/,就會看到nginx 拒絕使用者的要求了。

留言

這個網誌中的熱門文章

網路卡卡急救章 – 您用的網路,您了解嗎 ?

這是我應該在乎的事情嗎 ? 是,同時也不是。取決於你對於網路的要求程度有多高而有變異。對於一個上上網偶爾看看Youtube的人,這些不是他會在乎的問題,便宜,能用就好,對一個線上遊戲玩家來說,穩定才是首要考量的問題,對一個追劇狂來說,方案提供的總流量才是考量。所以正在看文章的您是什麼樣的使用者呢 ? 無論怎麼樣的使用者,對於自己正在使用什麼樣的網路多了解一些,也不是壞事。

暫時當一下外國人的 SoftEther VPN Gate

在一個自由的國度與優質的ISP裡: 這兩個評斷台灣的網路服務環境,我想許多人便是吐槽不已,但我想與各位討論的,便是靜下來思考: 台灣的ISP好在哪些地方 ? 還記得第一次日本出差的嚮往,我期待著超乎我能所想像的高速網路,隨處可方便使用的行動網路。莫約小學(2006年左右),網路上大家總是謾罵著中華電信傲慢無理的價格且速度緩慢,而日本如火如荼的進行著光纖鋪設,便是邊用中華順便謾罵。 而在日本的三個月期間,用的是NTT(相當於日本版的中華電信)的有線網路與4G服務,我覺得才便能體會台灣ISP所提供的服務水準: NTT FLET'S光迴線 300 晚間尖峰時段測速 2018/3/05 會津若松市 中華電信 4G 晚間尖峰時段測速 2019/3/20 花蓮縣壽豐鄉 在日本,無線網路通訊基本上是沒有吃到飽的(Au WiMax 雖然流量無限但還是會有每日到量限速),所以若要回宿舍做事最好還是裝固網 But What can I say ? 而台灣的ISP(用中華電信的體驗下來),是鮮少管東管西的: eMule 流量要不要限制、BT故意阻擋等等,讓使用VPN的理由實在不多,而自由的發言,不管控觀看內容,我想這個就留給客官們各自評斷了。 而如果對於P2P不友善的ISP有哪些, 倒是可以看看這個表 ,便一切皆知喔。 有限制地區的服務: 然而網站有些內容仍然會因為地區的關係而決定要不要顯示,如果是學術研究者,會很經常用到TANET的SSL-VPN,因為這些 死要錢 的論文網站都會綁學校的IP Block,要使用非得以用學校的網路出去。日常生活中,最明顯的可以從某些Youtube 影片,陸方的影音網站便能知曉 VPN 與你: VPN能提供的好處不少,但能導致的壞處也不少: VPN的好處: 隱藏自己實際的身分、公共網路上(如機場、飯店等開放式WiFi)他人無法竊聽整個傳輸內容(包含上了什麼網站等等的)、使用當地國網路優勢 VPN的壞處: 不良VPN提供業者可能會記錄傳輸內容、伺服器效能不足導致網路使用緩慢。 SoftEther VPN 與筑波大學: 筑波大學在VPN方面的研究十分奇葩,也相對先進。用盡各種方式建立VPN(甚至只要能送Ping 也能作為VPN,實際運作原理不多說)

讓我們來談談DELL XPS 13 9343 那恐怖的雜音

作為Dell 旗艦級筆電的XPS系列: 對一個實驗生來說,長效高性能的筆電,是一個叫做: 想作為必備,但是沒本事買配備。 餐餐的泡麵與吐司果醬,當覺得已經似乎快超脫時,便重金砸下。