1. 程式人生 > >Linux系統服務管理 服務管理

Linux系統服務管理 服務管理

load 源碼包 iptable 必須 linu 系統服務管理 inetd 監聽 參數

Linux獨立服務管理

啟動服務

systemctl start 服務名稱.service

設置開機自啟動

systemctl enable 服務名稱.service

停止開機自啟動

systemctl disable 服務名稱.service

查看服務當前狀態

systemctl status 服務名稱.service

重新啟動服務

systemctl restart 服務名稱.service

查看所有已啟動的服務

systemctl list-units --type=service

Linux基於xinetd服務的管理

從守護進程的概念可以看出,對於系統所要管理的每一種服務,都必須運行一個監聽某個端口連接所發生的守護進程,這意味著資源浪費。為了解決這個問題,Linux引進了"網絡守護進程服務程序"的概念。也就是xinted(extended internet daemon)。xinetd能夠同時監聽多個指定的端口,在接受用戶請求時,它能夠根據用戶請求的端口的不同,啟動不同的網絡服務進程來處理這些用戶請求。可以把xinetd看做一個管理啟動服務的管理服務器,它決定把一個客戶請求交給哪個程序處理,然後啟動相應的守護進程。xinetd無時不在運行並監聽它所管理的所有端口上的服務。當某個要連接它管理的某項服務的請求到達時,xinetd就會為該服務啟動合適的服務器。

Xinetd托管服務

Xinetd 托管服務。又名:超級守護進程,可以把一些小服務放到xinetd裏進行托管。拖管後的好處就是可以使用xinetd強大的參數來控制這些服務,並且增強安全性。(比如一個小服務沒有一些控制功能,但支持xinetd拖管,你就可以拖管並使用xinetd的參數來控制它)。

以sshd為例,把sshd拖管到xinetd下,sshd服務也有配置文件,為/etc/ssh/sshd_config;但此配置文件功能有限,可以選擇拖管sshd服務,來實現額外的功能。

托管前先關閉ssh本身提供的服務

#關閉ssh服務
[root@localhost ~]# systemctl  stop  sshd.service 
#設置為開機不啟動(註意:如果你關閉xinetd之後,需要把ssh服務重新啟動,不然你不能通過ssh遠程連接)
[root@localhost 
~]# systemctl disable sshd.service

開始配置ssh被xinetd托管,默認是沒有這個文件的,需要創建。

[root@localhost ~]#vim  /etc/xinetd.d/ssh

編輯內容:

# 代表被托管服務的名稱
service ssh                            
{
   # 是否禁用托管服務,no表示開啟托管服務
   disable = no     
   # 設置失敗時,UID添加到系統登記表               
   log_on_failure += USERID   
   # socket連接方式,這個是屬於本地方式,對ssh無效
   socket_type = stream         
   # 設置服務啟動時需要的參數
   server_args = --daemon              
   # 每秒25個入站連接,如果超過限制,則等待30秒。主要用於對付拒絕服務***  
   cps = 25 30                    
   # 代表ssh走的是tcp協議連接
   protocol = tcp                 
   # 是否並發,這個參數對ssh無效
   wait = no                       
   # 以什麽用戶進行啟動
   user = root                   
   # 被托管服務的啟動腳本
   server = /usr/sbin/sshd         
   # 啟動腳本的參數
   server_args = -i                
}

重新啟動xinetd服務

[root@localhost ~]# systemctl  restart  xinetd.service
#查看ssh是否被托管
[root@localhost ~]# lsof -i:22  

查看22端口的進程,由sshd變為了xinetd就表示你拖管成功了

可以對ssh 添加對IP或網段的訪問控制功能,這個是ssh服務本身不具備的功能(除非寫iptables)

[root@localhost ~]#vim  /etc/xinetd.d/ssh

添加對IP或網段的訪問控制功能

# 代表被托管服務的名稱
service ssh                            
{
   # 是否禁用托管服務,no表示開啟托管服務
   disable = no     
   # 設置失敗時,UID添加到系統登記表               
   log_on_failure += USERID   
   # socket連接方式,這個是屬於本地方式,對ssh無效
   socket_type = stream         
   # 設置服務啟動時需要的參數
   server_args = --daemon              
   # 每秒25個入站連接,如果超過限制,則等待30秒。主要用於對付拒絕服務***  
   cps = 25 30                    
   # 代表ssh走的是tcp協議連接
   protocol = tcp                 
   # 是否並發,這個參數對ssh無效
   wait = no                       
   # 以什麽用戶進行啟動
   user = root                   
   # 被托管服務的啟動腳本
   server = /usr/sbin/sshd         
   # 啟動腳本的參數
   server_args = -i    
   # 表示允許1網段訪問
   only_from = 192.168.1.0/24              
   # 表示只能1網段訪問,但1網段裏的20和200這兩IP不能訪問            
   no_access = 192.168.1.20 192.168.1.200 
   # 最大連接數為3
   instances = 3                                  
   # 每個源IP只能有1個連接
   per_source = 1                                 
   # 只能9:00到18:00才能ssh連接
   access_times = 9:00-18:00                      
   # 指定日誌記錄到/var/log/xinetd_ssh.log裏
   log_type = file /var/log/xinetd_ssh.log   
   # 指定ssh的連接端口為7722    
   port = 7722                             
}

添加完成後重新啟動xinetd服務

Linux源碼包服務管理

源碼包服務中所有的文件都會安裝到指定目錄當中,所以服務的管理腳本程序也會安裝到指定目錄中。源碼包服務的啟動管理方式就是在服務的安裝目錄中找到管理腳本,然後執行這個腳本。我們可以査看每個服務的說明文檔 (一般是 INSTALL 或 READEM),在這個說明文檔中會明確地告訴大家服務的啟動腳本是哪個文件。

源碼包服務被服務管理命令識別

在默認情況下,源碼包服務是不能被系統的服務管理命令所識別和管理的,但是如果我們做一些設定,則也是可以讓源碼包服務被系統的服務管理命令所識別和管理的。

Centos 系統服務腳本目錄 /usr/lib/systemd/ 下有系統(system)和用戶(user)之分。如需要開機沒有登陸情況下就能運行的程序,則保存在系統服務 /usr/lib/systemd/system/下,如果需要用戶登錄後才能運行的程序,則保存在用戶/usr/lib/systemd/user/ 下。服務以.service結尾。

這邊以mysql 為例:

1.建立服務文件

[root@localhost ~]# vim /lib/systemd/system/mysql.service 

編輯內容如下:

[Unit]
Description=mysql
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
#ExecReload=/usr/local/mysql/support-files/mysql.server restart
#ExecStop=/usr/local/mysql/support-files/mysql.server stop
#PrivateTmp=true

[Install]
WantedBy=multi-user.target

說明:

  • [Unit]:服務的說明
  • Description:描述服務
  • After:描述服務類別
  • [Service]服務運行參數的設置
  • Type=forking是後臺運行的形式
  • ExecStart為服務的具體運行命令
  • ExecReload為重啟命令
  • ExecStop為停止命令
  • PrivateTmp=True表示給服務分配獨立的臨時空間
  • [Install]服務安裝的相關設置,可設置為多用戶

註意:[Service]的啟動、重啟、停止命令全部要求使用絕對路徑

把服務添加到linux系統的自啟動服務列表中去,使用命令:

[root@localhost ~]# systemctl enable mysql.service

查看是否添加成功,使用命令:

[root@localhost ~]# systemctl status mysql.service

Linux系統服務管理 服務管理