Linux常用工具服務——rsync、FTP、NFS、SSH、syslog、NTP


一、rsync數據同步服務

1、介紹

Rsync是一款開源的,快速的,多功能的,可實現全量及增量的本地或遠程數據同步備份的優秀工具。Rsync軟件適用於多種操作系統平台。

Rsync具有使本地和遠程兩台主機之間的數據快速復制同步鏡像,遠程備份的功能。相對於同類產品,Rsync的同步數據的性能和效率更省一籌。

(1)一個rsync相當於scp、cp、rm,但是還優於這些命令。傳統的拷貝工具每次只能進行全部的拷貝,rsync工具除了進行完全拷貝之外,還可以進行增量拷貝。

(2)在同步備份數據時,默認情況下,rsync通過“quick check”算法:僅同步大小或者最后修改時間發生變化的文件或者目錄;也可以根據權限、屬主等屬性的變化同步(需指定參數)。

2、數據同步原理

rsync2.x的對比方法:把所有文件比對一遍之后進行數據同步。

rsync3.x的比對方法:一邊對比差異,一邊對差異的部分進行同步。

3、Rsync的特性

  • 支持拷貝特殊文件如鏈接文件、設備等。
  • 可以又排除指定文件或目錄同步的功能,相當於打包命令tar的排除功能。
  • 可以做到保持源文件或目錄的權限,時間,軟硬鏈接,屬主屬性均不改變 (-p)
  • 可以實現增量同步,既只同步發生變化的數據。
  • 可以實現rcp、rsh、ssh等方式來配合傳輸文件。
  • 可以通過socket(進程)方式傳輸文件和數據
  • 只是匿名的或認證(無需系統用戶)的進程模式傳輸,可實現方便安全的進行數據傳輸。

4、Rsync的工作場景

       (1)兩台服務器之間進行數據同步(定時任務cron+rsync備份數據)

  (2)實時同步(解決存儲服務器等的單點問題)

       使用rsync和inotify的功能做實時的數據同步。利用inotify的用戶程序空間文件系統的變化通知,根據存儲服務器上目錄的變化,把變化的數據使用rsync命令實時同步到備份服務器。

       小貼士:inotify是一個Linux特性。它監控文件系統操作,比如讀寫、寫入和創建。也可以通過inotify實現數據的同步,所需要的應用軟件inotify-tools。

       小貼士二:雙機數據同步還可以通過drbd方案(該方案由內核模塊和相關腳本構成,用以構建高可用性的集群。其實現方法是通過網絡來鏡像整個設備。DRBD負責接受數據,把數據寫到本地磁盤,然后發送給另一個主機,另一個主機再將數據存到自己的磁盤中。)以及雙寫的方案實現雙機數據同步。

5、Rsync的工作方式

  Rsync的數據傳輸大概有以下幾種方式。分別為:

  (1)單個主機本地的數據傳輸

  (2)結束rcp、ssh等通道來傳輸數據

  (3)以守護進程(socket)的方式傳輸數據

#以下為三種方式的幫助文檔。查看方式:man rsync 如果沒有該命令,可使用yum install rsync -y (centos)
Local: rsync [OPTION...] SRC... [DEST] Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST Access via rsync daemon: Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

(1)單個主機本地的數據傳輸

   rsync本地傳輸模式的語法是:

   rsync  [option]  SRC [dest]  /  rsync  選項  源文件  目的文件

#本地文件復制
[root@localhost ~]# rsync new.sh /opt/
[root@localhost ~]# ll /opt/
總用量 4
-rw-r--r--. 1 root root 92 12月 29 23:01 new.sh
[root@localhost ~]# ll
總用量 8
-rw-------. 1 root root 1259 4月  30 2021 anaconda-ks.cfg
-rw-r--r--. 1 root root   92 12月 29 22:12 new.sh

#拷貝一個目錄
[root@localhost ~]# mkdir test
[root@localhost ~]# rsync -avz /opt/ /root/test
sending incremental file list
./
new.sh

sent 187 bytes  received 38 bytes  450.00 bytes/sec
total size is 92  speedup is 0.41
[root@localhost ~]# ll /opt/
總用量 4
-rw-r--r--. 1 root root 92 12月 29 23:01 new.sh
[root@localhost ~]# ll /root/test/
總用量 4
-rw-r--r--. 1 root root 92 12月 29 23:01 new.sh

#刪除功能
[root@localhost ~]# mkdir /abc 
[root@localhost ~]# rsync -avz --delete /abc/ /root/test/  #delete的意思是讓源目錄和目標目錄保持一致,所以需要創建一個新的空文件夾
sending incremental file list
deleting new.sh
deleting abc03
deleting abc02
deleting abc01
./

sent 43 bytes  received 56 bytes  198.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost ~]# tree /root/test
/root/test

0 directories, 0 files

 rsync的一些常用參數選項:

選項 具體作用
-v,--version 詳細模式輸出,傳輸時進度等信息。
-z,--compress

傳輸時進行壓縮以提高效率。

--compose-level=NUM可按級別壓縮。

