rsyslog、rsync+inotify、ftp

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

syslog:日志收集存储系统,负责记录遵守此服务的内核、程序的日志信息。一般记录为:“日期时间、主机、进程[pid]:事件内容”。syslog不仅可以记录本地的系统日志,也可以使用C/S架构通过tcp、udp协议完成日志记录传送,将分布在不同主机的日志实现集中管理。应用于CentOS5之前版本,其有两个组件syslogd和klogd
syslogd:system application记录应用日志
klogd:linux kernel记录内核日志
rsyslog:是syslog的升级版,为CentOS6之后系统版本使用的日志系统,使用多线程并发记录本地或远程日志,支持存储日志信息在Mysql,PGsql,Oracle等关系型数据库中。同时拥有强大的过滤器功能,可以对日志中任意内容进行过滤。
相比syslog其有如下优点:1.支持多线程。2.支持TCP、SSL、TLS、RELP等协议。3.强大的过滤器,可实现过滤日志信息中的任意部分。4.支持自定义输出格式。5.Mysl、PGsql、Oracle实现日志存储。

man 3 syslog可查看如下信息
facility:设施,从功能或程序上对日志进行归类,常见的有以下几种:
auth:与用户认证相关操作产生的日志,如login、su等
authpriv:与auth类似,但只能被特定用户查看
cron:系统执行计划任务时产生的日志
daemon:某些守护进程产生的日志
ftp:FTP服务日志
kern:系统内核相关消息
lpr:与打印机活动有关
mail:邮件日志
news:网络新闻传输协议(nntp)产生的消息
security(auth):类似于auth
user:用户进程相关
uucp:UUCP子系统
local0-local7:自定义
priority:优先级别,从低到高排序
debug:有调式信息的,日志信息最多
info:一般信息的日志,最常用
notice:最具有重要性的普遍条件的信息
warn(warning):警告级别
err(error):错误级别,阻止某个功能或者模块不能正常工作的信息
crit(critical):严重级别,阻止整个系统或软件不能正常工作的信息
alert:需要立刻修改的信息
emerg(panic):内核崩溃等严重信息

FacilityFile-pathDescription
*.info;mail.none;authpriv.none;cron.none/var/log/messagesLog anything (except mail) of level info or higher. Don’t log private authentication messages!
authpriv.*/var/log/secureThe authpriv file has restricted access.
mail.*/var/log/maillogLog all the mail messages in one place.
cron.*/var/log/cronLog cron stuff
*.emerg:omusrmsg:*Everybody gets emergency messages
uucp,news.crit/var/log/spoolerSave news errors of level crit and higher in a special file.
local7.*/var/log/boot.logSave boot messages also to boot.log
1.程序环境:
    程序包:rsyslog
    配置文件:/etc/rsyslog.conf
                /etc/rsyslog.d
    主程序:/usr/sbin/rsyslogd
    模块路径:/usr/lib64/rsyslog
    Unit File:/usr/lib/systemd/system/rsyslog.service
2.配置文件构成部分:
    #### MODULES ####:定义装载的模块,如接下来使用的mysql模块记录日志需要在此处配置
    #### GLOBAL DIRECTIVES ####:全局环境设置
    #### RULES ####:日志记录相关的规则配置
        格式:facility.priority; facility.priority… target
        facility:
            *: 所有的facility
            facility1,facility2,facility3,...:指定的facility列表
        priority:
            *: 所有级别
            none:没有级别,即不记录
            PRIORITY:指定级别(含)以上的所有级别
            =PRIORITY:仅记录指定级别的日志信息
        target:
            文件路径:通常在/var/log/,文件路径前的-表示异步写入
            用户:将日志事件通知给指定的用户,* 表示登录的所有用户
            日志服务器:@host,把日志送往至指定的远程服务器记录
            管道: | COMMAND,转发给其它命令处理

日志服务器简单搭建

