一天一點學習Linux之系統服務管理

來源:互聯網
上載者:User

 

daemon介紹

大家可能常聽到daemon,而什麼是daemon可能不太清楚,我的理解是讓服務啟動的東東稱為daemon。而服務(service)就是為我們提供服務(如web mail ftp等)的東東。所以說,我們是通過daemon來管理service的。而很多時候我們也把daemon說成service,其實這樣也差不多了。

 

daemon 的分類

根據daemon的啟動與管理方式來分,可以將daemon為可獨立啟動的daemon,和通過super daemon來統一管理的服務這兩大類,下面來簡單的介紹一下他們兩個的區別:

 

 

獨立啟動的服務:這種類型的daemon 可以獨立啟動而無需通過其他機制來管理,此類daemon啟動並載入到記憶體後就一直佔用記憶體與系統資源。最大的優點就是:因為是一直存在記憶體內,所以當有客戶請求時,他的響應速度較快。

 

super daemon:這種服務的啟動是由一個普通的daemon來統一管理(在RHEL/CentOS的系統中是xinetd)一些服務。這種管理方式的特點是:原本各項服務都是未啟動的,當有客戶來請求時,此時super daemon 才喚醒相對應的服務,當用戶端的請求結束後,被喚醒的這個服務也會關閉並釋放系統資源。所以說由super daemon管理的服務響應是比較慢的。

 

服務與連接埠

這個連接埠我相應大家都很清楚,可以用個比喻來說明一下IP與連接埠的作用。我們可以把IP當作互連網上的地址,而連接埠就是樓層號,不同的樓層就提供不同的服務了,哈哈……

想查看服務對應的連接埠,可以參考/etc/services。這裡只能參考,因為我們可以改變服務的連接埠號碼。

 

daemon啟動指令碼的相關目錄與檔案

/etc/init.d/ 此目錄是放啟動指令碼的位置。在RHEL/CentOS上實際上是放在/etc/rc.d/init.d/,為什麼呢?其實查看一下目錄就知道了。/etc/init.d其實是/etc/rc.d/init.d的連結目錄。

 

[root@yufei ~]# ls -ld /etc/init.d

lrwxrwxrwx. 1 root root 11 May 31 17:43 /etc/init.d -> rc.d/init.d

/etc/sysconfig/ 各服務的初始化環境設定檔。幾乎所有的服務都會將初始化的一些選項設定寫到這個目錄下。

 

/etc/xinetd.conf, /etc/xinetd.d/ :super daemon 設定檔的目錄。super daemon 的主要設定檔為/etc/xinetd.conf ,super daemon所管理的其他daemon 的設定則在/etc/xinetd.d/ 裡。

 

/etc/ :各服務的設定檔的目錄,一般是以.conf結尾。

 

/var/run/ :各服務的程式的PID 存放的地方。

 

服務的啟動與停止或載入

 

我們先來看普通的daemon啟動方式

 

用RPM或YUM安裝的服務軟體,服務的指令碼基本上全部放在/etc/init.d/這個目錄下,這裡面的指令碼一般都可以用VI開啟來觀察。指令碼的內容大致有:指令碼的描述、環境調用、搜尋設定檔、載入functions、服務的啟動停止與載入、最後還會有指令碼的參數。

 

這裡面的指令碼可以用指令碼的相對路徑或絕對路徑來執行,當然RHEL/CentOS上還提供了一個命令service來直接調用這裡面的指令碼。

 

我們以SSHD為例來看一下

 

[root@yufei ~]# /etc/init.d/sshd --help

Usage: /etc/init.d/sshd {start|stop|restart|reload|force-reload|condrestart|try-restart|status}

這個提示很清楚,結合指令檔你就會看明白,參數執行了哪些東西,這就留給大家自己研究吧。

 

[root@yufei ~]# cd /etc/init.d/

[root@yufei init.d]# ./sshd restart

Stopping sshd:                                             [  OK  ]

Starting sshd:                                             [  OK  ]

用相對路徑啟動也是一樣的,當然還可以在任何目錄下用service來直接執行某個服務,至於為什麼他會調用/etc/init.d/裡面的指令碼,大家看一下/sbin/service這個檔案就知道了。

 

[root@yufei init.d]# service sshd restart

Stopping sshd:                                             [  OK  ]

Starting sshd:                                             [  OK  ]

再來看看Super daemon 的啟動方式

其實Super daemon 本身也是普通的daemon,只是要通過他來管理一些不常用的服務而已。所以說,xinetd他的啟動方式與普通的daemon是一樣的,而由他管理的服務都在/etc/xinetd.d/目錄下,這裡面的服務開啟與關閉,都是由此目錄下的服務檔案本身來控制的。大家可以開啟來看看,每個檔案裡面都有disable = yes或disable = no這樣的內容,如果是YES,那就是不啟動了,如果是NO,就是啟動了。

 

下面我們以telnet為例來給大家示範

 

[root@yufei ~]# cd /etc/xinetd.d/

[root@yufei xinetd.d]# yum install telnet-server