-a,--archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性。
-r,--recursive 對子目錄以遞歸模式,即目錄下的所有目錄都同樣傳輸。
-t,--times 保持文件的時間信息
-o,--owner 保持文件的屬主信息
-p,--perms 保持文件權限
-g,--group 保持文件的屬組信息
-P,--progress 顯示同步過程中及傳輸時的進度等信息
-D,--devices 保持設備文件的信息
-l,--links 保留軟鏈接
--bwlimit=RATE 對傳輸文件的帶寬進行限制
--delete 讓源目錄和目標目錄的文件保持一致
示例:
#帶寬限制
[root@localhost ~]# rsync -avz new.sh 192.168.10.12:/root --bwlimit=10  #兩台服務器都需要以及安裝rsync
root@192.168.10.12's password: 
sending incremental file list
new.sh

sent 167 bytes  received 35 bytes  57.71 bytes/sec
total size is 92  speedup is 0.46

#保持同步目錄及文件屬性
參數:-avz 或者 -vzrtopg  

一些使用實例

#測試本地rsync同步,並同步權限

[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir anliu
[root@localhost opt]# touch anliu/test.txt
[root@localhost opt]# chmod -R 700 anliu
[root@localhost opt]# ls -l
總用量 0
drwx------. 2 root root 22 2月 11 21:44 anliu

[root@localhost opt]# tree /tmp/
/tmp/

0 directories, 0 files
[root@localhost opt]# rsync /opt/ /tmp/
skipping directory .
[root@localhost opt]# rsync -avz /opt/ /tmp/
sending incremental file list
./
anliu/
anliu/test.txt

sent 149 bytes received 46 bytes 390.00 bytes/sec
total size is 0 speedup is 0.00
[root@localhost opt]# ll /tmp/
總用量 0
drwx------. 2 root root 22 2月 11 21:44 anliu
[root@localhost opt]# ll /tmp/anliu/
總用量 0
-rwx------. 1 root root 0 2月 11 21:44 test.txt

#目錄復制區別

①、rsync -avz /opt/ /tmp/ 僅復制opt目錄內的內容,opt目錄本身不同步。

②、rsync -avz /opt  /tmp/  表示將opt目錄下的所有以及opt目錄本身全部同步

(2)借助ssh通道在兩台主機之間來傳輸數據

兩台主機之間推送

#兩台主機之間拉取數據
[root@localhost ~]# rsync -avzP -e 'ssh -p 22' /tmp root@192.168.10.11:tmp/    #-e 'ssh -p 22' :該選項表示已ssh的方式通過22端口推送,如果不寫,默認為22端口
root@192.168.10.11's password: 
sending incremental file list
created directory tmp
tmp/
tmp/.ICE-unix/
tmp/.Test-unix/
tmp/.X11-unix/
tmp/.XIM-unix/
tmp/.font-unix/
tmp/anliu/
tmp/anliu/test.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/8)

sent 297 bytes  received 93 bytes  60.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost ~]# ssh root@192.168.10.11 "ls -l tmp"
root@192.168.10.11's password: 
總用量 0
drwxr-xr-x. 8 root root 106 2月  11 21:44 tmp 

兩台主機之間推送數據

[root@localhost ~]# rsync -avzP root@192.168.10.11:/root/abc* /root
root@192.168.10.11's password: 
receiving incremental file list
abc01.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=2/3)
abc02.txt
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=1/3)
abc03.txt
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=0/3)

sent 81 bytes  received 194 bytes  78.57 bytes/sec
total size is 0  speedup is 0.00
[root@localhost ~]# ls
abc01.txt  abc02.txt  abc03.txt  anaconda-ks.cfg  new.sh 

可以使用映射好的主機名進行數據傳輸: 

[root@localhost ~]# rsync -avzP root@rsync:/tmp /root
root@rsync's password: 
receiving incremental file list
tmp/
tmp/123
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=5/7)
tmp/.ICE-unix/
tmp/.Test-unix/
tmp/.X11-unix/
tmp/.XIM-unix/
tmp/.font-unix/

sent 71 bytes  received 257 bytes  59.64 bytes/sec
total size is 0  speedup is 0.00
[root@localhost ~]# ls
abc01.txt  abc02.txt  abc03.txt  anaconda-ks.cfg  new.sh  tmp
[root@localhost ~]# tail -1  /etc/hosts 
192.168.10.11  rsync 

(3)以守護進程(socket)的方式傳輸數據

   1、為什么使用守護進程模式?

①、rsync傳輸時,使用的是系統用戶和系統用戶的密碼,不安全。

②、使用普通用戶會因為權限問題導致數據傳輸失敗

   2、守護進程模式搭建

主機名 IP 用途
a-server 192.168.10.11 rsync服務端
b-server 192.168.10.12 rsync客戶端
    ①、准備工作 (服務端與客戶端均需操作)
#修改主機名
[root@localhost ~]# hostnamectl set-hostname a-server  
[root@localhost ~]# su -l
上一次登錄:三 12月 29 21:22:51 CST 2021從 192.168.10.1pts/0 上 

