Daemon

来源:互联网 发布:date转json 编辑:程序博客网 时间:2024/05/23 13:22

什麼是 daemon 與服務 (service)

常駐在記體體中的程序,且可以提供一些系統或網路功能,那就是服務』。而服務一般的英文說法是『 service

 

但是 service 的提供總是需要程式的運作吧!否則如何執行呢?所以達成這個 service 的程式我們就稱呼他為 daemon 囉! 舉例來說,達成循環型例行性工作排程服務 (service) 的程式為 crond 這個 daemon

你不必去區分什麼是 daemon service !事實上,你可以將這兩者視為相同!

 

daemon 的主要分類

如果依據 daemon 的啟動與管理方式來區分,可以將 daemon 分為兩大類

l  stand_alone:此 daemon 可以自行單獨啟動服務

這種類型的 daemon 可以自行啟動而不必透過其他機制的管理; daemon 啟動並載入到記憶體後就一直佔用記憶體與系統資源。最大的優點就是:因為是一直存在記憶體內持續的提供服務 因此對於發生用戶端的要求時,stand alone daemon 回應速度較快常見的 stand alone daemon WWW daemon (httpd)FTP daemon (vsftpd) 等等。

 

l  super daemon 一支特殊的 daemon 來統一管理

這一種服務的啟動方式則是藉由一個統一的 daemon 來負責喚起服務這個特殊的 daemon 就被稱為 super daemon 。 早期的 super daemon inetd 這一個,後來則被 xinetd 所取代了當沒有用戶端的要求時,各項服務都是未啟動的情況,等到有來自用戶端的要求時, super daemon 才喚醒相對應的服務。當用戶端的要求結束後,被喚醒的這個服務也會關閉並釋放系統資源。

這種機制的好處是: (1)由於 super daemon 負責喚醒各項服務,因此 super daemon 可以具有安全控管的機制,就是類似網路防火牆的功能啦! (2)由於服務在用戶端的連線結束後就關閉,因此不會一直佔用系統資源。但是缺點是什麼呢? 因為有用戶端的連線才會喚醒該服務,而該服務載入到記憶體的時間需要考慮進去,因此服務的反應時間會比較慢一些啦! 常見的 super daemon 所管理的服務例如 telnet 就是啦!

daemon 工作形態的類型

如果以 daemon 提供服務的的工作狀態來區分,又可以將 daemon 分為兩大類,分別是:

  • signal-control

這種 daemon 是透過訊號來管理的,只要有任何用戶端的需求進來,他就會立即啟動去處理!例如印表機的服務 (cupsd)

  • interval-control

這種 daemon 則主要是『每隔一段時間就主動的去執行某項工作』,所以,你要作的是在設定檔指定服務要進行的時間與工作,該服務在指定的時間才會去完成工作。atd crond 就屬於這種類型的 daemon (每分鐘偵測一次設定檔)

 

daemon 的命名規則

服務的名稱被建立之後,被掛上 Linux 使用時,通常在服務的名稱之後會加上一個 d 例如例行性命令的建立的 at, cron 這兩個服務, 他的程式檔名會被取為 atd crond,這個 d 代表的就是 daemon 的意思我們使用了 ps top 來觀察程序時,都會發現到很多的 {xxx}d 的程序,呵呵!通常那就是一些 daemon 的程序囉!

 

服務與埠口的對應

一个Service会有一个port对应。/etc/services就是用来設定服務與埠號對應

[root@www ~]# cat /etc/services

....(前面省略)....

ftp             21/tcp

ftp             21/udp          fsp fspd

ssh             22/tcp                          # SSH Remote Login Protocol

ssh             22/udp                          # SSH Remote Login Protocol

....(中間省略)....

http            80/tcp          www www-http    # WorldWideWeb HTTP

http            80/udp          www www-http    # HyperText Transfer Protocol

....(底下省略)....

# 這個檔案的內容是以底下的方式來編排的:

# <daemon name>   <port/封包協定>   <該服務的說明>

 

daemon 的啟動腳本與啟動方式

提供某個服務的 daemon 雖然只是一支程式而已,但是這支 daemon 的啟動還是需要執行檔、設定檔、執行環境等等, 舉例來說,你可以查閱一下 httpd 這個程式 (man httpd) ,裡面可談到不少的選項與參數呢!此外,為了管理上面的方便,所以通常 distribution 都會記錄每一支 daemon 啟動後所取得程序的 PID /var/run/ 這個目錄下呢! 還有還有,在啟動這些服務之前,你可能也要自行處理一下 daemon 能夠順利執行的環境是否正確等等。鳥哥這裡要講的是,要啟動一支 daemon 考慮的事情很多,並非單純執行一支程式就夠了

為了解決上面談到的問題,因此通常 distribution 會給我們一個簡單的 shell script 來進行啟動的功能。 該 script 可以進行環境的偵測、設定檔的分析、PID 檔案的放置,以及相關重要交換檔案的鎖住 (lock) 動作, 你只要執行該 script ,上述的動作就一口氣連續的進行,最終就能夠順利且簡單的啟動這個 daemon 囉。