[root@yufei xinetd.d]# ls -l |grep telnet

-rw-r--r--. 1 root root  305 Sep  9  2004 telnet

 

[root@yufei xinetd.d]# grep disable telnet

       disable            = yes

我們來啟動看看  

 

[root@yufei xinetd.d]# service xinetd restart

Stopping xinetd:                                           [  OK  ]

Starting xinetd:                                           [  OK  ]

[root@yufei xinetd.d]# telnet localhost

Trying ::1...

telnet: connect to address ::1: Connection refused

Trying 127.0.0.1...

telnet: connect to address 127.0.0.1: Connection refused   

發現telnet連不上

 

   

我們把disable        = yes換成no

 

[root@yufei xinetd.d]# vim telnet

[root@yufei xinetd.d]# grep disable telnet

       disable            = no

重新啟動xinetd

 

[root@yufei xinetd.d]# service xinetd restart

Stopping xinetd:                                           [  OK  ]

Starting xinetd:                                           [  OK  ]

[root@yufei xinetd.d]# telnet localhost

Trying ::1...

Connected to localhost.

Escape character is '^]'.

Red Hat Enterprise Linux Server release 6.1 (Santiago)

Kernel 2.6.32-131.0.15.el6.x86_64 on an x86_64

login:

發現這時候的反應有點慢,過一會,就出現了login:的登陸資訊了。在RHEL6.1上就算是使用者名稱和密碼正確,好像也無法正常登陸,應該是系統為了安全方面考慮,可能是禁止了什麼,這個有興趣的,自己研究吧。

 

這隻是示範了一下關於由xinetd管理的服務啟動的方法,我想大家應該很清楚了。當然,telnet是明文的,也是不安全的,所以我們把他卸載掉。

 

[root@yufei xinetd.d]# yum remove telnet-server -y

[root@yufei xinetd.d]# rm -fr telnet.rpmsave

下面來分析一下/etc/xinetd.conf這個檔案

 

這個檔案中包含日誌的記錄方式與記錄的內容設定、串連設定、網路設定和環境參數設定以及其他服務設定

 

我們主要來看串連限制設定

 

cps             = 50 10

instances       = 50

per_source      = 10

第一行表示:同一秒內的最大聯機數為50 個,若超過則暫停10 秒

第二行表示:同一服務的最大同時聯機數

第三行表示:同一用戶端的最大聯機數

這個檔案中的參數是一個全域的設定,你也可以對其管理的服務來進行其他更多我設定。他管理的服務就是/etc/xinetd.d/這個目錄裡面的,你可以開啟某個服務看一下裡面的參數設定,這裡也不一一說明,主要講一下,關於網路方面的設定。

 

only_from:只有這裡設定的IP或者是主機名稱才可以使用某個服務。這個設定後面可以是某個網段如192.168.1.0/24,也可以是某個域如.opsers.org。如果說有多個不同的設定,就可以用+=來設定其他的內容。

 

no_access:和上面的一樣,只是用來限制某些主機不能使用某個服務。

 

access_times:設定服務開放的時間。他的設定方式是[00:00-12:00],就是從某個時段到某個時段。如果有多個時間段,中間用空格空開就可以,如:01:00-9:00 20:00-23:59

 

tcp_wrappers

其實,任何以xinetd 管理的服務,都可以通過/etc/hosts.allow, /etc/hosts.deny 來限定存取權限,可以叫做防火牆(tcp_wrappers)。這種管理機制更方便用來集中管理。那麼這兩個檔案是不是對系統中所有的服務都起作用呢?其實不是這樣的,只有載入了libwrap.so函數的服務才能被/etc/hosts.allow, /etc/hosts.deny 所能控制。下面我們就來看看

[root@yufei ~]# ldd $(which sshd) |grep libwrap.so

       libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f61d35bf000)

[root@yufei ~]# ldd $(which httpd) |grep libwrap.so

[root@yufei ~]#

我們發現,SSH是支援libwrap.so的,所以他可以通過/etc/hosts.allow, /etc/hosts.deny 這兩個檔案來控制許可權了。

 

關於檔案的格式使用可以通過man 5 hosts_options 和man 5 hosts_access來查看。

 

基本格式如下

 

服務:IP 或領域 或主機名稱:動作

 

第一及第二個欄位一些特殊參數:

 

ALL:代表全部的program_name 或者是IP 都接受的意思,例如ALL: ALL: deny

 

LOCAL:代表來自原生意思,例如:ALL: LOCAL: allow

 

UNKNOWN:代表不知道的IP 或者是domain 或者是服務

 

KNOWN:代表為可解析的IP, domain 等等資訊

 

特別要注意:

 

服務是啟動該服務的程式,一般情況下,服務名在指令碼中能看到。

 

一般情況下,我們把

 

1、允許進入的寫在/etc/hosts.allow 當中

 

2、阻止進入的則寫在/etc/hosts.deny 當中

 

而這兩個檔案判斷的依據是ALLOW優先

 

下面我們來介紹一下服務的觀察

一個命令是ps,這個命令一般是用來查詢系統中所有的進程

 

一個命令是netstat,他是用來顯示與IP、TCP、UDP和ICMP協議相關的統計資料,一般用於檢驗本機各連接埠的網路連接情況。我們主要來介紹netstat (network statistics) 的用法

 

[root@yufei ~]# netstat –help

 

使用上面的命令會顯示netstat的格式及相關參數,下面就介紹一下主要的參數意義。

 

-r, –route                顯示路由表(和route命令一樣,都可以加上後面的-n參數)

 

-i, –interfaces         顯示網路介面的串連情況(eth0、lo)

 

-s, –statistics          顯示IP、ICMP、IcmpMsg、TCP、UDP、UdpLite、TcpExt、IpExt的統計資訊

 

-n, –numeric           以數字形式顯示地址和連接埠號碼

 

-p, –programs        顯示PID/Program name

 

-l, –listening            顯示監聽連接埠

 

-a, –all, –listening  顯示所有串連和監聽連接埠

 

-t, –tcp                     顯示TCP傳輸協議的連線狀況

 

-u, –udp                   顯示UDP傳輸協議的連線狀況

 

–e本選項用於顯示關於乙太網路的統計資料。它列出的項目包括傳送的資料報的總位元組數、錯誤數、刪除數、資料報的數量和廣播的數量。這些統計資料既有發送的資料報數量,也有接收的資料報數量。這個選項可以用來統計一些基本的網路流量)。

 

從整體上看,netstat的輸出結果可以分為兩個部分,一個是Active Internet connections,稱為活動的網路連接。列出下面的一些資訊

 

Proto:顯示串連使用的協議

 

Recv-Q:本地未收到的位元組數 

Send-Q:遠程主機未收到的位元組數

 

Local Address:本地的地址與連接埠           

Foreign Address:遠端地址與連接埠          

State:串連的狀態情況

 

另一個是Active UNIX domain sockets,稱為活動的Unix域套介面。列出下面的一些資訊

 

Proto:顯示串連使用的協議

 

RefCnt:表示串連到本套介面上的進程號

 

Types:顯示套介面的類型

 

State:顯示套介面當前的狀態

 

Path:表示串連到套介面的其它進程使用的路徑名

 

netstat與網路有密切關係,所以如果想更清楚的瞭解上面列出來的資訊,最好是有點網路基礎。當然,如果你沒有也沒有關係,下面我列舉幾個我們常用的命令組合,讓大家來使用。

 

netstat -tl         查看當前tcp監聽連接埠

 

netstat -ul        查看當前udp監聽連接埠

 

netstat -tlp      查看當前tcp監聽連接埠, 同時顯示監聽的程式名

 

netstat -tlpn    以數字方式顯示上面的內容

 

netstat -tulpna    查看出正在串連的網路資訊

 

以上這些資訊基本上夠用了,如果想瞭解更多的netstat相關用法,請用man來協助。

 

服務的管理

上面講了這麼多,我相信大家對服務有了一個更深入的瞭解了,那麼下面我們就來看看服務是如何來管理的。

 

要想管理好服務,就需要掌握chkconfig此命令的使用。先來看看這個命令的使用吧。

 

chkconfig –list [name]   

列出系統中(/etc/init.d/目錄下)的服務(/etc/init.d/)狀態。[name]加上則是查看某個服務的狀態,不加就是查看系統中全部的服務狀態

 

chkconfig –add <name>

 

把某個服務增加到/etc/init.d/目錄下

 

chkconfig –del <name>

 

刪除/etc/init.d/目錄下的某個服務

 

chkconfig [--level <levels>] <name> <on|off>

 

設定某層級的某個服務的狀態

 

上面的命令比較簡單,但要注意幾點:

 

1、要想管理某個服務,那麼此服務必需要在/etc/init.d/目錄下,才能夠用chkconfig來管理,否則會出現“error reading information on service network: No such file or directory”這要的錯誤。

 

2、這個檔案要有執行許可權

 

3、/etc/init.d/目錄下的服務檔案都有一些共同點,那就是有一行類似# chkconfig: 2345 10 90這樣的內容,就和第一行#! /bin/bash一樣,是必需的,而不是我們平時所說的注釋。三欄表示的意思是:不同的運行層級、啟動順序、關閉順序。也就是說在/etc/rc.d/rcN.d/(N為2、3、4、5)下會有S10開頭的對應檔案和/etc/rc.d/rcN.d/(N為0、1、6)下以K90開頭的對應檔案。這個我們可以查看前面有關運行層級的相關資訊。

 

最後說明一點,如果你的系統中沒有xinetd的話,請安裝些軟體

[root@yufei ~]# yum install xinetd

[root@yufei ~]# chkconfig --list

省略

xinetd based services:

       chargen-dgram:     off

       chargen-stream:     off

       daytime-dgram:     off

       daytime-stream:      off

       discard-dgram:      off

       discard-stream:      off

       echo-dgram:       off

       echo-stream:        off

       tcpmux-server:      off

       time-dgram:        off

       time-stream:        off

摘自 羽飛部落格

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.