benjamin @Wiki 第3節 關於linux平台與apache伺服器的必備知識

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

linux是一個開放的軟體,他有很多迷人的特性,相信只要用過它一次的工程師,不愛上它的人應該是沒有才對。這一套軟體的美好的地方有很多,不過不在本書所應該要包含的範圍裡,不過我們需要apache這一套全世界最好的web伺服器來為我們服務的關系,所以借這裡的版面,探討兩個重要的觀念:
一、linux的使用者與群組管理。
二、apache的使用者管理,與basic認証。

一、linux的使用者與群組管理:

通在在linux下執行程式時,權限是很重要的一個觀念,這一個檔案是誰的,誰能夠閱覽,誰能夠編輯,誰能夠執行,都可以明確的設定。因為linux本身專為多人同時使用所設計的一套作業系統,所以在裡頭有非常嚴謹的使用者與使用者郡組的定義。

在linux之下,關於使用者與群組管理的命令,常常用的大概有下列幾種:

  • useradd :註冊一位新的使用者
  • userdel:刪除一位使用者
  • usermod:修改使用者設定內容
  • passwd:更改使用者的密碼
  • groupadd :增加群組
  • groupdel:刪除群組
  • groupmod:修改群組詳細設定內容
  • groups:查看當前使用者所參加的群組

雖 然命令很多,但是如果化整為零,其實使用者管理的內容,大多數都記載在/etc/passwd與/etc/group這兩個檔案,大多數的命令也是用來幫 助你修改這兩個檔案的內容。如果說你已經是linux的熟手了,或許你也會像我一樣比較喜歡手動去編輯這兩個檔案的內容。

使用者與群組在linux是重要的觀念,所以有數量相當多的命令,詳細情形請參考linux的相關書藉。這裡只作與nagios使用上相關的簡介。

在 我們安裝nagios的時候,需要指定nagios執行之時的使用者帳戶,群組,以及執行命令之時的使用者帳戶,群組。你可以指定任何帳戶,但是通常我們 都使用這些預設值。預設值的使用者帳戶是nagios。群組也是nagios。所以我們必須建立這一個帳戶及這一個用戶之後,才能開始我們的安裝。

安裝的細節將於後面說明,當一台已經在運行nagios的機器,我們使用ps這個命令可以發現這樣子的資訊:

nagios  21684 0.0 0.2 5764 1052 ?    S  09:17  0:00/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg

nagios的程序,正在由nagios的使用者所運行著。

nagios  21685 0.0 0.1 1660 596 ?    S  09:17  0:00/usr/local/nagios/libexec/check_ping -H 192.168.3.214 -w 100.0,20% -c500.0,60% -p 5

check_ping這一個命令正在被nagios執行,檢查位於 192.168.3.214 的主機。

不 只是nagios的安裝,其實很多其他程式的安裝也是如此。apache也是,雖然啟動主程式的通常是root,但是由root所fork出去的 process,也就是apache所使用來執行cgi,對應使用者對於網頁請求…等等的動作時,所使用的身份,也是必須在apache的設定檔裡來進行 設定。

#語法:User[username/#uid]
# 說明:設定httpd這程式的執行者是誰.
# 一般是 nobody,也可以是已註冊的 user,若用userid 要加上 # 號


#語法:Group[groupname/#gid]
# 說明:設定httpd這程式的執行者所屬的群組
# 一般是 nogroup,此 group 必須要存在於/etc/group

當設定完成之後,httpd.conf裡頭應該會有如下所示的兩行:
User nobody
Group nobody

當設定完成,啟動apache時,利用ps這個命令,可以發現,
root   30009 0.0 0.1 12716 792 ?    S  Nov17  0:37/servers/apache/bin/httpd -k start
nobody  4075 0.0 0.3 12852 1748 ?    S  Dec06  0:01/servers/apache/bin/httpd -k start
nobody  4076 0.0 0.3 12924 1752 ?    S  Dec06  0:02/servers/apache/bin/httpd -k start
nobody  4077 0.0 0.3 12852 1748 ?    S  Dec06  0:01/servers/apache/bin/httpd -k start

除了主要的process是root之外(因為我們是由root來啟動apache的),其余的子process都是nobody。

熟 悉windows的人可能一開始會覺得麻煩。因為在windows裡通常安裝一個程式,只要選擇setup.exe或install.exe,就可以輕鬆 的完成,windows很多細節都幫我們包裝起來了。在linux裡頭,由於一提到linux系列的作業系統,令人想到的都是放在機房裡的大型主機,或是 與server這個字會扯上一些關系,server通常必須要回應來個於client的請求,以及很多使用者的遠端登入,所以說,落實使用者管理是一件非 常基要的問題,而且這種管理也與安全性習習相關。

再度以nagios為例子,我們先看看下面這一張圖:

nagios的deamon執行plugin之後取得結果,將結果放在檔案裡保存。而apache,也就是nobody這一個角色,執行cgi,來查看執行的結果檔案,這些cgi種類很多,但是擁有者都是nagios。
這造成了一個問題,apache需要執行cgi,但是apache的身份是nobody,而這些cgi的擁有者是nagios。nobody想要去執行 nagios的程式,就好象是有一個路人跑到你家來跟你借廁所一樣的非常突兀。通常的情況是不語可的,除非你將這些cgi的權限設定成任何人都可以隨意使 用。
但是我們又不想要這麼做,我們只想要讓nobody與nagios這兩個使用者能夠使用,其他人因為完全不相關,所以並不想要開發權限給他們,以免造成安全上的問題。
為了解決這個需求,我們必須用到另外一個觀念,也就是群組(group)。此時我們需要與以下的命令交互使用:
  • chgrp:改變檔案所屬群組
  • chown :改變檔案的擁有人
  • chmod :改變檔案的屬性、SUID、等等的特性
這些命令可以幫助我們,將檔案指定給我們已經設定好的群組以及使用者。



二、apache的使用者管理,與basic認証

以下是常常使用的命令:

  • 以上說明了linuix的身份。我們接下來要進行的設定,與apache也是習習相關,我們知道,我們常常在某個網站登入會員,這種使用者的觀念其實在到處都可以見到。apache裡頭也有這樣子的概念。接下來我們要來看看如何在apache裡面,設定使用者。

    因為nagios可以接受外部來的命令,所以我們可以在網路上直接對它來進行設定,但是為了增加安全性,必須要事先在nagios裡指定誰能夠執行這些命令。那一個身份的使用者可以執行那些命令。

    比方說你如果是經理,那你就有可以執行申請預算的命令,你如果是員工,那你就無法自已執行,可能要透過你的經理。類似這種概念,我們可以用以下的命令在apache裡增加使用者。

    htpasswd 說明:

    htpasswd -{option}{passwd_file}{user}

    option 可使用:

    • -m 使用 MD5 編碼
    • -c 建立新的密碼檔
    • -b 附帶有"密碼"(不用再輸入一次密碼)

    建立 steven 的帳號密碼:

    [root@mailgw http_auth_users]# htpasswd-m.htpasswd steven
    New password:
    Re-type new password:
    Adding password for user steven
    [root@mailgw http_auth_users]#

    現在開啟您的Broser,輸入http://{Your_URL}/{Need_Password_Dir}本例為http://www.abc.com.tw/secure_data時就會出現認證畫面了。

    增加了這些使用者之後,當我們訪問nagios時,會出現這樣子的畫面:

    這個時候我們只要輸入剛剛我們所建立的使用者id以及密碼之後,我們就具有了這一個使用者的身份。

    我們可以看一下apache所吐出的log,確認一下是否我們已經成為這種身份。

    這一種身份就是nagios裡,可以用來設定那種身份,可以執行何種命令的一個依據。

    如果看一下以下的圖應該可以簡單的了解到,nagios

此 外,nagios在監視之時,所使用的是nagios的身份,這個身份在大多的時候都沒有問題。不過,在nagios活用裡,我們常常需要執行一些不是 nagios的身份所能夠達行的事情。比方說,我們要重新啟動某個服務。在liunx裡,要啟動什麼服務通常都需要具有root的身份,這個時候我們可以 活用suid來幫助我們解決這一個問題。

SUIDSGID 。UID 和GID您應該知道了吧﹖您執行 id這個命令就可以看出來自己是的ID 是什麼。當您在Linux系統上面執行一個檔案的時候(具有xpermission)﹐這個檔案所執行的程式﹐所具備的權限﹐就以執行者的ID為準﹕如果您是 root﹐那麼這個程式也是以root的權限執行﹔如果您是 user1﹐那就以user1的權限執行。但如果﹐一個執行檔還具有SUID屬性的話﹐那這個程式所具有的權限﹐就不是命令的執行者﹐而是檔案的擁有者﹕如果一個檔案具備SUID屬性﹐它的 user 和 group 都是 root﹐而且 others也具有 x權限﹐那麼﹐當user1執行這個檔案的時候﹐程式所具有的權限就不是user1而是 root﹗同樣﹐如果SGID也打開了﹐那麼這個程式也具有檔案之goup群組相同的權限

這樣的設計﹐是讓一些普通使用者以檔案擁有者的權限去執行某些程式。例如﹕某些程式﹐如passwd(您不妨輸入 ls -l/usr/bin/passwd看看)﹐需要寫入檔案系統中使用者本身不能存取的位置(如/etc/shadow)﹐如果沒有SUID 和SGID屬性﹐那這樣的設計是沒辦法做到的。不過﹐這樣的設計﹐也同時帶來了系統上的安全威脅。比方說﹕系統被植入一個擁有者為root的後門程式﹐它能抓取只有root才能讀取的密碼檔案。如果在沒有SUID的情況之下﹐就算是一般用戶執行它﹐也沒辦法達到目的﹐因為程式只具備一般用戶的身份而已﹔但如果這個程式有設定SUID﹐就算一般用戶執行它﹐也能得逞﹗