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时间同步服务

 

posted on 2022-02-11 14:52  小楚同学  阅读(1250)  评论(0编辑  收藏  举报