[root@localhost yum.repos.d]# yum -y install mariadb-server         #准备数据库
MariaDB [(none)]> grant all on Syslog.* to 'loguser'@'192.168.79.%' identified by 'sigeling';       #进行授权,使对应主机可以使用loguser远程访问Syslog的所有内容。Syslog表是rsyslog-mysql软件包中的sql脚本生成的

[root@centos7 ~]# yum -y install rsyslog-mysql.x86_64       #安装rsyslog-mysql
[root@centos7 ~]# mysql -uloguser -h192.168.79.47 -psigeling < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql                     #远程导入sql脚本,生成Syslog库和对应的表
[root@centos7 ~]# vim /etc/rsyslog.conf
#### MODULES ####
$Modload ommysql                #支持mysql模块
$ModLoad imtcp                      #支持tcp协议通信
$InputTCPServerRun 514             #监听tcp514端口
#### RULES ####
*.*                                                     :ommysql:192.168.79.47,Syslog,loguser,sigeling      #配置规则,所有设施的所有级别日志都存入远程数据库服务器中
[root@centos7 ~]# systemctl restart rsyslog.service  
[root@localhost ~]# yum -y install httpd php php-mysql php-gd       #另一台主机搭建lap环境
[root@localhost ~]# gzip -d loganalyzer-3.6.5.tar.gz                    #安装loganalyzer
[root@localhost ~]# tar -xf loganalyzer-3.6.5.tar 
[root@localhost ~]# cp /root/loganalyzer-3.6.5 ./ -r
[root@localhost /var/www/html/]# ln -s loganalyzer-3.6.5/src/ loganalyzer
[root@localhost ~]# cd loganalyzer
[root@localhost loganalyzer]# touch config.php                  #创建配置文件,并改权限为666,之后直接访问http://HOST:port/loganalyzer即可,根据loganalyzer提供的步骤进行
[root@localhost loganalyzer]# chmod 666 config.php

在这里插入图片描述

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

文件传输协议FTP:
File Transfer Protocol早期的三个应用级协议之一
基于C/S架构
双通道协议:数据和命令连接
数据传输格式:二进制(默认)和文本
两种模式:服务器角度
主动(PORT Style):服务器主动连接
命令(控制):客户端:随机端口—>服务器:tcp21
数据:客户端:随机端口—>服务器:tcp20
被动(PASV style):客户端主动连接
命令(控制):客户端:随机端口—>服务器:tcp21
数据:客户端:随机端口—>服务器:随机端口
服务器被动模式数据端口示例:
227 Entering Passive Mode (172,16,0,1,224,59)
服务器数据端口为:224*256+59
FTP服务状态码:

状态码详情
1xx信息
2xx成功类状态
3xx补充类
4xx客户端错误
5xx服务端错误
125数据连接打开
200命令ok
230登陆成功
331用户名ok
425不能打开数据端口
530不能登录

用户认证方式:
匿名用户:ftp、anonymous,对应Linux用户ftp
系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
虚拟用户:特定服务的专用用户,独立的用户/密码文件

1.程序环境:vsftpd,CentOS7中不再由xinetd管理
2.用户认证配置文件
    /etc/pam.d/vsftpd
3.Unit-File:/usr/lib/systemd/system/vsftpd.service
4.配置文件:
    /etc/vsftpd/vsftpd.conf
