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):内核崩溃等严重信息
Facility | File-path | Description |
---|---|---|
*.info;mail.none;authpriv.none;cron.none | /var/log/messages | Log anything (except mail) of level info or higher. Don’t log private authentication messages! |
authpriv.* | /var/log/secure | The authpriv file has restricted access. |
mail.* | /var/log/maillog | Log all the mail messages in one place. |
cron.* | /var/log/cron | Log cron stuff |
*.emerg | :omusrmsg:* | Everybody gets emergency messages |
uucp,news.crit | /var/log/spooler | Save news errors of level crit and higher in a special file. |
local7.* | /var/log/boot.log | Save 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