Linux 基礎篇(06)Linux 系統管理員

 2023-12-06 阅读 25 评论 0

摘要:系統服務 (daemons) 一、守護進程daemon與服務service 舉例來說,linux系統需要實現循環執行定時任務的功能就需要 crond 程序的執行這里講的循環執行定時任務就是系統提供的服務service,但是實現這個功能的是 crond 這個程序,也就是daemon一般情況沒有必

系統服務 (daemons)

一、守護進程daemon與服務service

  • 舉例來說,linux系統需要實現循環執行定時任務的功能就需要 crond 程序的執行
  • 這里講的循環執行定時任務就是系統提供的服務service,但是實現這個功能的是 crond 這個程序,也就是daemon
  • 一般情況沒有必要非要去區分二者的差別,就將二者視為一樣的也可以

1、daemon 的類型

stand alone:此 daemon 可以自行單獨啟動服務
  • stand alone 的 daemon 響應速度較快。
  • 常見的 stand alone daemon 有 WWW 的 daemon (httpd)、FTP 的 daemon (vsftpd) 等等
  • 系統服務都是獨立運行的守護進程,包括syslogd和crond等
super daemon:一支特殊的 daemon 來統一管理
  • 這種服務的啟動方式則是藉由一個統一的 daemon 來負責喚起服務,這個特殊的 daemon 就被稱為 super daemon

  • 當沒有客戶端的請求時,各項服務都是未啟動的情況,等到有來自客戶端的要求時, super daemon 才喚醒相對應的服務,當客戶端的請求結束后,被喚醒的這個服務也會關閉并釋放系統資源,這種模式的運行示意圖如下
    在這里插入圖片描述

  • 這種模式的優缺點:

    • super daemon 可以具有安全控管的機制,就是類似網絡防火墻的功能啦
    • 比較節約系統的資源,但是同時對客戶端提供響應的速度相對慢一些
  • super daemon 的處理模式有兩種,分別是這樣:

    • multi-threaded (多重線程):
      全部客戶的請求都給他拿來,一次給他交辦下去,所以一個服務同時會負責好幾個程序
    • single-threaded (單個線程):
      一個一個來,第一個沒有處理完之前,后面的請排隊,請求多的話要等很久
      在這里插入圖片描述
  • 以 daemon 提供服務的的工作狀態來區分,又可以將 daemon 分為兩大類

    • signal-control
      通過訊號來管理的,只要有任何客戶端的需求進來,他就會立即啟動去處理。
    • interval-control
      就是每隔一段時間就主動的去運行某項工作,前面學到的 atd 與 crond 就屬于這種類型的 daemon 啦

守護進程(daemon)命名守則:就是在與原有的單詞后面加上一個 d

2、服務與端口的對應

  • 在互聯網的世界里,通過IP可以找到我們的主機,通過具體的port端口可以定位到具體的服務(程序)
  • Linux 里面配置對應關系的服務和端口號就是 /etc/services啦,不過這個東西最好不要隨便改,因為都是遵循互聯網的協議的

3、daemon 的啟動腳本與啟動方式

daemon相關文件
  • /etc/init.d/* :啟動腳本放置處
    系統上幾乎所有的服務啟動腳本都放置在這里,這是公認的目錄,實際上放置在 /etc/rc.d/init.d/ 啦,此目錄是一個鏈接文件;centos7中這個目錄里面基本沒啥東西了,init已經被systemd取代了
  • /etc/sysconfig/*:各服務的初始化環境配置文件
    幾乎所有的服務都會將初始化的一些選項配置寫入到這個目錄下,舉例來說,而網絡的配置則寫在 /etc/sysconfig/network-script 這個文件夾中
  • /etc/xinetd.conf, /etc/xinetd.d/* :super daemon 配置文件
  • /var/lib/* :各服務產生的數據庫
  • /var/run/*:各服務的程序之 PID 記錄處
    daemon 通常會將自己的 PID 記錄一份到 /var/run/ 當中!例如登錄文件的 PID 就記錄在 /var/run/syslogd.pid 這個文件中
Stand alone 的啟動方式
  • 獨立運行的守護進程由init腳本負責管理,所有獨立運行的守護進程的腳本在/etc/init.d/目錄下
  • 老版本的 centos 命令 service 本質也是到 /etc/init.d/* 目錄下尋找相關的啟動腳本來啟動服務
  • centos7中 init.d 文件夾里面基本沒啥啟動的腳本了,服務的管理都是通過 systemctl 來管理了
Super daemon 的啟動方式
  • centos中的super daemon一般是由 xinetd 來實現的,他可以同時監聽多個指定的端口
  • Xinetd的配置文件 /etc/xinetd.conf ,個別 daemon 配置文件則在 /etc/xinetd.d/* 內,也就是說前者是一個全局的配置,后者是針對個別 daemon 的配置

參考文章:
systemctl使用指南:CentOS 7.x systemd對比CentOS 6.x daemon
Linux中的兩種守護進程stand alone和xinetd
最簡明扼要的 Systemd 教程,只需十分鐘

二、解析 super daemon 的配置文件

1、centos7的服務的配置

  • centos7 里面的 systemd 替代了 centos5 里面的 init,支持多線程的啟動,使用 systemctl 命令控制
  • systemd開啟和監督整個系統是基于unit的概念,所有unit的配置可以到/usr/lib/systemd里面查看,下級目錄分別有system和user放置系統和用戶的unit 配置文件
unit的類型
  • service:代表一個后臺服務進程,這是最常用的一類。
  • socket:封裝系統和互聯網中的一個套接字,相應的服務在第一個“連接”進入套接字時就會啟動(例如:nscd.socket在有新連接后便啟動nscd.service)。
  • mount:封裝文件系統結構層次中的一個掛載點,systemd會將/etc/fstab中的條目都轉換為掛載點,并在開機時處理。
  • automount:封裝系統結構層次中的一個自動掛載點。
  • target:此類配置單元為其他配置單元進行邏輯分組。它們本身實際上并不做什么,只是引用其他配置單元而已,這樣便可以對配置單元做一個統一的控制,就可以實現大家都非常熟悉的運行級別的概念。
  • timer:定時器配置單元用來定時觸發用戶定義的操作。這類配置單元取代了atd,crond等傳統的定時服務。
service配置文件
  • cat sshd.service可以得到下面的內容,可以看到配置文件分為 unit、service和install三個部分
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s[Install]
WantedBy=multi-user.target
  • unit 部分:啟動順序與依賴關系

    • Description:就是服務的一個基本描述
    • Documentation:指定文檔的位置
    • After:定義啟動順序,表示此 unit 需要在后面定義的 unit 之后啟動,與此對應的還有 before
    • Wants:表示一種弱依賴,就是即便后面的服務啟動失敗啥的,也不會影響我們的目標 unit ,配置強依賴的話使用 requires
  • service 部分:啟動行為

    • Type字段定義啟動類型。它可以設置的值如下。
      • simple(默認值):ExecStart字段啟動的進程為主進程
      • forking:ExecStart字段將以fork()方式啟動,此時父進程將會退出,子進程將成為主進程
      • oneshot:類似于simple,但只執行一次,Systemd 會等它執行完,才啟動其他服務
      • dbus:類似于simple,但會等待 D-Bus 信號后啟動
      • notify:類似于simple,啟動結束后會發出通知信號,然后 Systemd 再啟動其他服務
      • idle:類似于simple,但是要等到其他任務都執行完,才會啟動該服務。一種使用場合是為讓該服務的輸出,不與其他服務的輸出相混合
    • EnvironmentFile字段:指定當前服務的環境參數文件
    • ExecStart字段:定義啟動進程時執行的命令,其中的變量$OPTIONS就來自EnvironmentFile字段指定的環境參數文件。與之作用相似的,還有如下這些字段。
      • ExecReload字段:重啟服務時執行的命令
      • ExecStop字段:停止服務時執行的命令
      • ExecStartPre字段:啟動服務之前執行的命令
      • ExecStartPost字段:啟動服務之后執行的命令
      • ExecStopPost字段:停止服務之后執行的命令
    • KillMode字段:定義 Systemd 如何停止 sshd 服務,可選的值可以是
      • control-group(默認值):當前控制組里面的所有子進程,都會被殺掉
      • process:只殺主進程
      • mixed:主進程將收到 SIGTERM 信號,子進程收到 SIGKILL 信號
      • none:沒有進程會被殺掉,只是執行服務的 stop 命令。
    • Restart字段:定義了 sshd 退出后,Systemd 的重啟方式。
    • RestartSec字段:表示 Systemd 重啟服務之前,需要等待的秒數。
  • install 部分

    • WantedBy字段:表示該服務所在的 Target。
    • 通過這個字段實現開機啟動:執行systemctl enable sshd.service命令時,sshd.service的一個鏈接文件,就會放在/etc/systemd/system目錄下面的multi-user.target.wants子目錄之中,假如系統默認的target就是 multi-user,開機進入到這個目標,就會啟動 multi-user.target.wants 這個文件夾里面的服務
  • 相關命令

=> 查看系統默認的 target
systemctl get-default=> 查看 multi-user.target 包含的所有服務
systemctl list-dependencies multi-user.target=> 切換到另一個 target
sudo systemctl isolate shutdown.target
target配置文件
  • Requires字段:要求basic.target一起運行。
  • Conflicts字段:沖突字段。如果rescue.service或rescue.target正在運行,multi-user.target就不能運行,反之亦然。
  • After:表示multi-user.target在basic.target 、 rescue.service、 rescue.target之后啟動,如果它們有啟動的話。
  • AllowIsolate:允許使用systemctl isolate命令切換到multi-user.target。
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
  • 修改配置文件以后,需要重新加載配置文件,然后重新啟動相關服務。
=> 重新加載配置文件
sudo systemctl daemon-reload=> 重啟相關服務
sudo systemctl restart ssh

?

三、服務防火墻管理(TCP Wrappers)

1、TCP Wrappers 基本使用

  • tcp wrapper是一種訪問控制工具,類似于iptables可以作訪問控制
  • tcp wrapper只能對基于tcp協議的服務作訪問控制,但并不是所有基于tcp協議的服務都能實現用tcp wraper作訪問控制, 服務是否支持tcpwrapper,具體要看是否依賴于庫文件libwrap,通過這個命令就可以查看ldd /PATH/TO/PROGRAM|grep libwrap.so
  • tcp wrapper實現訪問控制主要依靠兩個文件,一個是/etc.hosts.allow文件,另一個是/etc/hosts.deny文件,這兩個文件使用的時候先訪問allow后訪問deny,具體的工作原理如下
    在這里插入圖片描述

配置文件

  • 就是三個部分組成:(程序:客戶端:選項)最后選項中的allow和deny可以省略
  • 配置文件中的特殊詞匯
- ALL:代表全部的 program_name 或者是 IP 都接受的意思,例如 ALL: ALL: deny
- LOCAL:代表來自本機的意思,例如: ALL: LOCAL: allow
- UNKNOWN:代表不知道的 IP 或者是 domain 或者是服務時;
- KNOWN:代表為可解析的 IP, domain 等等信息時;

配置示例

  • 示例1:需求
只允許 140.116.0.0/255.255.0.0 與 203.71.39.0/255.255.255.0 這兩個網段
和203.71.38.123 這個主機可以進入我們的 rsync 服務器;
此外,其他的 IP 全部都擋掉!
  • 示例1:配置
[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 配置讓所有其他來源不可登陸
  • 示例2:需求
sshd服務不允許172.16.0.0/16,但允許172.16.1.3訪問
  • 示例2:配置
/etc/hosts.deny
sshd : 172.16. EXCEPT 172.16.1.3

2、TCP Wrappers 實現額外操作

  • 除了 deny 和 allow,還支持更加細部的操作
    • spawn (action):可以利用后續接的 shell 來進行額外的工作,shell中可以使用%h (hostname), %a (address), %d (daemon)等變量
    • twist (action):立刻以后續的命令進行,且運行完后終止該次聯機的要求 (DENY)

一個示例說明

  • rsync: 指的就是 rsync 這個服務的程序啰;
  • ALL: 指的是來源,這個范圍指的當然是全部的所有來源啰
  • spawn 中第一個括號的作用是數據流匯整,作為mail的正文
  • twist 后面的動作會將 Warning 的字樣傳送到客戶端主機的屏幕上,然后將該聯機中斷
[root@www ~]# vim /etc/hosts.deny
rsync : ALL: spawn (echo "security notice from host $(/bin/hostname)" ;\echo; /usr/sbin/safe_finger @%h ) | \/bin/mail -s "%d-%h security" root & \: twist ( /bin/echo -e "\n\nWARNING connection not allowed.\n\n" )

?

四、系統開啟的服務

1、觀察系統啟動的服務

  • ps來觀察整個系統上面的所有服務是比較妥當的
  • 觀察有啟動網絡監聽的服務使用 netstat 來查閱啦

2、配置服務的開機啟動

centos7的開機啟動過程

在這里插入圖片描述

配置服務開機啟動
  • chkconfig是centos5的,centos7用systemctl來配置
  • 直接通過 systemctl enable xxxx 就可以設置開機自啟了
  • 類圖形接口管理
    • 直接命令行輸入ntsysv就可以進入類圖形接口來管理服務的開機啟動
    • 這個類圖形接口,好像是只有紅帽系的 linux 才有

Linux日志文件

一、關于日志文件

  • 日志文件記錄系統在什么時候由哪個程序做了什么樣的行為時,發生了何種的事件等信息
  • 日志文件的重要性不言而喻,系統出現什么問題的時候,很多時候我們就會需要他來進行問題分析
  • 日志文件的權限通常是配置為僅有 root 能夠讀取而已

常見的日志文件

  • /var/log/cron
    記錄和定時任務相關的信息,可以查看我們配置的定時任務是否真的按時執行
  • /var/log/dmesg
    記錄系統在啟動的時候核心偵測過程所產生的各項資訊
  • /var/log/lastlog
    可以記錄系統上面所有的帳號最近一次登陸系統時的相關資訊,lastlog命令查詢到的內容就是來自于這個文件
  • /var/log/maillog 或 /var/log/mail/*:
    主要是記錄收發郵件所產生的信息啦
    SMTP 是發信所使用的通訊協議, POP3 則是收信使用的通訊協議。
    sendmail 與 dovecot 則分別是兩套達成通訊協議的軟件。
  • /var/log/messages
    這個文件相當的重要,幾乎系統發生的錯誤信息 (或者是重要的資訊) 都會記錄在這個文件中;
    如果系統發生莫名的錯誤時,這個文件是一定要查閱的登錄文件之一。
  • /var/log/secure
    只要牽涉到需要輸入帳號口令的軟件,那么當登陸時 (不管登陸正確或錯誤) 都會被記錄在此文件中
  • /var/log/wtmp, /var/log/faillog
    這兩個文件可以記錄正確登陸系統者的帳號資訊 (wtmp) 與錯誤登陸時所使用的帳號資訊 (faillog)
  • /var/log/httpd/, /var/log/news/, /var/log/samba/*:
    不同的網絡服務會使用它們自己的登錄文件來記載它們自己產生的各項信息

注意:在不同的發行版中,各個日志文件的名字可能不一定相同

記錄管理日志的程序(服務)

  • syslogd:主要記錄系統與網絡等服務的信息
  • klogd:主要記錄核心產生的各項資訊
  • logrotate:主要在進行日志文件的輪替

二、syslogd

1、日志文件格式

  • 每條信息均會記錄的幾個重要數據:
    • 事件發生的日期與時間;
    • 發生此事件的主機名稱;
    • 啟動此事件的服務名稱
    • 該信息的實際數據內容。

在這里插入圖片描述

2、syslog 的配置文件

  • centos7 里面記錄日志的工作是由 rsyslogd這個服務來完成的,配置文件是 /etc/rsyslog.conf
  • 這個配置文件的作用就是將不同服務產生的日志分門別類放到不同的地方
  • 配置文件的內容通常包含服務名稱、信息等級和記錄位置,可以使用通配符
  • 郵件日志記錄位置的那一欄最前的-代表日志先寫入緩沖區,再寫入日志文件
  • :omusrmsg:*代表以廣播的方式通知所有的人
    在這里插入圖片描述
  • rsyslogd支持很多類型的服務,不同的程序通過調用不同類型的日志服務來完成日志的記錄
    在這里插入圖片描述
信息等級

在這里插入圖片描述

  • 還有兩個特殊的等級,那就是 debug(錯誤偵測等級) 與 none (不需登錄等級) 兩個,當我們想要作一些錯誤偵測,或者是忽略掉某些服務的資訊時, 就用這兩個
  • 關于三個符號:. .= .!分別代表高于該等級(含)記錄日志,等于這個等級進行日志記錄、不等于該等級進行記錄

3、日志文件的安全性配置

  • 一些黑客在攻擊了你的系統之后可能會刪除你的日志文件來抹除痕跡
  • 要防止日志文件被刪除,可以使用隱藏屬性的設置(lsattr、chattr)
  • 隱藏的屬性設置為 i 的話,連root用戶都無法刪除,設置為 a 的話就只能添加,不能刪除和修改
  • 但是還是要注意自己的 root 賬號一定要保管好,不然什么都白搭,root 可以為所欲為
  • 有時候我們不小心通過 vim 修改了日志文件,這會導致日志文件不能繼續記錄,需要重啟 rsyslog 這個服務才行
  • 設置隱藏權限為 a 可以避免上面的這個問題,但是會導致在進行日志文件的替換的時候無法移動的情況,所以我們平時使用不要去設置特殊權限了,不然會遇到很多麻煩

4、多主機日志文件集中管理

  • 很多臺 linux 服務器的日志需要統一管理的話,就需要一臺專門的日志文件服務器了,這樣比較方便,不用逐一登錄去查看
服務器的配置
  • 修改 syslogd 的啟動配置檔vim /etc/sysconfig/rsyslog,配置SYSLOGD_OPTIONS="-m 0 -r"
  • 重新啟動與觀察 syslogd 喔!順利的話可以看到系統監聽了 514 端口
/etc/init.d/syslog restart
netstat -lunp | grep syslog 
客戶端的配置
vim /etc/syslog.conf
*.*       @192.168.1.100 => 下面的 IP 就是服務器的地址

?

三、日志文件輪替 (logrotate)

  • 這個 logrotate 是 Linux 系統中的一個定時任務,在 /etc/cron.daily 里面可以看到

1、logrotate配置

  • 兩個配置文件:/etc/logrotate.conf 、/etc/logrotate.d/
  • 前者是默認的配置文件,后者是一個目錄,里面是這對具體的服務的配置文件
  • 日志文件的替換的原理如圖:
    在這里插入圖片描述

/etc/logrotate.conf 文件內容

# 底下的配置是 "logrotate 的默認配置值" 
weekly    <==默認每個禮拜對登錄文件進行一次 rotate 的工作
rotate 4  <==保留幾個登錄文件呢?默認是保留四個!
create    <==由於登錄文件被更名,因此創建一個新的來繼續儲存之意!
#compress <==被更動的登錄文件是否需要壓縮?如果登錄文件太大則可考慮此參數啟動# 將 /etc/logrotate.d/ 這個目錄中的所有文件都讀進來運行 rotate 的工作!
include /etc/logrotate.d# 這個是針對個別文件的配置
/var/log/wtmp {       <==僅針對 /var/log/wtmp 所配置的參數monthly           <==每個月一次,取代每周!minsize 1M        <==文件容量一定要超過 1M 后才進行 rotate (略過時間參數)create 0664 root utmp <==指定新建文件的權限與所屬帳號/群組rotate 1          <==僅保留一個,亦即僅有 wtmp.1 保留而已。
}

/etc/logrotate.d/ 文件夾下面的文件

  • 解決關于前面提到的日志文件加隱藏權限 a 怎么進行日志更替的問題
  • sharedscripts 和 endscript 一定是成對的使用
  • prerotate 代表是在替換之前進行的動作
  • postrotate 代表在替換之后進行的動作
  • 里面命令除了處理 a 權限,其他的動作就是重啟并重新加載 syslog 服務的意思
# vi /etc/logrotate.d/syslog/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \
/var/log/boot.log /var/log/cron {sharedscriptsprerotate/usr/bin/chattr -a /var/log/messagesendscriptsharedscriptspostrotate/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true/usr/bin/chattr +a /var/log/messagesendscript
}

2、logrotate使用示范

需求

  • 創建 /var/log/admin.log 這個文件,將該文件加上 +a 這個隱藏標簽,而且配置底下的相關資訊:
    • 登錄文件輪替一個月進行一次;
    • 該登錄文件若大於 10MB 時,則主動進行輪替,不需要考慮一個月的期限;
    • 保存五個備份文件;
    • 備份文件需要壓縮

測試

  • 先創建 +a 這個屬性啊!
[root@www ~]# chattr +a /var/log/admin.log
[root@www ~]# lsattr /var/log/admin.log
[root@www ~]# mv /var/log/admin.log /var/log/admin.log.1   ==>測試 a 是否起作用
  • 開始創建 logrotate 的配置檔,添加一個文件在 /etc/logrotate.d 里面
[root@www ~]# vi /etc/logrotate.d/admin
/var/log/admin.log {monthly   <==每個月進行一次size=10M  <==文件容量大於 10M 則開始處置rotate 5  <==保留五個!compress  <==進行壓縮工作!sharedscriptsprerotate/usr/bin/chattr -a /var/log/admin.logendscriptsharedscriptspostrotate/usr/bin/killall -HUP syslogd/usr/bin/chattr +a /var/log/admin.logendscript
}
  • 測試一下強制 logrotate 與相關功能的資訊顯示:???
[root@www ~]# logrotate -vf /etc/logrotate.d/admin
[root@www ~]# lsattr /var/log/admin.log*

四、分析日志文件logwatch

  • logwatch 這個分析工具會每天分析一次登錄文件,并且將數據以 email 的格式寄送給 root
  • centos7 默認是沒有 logwatch 這個工具的,需要自己手動安裝一下,安裝好后,直接使用 logwatch --detail low即可進行日志文件的分析
  • logwatch 還可以指定日志文件指定服務進行分析,mailto 的選項可以指定分析結果的發送給誰,如果需要每天執行的話,配置相應的定時任務就可以了

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/190508.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息