匿名用户(映射为系统用户ftp)共享文件位置:/var/ftp
系统用户共享文件位置:用户家目录
虚拟用户共享文件位置:为其映射的系统用户的家目录
5.配置文件内容
    命令端口
    listen_port=21
    主动模式端口
    connect_from_port_20=YES 主动模式端口为20
    ftp_data_port=20 (默认) 指定主动模式的端口
    被动模式端口范围
    linux 客户端默认使用被动模式
    windows 客户端默认使用主动模式
    pasv_min_port=6000 0为随机分配
    pasv_max_port=6010
    使用当地时间
    use_localtime=YES 使用当地时间(默认为NO,使用GMT)
    匿名用户
    anonymous_enable=YES 支持匿名用户
    no_anon_password=YES(默认NO) 匿名用户略过口令检查 anon_world_readable_only (默认YES)只能下载全部读的文件
    anon_upload_enable=YES 匿名上传,注意:文件系统权限
    anon_mkdir_write_enable=YES 匿名建目录
    anon_umask=0333 指定匿名上传文件的umask,默认077
    anon_other_write_enable=YES 可删除和修改上传的文件
    指定上传文件的默认的所有者和权限
    chown_uploads=YES(默认NO)
    chown_username=wang
    chown_upload_mode=0644
    Linux系统用户
    local_enable=YES 是否允许linux用户登录
    write_enable=YES 允许linux用户上传文件
    local_umask=022 指定系统用户上传文件的默认权限
    guest_enable=YES 所有系统用户都映射成guest用户
    guest_username=ftp 配合上面选项才生效,指定guest用户
    local_root=/ftproot guest用户登录所在目录
    禁锢所有系统用户在家目录中
    chroot_local_user=YES(默认NO,不禁锢)禁锢系统用户
    禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反 chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    当chroot_local_user=YES时,则chroot_list中用户不禁锢
    当chroot_local_user=NO时,则chroot_list中用户禁锢
    wu-ftp日志:默认启用
    xferlog_enable=YES (默认) 启用记录上传下载日志
    xferlog_std_format=YES (默认) 使用wu-ftp日志格式
    xferlog_file=/var/log/xferlog (默认)可自动生成
    vsftpd日志:默认不启用
    dual_log_enable=YES 使用vsftpd日志格式,默认不启用
    vsftpd_log_file=/var/log/vsftpd.log(默认)可自动生成
    登录提示信息
    ftpd_banner=“welcome to mage ftp server"
    banner_file=/etc/vsftpd/ftpbanner.txt 优先上面项生效
    目录访问提示信息
    dirmessage_enable=YES (默认)
    message_file=.message(默认) 信息存放在指定目录下.message
    使用pam(Pluggable Authentication Modules)完成用户认证
    pam_service_name=vsftpd
    pam配置文件:/etc/pam.d/vsftpd
    /etc/vsftpd/ftpusers 默认文件中用户拒绝登录
    是否启用控制用户登录的列表文件
    userlist_enable=YES 默认有此设置
    userlist_deny=YES(默认值) 黑名单,不提示口令,NO为白名单
    userlist_file=/etc/vsftpd/users_list 此为默认值
    vsftpd服务指定用户身份运行
    nopriv_user=nobody (默认值)
    连接数限制
    max_clients=0 最大并发连接数
    max_per_ip=0 每个IP同时发起的最大连接数
    传输速率:字节/秒
    anon_max_rate=0 匿名用户的最大传输速率
    local_max_rate=0 本地用户的最大传输速率
    连接时间:秒为单位
    connect_timeout=60 主动模式数据连接超时时长
    accept_timeout=60 被动模式数据连接超时时长
    data_connection_timeout=300 数据连接无数据输超时时长
    idle_session_timeout=60 无命令操作超时时长
    优先以文本方式传输
    ascii_upload_enable=YES
    ascii_download_enable=YES
[root@localhost ~]# yum -y install vsftpd               #安装vsftpd软件包
[root@localhost ~]# vim /etc/vsftpd/vusers.txt          #创建虚拟用户文件,奇数行为用户名,偶数行为密码
test1
pass
test2
pass
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# db_load -T -t hash -f vusers.txt vusers.db         #对上面创建的虚拟用户文件进行hash计算,生成库文件vusers.db
[root@localhost vsftpd]# chmod 600 vusers.db            #降低库文件的权限保证安全
[root@localhost vsftpd]# useradd -d /var/ftproot -s /sbin/nologin vuser         #服务器端创建新的用户用作映射(匿名用户等在客户端登录时在服务端以该用户的身份进行操作)
[root@localhost vsftpd]# chmod +rx /var/ftproot/    
[root@localhost vsftpd]# chmod -w /var/ftproot/
[root@localhost vsftpd]# mkdir /var/ftproot/upload
[root@localhost vsftpd]# setfacl -m u:vuser:rwx /var/ftproot/upload         #配置vuser用户在ftproot目录下的权限
[root@localhost tmp]# vim /etc/pam.d/vsftpd.db              #在pam验证模块中对vsftpd相关验证做配置
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf        #更改配置文件
guest_enable=YES                    
guest_username=vuser                #指定访问用户的身份
pam_service_name=vsftpd.db      #指定pam验证模块文件
[root@localhost vsftpd]# mkdir /etc/vsftpd/vusers.d/            #创建目录用于存放不同用户的权限配置文件
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/
[root@localhost vusers.d]# vim test1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

[root@localhost vusers.d]# systemctl restart vsftpd
[root@localhost vusers.d]# ss -ntl
LISTEN     0      32          :::21                      :::*  
[root@centos7 vsftpd]# lftp 192.168.79.37           #连接ftp
lftp 192.168.79.37:~> test1
Unknown command `test1'.
lftp 192.168.79.37:~> login
Usage: login <user|URL> [<pass>]
lftp 192.168.79.37:~> login test1 pass
lftp test1@192.168.79.37:~> 
lftp test1@192.168.79.37:~> 
lftp test1@192.168.79.37:~> ls
drwxrwxr-x    2 0        0               6 Jul 07 15:55 upload
lftp test1@192.168.79.37:/> 

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

[root@localhost ~]# yum -y install nfs-utils rpcbind            #安装nfs
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# vim /etc/exports                            #指定本地何目录允许何主机以何权限访问
/backup/ 192.168.79.0/24(ro)

[root@localhost ~]# vim /etc/fstab
192.168.79.47:/backup/ /data/backup/ nfs ro 0 0         
[root@localhost ~]# mount -a                    #加载fstab文件
[root@localhost backup]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/sda2               31G  3.7G   27G  13% /
devtmpfs               895M     0  895M   0% /dev
tmpfs                  910M     0  910M   0% /dev/shm
tmpfs                  910M   10M  900M   2% /run
tmpfs                  910M     0  910M   0% /sys/fs/cgroup
/dev/sda3               31G   37M   31G   1% /data
/dev/sda5               20G   33M   20G   1% /home
/dev/sda1              4.0G  174M  3.9G   5% /boot
tmpfs                  182M     0  182M   0% /run/user/0
/dev/sr0                11G   11G     0 100% /media
192.168.79.47:/backup   30G  3.5G   27G  12% /data/backup

在windows中开启NFS服务客户端即可
在这里插入图片描述
在这里插入图片描述

[root@localhost ~]# yum -y install samba            #安装samba
[root@localhost ~]# 
[root@localhost ~]# vim /etc/samba/smb.conf     #更改配置文件
[smbshare]
        comment = test
        path = /tmp/test
        write list = @admins root
        create mask = 0664
        directory mask = 0775
[root@localhost ~]# systemctl restart smb nmb
[root@localhost ~]# groupadd -r admins          #创建admins组
[root@localhost ~]# groupadd -r admins          
[root@localhost ~]# useradd -s /sbin/nologin -G admins testuser         #创建testuser用户,不允许登录,属于admins组
[root@localhost ~]# smbpasswd -a testuser           #使用smbpasswd工具对testuser进行加密
New SMB password:
Retype new SMB password:
Added user testuser.
[root@localhost ~]# mkdir /tmp/test             #创建要共享的目录
[root@localhost ~]# chgrp admins /tmp/test      #更改共享目录属组
[root@localhost ~]# chmod 2775 /tmp/test
[root@localhost ~]# semanage fcontext -a -t samba_share_t '/tmp/test(/.*)?'             #更改selinux权限,开放samba_share
[root@localhost ~]# restorecon -vvFR /tmp/test/         #保存selinux配置

[root@localhost backup]# mount -o username=testuser //192.168.79.47/smbshare /tmp           #使用用户testuser进行挂载
Password for testuser@//192.168.79.47/smbshare:  ********

在这里插入图片描述

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
    • [root@localhost ~]# ll /proc/sys/fs/inotify/ #列出下面的文件,说明服务器内核支持inotify
      total 0
      -rw-r–r-- 1 root root 0 Jul 8 00:37 max_queued_events:inotify事件队列最大长度,如值太小会出现Event Queue Overflow错误,默认值:16384
      -rw-r–r-- 1 root root 0 Jul 8 00:37 max_user_instances:可以监视的文件数量(单进程),默认值:8192
      -rw-r–r-- 1 root root 0 Jul 8 00:37 max_user_watches:每个用户创建inotify实例最大值,默认值:128
  • inotify参考文档:

  • inotify安装:基于epel源

    • yum install inotify-tools
    • inotifywait:在被监控的文件或目录上等待特定文件系统事件(open\close\delete等)发生,常用于实时同步的目录监控
    • inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计
inotifywait命令常见选项
-m,--monitor        始终保持事件监听
-d,--daemon     以守护进程方式执行,和-m相似,配合-o使用
-r,--recursive      递归监控目录数据信息变化
-q,--quiet          输出少量事件信息
--timefmt <fmt>指定时间输出格式     --timefmt "%Y-%m-%d %H:%M"
--format <fmt>指定的输出格式;即实际监控输出内容
    %T输出时间格式中定义的时间格式信息,通过--timefmt option语法格式指定时间信息
    %w  事件出现时,监控文件或目录的名称信息
    %f  事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空
    %e  显示发生的事件信息,不同的事件默认用逗号分隔
    %Xe 显示发生的事件信息,不同的事件指定用X进行分隔
    示例:
        --format "%T %w %f event: %;e"
        --format '%T %w %f'
-e                      指定监听指定的事件,如果省略则表示所有事件都进行监听
    事件类型:
        

| command |description  |
| --- | --- |
|create  |文件或目录创建  |
|delete  |文件或目录被删除  |
|modify  |文件或目录内容被写入  |
|attrib  |文件或目录属性改变  |
|close_write  |文件或目录关闭,在写入模式打开之后关闭的  |
|close_nowrite  |文件或目录关闭,在只读模式打开之后关闭的  |
|close  |文件或目录关闭,不管读还是写模式  |
|open  |文件或目录被打开  |
|moved_to  |文件或目录被移动到监控的目录中  |
|moved_from  |文件或目录从监控的目录中被移动  |
|move  |文件或目录不管移动到或是移出监控目录都触发事件  |
|access |文件或目录内容被读取  |
|delete_self  |文件或目录被删除,目录本身被删除  |
|unmount  |取消挂载  |
    示例:
        -e create,delete,moved_to,close_write
--eclude <pattern>指定排除文件或目录,使用扩展的正则表达式匹配的模式实现
--excludei <pattern>和exclude相似,不区分大小写
-o,--outfile <file>打印事件到文件中,相当于标准正确输出
-s,--syslogOutput 发送错误到syslog相当于标准错误输出

inotifywait /data           监控一次性事件
inotifywait -mrq /data      持续监控
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         持续后台监控特定事件
[root@localhost ~]# vim /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
lock file = /var/run/rsyncd.lock
reverse lookup =no
hosts allow = 192.168.79.0/24
[backup]
path = /data/backup/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass


[root@localhost ~]# echo "rsyncuser:sigeling" > /etc/rsync.pass
[root@localhost ~]# chmod 600 /etc/rsync.pass
[root@localhost ~]# mkdir /data/backup/ -p
[root@localhost ~]# rsync --daemon              #以守护进程的方式运行

[root@localhost data]# echo 'sigeling' > /etc/rsync.pass
[root@localhost data]# chmod 600 /etc/rsync.pass
[root@localhost data]# rsync -avz --password-file=/etc/rsync.pass /data/ rsyncuser@192.168.79.37::backup            #推送数据。。。
[root@localhost ~]# vim inotify_rsync.sh 
#!/bin/bash
SRC='/data/backup'
DEST='rsyncuser@192.168.79.37::backup'
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete
,moved_to,close_write ${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.l
og
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值