那麼這些 daemon 的啟動腳本 (shell script) 相關的檔案以及某些重要的設定檔放置到哪裡?基本上是放在這些地方:

  • /etc/init.d/* :啟動腳本放置處

系統上幾乎所有的服務啟動腳本都放置在這裡!事實上這是公認的目錄,我們的 CentOS 實際上放置在 /etc/rc.d/init.d/ 啦! 不過還是有設定連結檔到 /etc/init.d/ 的!既然這是公認的目錄,因此建議您記憶這個目錄即可!

  • /etc/sysconfig/* :各服務的初始化環境設定檔

幾乎所有的服務都會將初始化的一些選項設定寫入到這個目錄下,舉例來說,登錄檔的 syslog 這支 daemon 的初始化設定就寫入在 /etc/sysconfig/syslog 這裡呢!而網路的設定則寫在 /etc/sysconfig/network 這個檔案中。 所以,這個目錄內的檔案也是挺重要的;

  • /etc/xinetd.conf, /etc/xinetd.d/* super daemon 設定檔

super daemon 的主要設定檔 (其實是預設值) /etc/xinetd.conf ,不過我們上面就談到了, super daemon 只是一個統一管理的機制,他所管理的其他 daemon 的設定則寫在 /etc/xinetd.d/* 裡頭喔!

  • /etc/* :各服務各自的設定檔
  • /var/lib/* :各服務產生的資料庫

一些會產生資料的服務都會將他的資料寫入到 /var/lib/ 目錄中。舉例來說, MySQL的資料庫預設就是寫入 /var/lib/mysql/ 這個目錄下啦!

  • /var/run/* :各服務的程序之 PID 記錄處

我們可以使用訊號 (signal) 來管理程序, 既然 daemon 是程序,所以當然也可以利用 kill killall 來管理啦!不過為了擔心管理時影響到其他的程序, 因此 daemon 通常會將自己的 PID 記錄一份到 /var/run/ 當中!例如登錄檔的 PID 就記錄在 /var/run/syslogd.pid 這個檔案中。如此一來, /etc/init.d/syslog 就能夠簡單的管理自己的程序囉。

 

上面談到的部分是設定檔,那麼 stand alone super daemon 所管理的服務啟動方式怎麼作呢?往下看

 

Stand alone /etc/init.d/* 啟動

幾乎系統上面所有服務的啟動腳本都在 /etc/init.d/ 底下我們可以簡單的以 /etc/init.d/syslog 這個登錄檔啟動腳本來進行說明

 

[root@www ~]# /etc/init.d/syslog
用法: /etc/init.d/syslog {start|stop|status|restart|condrestart}
# 什麼參數都不加的時候,系統會告訴你可以用的參數有哪些,如上所示。
 
範例一:觀察 syslog 這個 daemon 目前的狀態
[root@www ~]# /etc/init.d/syslog status
syslogd (pid 4264) 正在執行...
klogd (pid 4267) 正在執行...
# 代表 syslog 管理兩個 daemon ,這兩個 daemon 正在運作中啦!
 
範例二:重新讓 syslog 讀取一次設定檔
[root@www ~]# /etc/init.d/syslog restart
正在關閉核心記錄器:          [  確定  ]
正在關閉系統記錄器:          [  確定  ]
正在啟動系統記錄器:          [  確定  ]
正在啟動核心記錄器:          [  確定  ]
[root@www ~]# /etc/init.d/syslog status
syslogd (pid 4793) 正在執行...
klogd (pid 4796) 正在執行...
# 因為重新啟動過,所以 PID 與第一次觀察的值就不一樣了!這樣瞭解乎?

 

利用 /etc/init.d/* 來啟動、關閉與觀察,就非常的簡單!話雖如此, CentOS 還是有提供另外一支可以啟動 stand alone 服務的腳本喔,那就是 service 這個程式 其實 service 僅是一支 script 啦,他可以分析你下達的 service 後面的參數,然後根據你的參數再到 /etc/init.d/ 去取得正確的服務來 start stop !他的語法是這樣的啦

[root@www ~]# service [service name] (start|stop|restart|...)
[root@www ~]# service --status-all
選項與參數:
service name:亦即是需要啟動的服務名稱,需與 /etc/init.d/ 對應;
start|...   :亦即是該服務要進行的工作。
--status-all:將系統所有的 stand alone 的服務狀態通通列出來
 
範例三:重新啟動 crond 這支 daemon 
[root@www ~]# service crond restart
[root@www ~]# /etc/init.d/crond restart
# 這兩種方法隨便你用哪一種來處理都可以!不過鳥哥比較喜歡使用 /etc/init.d/*
 
範例四:顯示出目前系統上面所有服務的運作狀態
[root@www ~]# service --status-all
acpid (pid 4536) 正在執行...
anacron 已停止
atd (pid 4694) 正在執行...
....(底下省略)....

 

Linux 系統中,要『開或關某個 port 』,就是需要『 啟動或關閉某個服務』啦!因此,你可以找出某個 port 對應的服務,程式對應的服務, 進而啟動或關閉他,那麼那個經由該服務而啟動的 port ,自然就會關掉了!

 

Super daemon 的啟動方式

其實 Super daemon 本身也是一支 stand alone 的服務,因為 super daemon 要管理後續的其他服務嘛,他當然自己要常駐在記憶體中啦!所以 Super daemon 自己啟動的方式與 stand alone 是相同的! 但是他所管理的其他 daemon 就不是這樣做囉!必須要在設定檔中設定為啟動該 daemon 才行設定檔就是 /etc/xinetd.d/* 的所有檔案

 

范例1super daemon 所管理的服務是否有啟動

[root@www ~]# grep -i 'disable' /etc/xinetd.d/*
....(前面省略)....
/etc/xinetd.d/rsync:          disable = yes
/etc/xinetd.d/tcpmux-server:  disable = yes
/etc/xinetd.d/time-dgram:     disable = yes
/etc/xinetd.d/time-stream:    disable = yes

如果『 disable = yes 』則代表取消此項服務的啟動,如果是『 disable = no 才是有啟動該服務啦

 

范例2啟動如上的 rsync 這個服務

# 1. 先修改設定檔成為啟動的模樣:
[root@www ~]# vim /etc/xinetd.d/rsync
# 請將 disable 那一行改成如下的模樣 (原本是 yes 改成 no 就對了)
service rsync
{
        disable = no
....(後面省略)....
 
# 2. 重新啟動 xinetd 這個服務
[root@www ~]# /etc/init.d/xinetd restart
正在停止 xinetd:             [  確定  ]
正在啟動 xinetd:             [  確定  ]
 
# 3. 觀察啟動的埠口
[root@www ~]# grep 'rsync' /etc/services  <==先看看埠口是哪一號
rsync           873/tcp               # rsync
rsync           873/udp               # rsync
[root@www ~]# netstat -tnlp | grep 873
tcp    0 0 0.0.0.0:873      0.0.0.0:*     LISTEN      4925/xinetd
# 注意看!啟動的服務並非 rsync 喔!而是 xinetd ,因為他要控管 rsync

 

也就是說,你先修改 /etc/xinetd.d/ 底下的設定檔,然後再重新啟動 xinetd 就對了

 

解析 super daemon 的設定檔

super daemon是一支總管程序,這個 super daemon xinetd 這一支程序所達成的。這個 xinetd 可以進行安全性或者是其他管理機制的控管。這些控制的手段都可以讓我們的某些服務更為安全,資源管理更為合理。而由於 super daemon 可以作這樣的管理,因此一些對用戶端開放較多權限的服務 (例如 telnet), 或者本身不具有管理機制或防火牆機制的服務,就可以透過 xinetd 來管理啊

底下我們就來談談 xinetd 這個服務的預設設定檔 /etc/xinetd.conf ,以及各個設定項目的意義囉!

先來看一看預設的 /etc/xinetd.conf 這個檔案的內容是什麼吧

[root@www ~]# vim /etc/xinetd.conf
defaults
{
# 服務啟動成功或失敗,以及相關登入行為的記錄檔
        log_type        = SYSLOG daemon info  <==登錄檔的記錄服務類型
        log_on_failure  = HOST   <==發生錯誤時需要記錄的資訊為主機 (HOST)
        log_on_success  = PID HOST DURATION EXIT <==成功啟動或登入時的記錄資訊
# 允許或限制連線的預設值
        cps         = 50 10 <==同一秒內的最大連線數為 50 個,若超過則暫停 10 
        instances   = 50    <==同一服務的最大同時連線數
        per_source  = 10    <==同一來源的用戶端的最大連線數
# 網路 (network) 相關的預設值
        v6only          = no <==是否僅允許 IPv6 ?可以先暫時不啟動 IPv6 支援!
# 環境參數的設定
        groups          = yes
        umask           = 002
}
 
includedir /etc/xinetd.d <==更多的設定值在 /etc/xinetd.d 那個目錄內

 

為什麼 /etc/xinetd.conf 可以稱為預設值的設定檔呢?因為如果你有啟動某個 super daemon 管理的服務, 但是該服務的設定值並沒有指定上述的那些項目,那麼該服務的設定值就以上述的預設值為主!至於上述的預設值會將 super daemon 管理的服務設定為:『一個服務最多可以有 50 個同時連線, 但每秒鐘發起的「新」連線最多僅能有 50 條,若超過 50 條則該服務會暫停 10 秒鐘。同一個來源的用戶最多僅能達成 10 條連線。 而登入的成功與失敗所記錄的資訊並不相同

既然這只是個預設參數檔,那麼自然有更多的服務參數檔案囉~沒錯~而所有的服務參數檔都在 /etc/xinetd.d 裡面,這是因為上表當中的最後一行includedir那行)!那麼每個參數檔案的內容是怎樣呢?一般來說,他是這樣的:

service  <service_name>
{
       <attribute>   <assign_op>   <value>   <value> ...
       .............
}

第一行一定都有個 service ,至於那個 <service_name> 裡面的內容,則與/etc/service有關,因為他可以對照著 /etc/services 內的服務名稱與埠號來決定所要啟用的 port 是哪個啊! attribute 是一些 xinetd 的管理參數, assign_op 則是參數的設定方法。 assign_op 的主要設定形式為

 = : 表示後面的設定參數就是這樣啦!
+=
: 表示後面的設定為『在原來的設定裡頭加入新的參數』
-=
: 表示後面的設定為『在原來的參數捨棄這裡輸入的參數!』

底下再來說一說那些 attribute value

attribute (功能)

說明與範例

一般設定項目:服務的識別、啟動與程式

disable
(
啟動與否)

·         設定值:[yes|no],預設 disable = yes

disable 為取消的意思,此值可設定該服務是否要啟動。預設所有的 super daemon 管理的服務都不啟動的。 若要啟動就得要設定為『 disable = no

id
(
服務識別)

·         設定值:[服務的名稱]

雖然服務在設定檔開頭『 service 服務名稱』已經指定了,不過有時後會有重複的設定值,此時可以用 id 來取代服務名稱。 你可以參考一下 /etc/xinetd.d/time-stream 來思考一下原理。

server
(
程式檔名)

·         設定值:[program 的完整檔名]

這個就是指出這個服務的啟動程式!例如 /usr/bin/rsync 為啟動 rsync 服務的指令,所以這個設定值就會成為: 『 server = /usr/bin/rsync

server_args
(
程式參數)

·         設定值:[程式相關的參數]

這裡應該輸入的就是你的 server 那裡需要輸入的一些參數啦!例如 rsync 需要加入 --daemon , 所以這裡就設定:『 server_args = --daemon 』。與上面 server 搭配,最終啟動服務的方式『/usr/bin/rsync --daemon

user
(
服務所屬UID)

·         設定值:[使用者帳號]

如果 xinetd 是以 root 的身份啟動來管理的,那麼這個項目可以設定為其他使用者。此時這個 daemon 將會以此設定值指定的身份來啟動該服務的程序喔!舉例來說,你啟動 rsync 時會以這個設定值作為該程序的 UID

group

user 的意思相同!此項目填入群組名稱即可。

一般設定項目:連線方式與連線封包協定

socket_type
(
封包類型)

·         設定值:[stream|dgram|raw],與封包有關

stream 為連線機制較為可靠的 TCP 封包,若為 UDP 封包則使用 dgram 機制。raw 代表 server 需要與 IP 直接對談!舉例來說 rsync 使用 TCP ,故設定為『socket_type = stream

protocol
(
封包類型)

·         設定值:[tcp|udp],通常使用 socket_type 取代此設定

使用的網路通訊協定,需參考 /etc/protocols 內的通訊協定,一般使用 tcp udp。由於與 socket_type 重複, 因此這個項目可以不指定。

wait
(
連線機制)

·         設定值:[yes(single)|no(multi)],預設 wait = no

這就是我們剛剛提到的 Multi-threaded single-threaded !一般來說,我們希望大家的要求都可以同時被啟用,所以可以設定『 wait = no 』 此外,一般 udp 設定為 yes tcp 設定為 no

instances
(
最大連線數)

·         設定值:[數字或 UNLIMITED]

這個服務可接受的最大連線數量。如果你只想要開放 30 個人連線 rsync 時,可在設定檔內加入:『 instances = 30

per_source
(
單一用戶來源)

·         設定值:[一個數字或 UNLIMITED]

如果想要控制每個來源 IP 僅能有一個最大的同時連線數,就指定這個項目吧!例如同一個 IP 最多只能連 10 條連線『 per_source = 10

cps
(
新連線限制)

·         設定值:[兩個數字]

為了避免短時間內大量的連線要求導致系統出現忙碌的狀態而有這個 cps 的設定值。第一個數字為一秒內能夠接受的最多新連線要求, 第二個數字則為,若超過第一個數字那暫時關閉該服務的秒數。

一般設定項目:登錄檔的記錄

log_type
(
登錄檔類型)

·         設定值:[登錄項目 等級]

當資料記錄時,以什麼登錄項目記載?且需要記載的等級為何(預設為 info 等級)。這兩個設定值得要看過下一章登錄檔後才會知道哩!這邊你先有印象即可。

log_on_success
log_on_failure
(
登錄狀態)

·         設定值:[PID,HOST,USERID,EXIT,DURATION]

在『成功登入』或『失敗登入』之後,需要記錄的項目:PID 為紀錄該 server 啟動時候的 process ID HOST 為遠端主機的 IPUSERID 為登入者的帳號、EXIT 為離開的時候記錄的項目、DURATION 為該使用者使用此服務多久?

進階設定項目:環境、網路埠口與連線機制等

env
(
額外變數設定)

·         設定值:[變數名稱=變數內容]

這一個項目可以讓你設定環境變數,環境變數的設定規則可以參考第十一章

port
(
非正規埠號)

·         設定值:[一組數字(小於 65534)]

這裡可以設定不同的服務與對應的 port ,但是請記住你的 port 與服務名稱必須與 /etc/services 內記載的相同才行!不過,若服務名稱是你自訂的,那麼這個 port 就可以隨你指定

redirect
(
服務轉址)

·         設定值:[IP port]

client 端對我們 server 的要求,轉到另一部主機上去!呵呵!這個好玩呦! 例如當有人要使用你的 ftp 時,你可以將他轉到另一部機器上面去!那個 IP_Address 就代表另一部遠端主機的 IP 囉!

includedir
(
呼叫外部設定)

·         設定值:[目錄名稱]

表示將某個目錄底下的所有檔案都給他塞進來 xinetd.conf 這個設定裡頭!這東西有用多了, 如此一來我們可以一個一個設定不同的項目!而不需要將所有的服務都寫在 xinetd.conf 當中!你可以在 /etc/xinetd.conf 發現這個設定呦!

安全控管項目:

bind
(
服務介面鎖定)

·         設定值:[IP]

這個是設定『允許使用此一服務的介面卡』的意思!舉個例子來說,你的 Linux 主機上面有兩個 IP ,而你只想要讓 IP1 可以使用此一服務,但 IP2 不能使用此服務,這裡就可以將 IP1 寫入即可!那麼 IP2 就不可以使用此一 server

interface

·         設定值:[IP]

bind 相同

only_from
(
防火牆機制)

·         設定值:[0.0.0.0, 192.168.1.0/24, hostname, domainname]

這東西用在安全機制上面,也就是管制『只有這裡面規定的 IP 或者是主機名稱可以登入!』如果是 0.0.0.0 表示所有的 PC 皆可登入,如果是 192.168.1.0/24 則表示為 C class 的網域!亦即由 192.168.1.1 ~ 192.168.1.255 皆可登入!另外,也可以選擇 domain name ,例如 .dic.ksu.edu.tw 就可以允許崑山資傳系網域的 IP 登入你的主機使用該 server

no_access
(
防火牆機制)

·         設定值:[0.0.0.0, 192.168.1.0/24, hostname, domainname]

only_from 差不多啦!就是用來管理可否進入你的 Linux 主機啟用你的 server 服務的管理項目! no_access 表示『不可登入』的 PC 囉!

access_times
(
時間控管)

·         設定值:[00:00-12:00, HH:MM-HH:MM]

這個項目在設定『該服務 server 啟動的時間』,使用的是 24 小時的設定!例如你的 ftp 要在 8 點到 16 點開放的話,就是: 08:00-16:00

umask

·         設定值:[000, 777, 022]

還記得在第七章提到的 umask 這個東西嗎?呵呵!沒錯! 就是那個鬼玩意兒囉!可以設定使用者建立目錄或者是檔案時候的屬性!系統建議值是 022

 

一個簡單的 rsyncsuper daemon控管範例設定

我們知道透過 super daemon 控管的服務可以多一層管理的手續來達成類似防火牆的機制, 那麼該如何仔細的設定這些類似防火牆機制的設定參數呢?底下我們使用 rsync 這個可以進行遠端鏡射 (mirror) 的服務來說明。 rsync 可以讓兩部主機上面的某個目錄一模一樣,在遠端異地備援系統上面是挺好用的一個機制

 

來瞧瞧預設的 rsync 設定檔

[root@www ~]# vim /etc/xinetd.d/rsync
service rsync  <==服務名稱為 rsync
{
    disable = no                     <==預設是關閉的!剛剛被我們打開了
    socket_type     = stream         <==使用 TCP 的連線機制之故
    wait            = no             <==可以同時進行大量連線功能
    user            = root           <==啟動服務為 root 這個身份
    server          = /usr/bin/rsync <==就是這支程式啟動 rsync 的服務
    server_args     = --daemon       <==這是必要的選項啊!
    log_on_failure  += USERID        <==登入錯誤時,額外記錄使用者 ID
}

能不能修改 user 成為其他身份呢?由於在 /etc/services 當中規定 rsync 使用的埠口號碼為 873 ,這個埠口小於 1024 ,所以理論上啟動這個埠口的身份一定要是 root 才行!這裡 user 就請您先別亂改囉!由於鳥哥的測試主機在安裝時已經有捉到網路卡,目前有兩個介面,一個是 192.168.1.100 ,一個則是 127.0.0.1, 假設我將 192.168.1.100 設計為對外網域, 127.0.0.1 為內部網域,且內外網域的分別權限設定為:

  • 內部 127.0.0.1 網域開放較多權限的部分
    • 這裡的設定值需綁在 127.0.0.1 這個介面上;
    • 127.0.0.0/8 開放登入權限;
    • 不進行任何連線的限制,包括總連線數量與時間;
    • 但是 127.0.0.100 127.0.0.200 不允許登入 rsync 服務。
  • 外部 192.168.1.100 網域較多限制的設定
    • 對外設定綁住 192.168.1.100 這個介面;
    • 這個介面僅開放 140.116.0.0/16 這個 B 等級的網域及 .edu.tw 網域可以登入;
    • 開放的時間為早上 1-9 點以及晚上 20-24 點兩個時段;
    • 最多允許 10 條同時連線的限制。

在這樣的規劃情況下,我們可以將剛剛上頭的 /etc/xinetd.d/rsync 這個檔案修改成為:

[root@www ~]# vim /etc/xinetd.d/rsync
# 先針對對內的較為鬆散的限制來設定:
service rsync
{
    disable = no                        <==要啟動才行啊!
    bind            = 127.0.0.1         <==服務綁在這個介面上!
    only_from       = 127.0.0.0/8       <==只開放這個網域的來源登入
    no_access       = 127.0.0.{100,200} <==限制這兩個不可登入
    instances       = UNLIMITED     <==取代 /etc/xinetd.conf 的設定值
    socket_type     = stream            <==底下的設定則保留
    wait            = no
    user            = root
    server          = /usr/bin/rsync
    server_args     = --daemon
    log_on_failure  += USERID
}
 
# 再針對外部的連線來進行限制呢!
service rsync
{
    disable = no
    bind            = 192.168.1.100
    only_from       = 140.116.0.0/16
    only_from      += .edu.tw           <==因為累加,所以利用 += 設定
    access_times  = 01:00-9:00 20:00-23:59 <==時間有兩時段,有空格隔開
    instances       = 10                <==只有 10 條連線
    socket_type     = stream
    wait            = no
    user            = root
    server          = /usr/bin/rsync
    server_args     = --daemon
    log_on_failure  += USERID
}

 

在上面這個設定檔中,共寫了兩段 service rsync 的設定,一段針對內部網域一段針對外部網域, 如果設計完畢你將他重新啟動後,就會出現如下的狀態喔!

 
# 0. 先看看原本的 873 狀態為何!
[root@www ~]# netstat -tnlp | grep 873
tcp    0 0 0.0.0.0:873      0.0.0.0:*     LISTEN      4925/xinetd
# 仔細看,僅針對 0.0.0.0 這個全域網域監聽而已哩!
 
# 1. 重新啟動 xinetd 吧!不是啟動 rsync 喔!別搞錯。
[root@www ~]# /etc/init.d/xinetd restart
[root@www ~]# netstat -tnlp | grep 873
tcp    0 0 192.168.1.100:873     0.0.0.0:*       LISTEN    7227/xinetd
tcp    0 0 127.0.0.1:873         0.0.0.0:*       LISTEN    7227/xinetd
# 有沒有看到兩個介面啊~而且, PID 會是同一個呢!

 

如同上面的設定,我們就可以將某個系統服務針對不同的用戶端來源指定不同的使用權限!這樣子系統服務可以安全多了 如果未來你的某些服務想要使用這個咚咚來設定也是 OK 的喔!

 

服務的防火牆管理 xinetd, TCP Wrappers

系統的防火牆分析主要可以透過封包過濾或者是透過軟體分析,我們的 Linux 預設有提供一個軟體分析的工具, 那就是 /etc/hosts.deny, /etc/hosts.allow 這兩個設定檔!另外,如果有安裝 tcp wrappers 套件時, 我們甚至可以加上一些額外的追蹤功能呢!底下就讓我們分別來談談這些玩意兒吧!

 

l  /etc/hosts.allow, /etc/hosts.deny 管理

管制 at 的使用可以透過修訂 /etc/at.{allow|deny} 來管理,至於 crontab 則是使用 /etc/cron.{allow|deny} 來管理的。那麼有沒有辦法透過個什麼機制,就能夠管理某些程式的網路使用呢? 就有點像管理某些程式是否能夠接受或者是拒絕來自網際網路的連線的意思啦!有的!那就是 /etc/hosts.{allow|deny} 囉。

 

任何以 xinetd 管理的服務,都可以透過 /etc/hosts.allow, /etc/hosts.deny 來設定防火牆防火牆就是針對來源 IP 或網域進行允許或拒絕的設定 以決定該連線是否能夠成功達成連接的一種方式就是了。其實我們剛剛修改 /etc/xinetd.d/rsync 裡頭的 no_access, only_from 也可以進行這方面的防火牆設定。不過,使用 /etc/hosts.allow, /etc/hosts.deny 則更容易集中控管,在設定與查詢方面也較為方便 那麼就讓我們談談這兩個檔案的設定技巧吧!

其實 /etc/hosts.allow /etc/hosts.deny 也是 /usr/sbin/tcpd 的設定檔而這個 /usr/sbin/tcpd 則是用來分析進入系統的 TCP 網路封包的一個軟體,TCP 是一種連線導向的網路連線封包,包括 www, email, ftp 等等都是使用 TCP 封包來達成連線的喔。 所以囉,顧名思義,這個套件本身的功能就是在分析 TCP 網路資料封包啦!而 TCP 封包的檔頭主要記錄了來源與目主機的 IP port ,因此藉由分析 TCP 封包並搭配 /etc/hosts.{allow,deny} 的規則比對,就可以決定該連線是否能夠進入我們的主機啦。 所以啦,我們要使用 TCP Wrappers 來控管的就是:

  1. 來源 IP /與 整個網域的 IP 網段
  2. port (就是服務啦,前面有談到啟動某個埠口是 daemon 的責任啊)

基本上只要一個服務受到 xinetd 管理,或者是該服務的程式支援 TCP Wrappers 函式的功能時,那麼該服務的防火牆方面的設定就能夠以 /etc/hosts.{allow,deny} 來處理囉。換個方式來說,只要不支援 TCP Wrappers 函式功能的軟體程式就無法使用 /etc/hosts.{allow,deny} 的設定值啦

那要如何得知一個服務的程式有沒有支援 TCP Wrappers 呢,你可以這樣簡單的處理喔。

範例一:測試一下達成 sshd httpd 這兩個程式有無支援 TCP Wrappers 的功能

[root@www ~]# ldd $(which sshd httpd)

/usr/sbin/sshd:

        libwrap.so.0 => /usr/lib64/libwrap.so.0 (0x00002abcbfaed000)

        libpam.so.0 => /lib64/libpam.so.0 (0x00002abcbfcf6000)

....(中間省略)....

/usr/sbin/httpd:

        libm.so.6 => /lib64/libm.so.6 (0x00002ad395843000)

        libpcre.so.0 => /lib64/libpcre.so.0 (0x00002ad395ac6000)

....(底下省略)....

# 重點在於軟體有沒有支援 libwrap.so 那個函式庫囉

ldd (library dependency discovery) 這個指令可以查詢某個程式的動態函式庫支援狀態,因此透過這個 ldd 我們可以輕鬆的就查詢到 sshd, httpd 有無支援 tcp wrappers 所提供的 libwrap.so 這個函式庫檔案。從上表的輸出中我們可以發現, sshd 有支援但是 httpd 則沒有支援。因此我們知道 sshd 可以使用 /etc/hosts.{allow,deny} 進行類似防火牆的抵擋機制,但是 httpd 則沒有此項功能喔!

 

l  /etc/hosts.allow, /etc/hosts.deny 設定語法

<service(program_name)> : <IP, domain, hostname> : <action>

<服務   (亦即程式名稱)> : <IP 或領域 或主機名稱> : < 動作 >

 

重點是兩個,第一個是找出你想要管理的那個程式的檔名,第二個才是寫下來你想要放行或者是抵擋的 IP 或網域呢。

 

例如我們將rsync service抵擋 127.0.0.100, 127.0.0.200, 及放行140.116.0.0/16

[root@www ~]# vim /etc/hosts.deny

rsync : 127.0.0.100 127.0.0.200 : deny

也可以写成2

[root@www ~]# vim /etc/hosts.deny

rsync : 127.0.0.100       : deny

rsync : 127.0.0.200       : deny

/etc/hosts.allow /etc/hosts.deny 兩個檔案需要注意的是:

  • 寫在 hosts.allow 當中的 IP 與網段,為預設『可通行』的意思,亦即最後一個欄位 allow 可以不用寫
  • 而寫在 hosts.deny 當中的 IP 與網段則預設為 deny ,第三欄的 deny 亦可省略
  • 這兩個檔案的判斷依據是: (1) /etc/hosts.allow 為優先,而 (2) 若分析到的 IP 或網段並沒有記錄在 /etc/hosts.allow ,則以 /etc/hosts.deny 來判斷

也就是說, /etc/hosts.allow 的設定優先於 /etc/hosts.deny 囉!基本上,只要 hosts.allow 也就夠了,因為我們可以將 allow deny 都寫在同一個檔案內,只是這樣一來似乎顯得有點雜亂無章,因此,通常我們都是:

  1. 允許進入的寫在 /etc/hosts.allow 當中;
  2. 不許進入的則寫在 /etc/hosts.deny 當中。

此外,我們還可以使用一些特殊參數在第一及第二個欄位喔!內容有:

  • ALL代表全部的 program_name 或者是 IP 都接受的意思,例如 ALL: ALL: deny
  • LOCAL:代表來自本機的意思,例如: ALL: LOCAL: allow
  • UNKNOWN:代表不知道的 IP 或者是 domain 或者是服務時;
  • KNOWN:代表為可解析的 IP, domain 等等資訊時;

再強調一次,那個 service_name 其實是啟動該服務的程式,舉例來說, /etc/init.d/sshd 這個 script 裡面, 實際上啟動 ssh 服務的是 sshd 這個程式,所以,你的 service_name 自然就是 sshd 囉! 而 /etc/xinetd.d/telnet (你的系統可能尚未安裝) 內有個 server 的設定項目, 那個項目指到 in.telnetd 這個程式來啟動的喔!要注意的很!(請分別使用 vi 進這兩支 scripts 查閱) 好了,我們還是 rsync 為例子來說明好了,現在假設一個比較安全的流程來設定,就是:

  1. 只允許 140.116.0.0/255.255.0.0 203.71.39.0/255.255.255.0 這兩個網域,及 203.71.38.123 這個主機可以進入我們的 rsync 伺服器;
  2. 此外,其他的 IP 全部都擋掉!

這樣的話,我可以這樣設定:

[root@www ~]# vim /etc/hosts.allow

rsync:  140.116.0.0/255.255.0.0

rsync:  203.71.39.0/255.255.255.0

rsync:  203.71.38.123

rsync:  LOCAL

[root@www ~]# vim /etc/hosts.deny

rsync: ALL  <==利用 ALL 設定讓所有其他來源不可登入

 

TCP Wrappers 特殊功能 ()

 

觀察系統啟動的服務

觀察系統已啟動的服務方式很多(例如可以使用 ps top,但这2个命令不能查询到port),最常使用 netstat 來觀察基本上,以 ps 來觀察整個系統上面的服務是比較妥當的,因為他可以將全部的 process 都找出來。不過,我們比較關心的還是在於有啟動網路監聽的服務啊, 所以鳥哥會比較喜歡使用 netstat 來查閱啦

範例一:找出目前系統開啟的『網路服務』有哪些?

[root@www ~]# netstat -tulp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address       Foreign Address State  PID/Program name

tcp        0      0 www.vbird.tsai:smtp *:*             LISTEN 4638/sendmail: acce

tcp        0      0 *:ssh               *:*             LISTEN 4595/sshd

....(底下省略)....

# 看一下上頭, Local Address 的地方會出現主機名稱與服務名稱的,要記得的是,

# 可以加上 -n 來顯示 port number ,而服務名稱與 port 對應則在 /etc/services

 

範例二:找出所有的有監聽網路的服務 (包含 socket 狀態)

[root@www ~]# netstat -lnp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address  Foreign Address  State   PID/Program name

tcp        0      0 127.0.0.1:2208 0.0.0.0:*        LISTEN  4575/hpiod

....(中間省略)....

Active UNIX domain sockets (only servers)

Proto RefCnt Flags   Type   State     I-Node PID/Program name Path

....(中間省略)....

unix  2      [ ACC ] STREAM LISTENING 10624  4701/xfs         /tmp/.font-unix/fs7100

unix  2      [ ACC ] STREAM LISTENING 12824  5015/Xorg        /tmp/.X11-unix/X0

unix  2      [ ACC ] STREAM LISTENING 12770  4932/gdm-binary  /tmp/.gdm_socket

....(以下省略)....

# 仔細的瞧一瞧啊,除了原有的網路監聽 port 之外,還會有 socket 顯示在上面,

# 我們可以清楚的知道有哪些服務被啟動呢!

 

範例三:觀察所有的服務狀態

[root@www ~]# service --status-all

 

設定開機後立即啟動服務的方法

系統服務在開機过程中会依據 init 的設定進行 daemon start (/etc/rc.d/rc[0-6].d/*)。而且会根据不同的執行等級[0-6]呼叫不同的服務rc[0-6].d/*啦!那麼什麼叫做執行等級呢?

我們在啟動 Linux 系統時,可以進入不同的模式喔,這模式我們稱為執行等級 (run level)。不同的執行等級有不同的功能與服務, 目前你先知道正常的執行等級有兩個,一個是具有 X 視窗介面的 run level 5 ,另一個則是純文字介面的 run level 3。 由於預設我們是以圖形介面登入系統的,因此可以想像得到的是,我們應該是在 run level 5 的環境中啦!那你怎麼知道 run level 5 有哪些服務預設可以啟動呢?這就得要使用特殊的指令來查詢啊

l  chkconfig 管理系統服務預設開機啟動與否

[root@www ~]# chkconfig --list [服務名稱]

[root@www ~]# chkconfig [--level [0123456]] [服務名稱] [on|off]

選項與參數:

--list :僅將目前的各項服務狀態列出來

--level:設定某個服務在該 level 下啟動 (on) 或關閉 (off)

 

範例一:列出目前系統上面所有被 chkconfig 管理的服務

[root@www ~]# chkconfig --list |more

NetworkManager  0:off   1:off   2:off   3:off   4:off   5:off   6:off

acpid           0:off   1:off   2:off   3:on    4:on    5:on    6:off

....(中間省略)....

yum-updatesd    0:off   1:off   2:on    3:on    4:on    5:on    6:off

 

xinetd based services:  <==底下為 super daemon 所管理的服務

        chargen-dgram:  off

        chargen-stream: off

....(底下省略)....

# 你可以發現上面的表格有分為兩個區塊,一個具有 1, 2, 3 等數字,一個則被 xinetd

# 管理。沒錯!從這裡我們就能夠發現服務有 stand alone super daemon 之分。

 

範例二:顯示出目前在 run level 3 為啟動的服務

[root@www ~]# chkconfig --list | grep '3:on'

 

範例三:讓 atd 這個服務在 run level 3, 4, 5 時啟動:

[root@www ~]# chkconfig --level 345 atd on

 

注意:chkconfig 僅是設定開機時預設會啟動的服務而已, 所以該服務目前的狀態如何是不知道的。我們舉個底下的例子來說明好了

範例四:先觀察 httpd ,再觀察預設有無啟動,之後以 chkconfig 設定為預設啟動

[root@www ~]# /etc/init.d/httpd status

httpd 已停止  <==根本就沒有啟動

[root@www ~]# chkconfig --list httpd

httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off

# 原因是預設並沒有啟動啊!

[root@www ~]# chkconfig httpd on; chkconfig --list httpd

httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

# 已經設定為『開機預設啟動』了,再來觀察看看到底該服務啟動沒?

[root@www ~]# /etc/init.d/httpd status

httpd 已停止

# 還是沒有啟動喔!

 

上面的範例四並沒有啟動 httpd 的原因很簡單,因為我們並沒有使用 /etc/init.d/httpd start 嘛!我們僅是設定開機時啟動而已啊!那我們又沒有重新開機,所以當然使用 chkconfig 並不會導致該服務立即被啟動!也不會讓該服務立即被關閉,而是只有在開機時才會被載入或取消載入而已喔

 

chkconfig 可以設定開機是否啟動,那麼我們能不能用來管理 super daemon 的啟動與關閉呢?我們就來試看看底下的案例:

 

範例五:查閱 rsync 是否啟動,若要將其關閉該如何處理?

[root@www ~]# /etc/init.d/rsync status

-bash: /etc/init.d/rsync: No such file or directory

# rsync super daemon 管理的,所以當然不可以使用 stand alone 的啟動方式來觀察

[root@www ~]# netstat -tlup | grep rsync

tcp  0 0 192.168.201.110:rsync  *:*     LISTEN     4618/xinetd

tcp  0 0 www.vbird.tsai:rsync   *:*     LISTEN     4618/xinetd

[root@www ~]# chkconfig --list rsync

rsync           on   <==預設啟動呢!將它處理成預設不啟動吧

[root@www ~]# chkconfig rsync off; chkconfig --list rsync

rsync      off  <==看吧!關閉了喔!現在來處理一下 super daemon 的東東!

[root@www ~]# /etc/init.d/xinetd restart; netstat -tlup | grep rsync

#最後一個指令你會發現rsync不見了!这表示你能夠通过chkconfig啟動與關閉你的super daemon管理的服務呢!

 

ntsysv 類圖形介面管理模式 (略)

ntsysvchkconfigGUI模式。不过chkconfig 很多的 distributions 都存在,但是 ntsysv 則是 Red Hat 系統特有的

 

如何将你开发的程序设置成的系統服務并令其開機啟動

[root@www ~]# chkconfig [--add|--del] [服務名稱]

選項與參數:

--add :增加一個服務名稱給 chkconfig 來管理,該服務名稱必須在 /etc/init.d/

--del :刪除一個給 chkconfig 管理的服務

如果我自己寫了一個程式並且想要讓該程式成為系統服務好讓 chkconfig 來管理時, 可以怎麼進行呢?只要將該服務加入 init 可以管理的 script 當中,亦即是 /etc/init.d/ 當中即可。

舉個例子,我們 /etc/init.d/ 裡面建立一個 myvbird 檔案,該檔案僅是一個簡單的服務範例,基本上,沒有任何用途.... 對於該檔案的必須性是這樣的:

  • myvbird 將在 run level 3 5 啟動;
  • myvbird /etc/rc.d/rc[35].d 當中啟動時,以 80 順位啟動,以 70 順位結束

可以這樣做:

[root@www ~]# vim /etc/init.d/myvbird

#!/bin/bash

# chkconfig: 35 80 70

# description: 沒啥!只是用來作為練習之用的一個範例

echo "Nothing"

 

比較重要的是第二行,他的語法是: chkconfig: [runlevels] [啟動順位] [停止順位] 』其中, runlevels 為不同的 run level 狀態,啟動順位 (start number) 結束順位 (stop number) 則是在 /etc/rc.d/rc[35].d 內建立以 S80myvbird K70myvbird 為檔名的設定方式!

 

[root@www ~]# chkconfig --list myvbird

service myvbird supports chkconfig, but is not referenced in any

runlevel (run 'chkconfig --add myvbird')

# 尚未加入 chkconfig 的管理機制中!所以需要再動點手腳

[root@www ~]# chkconfig --add myvbird; chkconfig --list myvbird

myvbird         0:off   1:off   2:off   3:on    4:off   5:on    6:off

# 看吧!加入了 chkconfig 的管理當中了!

# 如果要將這些資料都刪除的話,那麼就下達這樣的情況:

[root@www ~]# chkconfig --del myvbird

 

chkconfig 真的是個不錯用的工具吧!尤其是當你想要自己建立自己的服務時!

 

CentOS 5.x 預設啟動的服務簡易說明

CentOS 5.x 預設啟動的服務內容

服務名稱

功能簡介

acpid

(系統)進階電源管理的介面,這是一個新的電源管理模組, 可以監聽來自核心層的電源相關事件而予以回應。 CentOS 的設定檔在 /etc/acpi/events/power.conf 中,預設僅有當你按下 power 按鈕時,系統會自動關機喔!(1)

anacron
(
可關閉)

(系統)與循環型的工作排程 cron 有關,可在排程過期後還可以喚醒來繼續執行, 設定檔在 /etc/anacrontab。詳情請參考第十六章的說明。

apmd
(
可關閉)

(系統)設定檔在 /etc/sysconfig/apmd ,也是電源管理模組啦! 可偵測電池電量,當電池電力不足時,可以自動關機以保護電腦主機。

atd

(系統)單一的例行性工作排程,詳細說明請參考第十六章 抵擋機制的設定檔在 /etc/at.{allow,deny} 喔!

auditd

(系統)還記得前一章的 SELinux 所需服務吧? 這就是其中一項,可以讓系統需 SELinux 稽核的訊息寫入 /var/log/audit/audit.log 中。若此服務沒有啟動,則訊息會傳給 syslog 管理。

autofs
(
可關閉)

(系統)可用來自動掛載來自網路上的其他伺服器所提供的網路磁碟機 (一般是 NFS) 不過我們是單機系統,所以目前還沒必要這個服務。

avahi-daemon
(
可關閉)

(系統)也是一個用戶端的服務,可以透過 Zeroconf 自動的分析與管理網路。 Zeroconf 較常用在筆記型電腦與行動裝置上,所以我們可以先關閉他啦!(2)

bluetooth
(
可關閉)

(系統)用在藍芽裝置的搜尋上,如果 Linux 是當作伺服器使用時, 這個服務可以暫時關閉也沒關係!

cpuspeed

(系統)可以用來管理 CPU 的頻率功能。若系統閒置時,此項功能可以自動的降低 CPU 頻率來節省電量與降低 CPU 溫度喔!

crond

(系統)系統設定檔為 /etc/crontab,詳細資料可參考第十六章的說明。

cups
(
可關閉)

(網路)用來管理印表機的服務,可以提供網路連線的功能,有點類似列印伺服器的功能哩! 你可以在 Linux 本機上面以瀏覽器的 http://localhost:631 來管理印表機喔!由於我們目前沒有印表機,所以可以暫時關閉他。

firstboot
(
可關閉)

(系統)還記得系統第一次進入圖形介面還需要進行一些額外的設定嗎? 就是這個服務的幫忙啦!既然已經安裝妥當,現在你可以將這個服務關閉囉。

gpm

(系統) tty1~tty6 的環境下你竟然可以使用滑鼠功能來複製貼上,就是這個 gpm 提供的能力啦!

haldaemon
(
可關閉)

(系統)通常用在桌上型電腦的環境中,可偵測類似 usb 的裝置呢! 不過,如果是伺服器環境,這個服務倒是可以關閉啦!如果是桌上型電腦,那最好可以啟動囉!(3)

hidd
(
可關閉)

(系統)也是藍芽服務的功能啦!可以提供鍵盤、滑鼠等藍芽裝置的偵測哩! 須搭配 bluetooth。伺服器環境倒是不需要此項服務。

hplip
(
可關閉)

(系統)主要是針對 HP 的印表機功能所開發的腳本服務,如果你的環境中並沒有 HP 相關設備,這個服務就給他關閉吧!

ip6tables
(
可關閉)

(網路)是針對本機的防火牆功能!這個防火牆主要是針對 IPv6 的版本, 如果你的網路環境並沒有 IPv6 的設備,那麼這個服務是可以關閉的。

iptables

(網路)本機防火牆功能,是核心支援的呢!所以功能與效能都非常棒!當然不能夠取消啊! 只是設定上就得要努力研究啦!我們會在伺服器篇介紹網路相關資訊的。

irqbalance

(系統)如果你的系統是多核心的硬體,那麼這個服務要啟動, 因為它可以自動的分配系統中斷 (IRQ) 之類的硬體資源。

isdn
(
可關閉)

(網路)ISDN 是一種寬頻設備 (數據機的一種) ,但是在台灣我們比較常使用 ADSL 及光纖設備, 所以這個服務是可以關閉啦。

kudzu
(
可關閉)

(系統)如果你有增加新的硬體時,這個服務可以在開機時自動的偵測硬體, 並且會自動的呼叫相關的設定軟體,方便你在開機時就處理好你的硬體啊!

lm_sensors
(
可關閉)

(系統)這個服務可以幫你偵測主機板的相關偵測晶片,舉例來說, 某些主機板會主動的偵測 CPU 溫度、頻率、電壓等,這個 lm_sensors 能夠將這些溫度、頻率等數據顯示出來喔! 我們會在第二十一章談這玩意兒。

lvm2-monitor

(系統)我們已經談過 LVM 囉!所以我們當然要啟動這個服務比較妥當。

mcstrans

(系統) SELinux 有關的服務,最好也啟動啊!

mdmonitor
(
可關閉)

(系統)可以偵測所有軟體的狀態,暫時似乎也不需要啟動這個服務哩!

messagebus
(
可關閉)

(系統)可用來溝通各個軟體之間的訊息,有點類似剪貼簿的感覺。 不過在伺服器環境則沒有強烈需求就是了。

microcode_ctl
(
可關閉)

(系統)Intel CPU 會提供一個外掛的微指令集提供系統運作, 不過,如果你沒有下載 Intel 相關的指令集檔案,那麼這個服務不需要啟動的,也不會影響系統運作。(4)

netfs
(
可關閉)

(網路)可以進行網路磁碟機 (NFS, SMB/CIFS) 的掛載與卸載功能。 目前我們尚未使用網路,因此這個服務可以先關閉。

network

(網路)提供網路設定的功能,所以一定要啟動的啦!

nfslock
(
可關閉)

(網路)NFS 為一種 Unix like 的網路磁碟機,但在進行檔案的分享時, 為了擔心同一檔案多重編輯的問題,所以會有這個鎖住 (lock) 的服務!可以避免同一個檔案被兩個不同的人編輯時所造成的檔案錯誤問題。

pcscd
(
可關閉)

(系統)智慧卡偵測的服務,可以關閉他啦。

portmap

(網路)用在遠端程序呼叫的服務,很多服務都使用這個玩意兒來輔助連線的, 因此建議不要取消他,除非你確定你的系統沒有使用到任何的 RPC 服務喔!

readahead_early
readahead_later
(
可關閉)

(系統)在系統開機的時候可以先將某些程式載入到記憶體中,以方便快速的載入, 可加快一些啟動的速度。

restorecond

(系統)利用 /etc/selinux/restorecond.conf 的設定來判斷當新建檔案時,該檔案的 SELinux 類型應該如何還原。需要注意的是,如果你的系統有很多非正規的 SELinux 檔案類型設定時,這個 daemon 最好關閉,否則他會將你設定的 type 修改回預設值。

rpcgssd
rpcidmapd
(
可關閉)

(網路) NFS 有關的用戶端功能,在你還沒有玩到網路階段時, 這兩個咚咚也能夠先取消啦!

sendmail

(網路)這就是電子郵件的軟體啊!我們想要擁有可寄信的功能時, 這個服務可不能關閉。不過,預設這個服務僅能支援本機的功能,無法收受來自網際網路的郵件喔!

setroubleshoot

(系統)一定要啟動啊!因為這玩意兒可以將你的 SELinux 相關訊息記錄在 /var/log/messages 裡面,非常有幫助喔!

smartd

(系統)這個服務可以自動的偵測硬碟狀態,如果硬碟發生問題的話, 還能夠自動的回報給系統管理員,是個非常有幫助的服務喔!不可關閉他啊!

sshd

(網路)這個是遠端連線伺服器的軟體功能, 這個通訊協定比 telnet 好的地方在於 sshd 在傳送資料時可以進行加密喔!這個服務不要關閉他啦!

syslog

(系統)這個服務可以記錄系統所產生的各項訊息, 包括 /var/log/messages 內的幾個重要的登錄檔啊。

xfs
(
可關閉)

(系統)這個是 X Font Server,主要提供圖形介面的字型的一個服務, 如果你不啟動 X 視窗的話,那麼這個服務可以不啟動。但是如果你有需要用到 X 時,一定要啟動這玩意兒,否則圖形介面是無法啟動的喔。

xinetd

(系統)就是 super daemon 啊,不必講了吧 ^_^

yum-updatesd

(系統)可以透過 yum 的功能進行軟體的線上升級機制, 若有升級的軟體釋出時,就能夠以郵件或者是 syslog 來通知系統管理原來手動升級啊。

底下繼續說明一些可能在你的系統當中的服務,只是預設並沒有啟動這個服務就是了。

其他服務的簡易說明

服務名稱

功能簡介

dovecot

(網路)可以設定 POP3/IMAP 等收受信件的服務,如果你的 Linux 主機是 email server 才需要這個服務,否則不需要啟動他啦!

httpd

(網路)這個服務可以讓你的 Linux 伺服器成為 www server 喔!

named

(網路)這是領域名稱伺服器 (Domain Name System) 的服務, 這個服務非常重要,但是設定非常困難!目前應該不需要這個服務啦!

nfs

(網路)這就是 Network Filesystem,是 Unix-Like 之間互相作為網路磁碟機的一個功能。

ntpd

(網路)服務的全名是 Network Time Protocol ,這個服務可以用來進行網路校時, 讓你系統的時間永遠都是正確的哩!

smb

(網路)這個服務可以讓 Linux 模擬成為 Windows 上面的網路上的芳鄰。 如果你的 Linux 主機想要做為 Windows 用戶端的網路磁碟機伺服器,這玩意兒得要好好玩一玩。

squid

(網路)作為代理伺服器的一個服務,可作為一個區域網路的防火牆之用。

vsftpd

(網路)作為檔案傳輸伺服器 (FTP) 的服務。

 

原创粉丝点击