Linux系統服務管理 服務管理
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系統服務管理 服務管理