第16周作业

1、描述rsyslog日志服务,并提供带web展示的日志服务器

  rsyslog日志服务简介

1、rsyslog是一个C/S架构的服务,可监听于某套接字,帮其它主机记录日志信息,在linux系统中可以分类两个日志:
    klogd:kernel,记录内核相关的日志
   ​ syslogd:service,记录应用程序的日志

rsyslog:是CentOS 6以后的系统使用的日志系统,与之前的syslog日志系统相比,具有以下优点:
   ​ 支持多线程
   ​ 支持TCP、SSL、TLS、RELP等协议
   ​ 强大的过滤器,可实现过滤日志信息中的任意部分
   ​ 支持自定义输出格式
   ​ 适用于企业级别日志记录需求
   ​ 模块化

程序包:rsyslog
主程序:/usr/sbin/rsyslogd
CentOS 6:service rsyslog {start|stop|restart|status}
CentOS 7:/usr/lib/systemd/system/rsyslog.service
配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
库文件: /lib64/rsyslog/*.so
配置文件格式:由三部分组成
    MODULES:相关模块配置
    GLOBAL DIRECTIVES:全局配置
    RULES:日志记录相关的规则配置

启用网络日志服务
    通常的日志格式:
        事件产生的日期时间 主机 进程(pid):事件内容
        如: /var/log/messages,cron,secure等
    配置rsyslog成为日志服务器
        #### MODULES ####
        # Provides UDP syslog reception
        $ModLoad imudp
        $UDPServerRun 514
        # Provides TCP syslog reception
        $ModLoad imtcp
        $InputTCPServerRun 514

    其它的日志文件
       /var/log/secure:系统安装日志,文本格式,应周期性分析
       /var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式
         lastb命令进行查看
         lastb -f /root/btmp # 打开btmp文件
      > /var/log/btmp # 清空btmp文件
    /var/log/wtmp:当前系统上,用户正常登录系统和启动、重启等相关日志信息,二进制格式
      last命令可以查看
    /var/log/lastlog:每一个用户最近一次的登录信息,二进制格式
      lastlog命令可以查看
    /var/log/dmesg:系统引导过程中的日志信息,文本格式
      文本查看工具查看
      专用命令dmesg查看
    /var/log/messages :系统中大部分的信息
    /var/log/anaconda : anaconda的日志

配置rsyslog将日志记录于MySQL中
    202的日志存放到203的mysql中
    (1) 准备MySQL Server
    (2) 在mysql server上授权rsyslog能连接至当前服务器
        GRANT ALL ON Syslog.* TO 'USER'@'HOST' IDENTIFIED BY 'PASSWORD';
        grant all  on Syslog.* to syslog@'10.0.0.202' identified by '123456';
    (3) 在rsyslog服务器202上安装mysql模块相关的程序包
        yum install rsyslog-mysql
        rpm -ql rsyslog-mysql
            /usr/lib64/rsyslog/ommysql.so                        # 模块
            /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql     # rsyslog建表语句
    (4) 为rsyslog创建数据库及表;
            scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql root@10.0.0.203:/root
            或
            mysql < mysql-createDB.sql
            mysql -uUSERNAME -hHOST -pPASSWORD < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
    (5) 配置rsyslog将日志保存到mysql中
        vim /etc/rsyslog.conf
            #### MODULES ####
            $ModLoad ommysql 
            #### RULES ####
            #facility.priority :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD    
            *.info;mail.none;authpriv.none;cron.none;local0.none                :ommysql:10.0.0.203,Syslog,syslog,123456

搭建lamp,使用loganalyzer web收集、展示日志

(1) 在rsyslog服务器上准备amp或nmp组合
    yum install httpd php php-mysql php-gd
(2) 安装LogAnalyzer
    tar xf loganalyzer-4.1.5.tar.gz
    cp -a loganalyzer-4.1.5/src /var/www/html/log
    cd /var/www/html/log
    touch config.php
    chmod 666 config.php
(3) 配置loganalyzer
    浏览器访问



Step
7 - Create the first source for syslog messages 将Source Type修改为Mysql native database 设置为准备好的mysql设置 Database Name Syslog Database Tablename SystemEvents systemctl start httpd.service http://HOST/log


(
4) 安全加强 cd /var/www/html/loganalyzer chmod 644 config.php

2、描述vsftpd工作原理并以虚拟用户的方式提供ftp服务

FTP服务:File Transfer Protocol 早期的三个应用级协议之一
  特点:
    基于C/S结构
    双通道协议:数据和命令连接
    数据传输格式:二进制(默认)和文本
    两种模式:服务器角度
      主动(PORT style):服务器主动连接
        命令(控制):客户端:随机port --- 服务器:tcp21
        数据:客户端:随机port ---服务器:tcp20
      被动(PASV style):客户端主动连接
        命令(控制):客户端:随机port ---服务器:tcp21
        数据:客户端:随机port ---服务器:随机port
    服务器被动模式数据端口示例:
      227 Entering Passive Mode (172,16,0,1,224,59)
      服务器数据端口为:224*256+59
    命令端口称为通信端口tcp21,主动被动都是以服务器角度来称呼的。
    命令端口则没有主动被动一说,只有数据端口有主动和被动
  状态码:
        1XX:信息 125:数据连接打开
        2XX:成功类状态 200:命令OK 230:登录成功
        3XX:补充类 331:用户名OK
        4XX:客户端错误 425:不能打开数据连接
        5XX:服务器错误 530:不能登录
  用户认证:
        匿名用户:ftp,anonymous,对应Linux用户ftp
        系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
        虚拟用户:特定服务的专用用户,独立的用户/密码文件
            nsswitch:network service switch名称解析框架
            pam:pluggable authentication module 用户认证
            /lib64/security /etc/pam.d/ /etc/pam.conf

vsftpd服务
    由vsftpd包提供
    不再由xinetd管理
    用户认证配置文件:/etc/pam.d/vsftpd
    服务脚本: /usr/lib/systemd/system/vsftpd.service
              /etc/rc.d/init.d/vsftpd
    配置文件:/etc/vsftpd/vsftpd.conf
        man 5 vsftpd.conf
        格式:option=value
        注意:= 前后不要有空格
    匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp
    系统用户共享文件位置:用户家目录
    虚拟用户共享文件位置:为其映射的系统用户的家目录
安装vsftpd
    yum install vsftpd -y
创建用户数据库文件
  cat /etc/vsftpd/vuser
    ftp1
    123456
    ftp2
    654321
  db_load -T -t hash -f vuser vusers.db
    chmod 600 vusers.db
创建用户和访问FTP目录
  mkdir /ftproot/upload -p
    useradd -d /ftproot/ -s /sbin/nologin -r ftpuser
    chown -R ftpuser.ftpuser /ftproot/
    centos7 还需要执行以下操作:
      chmod -w /ftproot/
      setfacl -m u:ftpuser:rwx /ftproot/upload/
创建pam配置文件
  vim /etc/pam.d/vsftpd.db
    auth required pam_userdb.so db=/etc/vsftpd/vusers
    account required pam_userdb.so db=/etc/vsftpd/vusers
指定pam配置文件
  vim /etc/vsftpd/vsftpd.conf
    guest_enable=YES
    guest_username
=ftpuser     #修改默认pam_service_name为新生成的vsftpd.db     pam_service_name=vsftpd.db
    #这时所有虚拟用户的权限是一致的 SELinux设置:   禁用SELinux 或者 setsebool
-P ftpd_full_access 1 虚拟用户建立独立的配置文件 mdkir /etc/vsftpd/vusers.d/ 创建配置文件存放的路径 vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers.d/ cd /etc/vsftpd/vusers.d/ 进入此目录 允许ftp1用户可读写,其它用户只读 创建各用户自已的配置文件,不创建就继承默认权限 vim ftp1 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES vim ftp2 local_root=/ftproot 登录目录改变至指定的目录
实现基于MYSQL验证的vsftpd虚拟用户
    说明:本实验在两台CentOS主机上实现,202做为FTP服务器,203做数据库服务器
    一、安装所需要包和包组:
        在数据库203服务器上安装包:
            Centos7:在数据库服务器上安装
                yum –y install mariadb-server
                systemctl start mariadb.service
                systemctl enable mariadb
            Centos6:在数据库服务器上安装
                yum –y install mysql-server
        在FTP服务器202上安装vsftpd和pam_mysql包
            centos6:pam_mysql由epel6的源中提供
                yum install vsftpd pam_mysql
            centos7:无对应rpm包,需手动编译安装
                yum -y groupinstall "Development Tools"
                yum -y install mariadb-devel pam-devel vsftpd
            下载pam_mysql-0.7RC1.tar.gz
                ftp://172.16.0.1/pub/Sources/sources/pam/
                tar xvf pam_mysql-0.7RC1.tar.gz
                cd pam_mysql-0.7RC1/
                ./configure --with-pam-mods-dir=/lib64/security --with-mysql=/usr --with-pam=/usr
                make
                make install
    二、在数据库服务器上创建虚拟用户账号
        1.建立存储虚拟用户数据库和连接的数据库用户
            mysql> CREATE DATABASE vsftpd;
            mysql> SHOW DATABASES;
        ftp服务和mysql不在同一主机:
            mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'172.16.%.%' IDENTIFIED BY 'magedu';
                grant select on vsftpd.* to vsftpd@'10.0.0.%' identified by '123456';
        ftp服务和mysql在同一主机:
            mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'magedu';
            mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'magedu';
            mysql> FLUSH PRIVILEGES;
        2.准备相关表
            mysql> USE vsftpd;
            Mysql> SHOW TABLES;
            mysql> CREATE TABLE users (
            id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
            name CHAR(50) BINARY NOT NULL,
            password CHAR(48) BINARY NOT NULL
            );
            mysql>DESC users;
            测试连接
            mysql -uvsftpd -h mysqlserver -pmagedu
            mysql> SHOW DATABASES;
        3.添加虚拟用户
            根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后存储
                mysql> DESC users;
                mysql>  INSERT INTO users(name,password) values(‘wang',password('magedu'));
                mysql>  INSERT INTO users(name,password) values(‘mage',password('magedu'));
                    insert into users(id,name,password) values(1,'ftp3','123456'),(2,'ftp4',password(123456));
                mysql> SELECT * FROM users;
    三、在FTP服务器上配置vsftpd服务
        1.在FTP服务器上建立pam认证所需文件
            vi /etc/pam.d/vsftpd.mysql 添加如下两行
                auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
                account required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
            注意:参考README文档,选择正确的加密方式
                crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql
                password()函数加密,3表示md5加密,4表示sha1加密
            配置字段说明
                • auth 表示认证
                • account 验证账号密码正常使用
                • required 表示认证要通过
                • pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
                • user=vsftpd为登录mysql的用户
                • passwd=magedu 登录mysql的的密码
                • host=mysqlserver mysql服务器的主机名或ip地址
                • db=vsftpd 指定连接msyql的数据库名称
                • table=users 指定连接数据库中的表名
                • usercolumn=name 当做用户名的字段
                • passwdcolumn=password 当做用户名字段的密码
                • crypt=2 密码的加密方式为mysql password()函数加密
        2.建立相应用户和修改vsftpd配置文件,使其适应mysql认证
            建立虚拟用户映射的系统用户及对应的目录
                useradd -s /sbin/nologin -d /var/ftproot vuser
                chmod 555 /var/ftproot centos7 需除去ftp根目录的写权限
                mkdir /var/ftproot/{upload,pub}
                setfacl –m u:vuser:rwx /var/ftproot/upload
            确保/etc/vsftpd.conf中已经启用了以下选项
                anonymous_enable=YES
            添加下面两项
                guest_enable=YES
                guest_username=vuser
            修改下面一项,原系统用户无法登录
                pam_service_name=vsftpd.mysql
            创建各用户自已的配置文件,不创建就继承默认权限
                vim ftp3
                    anon_upload_enable=YES
                    anon_mkdir_write_enable=YES
                    anon_other_write_enable=YES
                vim ftp4
                    local_root=/ftproot 登录目录改变至指定的目录        
    四、启动vsftpd服务
        service vsftpd start;systemctl start vsftpd
        chkconfig vsftpd on;systemctl enable vsftpd
        查看端口开启情况
        netstat -tnlp |grep :21
    五、Selinux相关设置:在FTP服务器上执行
        • restorecon -R /lib64/security
        • setsebool -P ftpd_connect_db 1
        • setsebool -P ftp_home_dir 1
        • chcon -R -t public_content_rw_t /var/ftproot/
    六、测试:利用FTP客户端工具,以虚拟用户登录验证结果
        • tail /var/log/secure
    七、在FTP服务器上配置虚拟用户具有不同的访问权限
        vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可
        • 1、配置vsftpd为虚拟用户使用配置文件目录
            vim /etc/vsftpd/vsftpd.conf
            添加如下选项
            user_config_dir=/etc/vsftpd/vusers_config
        • 2、创建所需要目录,并为虚拟用户提供配置文件
            mkdir /etc/vsftpd/vusers_config/
            cd /etc/vsftpd/vusers_config/
            touch wang mage
        3、配置虚拟用户的访问权限
            虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户wang具有上传文件的权限,可修改/etc/vsftpd/vusers_config/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO
            注意:需确保对应的映射用户对于文件系统有写权限
                anon_upload_enable={YES|NO}
                anon_mkdir_write_enable={YES|NO}
                anon_other_write_enable={YES|NO}
                local_root=/ftproot 登录目录改变至指定的目录

3、部署nfs、samba并提供Windows用户访问

NFS:Network File System 网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC
(Remote Procedure Call Protocol远程过程调用)实现 RPC采用C
/S模式。客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个
调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行 NFS优势:节省本地存储空间,将常用的数据,如home目录,存放在NFS服务器上且可以通过网络访问,本地终端将可减少自身存储空间的使用



安装nfs-utils管理nfs文件系统
  yum install nfs-utils
  rpcinfo -p 查看rpcbind服务列出来的nfs随机端口列表
  systemctl start nfs 启动 nfs服务
  mkdir /data/nfsdir1 创建目录作为nfs的共享
修改nfs的共享配置文件,加入需要共享的目录
  vim /etc/exports
  /data/nfsdir1 *
  重启服务配置文件即可生效
  exportfs -r 也可以使用此命令重新加载配置文件 -au 暂停共享 -a 启用

  出现了警报,但是不影响正常使用   showmount
-e 192.168.242.128 在目标网络中查看被共享的文件夹     Export list for 192.168.242.128:     /data/nfsdir1 * #*表示所有客户端,   挂载成功

默认情况下。共享出来为只读方式
  vim /etc/exports
    /data/nfsdir1 *(rw) 在服务器配置文件中写入 rw , 文件系统开启,但是用户账户权限对服务器的nfsdir1目录不足   cd /data/nfs1/   [root@centos7 nfs1]# ls   [root@centos7 nfs1]# touch a1   touch: cannot touch ‘a1’: Permission denied
  #
在服务器给定nfsnobody权限即可,nfs访问时默认会以nfsnobody身份连接服务器。默认用root用户挂载服务器目录中会被压榨成普通用户权限。
  exportfs -v 查看共享属性
  root_squash 选项为将root身份权限压榨成普通权限。可以在配置文件中修改
  /data/nfsdir1 *(rw,no_root_squash) 不压榨root用户权限

   [root@centos7 ~]# setfacl -m u:nfsnobody:rwx /data/nfsdir1/

  换成其他用户。创建文件时权限不足

  [centos@centos7 nfs1]$ touch cenots1.txt

  touch: cannot touch ‘cenots1.txt’: Permission denied

  [centos@centos7 nfs1]$

在客户机上普通用户的uid会映射成服务器的对应uid的用户,如果服务器的uid的用户对此目录没有权限。则也没有在目录中写的权限

可以根据自己的需要写入指定的ip,或者ip地址范围能写。

  [root@centos7 ~]# vim /etc/exports

  /data/nfsdir1 *(sync,rw)

  /data/nfsdir2 192.168.242.128(sync,rw) 192.168.242.0/24(ro)

在windows中要使用nfs需要开启一个nfs的插件

将目录映射成一个Windows磁盘

/data/nfsdir1 *(sync,rw,anongid=2000,abibgud=2000),此项配置可以将用户账号映射成服务器端的相应账号

如果需要永久挂载。则需要写入fstab文件中

如果想实现nfs自动挂载。

客户机需要安装autofs包

yum install autofs 

当我们访问/misc/nfs时。则系统会自动讲远程nfs挂载到我们指定的路径下

SAMBA服务简介
    SMB:Server Message Block服务器消息块,IBM发布,最早是DOS网络文件共享协议
    Cifs:common internet file system,微软基于SMB发布
    SAMBA:1991年Andrew Tridgell,实现windows和UNIX相通
    SAMBA的功能:
        • 共享文件和打印,实现在线编辑
        • 实现登录SAMBA用户的身份认证
        • 可以进行NetBIOS名称解析
        • 外围设备共享
    计算机网络管理模式:
        • 工作组WORKGROUP:计算机对等关系,帐号信息各自管理
        • 域DOMAIN:C/S结构,帐号信息集中管理,DC,AD
    相关包:
        Samba 提供smb服务
        Samba-client 客户端软件
        samba-common 通用软件
        cifs-utils smb客户端工具
        samba-winbind 和AD相关
    相关服务进程:
        smbd 提供smb(cifs)服务 TCP:139,445
        nmbd NetBIOS名称解析 UDP:137,138
    主配置文件:/etc/samba/smb.conf
        帮助参看:man smb.conf
    语法检查: testparm [-v] [/etc/samba/smb.conf]
    客户端工具:smbclient,mount.cifs
    安装:
        yum install samba
        yum install samba-client
    两个服务:
        systemctl start smb                            # 139、445端口
        systemctl start nmb                            # udp137、138端口


  需要创建系统账号,给samba使用

  [root@centos7 /]# useradd -s /sbin/nologin smbuser1

  [root@centos7 /]# useradd -s /sbin/nologin smbuser2

  将系统账号加入samba虚拟账号,并设置密码

 

  samba账号默认存放在 /var/lib/samba/private/passwdb.tdb数据库文件中

  在windows文件栏输入 \192.168.242.128访问


  输入刚创建的smaba账号及密码即可


实现特定的目录共享

  每个共享目录应该有独立的[ ]部分

    [共享名称] 远程网络看到的共享名称
    comment 注释信息
    path 所共享的目录路径
    public 能否被guest访问的共享,默认no,和guest ok 类似
    browsable 是否允许所有用户浏览此共享,默认为yes,no为隐藏
    writable=yes 可以被所有用户读写,默认为no
    read only=no 和writable=yes等价,如与以上设置冲突,放在后面的设置生效,默认只读
    write list 三种形式:用户,@组名,+组名,用,分隔
      如writable=no,列表中用户或组可读写,不在列表中用户只读
    valid users 特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔

vim /etc/samba/smb.conf 修改samba的配置文件

mkdir /data/smbshare 创建目录

修改配置文件加入目录路径

 
 

目前并不对share特定的共享目录不能写,还需要设置文件权限

需要修改配置文件中的权限

[share]

path=/data/smbshare

read only = No 加入此行。消除只读的属性


也可以在linux主机中实现挂载


SAMBA服务器全局配置
  workgroup 指定工作组名称
  server string 主机注释信息
  netbios name 指定NetBIOS名
  interfaces 指定服务侦听接口和IP
  hosts allow 可用“,” ,空格,或tab分隔,默认允许所有主机访问,也可在每个共享
    独立配置,如在[global]设置,将应用并覆盖所有共享设置
    IPv4 network/prefix: 172.25.0.0/24 IPv4前缀: 172.25.0.
    IPv4 network/netmask: 172.25.0.0/255.255.255.0
    主机名: desktop.example.com
    以example.com后缀的主机名: .example.com
    示例:
      hosts allow = 172.25.
      hosts allow = 172.25. .example.com
  hosts deny 拒绝指定主机访问
  config file=/etc/samba/conf.d/%U 用户独立的配置文件
  Log file=/var/log/samba/log.%m 不同客户机采用不同日志
  log level = 2 日志级别,默认为0,不记录日志
  max log size=50 日志文件达到50K,将轮循rotate,单位KB
  Security三种认证方式:
    share:匿名(CentOS7不再支持)
    user:samba用户(采有linux用户,samba的独立口令)
    domain:使用DC(DOMAIN CONTROLLER)认证
  passdb backend = tdbsam 密码数据库格式

实现不用账号访问目录不同

config file=/etc/samba/conf.d/%U 

用户独立的配置文件,写入配置文件,创建相应目录

mkdir /etc/samba/conf.d/

创建一个用户配置文件。为用户指向新的目录

share目录为我们指向配置文件中的[share]的名称

Log file=/var/log/samba/log.%m 不同客户机采用不同日志

log level = 2 日志级别,默认为0,不记录日志

开机自动挂载

•cat /etc/fstab 可以用文件代替用户名和密码的输入

  //server/homes /mnt cifs credentials=/etc/smb.txt 0 0

•cat /etc/smb.txt

  username=wang

  password=password

•chmod 600 /etc/smb.txt

4、在两台服务器上部署inotify+rsync同步服务器A上的/data/backup目录至服务器B

数据的实时同步
    实现实时同步
        要利用监控服务(inotify),监控同步数据服务器目录中信息的变化
        发现目录中数据产生变化,就利用rsync服务推送到备份服务器上
    实现实时同步的方法
        inotify+rsync 方式实现数据同步
        sersync :金山公司周洋在 inotify 软件基础上进行开发的,功能更加强大
    inotify:
        异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如cron等的
        轮询机制来获取事件,linux内核从2.6.13起支持 inotify,通过inotify可以监控文
        件系统中添加、删除,修改、移动等各种事件
    实现inotify软件:
        inotify-tools,sersync,lrsyncd

inotify+rsync使用方式
    inotify 对同步数据目录信息的监控
    rsync 完成对数据的同步
    利用脚本进行结合

查看服务器内核是否支持inotify
    Linux下支持inotify的内核最小为2.6.13
    ll /proc/sys/fs/inotify #列出下面的文件,说明服务器内核支持inotify
        -rw-r--r-- 1 root root 0 Dec 7 10:10 max_queued_events
        -rw-r--r-- 1 root root 0 Dec 7 10:10 max_user_instances
        -rw-r--r-- 1 root root 0 Dec 6 05:54 max_user_watches
    inotify内核参数
    参数说明:参看man 7 inotify 
        max_queued_events:inotify事件队列最大长度,如值太小会出现 Event Queue Overflow 错误,默认值:16384
        max_user_watches:可以监视的文件数量(单进程),默认值:8192
        max_user_instances:每个用户创建inotify实例最大值,默认值:128
        调整大小
        vim /etc/sysctl.conf
            fs.inotify.max_queued_events=99999

inotify参考文档
  https://github.com/rvoicilas/inotify-tools/wiki
  安装:基于epel源
    yum install inotify-tools
  Inotify-tools包主要文件:
    inotifywait: 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,常用于实时同步的目录监控
    inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计

示例:监控202的/data    目标目录203/backup
    监控一次性事件
        inotifywait /data
        [root@linux-node2-202 ~]# inotifywait /data
            Setting up watches.
            Watches established.
            /data/ CREATE f1

    持续监控
        inotifywait -mrq /data
        [root@linux-node2-202 ~]# inotifywait -mrq /data
            /data/ OPEN,ISDIR 
            /data/ CLOSE_NOWRITE,CLOSE,ISDIR 
            /data/ DELETE f1

    持续后台监控,并记录日志
        inotifywait -o /root/inotify.log -drq /data --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event: %e"
    持续后台监控特定事件
        inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e create,delete,moved_to,close_write
    持续后台监控文件修改、文件删除、文件创建、文件移动和文件属性修改
        inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e create,delete,moved_to,close_write,attrib

    配置 rsync 服务器端的配置文件(203)
        vi /etc/rsyncd.conf
            uid = root
            gid = root
            use chroot = no
            max connections = 0                                 # 最大连接数不限制
            ignore errors                                         # 忽略错误信息
            exclude = lost+found/                                # 排除文件
            log file = /var/log/rsyncd.log                         # 日志
            pid file = /var/run/rsyncd.pid                        # pid
            lock file = /var/run/rsyncd.lock                    # lock锁文件
            reverse lookup = no                                    # 反向名称解析
            hosts allow = 10.0.0.0/24                            # 允许网段
            [backup]
            path = /backup/
            comment = backup
            read only = no                                         # 只读
            auth users = rsyncuser                                 # 同步用户
            secrets file = /etc/rsync.pass                         # 用户密码
        服务器端生成验证文件
            echo "rsyncuser:magedu" > /etc/rsync.pass
            chmod 600 /etc/rsync.pass
        服务器端准备目录
            mkdir /backup
        服务器端启动rsync服务
            rsync --daemon 可加入/etc/rc.d/rc.local实现开机启动
        客户端配置密码文件
            echo "magedu" > /etc/rsync.pass
            chmod 600 /etc/rsync.pass
        客户端测试同步数据
            rsync -avz --password-file=/etc/rsync.pass /data/ rsyncuser@rsync服务器IP::backup
            [root@linux-node2-202 data]# rsync -avz --password-file=/etc/rsync.pass /data/ rsyncuser@10.0.0.203::backup
    创建inotify_rsync.sh脚本
        #!/bin/bash
        SRC='/data/'
        DEST='rsyncuser@10.0.0.203::backup'inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
        FILEPATH=${DIR}${FILE}
        rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
        done    
    
    查看日志和目标文件夹变化
        [root@linux-node3-203 backup]# watch -n1 ls -l /backup
        [root@linux-node2-202 data]# cat /var/log/changelist.log
原文地址:https://www.cnblogs.com/bj-mr-li/p/11679309.html