#關閉防火牆或者打開端口873
[root@a-server ~]# systemctl stop firewalld
[root@a-server ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

#安裝常用軟件包以及時間同步
[root@a-server ~]# yum install vim wget tree lsof ntpdate net-tools rsync -y
[root@a-server ~]# ntpdate cn.pool.ntp.org
14 Feb 11:21:38 ntpdate[7873]: step time server 84.16.73.33 offset 4024336.128826 sec
[root@a-server ~]# hwclock -w
[root@a-server ~]# date
2022年 02月 14日 星期一 11:21:47 CST
 ②、服務端操作
#確認rsync已經安裝
[root@a-server ~]# rpm -qa | grep rsync
rsync-3.1.2-10.el7.x86_64

#修改配置文件
[root@a-server ~]# cp -p /etc/rsyncd.conf{,.bak}
[root@a-server ~]# vim /etc/rsyncd.conf
[root@a-server ~]# grep -vE "^#|^$" /etc/rsyncd.conf
uid = root  #用戶
gid = root   #組
use chroot = no  #程序安全設置
max conections = 200   #客戶端連接數
timeout = 300  #超時時間
pid file = /var/run/rsyncd.pid   #進程號文件位置
lock file = /var/run/rsync.lock   #進程鎖
log file = /var/run/rsyncd.log   #日志文件位置
[backup]
path = /backup/   #使用目錄
ignore errors     #有錯誤時忽略
read only = false   #可讀可寫
list = false   #阻止遠程列表(不讓遠程方式查看服務端有什么)
hosts allow = 192.168.10.0/24   #允許IP
hosts deny = 0.0.0.0/32     #阻止IP
auth users = rsync_backup   #虛擬用戶
secrets file = /etc/rsync.password    #存放用戶和密碼的文件


#創建共享目錄以及添加rsync程序用戶
[root@a-server ~]# useradd -M -s /sbin/nologin rsync
[root@a-server ~]# cat /etc/passwd | grep rsync
rsync:x:1000:1000::/home/rsync:/sbin/nologin
[root@a-server ~]# cat /etc/group | grep rsync
rsync:x:1000:
[root@a-server ~]# mkdir /backup

#啟動服務並查看
[root@a-server ~]# rsync --daemon
[root@a-server ~]# netstat -antup | grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      7897/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      7897/rsync 

3修改共享目錄的屬主以及權限
[root@a-server ~]# chown -R rsync:rsync /backup/
[root@a-server ~]# chmod -R 755 /backup/
[root@a-server ~]# ll -d /backup/
drwxr-xr-x. 2 rsync rsync 6 2月  14 11:35 /backup/

#創建rsync虛擬賬戶和密碼
[root@a-server ~]# echo "rsync_backup:123456" > /etc/rsync.password
[root@a-server ~]# cat /etc/rsync.password 
rsync_backup:123456

#將賬戶密碼文件權限設置為600(重要),並將rsync啟動作為開機自啟
[root@a-server ~]# chmod 600 /etc/rsync.password 
[root@a-server ~]# ll /etc/rsync.password 
-rw-------. 1 root root 20 2月  14 11:38 /etc/rsync.password
[root@a-server ~]# echo "rsync --daemon" > /etc/rc.local 
[root@a-server ~]# tail -1 /etc/rc.local 
rsync --daemon
  ③、客戶端操作  
#創建密碼文件
[root@b-server ~]# rpm -qa | grep rsync
rsync-3.1.2-10.el7.x86_64
[root@b-server ~]# echo "123456" > /etc/rsync.password

#將密碼文件的權限設置為600
[root@b-server ~]# chmod -R 600 /etc/rsync.password 
[root@b-server ~]# ll /etc/rsync.password 
-rw-------. 1 root root 7 12月 29 22:04 /etc/rsync.password 
  ④、測試

推送測試一:將客戶端指定目錄內容推送到服務端rsync指定目錄下

[root@b-server ~]# mkdir /backup
[root@b-server ~]# ll /backup/
總用量 36796
-rw-r--r--. 1 root root 37676320 12月 29 22:45 zookeeper-3.4.14.tar.gz
[root@b-server ~]# rsync -avzP /backup/ rsync_backup@192.168.10.11::backup --password-file=/etc/rsync.password
sending incremental file list
./
zookeeper-3.4.14.tar.gz
37,676,320 100% 3.61MB/s 0:00:09 (xfr#1, to-chk=0/2)
sent 37,604,425 bytes received 46 bytes 3,269,954.00 bytes/sec
total size is 37,676,320 speedup is 1.00
[root@b-server ~]# ssh root@192.168.10.11 "ls -l /backup"
root@192.168.10.11's password:
總用量 36796
-rw-r--r--. 1 root root 37676320 12月 29 22:45 zookeeper-3.4.14.tar.gz

 

#選項說明:

-avzP :各項屬性不變,-P顯示具體同步過程。

/backup/ :要推送的內容所在的目錄

 rsync_backup:服務端rsync服務的同步的用戶名(/etc/rsyncd.conf中配置)

192.168.10.11 :rsync服務端的IP

backup:rsync服務器配置文件里的模塊名

--password-file=/etc/rsync.password :免密碼的操作。指定密碼文件位置,如果不寫,就會使用交互式輸入密碼。

推送測試二:將客戶端任意目錄推送到rsync服務端的指定目錄下

[root@b-server ~]# rsync -avzP /root/ rsync_backup@192.168.10.11::backup --password-file=/etc/rsync.password
sending incremental file list
./
.bash_history
250 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=8/10)
.bash_logout
18 100% 17.58kB/s 0:00:00 (xfr#2, to-chk=7/10)
.bash_profile
176 100% 171.88kB/s 0:00:00 (xfr#3, to-chk=6/10)
.bashrc
176 100% 171.88kB/s 0:00:00 (xfr#4, to-chk=5/10)
.cshrc
100 100% 5.14kB/s 0:00:00 (xfr#5, to-chk=4/10)
.tcshrc
129 100% 6.30kB/s 0:00:00 (xfr#6, to-chk=3/10)
anaconda-ks.cfg
1,259 100% 39.66kB/s 0:00:00 (xfr#7, to-chk=2/10)
.ssh/
.ssh/known_hosts
175 100% 2.80kB/s 0:00:00 (xfr#8, to-chk=0/10)

sent 2,025 bytes received 187 bytes 1,474.67 bytes/sec
total size is 2,283 speedup is 1.03
[root@b-server ~]# ssh root@192.168.10.11 "ls -l /backup"
root@192.168.10.11's password:
總用量 36800
-rw-------. 1 root root 1259 4月 30 2021 anaconda-ks.cfg
-rw-r--r--. 1 root root 37676320 12月 29 22:45 zookeeper-3.4.14.tar.gz

拉取測試一:將rsync服務端指定目錄全部內容同步到客戶端

[root@b-server ~]# rsync -avzP rsync_backup@192.168.10.11::backup /tmp --password-file=/etc/rsync.password
receiving incremental file list
./
.bash_history
250 100% 244.14kB/s 0:00:00 (xfr#1, to-chk=9/11)
.bash_logout
18 100% 0.13kB/s 0:00:00 (xfr#2, to-chk=8/11)
.bash_profile
176 100% 0.49kB/s 0:00:00 (xfr#3, to-chk=7/11)
.bashrc
176 100% 0.37kB/s 0:00:00 (xfr#4, to-chk=6/11)
.cshrc
100 100% 0.19kB/s 0:00:00 (xfr#5, to-chk=5/11)
.tcshrc
129 100% 0.19kB/s 0:00:00 (xfr#6, to-chk=4/11)
anaconda-ks.cfg
1,259 100% 1.59kB/s 0:00:00 (xfr#7, to-chk=3/11)
zookeeper-3.4.14.tar.gz
37,676,320 100% 3.01MB/s 0:00:11 (xfr#8, to-chk=2/11)
.ssh/
.ssh/known_hosts
175 100% 0.38kB/s 0:00:00 (xfr#9, to-chk=0/11)

sent 210 bytes received 37,606,409 bytes 2,785,675.48 bytes/sec
total size is 37,678,603 speedup is 1.00
[root@b-server ~]# ls -ld /tmp/*
-rw-------. 1 root root 1259 4月 30 2021 /tmp/anaconda-ks.cfg
-rw-r--r--. 1 root root 37676320 12月 29 22:45 /tmp/zookeeper-3.4.14.tar.gz

拉取測試二: 將rsync服務端指定目錄下的指定內容同步到客戶端

[root@b-server ~]# ls -l /backup/
總用量 0
[root@b-server ~]# rsync -avzP rsync_backup@192.168.10.11::backup/zookeeper-3.4.14.tar.gz /backup/ --password-file=/etc/rsync.password
receiving incremental file list
zookeeper-3.4.14.tar.gz
37,676,320 100% 45.42MB/s 0:00:00 (xfr#1, to-chk=0/1)

sent 43 bytes received 37,692,144 bytes 15,076,874.80 bytes/sec
total size is 37,676,320 speedup is 1.00
[root@b-server ~]# ls -l /backup/
總用量 36796
-rw-r--r--. 1 root root 37676320 12月 29 22:45 zookeeper-3.4.14.tar.gz

拉取測試三:將rsync服務端指定目錄下的全部內容排除目錄或者文件后,同步到客戶端

方法一:通過命令行實現排除

[root@b-server ~]# ssh root@192.168.10.11 "tree /backup "
root@192.168.10.11's password:
/backup
├── anliu
│   ├── test01.txt
│   └── test02.txt
├── host
├── opt
└── test

1 directory, 5 files
[root@b-server ~]# rsync -avz --exclude=anliu/test02.txt --exclude=test rsync_backup@192.168.10.11::backup /backup/ --password-file=/etc/rsync.password
receiving incremental file list
./
host
opt
anliu/
anliu/test01.txt

sent 132 bytes received 278 bytes 273.33 bytes/sec
total size is 0 speedup is 0.00
[root@b-server ~]# tree /backup
/backup
├── anliu
│   └── test01.txt
├── host
├── opt
└── zookeeper-3.4.14.tar.gz

1 directory, 4 files

方法二:通過列表文件實現排除

[root@b-server ~]# mkdir /backup01
[root@b-server ~]# cat /root/exclude.txt
anliu/test02.txt
host
[root@b-server ~]# rsync -avz --exclude-from=/root/exclude.txt rsync_backup@192.168.10.11::backup /backup01 --password-file=/etc/rsync.password
receiving incremental file list
./
opt
test
anliu/
anliu/test01.txt

sent 132 bytes received 278 bytes 164.00 bytes/sec
total size is 0 speedup is 0.00
[root@b-server ~]# tree /backup01/
/backup01/
├── anliu
│   └── test01.txt
├── opt
└── test

1 directory, 3 files
[root@b-server ~]# ssh root@192.168.10.11 "tree /backup"
root@192.168.10.11's password:
/backup
├── anliu
│   ├── test01.txt
│   └── test02.txt
├── host
├── opt
└── test

1 directory, 5 file

rsync同步拉取和推送測試(讓rsync客戶端目錄內容始終和rsync服務器共享目錄內容保持一致):

兩者的方法均為使用--delete選項同步,同步即服務端刪除文件,客戶端也刪除文件。實現方法為某一端發生變化后,另一端接着執行同步命令。也可以使用--exclude排除某個文件。

6、關於rsync的一個風險提示

  一個關於同步推送的選項 --delete參數,當客戶端將本機內容推送到服務端的備份目錄后,--delete有能里刪除服務端的目錄下的所有文件。所以,備份文件盡可能避免使用--delete 。

7、排錯

錯誤問題參考:rsync 常見錯誤與解決方法整理_服務器其它_腳本之家 (jb51.net)

8、rsync實時同步配置

前提:已經配置好以守護進程(socket)的方式傳輸數據

(1)配置rsync源服務器

 關閉只讀模式

[root@a-server backup]# vim /etc/rsyncd.conf
[root@a-server backup]# cat /etc/rsyncd.conf | grep -vE "^#|^$" | grep "read"
read only = no

更改內核參數,指定隊列大小,最多監控實例數,每個實例最多監控文件數

[root@a-server backup]# vim /etc/sysctl.conf
[root@a-server backup]# cat /etc/sysctl.conf | grep -vE "^#|^$"
fs.inotify.max_queued_events = 16384   #監控時間的最大隊列數
fs.inotify.max_user_instances = 1024   #監控的最大實例數
fs.inotify.max_user_watches = 1048576   #監控的每實例的最大文件數
[root@a-server backup]# sysctl -p
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

重新啟動rsync服務

[root@server backup]# cd /var/run/
[root@server run]# cat rsyncd.pid
7993
[root@server run]# kill 7993
[root@server run]# ll | grep rsyncd.pid
[root@server run]# rsync --daemon
[root@server run]# ll | grep rsyncd.pid
-rw-r--r--. 1 root root 6 12月 29 22:45 rsyncd.pid

(2)配置客戶端服務器

下載inotify並上傳至客戶端。下載地址inotify-tools - Browse Files at SourceForge.net

解壓縮並安裝

[root@agent ~]# ls
anaconda-ks.cfg inotify-tools-3.13.tar.gz
[root@agent ~]# tar xf inotify-tools-3.13.tar.gz
[root@agent ~]# cd inotify-tools-3.13
[root@agent inotify-tools-3.13]# yum install gcc gcc-c++ -y
[root@agent inotify-tools-3.13]# ./configure
[root@agent inotify-tools-3.13]# echo $?
0
[root@agent inotify-tools-3.13]# make && make install
[root@agent inotify-tools-3.13]# echo $?
0

測試inotifywait監控是否正常使用

[root@agent ~]# mkdir /var/www
[root@agent ~]# inotifywait -mrq -e modify,create,move,delete /var/www (執行后處於監控狀態,不能輸入,重新開啟終端)

測試

[root@agent ~]# cd /var/www/
[root@agent www]# touch a

[root@agent ~]# mkdir /var/www
[root@agent ~]# inotifywait -mrq -e modify,create,move,delete /var/www
/var/www/ CREATE a #測試結果 配置成功

客戶端編寫腳本,將inotify和rsync遠程同步結合起來

[root@agent ~]# vi /opt/rsync_inotify.sh
[root@agent ~]# cat /opt/rsync_inotify.sh
INOTIFY="inotifywait -mrq -e modify,create,attrib,move,delete /var/www"
RSYNC="rsync -avz --delete --password-file=/etc/rsync.password /var/www rsync_backup@192.168.10.11::backup"
$INOTIFY | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l ) -le 0 ];then
$RSYNC
fi
done

運行腳本,並測試

[root@agent www]# sh /opt/rsync_inotify.sh &  #因為放入后台依舊會有輸出,所以最好將腳本中的輸出放置到Linux的無底洞(/dev/null)中。
[2] 23486
[root@agent www]# ls
a abc
[root@agent www]# cd abc
[root@agent abc]# touch abc
[root@agent abc]# 
sending incremental file list
www/
www/a
www/abc/
www/abc/abc

sent 216 bytes received 78 bytes 588.00 bytes/sec
total size is 0 speedup is 0.00
sending incremental file list

sent 130 bytes received 26 bytes 312.00 bytes/sec
total size is 0 speedup is 0.00

測試成功!!!

二、FTP服務

1、服務介紹

        FTP是文件傳輸協議(File Transfer Protocol)的英文縮寫。用於Internet上控制文件的雙向傳輸。同時,他也是一個應用程序,基於不同的操作系統有不同的引用程序,而這些引用程序都遵循同一個協議用來傳輸文件。

(1)FTP用戶類型

     FTP有三種用戶類型:①、匿名用戶:anonymous或ftp 

                                         ②、本地用戶:賬號名稱、密碼等信息保存在passwd/shadow文件中

                                         ③、虛擬用戶:使用獨立賬號/密碼數據文件

(2)FTP工作模式

   FTP是僅基於TCP的服務,與眾不同的是FTP協議要用到兩個TCP連接,一個是控制鏈路,用來在客戶端與服務器之間傳遞命令的;另一個是數據鏈路,用來上傳或下載數據的。

   FTP協議有兩種工作方式:POST方式和PASV方式,即主動式和被動式

  主動模式 被動模式
模式 服務端從20端口主動向客戶端發起鏈接 服務端在指定范圍內某個端口被動等待與而客戶端鏈接
端口分配 控制端口21  數據傳輸端口20 控制端口21 數據傳輸端口 隨機
過程

      客戶端從一份任意的非特權端口N(N>1024)向FTP服務器的命令端口(默認21)發送請求,服務器接受連接,建立一條命令鏈路。

當需要傳送數據時,客戶端開始監聽端口N+1,並在命令鏈路上用PORT命令發送N+1端口到FTP服務器,於是服務器會從自己的數據端口(20)向客戶端指定的數據端口(N+1)發送連接請求,建立一條數據鏈路來傳輸數據。

     客戶端從一份任意的非特權端口N(N>1024)向FTP服務器的命令端口(默認21)發送請求,服務器接受連接,建立一條命令鏈路。

當需要傳輸數據時,客戶端在命令鏈路上用PASV命令發送。於是服務器會開啟一個任意的非特權端口P(P>1024),並在命令鏈路上把端口發送給客戶端,然后客戶端從自己的數據端口(N+1)向服務器的數據端口(P)發送連接請求,建立一條數據鏈路來傳送數據。

優點

對FTP服務器的管理有利

對FTP客戶端管理有利

缺點 對客戶端管理不利(FTP服務器企圖與客戶端的高位隨機端口建立對接,而這個端口很有可能會被客戶端的防火牆阻塞掉) 對服務器端管理不利(因為客戶端需要與服務器端建立兩個連接,其中一個連到一個高位隨機端口,而這個端口很有可能被服務器端的防火牆阻塞掉)

(3)FTP傳輸模式

FTP有兩種傳輸模式:①、ASCII模式:即文本模式,以文本序列傳輸數據;

                                    ②、二進制模式:以二進制序列傳輸數據。

2、基礎配置

  由於FTP的文件傳輸是銘文方式,具有一定的危險性,所以就誕生了一種更加安全的傳輸方式vsftp。

  vsftp是一個基於GPL發布的FTP服務器軟件,安全性高,是RedHat linux默認的FTP服務終端軟件。也是linux服務器的首選產品。

(1)vsftp的特點

     ①、一般以普通用戶運行,降低進程權限,提高安全性;

     ②、高權限指令需要上層程序許可;

     ③、整合了所有FTP命令;

     ④、用戶chroot功能,限制用戶只能訪問自己的家目錄;

     ⑤、是redhat linux默認的FTP服務端軟件;

     ⑥、不再依賴xinetd服務;

     ⑦、可同時容許匿名(anonymous)與本地用戶(local)訪問,還支持虛擬用戶。

(2)vsftp鏈接類型

    控制鏈接: TCP 21,用戶發送FTP命令信息

    數據鏈接:TCP 20,用戶上傳,下載數據。

(3)vsftp配置文件介紹

配置文件 作用
/usr/sbin/vsftpd vsftpd的可執行文件(主程序)
/etc/vsftpd/vsftpd.conf vsftpd的配置文件
 /etc/vsftpd/ftpusers  禁止使用vsftpd的用戶列表文件
 /etc/vsftpd/user_list  禁止或允許使用vsftpd的用戶列表文件
 /var/ftp 匿名用戶主目錄 

 

 (4)vsftpd.conf文件常用的配置參數:

常用全局配置:

listen_address=192.168.10.10   #設置監聽的IP地址

listen=YES                                  #是否以獨立運行的方式監聽服務

listen_port=21                             #設置監聽FTP服務的端口號

write_enable=YES                      #是否啟用寫入權限

download_enable=YES              #是否允許下載文件

max_clients=0                            #限制並發客戶端連接數

max_per_ip=0                            #限制同一IP地址的並發連接數

xferlog_enable=yes                    #是否記錄ftp傳輸過程

xferlog_file=/var/log/vsftpd.log   #日志的文件和路徑

chown_username=username     #是否改變上傳文件的屬主,username是屬主名稱

date_connection_timeout=120   #設置數據傳輸超時時間

ftpd_banner=welcome to ftp server  #定制歡迎信息

本地用戶訪問限制:

userlist_enabled=YES            #是否啟動userlist列表文件

userlist_deny=YES                 #是否禁用userlist中的用戶

本地用戶權限控制:

local_enable=YES                  #是否啟用本地系統用戶

local_umask=022                   #本地用戶所上傳文件的權限掩碼

local_root=/var/ftp                  #設置本地用戶的FTP根目錄

chroot_local_user=YES         #是否將用戶禁錮在主目錄

local_max_rate=0                  #限制最大傳輸速率(字節/秒)

chroot_list_enabled=YES      #配合下一個選項使用

chroot_list_file=/etc/vsftpd/chroot_list    #配合使用,列表中的用戶將被禁錮在目錄中。

匿名權限控制:

anonymous_enable=YES        #啟用匿名訪問

anon_umask=022                    #匿名用戶上傳文件的權限掩碼

anon_root=/var/ftp                   #匿名用戶的FTP根目錄

anon_word_readable_only=YES   #允許匿名下載

anon_upload_enale=YES              #允許上傳文件

anon_mkdir_write_enable=YES     #允許創建目錄

anon_mkdir_write_enable=YES     #允許匿名者更多權限

anon_max_rate=0                           #限制最大的傳輸速率

(5)配置擁有所有權限的匿名用戶

配置簡單的vsftpd 

①、檢查目前服務器或虛擬機是否安裝vsftpd

 

 如果安裝,可使用rpm -e vsftpd-* 或yum remove vsftpd卸載

②、安裝vsftpd

 

 ③、修改配置文件

 

 ④、啟動vsftpd以及設置為開啟自啟動

 

 ⑤、開放端口或關閉防火牆

開放端口即開放21端口:firewalld-cmd --zone=public --add-port=21/tcp --permanent

 

 ⑥、確保vsftpd已啟動

 

 驗證ftp是否可以可以正常訪問

①、安裝ftp,並登錄

 

 

 ②、外部驗證

 

 ③、此時對於數據沒有讀寫權限

 ④、再次訪問

 

 ⑤、此時可以查看了,但依舊不能上傳文件

 

 重啟之后,就可以上傳文件了

(6)配置本地用戶

①、系統本地的默認設置

vsftpd默認容許所有的系統用戶都可以訪問FTP,並且要進行身份驗證。但是用系統用戶身份登錄FTP服務器后,默認將位於自己的家目錄中,而不是FTP的主目錄。

 

 創建系統用戶,並設置密碼,在家目錄中添加測試文件

[root@localhost ~]# useradd anliu01
[root@localhost ~]# useradd anliu02
[root@localhost ~]# passwd anliu01
更改用戶 anliu01 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
[root@localhost ~]# passwd anliu02
更改用戶 anliu02 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
[root@localhost ~]# echo "ftp test" >> /home/anliu01/ftptest.txtd

登錄測試

右鍵點擊登錄

 

 登錄后查看

②、禁錮系統用戶與指定目錄中

windows客戶端也可以通過ftp命令訪問服務器,由於在命令行模式下模式采用FTP主動模式,因此此時需要將客戶端的防火牆關閉才能成功訪問

 

 此時用戶訪問的是自己的家目錄,但此時可以使用cd命令切換到其他目錄,例如:

 

 此時會存在較大的安全隱患,一般情況下,我們都需要將系統用戶禁錮在他的家目錄下,禁止隨意切換。修改完成后,重新啟動vsftpd。

 

 

 

 新建測試出現以下問題:

 

 

問題原因:從2.3.5之后,vsftpd增強了安全檢查,如果用戶被限定在了其主目錄下,則該用戶的主目錄不能再具有寫權限了!如果檢查發現還有寫權限,就會報該錯誤。 

問題解決:

<1>將用戶主目錄的寫權限去除。

chmod a-w /home/用戶名 

 結果:這樣的話,登錄會不能進行一些寫的操作。

<2> 在vsftpd.conf中新增allow_writeable_chroot=YES配置

 

 

 此時發現就不可以切換工作目錄了。系統中的所有用戶都受到限制。

③、允許特殊用戶擁有目錄切換權限

write_enable=YES    用戶可以對根目錄下的文件進行改寫操作,會給系統帶來極大的安全隱患,因此必須限制用戶切換到根目錄。

chroot_list_enabled=YES      #配合下一個選項使用

chroot_list_file=/etc/vsftpd/chroot_list    #配合使用,列表中的用戶將被禁錮在目錄中。

chroot_local_user=YES  #用於指定用戶列表文件中的用戶,是否允許切換到上級目錄。默認為NO。

幾種情況:

1)chroot_list_enabled=YES ,chroot_local_user=YES時;在/etc/vsftpd/chroot_list文件中列出的用戶,可以切換到上級目錄。沒有在文件中列出的用戶,不能切換到站點根目錄的上級目錄。

2)chroot_list_enabled=YES ,chroot_local_user=NO時;在/etc/vsftpd/chroot_list文件中列出的用戶,不能切換到站點根目錄的上級目錄。沒有在文件中列出的用戶,可以切換到上級目錄。

3)chroot_list_enabled=NO ,chroot_local_user=YES時;所有用戶均不能切換到上級目錄。

4)chroot_list_enabled=NO ,chroot_local_user=NO時;所有用戶均可以切換到上級目錄。

5)當用戶不允許切換到上級目錄時,登陸后FTP站點的根目錄“/”時該FTP賬戶的主目錄,即文件系統的/var/ftp目錄。

④、設置用戶列表

在默認的配置下,所有的系統用戶都可以訪問FTP,如何來限定只有指定的用戶來訪問呢。

vsftpd提供了兩個與系統用戶相關的文件:/etc/vsftpd/chroot_list和/etc/vsftpd/ftpusers。這兩個文件均包含一份FTP用戶名的列表,但是作用卻截然不同。

/etc/vsftpd/ftpusers:此文件中包含的用戶賬號將被禁止登錄vsftpd服務器,不論用戶是否出現在另一個文件中。

/etc/vsftpd/chroot_list:該文件中的用戶賬號是否被禁止登錄,需要看其他兩個選項的值。當userlist_enabled=YES時,/etc/vsftpd/chroot_list文件生效;當userlist_deny=YES時,則禁止用戶列表中的用戶登錄;當userlist_deny=NO時,僅容許列表中的用戶登錄。

優先級:/etc/vsftpd/ftpusers的優先級大於/etc/vsftpd/chroot_list。

⑤、配置虛擬用戶

    除了虛擬用戶,系統用戶之外,還可以設置虛擬用戶來訪問FTP。所謂虛擬用戶,是指存放於獨立數據庫文件中的FTP用戶賬號,可以將它們映射到某個不能登錄的系統用戶賬號上,以進一步增強FTP服務器的安全。

1)創建虛擬用戶數據庫文件

vsftp服務的虛擬用戶數據庫默認使用Berkeley DB格式的數據庫文件,建立數據庫文件需要用到db_load命令工具,db_load工具是由db4-utils軟件包提供的,所以首先需要確認系統中已經裝好db4-utils組件。

[root@localhost ~]# yum install vsftpd -y #安裝vsftpd
[root@localhost ~]# yum install epel-release libdb4-utils -y  

 創建一個文本文件用來使用格式化用戶名/密碼列表,用於存放虛擬用戶賬號

 

 以文件列表為數據源通過db_load工具創建出DB格式的數據庫文件

2)創建虛擬用戶的映射賬號

vsftpd服務對虛擬用戶其實采用了映射的控制方式,把所有的虛擬用戶賬號都對應到了同一個系統用戶上,並將這個用戶的家目錄作為所有虛擬用戶登錄后公用的FTP主目錄。

例如:

3)創建PAM認證文件

     虛擬用戶的認證是通過PAM機制來實現的,PAM時Linux系統中的獨立API,它提供了各種驗證模塊以供其他程序調運。當這些程序需要進行用戶身份驗證操作時,就可以直接調用相應的模塊,而無需由自己來提供驗證功能。

[root@localhost vsftpd]# vim /etc/pam.d/vsftpd 
[root@localhost vsftpd]# cat /etc/pam.d/vsftpd 
#%PAM-1.0
#session    optional     pam_keyinit.so    force revoke
#auth       required	pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth       required	pam_shells.so
#auth       include	password-auth
#account    include	password-auth
#session    required     pam_loginuid.so
#session    include	password-auth
auth     required       /lib64/security/pam_userdb.so   db=/etc/vsftpd/logins
account  required       /lib64/security/pam_userdb.so   db=/etc/vsftpd/logins  

4)修改vsftpd配置,添加虛擬用戶支持

5)創建虛擬用戶配置文件

創建兩個虛擬用戶,給兩個虛擬用戶不同的權限

6)驗證

<1>本地登錄

首先需要關閉防火牆或者開啟21端口

其次需要將/etc/selinux/config中的selinux的值修改為disabled

 

 登錄成功!

<2>遠程登錄

實驗結果為anliu01可以進行正常的文件上傳與下載,anliu02只能下載,不能上傳。

3、FTP連接類型配置

關於FTP主被動模式的修改

windows cmd下默認為主動模式,更改為被動的模式

 

 Linux ftp命令下默認為被動模式,切換為主動模式的方法

 

 

三、NFS共享存儲

四、SSH服務

 

五、syslog

六、NTP時間同步服務

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM