一、rsync備份與同步
rsync(remote sync) 是一個unix/linux系統下的檔案同步和傳輸工具。rsync通過“rsync算法”提供了一個客戶機和遠端檔案伺服器的檔案同步的快速方法。每次隻傳送兩個檔案的不同部分(即支援增量備份),而不是每次都整份傳送。
在遠端同步任務中,負責發起rsync同步操作的客戶機稱為發起端,而負責響應來自客機的rsync同步操作的伺服器稱為備份源。
1、rsync工具的特點
能更新整個目錄樹和檔案系統;
有選擇性的保持符号鍊鍊、硬連結、檔案屬性、權限、裝置以及時間等;
傳輸前執行壓縮,是以非常适用于異地備份、鏡像伺服器等應用;
能用rsh、ssh 或直接端口做為傳輸端口;
支援匿名rsync 同步檔案,是理想的鏡像工具;
格式:rsync 【選項】 源檔案 目标檔案
常用選項:
-a:--archive 歸檔模式,表示以遞歸的方式傳輸檔案,并且保持檔案屬性,等同于-rlptgod
-r:-recursive 對子目錄以遞歸模式處理
-v:顯示同步過程的詳細資訊
-z:--compress 表示壓縮傳輸
--delete:删除那些目标位置有而原始位置沒有的檔案
-h :表示硬連接配接檔案
-l:--links 表示拷貝連結檔案
-p :--perms 表示保持檔案原有權限
-t:--times 表示保持檔案原有時間
-g :--group 表示保持檔案原有屬使用者組
-o :--owner 表示保持檔案原有屬主
-d :--devices 表示塊裝置檔案資訊
-a :保留acl屬性資訊
-p :顯示傳輸進度
-u :--update 僅僅進行更新,跳過所有已經存在于目标位置,并且檔案時間晚于要備份的檔案。
--port= :指定其他的rsync服務端口
--password-file= :指定密碼檔案擷取使用者密碼,隻能在rsync運作使用
2、基于ssh遠端備份
1>.ssh本地下行同步到客戶機(必須安裝openssh-clients)
使用ssh協定的好處是能夠基于更安全的遠端連接配接,增強備份的保密性。
實驗:将/var/www/html目錄下檔案下行同步到客戶機192.168.0.200中/web下,也可以是本地,保持檔案權限和屬性、軟/硬連結、acl屬性、删除/web目錄中多餘的檔案,并在傳輸過程中進行壓縮。
1
2
3
4
<code>useradd</code> <code>rsync</code>
<code>password </code><code>rsync</code>
<code>mkdir</code> <code>/backup</code>
<code>rsync</code> <code>-arzvh --delete </code><code>rsync</code><code>@192.168.0.200:</code><code>/var/www/html//web/</code>
2>.ssh上行同步到伺服器
實驗:将客戶機/opt/web目錄下檔案上傳同步到192.168.0.202伺服器/var/www/html下
rsync -rzvl /opt/web --delete [email protected]:/var/www/html
對于設定任務計劃的同步的話,為了解決互動式密碼登陸,需要配置密鑰對,實作無密碼登陸。
在客戶機上建立密鑰對
5
6
7
8
9
10
11
12
13
14
15
16
<code>ssh</code><code>-keygen -t rsa </code><code>#一直回車</code>
<code>ssh</code><code>-copy-</code><code>id</code> <code>rsync</code><code>@192.168.0.200 </code><code>#将公鑰分發給伺服器</code>
<code>sshr </code><code>sync</code><code>@192.168.0.200 </code><code>#現在就可以無密碼登陸了,成功實作免互動自動登入</code>
<code>vi</code> <code>/root/rsync_web</code><code>.sh </code><code>#寫一個腳本,建立任務計劃</code>
<code>#!/bin/bash</code>
<code>cmd=</code><code>"/usr/bin/rsync"</code>
<code>rsync_user=</code><code>"rsync"</code>
<code>args=</code><code>"-az --delete"</code>
<code>src=</code><code>"192.168.0.200:/var/www/html"</code>
<code>dst=</code><code>"/web"</code>
<code>mkdir</code><code>-p $dst</code>
<code>$cmd $args $rsync_user@src $dst</code>
<code>儲存退出!</code>
<code>chmod</code> <code>700 </code><code>/root/rsync_web</code><code>.sh</code>
<code>crontab</code> <code>-e</code>
<code>00 23 * * * </code><code>/root/rsync_web</code><code>.sh</code>
3、基于rsync程序備份同步
rsync不僅僅用作遠端同步的發起端(用戶端),也可以作為守護程序運作,為其他客戶機提供備份源,配置rsync備份源需要建立配置檔案 rsync.conf,建立備份賬戶,然後将rsync程式以”--daemon”選項運作。
1>.建立主配置檔案
17
<code>vi</code> <code>/etc/rsyncd</code><code>.conf</code>
<code>uid=nobody </code><code>#指定當該子產品傳輸檔案時守護程序使用者,預設是nobody</code>
<code>gid=nobody </code><code>#指定當該子產品傳輸檔案時守護程序組,預設是nobody</code>
<code>port=873 </code><code>#背景程式使用端口,預設是873</code>
<code>use chroot=</code><code>yes</code>
<code>max connections=4 </code><code>#最大連接配接數</code>
<code>log </code><code>file</code><code>=</code><code>/var/log/rsyncd</code><code>.log </code><code>#存放日志位置</code>
<code>pid </code><code>file</code><code>=</code><code>/var/run/rsyncd</code><code>.pid </code><code>#存放程序位置</code>
<code>hosts allow=192.168.0.200,192.168.0.201 </code><code>#允許主機,或者是網段</code>
<code>hosts deny=0.0.0.0</code><code>/0</code><code>#禁止主機,沒有這行,預設沒有</code>
<code>[web]</code>
<code>path=</code><code>/var/www/html</code>
<code>comment=rsyncto web www.</code><code>test</code><code>.com</code>
<code>read</code> <code>only=</code><code>yes</code><code>#隻允許下載下傳,no是允許下載下傳和上傳,上傳建議使用ssh</code>
<code>dont compress=*.gz *.bz2 *.tgz *.zip *.</code><code>tar</code><code>*.z</code>
<code>auth </code><code>users</code><code>=</code><code>rsync</code><code>#認證的使用者名,沒有這兩行表示是匿名,此使用者與系統使用者無關</code>
<code>secrets </code><code>file</code><code>=</code><code>/etc/rsync</code><code>.pass </code><code>#密碼和使用者名對比表,密碼檔案自己建立</code>
注意:該檔案的權限一定要是600,否則用戶端将不能連接配接伺服器。
2>.建立認證使用者、密碼和啟動
<code>vi</code> <code>/etc/rsync</code><code>.pass</code>
<code>rsync</code><code>:123.com</code>
<code>rsync</code><code>--daemon </code><code>#啟動rsync服務</code>
<code>killall -9 </code><code>rsync</code><code>#關閉rsync服務</code>
<code>echo</code><code>“</code><code>rsync</code> <code>--daemon” >> </code><code>/etc/rc</code><code>.</code><code>local</code><code>#設定開機啟動</code>
<code>iptables -a input -p tcp --dport 873 -j accept </code><code>#設定防火牆</code>
3>.将rsync服務交給xinetd服務管理,隻有rsync請求,rsync才啟用,其他時間關閉狀态
<code>vi</code> <code>/etc/xinetd</code><code>.d</code><code>/rsync</code>
<code>service </code><code>rsync</code>
<code>{</code>
<code>disable = </code><code>yes</code><code>#修改為yes</code>
<code>socket_type = stream</code>
<code>wait = no</code>
<code>user = root</code>
<code>server = </code><code>/usr/bin/rsync</code>
<code>server_args = --daemon</code>
<code>log_on_failure += userid</code>
<code>}</code>
4>.客戶機下行同步
<code>rsync</code> <code>-avz [email protected]::</code><code>/var/www/html//web</code><code>#下行格式是這樣,再加一個冒号</code>
實作無互動驗證,我們可以使用rsync_password變量來存放密碼,執行rsync時,會自動擷取密碼
<code>echo</code> <code>"export rsync_password="</code><code>123.com</code><code>""</code><code>>> </code><code>/etc/profile</code>
<code>rsync</code> <code>-avz --delete rysnc:</code><code>//rsync</code><code>@192.168.0.200</code><code>/var/www/html//web</code><code>#這個指令格式和上面是一樣效果</code>
寫一個腳本,建立任務計劃,同上,略...
二、管理系統服務
1、chkconfig指令使用
chkconfig --list httpd #檢視httpd服務啟動狀态
chkconfig --level 級别清單 服務名 on|off
chkconfig --level 35 httpd on #設定httpd在3、5運作級别開機自動啟動
/etc/init.d -> /etc/rc.d/init.d #服務腳本位置,連結到rc.d下
2、ntsysv系統服務管理工具
當設定單個服務啟動時,使用chkconfig更有效率,設定多個服務啟動時,使用ntsysv工具比較适合
啟動和停止服務腳本:service httpd start|stop|restart|reload|status或/etc/init.d/httpd start
三、日志管理
作業系統的日志主要具有審計與監測的功能,通過對日志資訊的分析,可以檢查錯誤發生的原因,監測追蹤入侵者及受到攻擊時留下的痕迹,甚至還能實時的進行系統狀态的監控。有效利用日志資訊并對其進行分析與實時的監控管理,對于系統的安全性具有極為重要的作用;日志檔案所處的位置都在/var/log目錄下。
1、rsyslog主配置
<code>grep</code> <code>-</code><code>v</code> <code>"^#"</code> <code>/etc/rsyslog</code><code>.conf |</code><code>grep</code> <code>-</code><code>v</code> <code>"^$"</code> <code>#篩選掉注釋和空行</code>
<code>$modload imuxsock </code><code># provides support for local system logging (e.g. via logger command)</code>
<code>$modload imklog </code><code># provides kernel logging support (previously done by rklogd)</code>
<code>$actionfiledefaulttemplate rsyslog_traditionalfileformat</code>
<code>$includeconfig </code><code>/etc/rsyslog</code><code>.d/*.conf</code>
<code>*.info;mail.none;authpriv.none;</code><code>cron</code><code>.none </code><code>/var/log/messages</code> <code>#核心及應用程式公共消息日志</code>
<code>authpriv.* </code><code>/var/log/secure</code> <code>#系統安全日志 </code>
<code>mail.* </code><code>/var/log/maillog</code> <code>#電子郵件系統的功能</code>
<code>cron</code><code>.* </code><code>/var/log/cron</code> <code>#計劃任務相關的日志</code>
<code>*.emerg * </code><code>#syslog對日志所設定的級别</code>
<code>uucp,news.crit </code><code>/var/log/spooler</code>
<code>#syslog對news和uucp的日志所設定的級别,crit表示危急,但事故還沒有發生,将要發生。news 是新聞討論區伺服器的;uucp全稱是unix-to-unix copy protocol的資訊</code>
<code>local7.* </code><code>/var/log/boot</code><code>.log </code><code>#開機系統日志</code>
2、日志級别,由高到低
emerg:系統已經不可用,級别為緊急
alert:警報,需要立即處理和解決
crit:既将發生,得需要預防。事件就要發生
warnig:警告。
error:錯誤資訊,普通的錯誤資訊
notice:提醒資訊,很重要的資訊
info:通知資訊,屬于一般資訊
debug:這是調試類資訊
3、日志管理兩種方法
方法1:比較常用,适合幾台主機,不同伺服器的日志資訊都存放在各自系統内,系統管理者對各伺服器進行分散管理。
方法2:适合多台主機,則是使用日志主機系統,即集中進行日志的存儲和管理;這是一個從其他主機收集日志,并将它們存放在同一個地方的系統,很容易使來自多個主機的日志條目關聯起來,對其進行統一管理、分析,甚至配合自動化工具進行實時的監控,有效提高管理的效率。
1>.liunx系統日志集中存儲,将a主機的系統日志存儲到b主機(日志主機)上
a主機:ip:192.168.0.1/24
b主機:ip:192.168.0.2/24
b主機配置:(日志主機)
<code>vi</code> <code>/etc/sysconfig/rsyslog</code> <code>#修改如下</code>
<code>syslogd_options=</code><code>"-r -c 2"</code>
<code>vi</code> <code>/etc/rsyslog</code><code>.conf </code><code>#去掉注釋13、14、17、18</code>
<code>$modload imudp</code>
<code>$udpserverrun 514</code>
<code>$modload imtcp</code>
<code>$inputtcpserverrun 514</code>
<code>service rsyslog restart </code><code>#重新開機rsyslog</code>
<code>netstat</code> <code>-tupln | </code><code>grep</code> <code>rsyslog </code><code>#已經啟動,監聽是tcp/udp協定514</code>
<code>tcp 0 0 0.0.0.0:514 0.0.0.0:* listen 1408</code><code>/rsyslogd</code>
<code>tcp 0 0 :::514 :::* listen 1408</code><code>/rsyslogd</code>
<code>udp 0 0 0.0.0.0:514 0.0.0.0:* 1408</code><code>/rsyslogd</code>
<code>udp 0 0 :::514 :::* 1408</code><code>/rsyslogd</code>
a主機配置:(用戶端主機)
<code>vi</code> <code>/etc/rsyslog</code><code>.conf</code>
<code>*.info;mail.none;authpriv.none;</code><code>cron</code><code>.none @192.168.0.2</code>
<code>authpriv.* @192.168.0.2</code>
<code>mail.* </code><code>/var/log/maillog</code>
<code>cron</code><code>.* </code><code>/var/log/cron</code>
<code>*.emerg *</code>
<code>uucp,news.crit </code><code>/var/log/spooler</code>
<code>local7.* </code><code>/var/log/boot</code><code>.log</code>
我們是把公共消息日志和安全日志發送到日志主機上,在日志主機上tail -30 /var/log/message看到用戶端主機名,說明運作正常。
4、對于這樣龐大的日志資訊,大多數是沒用的,怎麼樣去分析和檢測我們要的資訊呢?
利用logwatch 進行日志監控:logwatch是一款專門監測linux log檔案(日志檔案)的軟體。可以再加上mail對分析的檔案不定時發送到郵箱。
在日志主機安裝logwatch并修改配置檔案
<code>yum </code><code>install</code> <code>-y logwatch</code>
<code>cp</code> <code>-rf </code><code>/usr/share/logwatch/default</code><code>.conf</code><code>/logwatch</code><code>.conf </code><code>/etc/logwatch/conf/logwatch</code><code>.conf</code>
<code>vi</code> <code>/etc/logwatch/conf/logwatch</code><code>.conf</code>
<code>logdir = </code><code>/var/log</code> <code>#日志檔案</code>
<code>tmpdir = </code><code>/var/cache/logwatch</code> <code>#緩存檔案</code>
<code>detail = high </code><code>#日志詳細程度為高</code>
<code>mailto = user@</code><code>test</code><code>.com </code><code>#收件人郵箱位址,多個郵箱有逗号隔開</code>
<code>mailfrom = root@</code><code>test</code><code>.com </code><code>#發件人郵箱位址,預設每天執行一次向郵箱發送郵件,可以從/etc/cron.daily裡看到</code>
<code>print = no </code><code>#可選項, yes 會被列印到系統标準輸出, 并且不會以郵件的形式發送到 mailto 設定的郵箱裡 , no 選項則會發到郵箱中</code>
<code>range = yesterday </code><code>#處理什麼時候的日志,可選項all,yesterday,today,即所有,昨天的,今天的</code>
<code>detail = low </code><code># 日志詳細度,可選項 low,med,high ,或是 0-10數字</code>
<code>service = all </code><code>#監控所有服務all</code>
<code>service = </code><code>"-httpd"</code> <code>#不監控的服務前面加“-”,可以添加多條</code>
logwatch指令常用的選項有:
--detail <level>: 報告的詳細程式,可用的值為:high, med, low or 0-10;
--logfile <name>: 日志檔案檔案名,如:messages、auth.log等;
--service <name>: 服務名,各個服務有對應的解析腳本,這些腳本位與以下目錄中(/usr/share/logwatch/scripts/services/或/etc/log.d/scripts/services);
--print: 列印标準輸出;
--mailto <addr>: 收件人位址;
--archives: 使用壓縮的檔案或輪轉的檔案,如:messages.1、messages.1.gz;
--save <filename>: 儲存到檔案 <filename>.
--range <range>: 日期範圍:yesterday、today、all;
--debug <level>: 試調級别: high、med、low ;
--splithosts: 為每個主機建立一份報告;
--multiemail: 将報告發送給多個郵件位址;
手動執行logwatch的指令生成日志報告
<code>perl </code><code>/usr/share/logwatch/scripts/logwatch</code><code>.pl</code>
寫一個腳本讓系統定時給指定郵箱發送郵箱
<code>vi</code> <code>/usr/local/sbin/logwatch</code><code>.sh</code>
<code>chmod</code> <code>u+x </code><code>/usr/local/sbin/logwatch</code><code>.pl</code>
建立一個cron計劃任務
<code>crontab</code> <code>–e</code>
<code>30 08 * * * </code><code>/usr/local/sbin/logwatch</code><code>.sh </code><code>#每台早上八點三十發一次郵件</code>
四、ntp(網絡時間協定)
ntp(network time protocol)是用來使計算機時間同步化的一種協定,它可以使計算機系統與ntp伺服器或時鐘源(如石英鐘,gps等等)進行同步化的一種協定,它可以提供高精準度的時間校正。ntp伺服器預設監聽utp 123端口。
1、搭建時間同步伺服器(ntp)(ip:192.168.0.1),并讓它與外部時間伺服器同步,内部的其他伺服器以這台ntp作為标準時間,有兩種配置:
1>.允許所有ip進行時間同步(預設)
restrict default kod nomodify notrap nopeer noquery restrict default modify notrap
2>.隻允許網段ip進行時間同步
restrict 192.168.2.0 mask 255.255.255.0 nomodify notrap
2、ntp安裝與配置
<code>yum </code><code>install</code> <code>-y ntp</code>
<code>service ntpd start </code><code>#不需要配置,啟動即可</code>
<code>iptables -i input -p udp --dport 123 -j accept </code><code>#ntp使用upd協定123端口,設定允許規則</code>
3、用戶端同步ntp伺服器
<code>ntpdate 192.168.0.1</code>
設定自動同步
<code>00 21 * * * </code><code>/usr/sbin/ntpdate</code> <code>192.168.0.1; </code><code>/sbin/hwclock</code> <code>-w </code><code>#設定每天晚上9點同步,hwclock -w 将系統時間寫入系統硬體</code>
用戶端剛開始同步會報錯:ntpdate[1731]: step time server 192.168.0.202 offset -28797.853105 sec
這是因為ntp本身時間沒有和internet時間同步,這個過程需要5分鐘以上,使用watch ntpq -p指令檢視顯示如下資訊說明已經同步
ntp主配置檔案
<code>grep</code> <code>-</code><code>v</code> <code>"^#"</code> <code>/etc/ntp</code><code>.conf |</code><code>grep</code> <code>-</code><code>v</code> <code>"^$"</code>
<code>driftfile </code><code>/var/lib/ntp/drift</code>
<code>restrict default kod nomodify notrap nopeer noquery </code><code>#限制其他計算機查詢、修改本機上的ntp服務,其中default表示所有ip</code>
<code>restrict -6 default kod nomodify notrap nopeer noquery </code><code>#應用于ipv6位址的主機</code>
<code>restrict 127.0.0.1 </code><code>#開放本機内部接口,用于回報;以便于在本地對ntp服務進行監控及配置</code>
<code>restrict -6 ::1 </code><code>#開放這個網段,不能修改;即允許192.168.1.0/24網段的ntp用戶端都可以用本機的ntp伺服器進行網絡校時,但不允許它們修改本機的ntp服務配置</code>
<code>server 0.centos.pool.ntp.org </code><code>#指定真實上層ntp伺服器</code>
<code>server 1.centos.pool.ntp.org</code>
<code>server 2.centos.pool.ntp.org</code>
<code>includefile </code><code>/etc/ntp/crypto/pw</code>
<code>keys </code><code>/etc/ntp/keys</code>