1、描述rsyslog日志服务,并提供带web展示的日志服务器
rsyslog日志服务简介
日志的概念好理解,日志作用可用于排障和追溯审计的等
1、rsyslog是一个C/S架构的服务,可监听于某套接字,帮其它主机记录日志信息,在linux系统中可以分类两个日志:
klogd:kernel,记录内核相关的日志
syslogd:service,记录应用程序的日志
rsyslog:是CentOS 6以后的系统使用的日志系统,与之前的syslog日志系统相比,具有以下优点:
支持多线程
支持TCP、SSL、TLS、RELP等协议
强大的过滤器,可实现过滤日志信息中的任意部分
支持自定义输出格式
适用于企业级别日志记录需求
模块化
先实现rsyslog存储在数据库中
安装包
yum install mariadb-server rsyslog-mysql(rsyslog与数据库交互的包)
加载ommysql模块写入rsyslog.conf配置文件
rpm -ql rsyslog-mysql
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
加入一行。将日志保存至数据库一份
*.info;mail.none;authpriv.none;cron.none :ommysql:192.168.242.129,Syslog,test,centos
在数据库中创建账号
grant all on Syslog.* to test@'%' identified by 'centos';
创建表 可以直接跑rsyslog-mysql包中的sql脚本,会自动生成rsyslog的数据库,导入完成后重启rsyslog服务即可
mysql -uroot -pcentos < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
实现lamp及日志web方式日志
yum install httpd php php-mysql mariadb-server 。
下载loganalyzer https://loganalyzer.adiscon.com/downloads/loganalyzer-v4-1-7-v4-stable/
解压loganalyzer-4.1.7.tar.gz
进入loganalyzer目录。将源码src目录拷贝到httpd目录中
cp -r src/ /var/www/html/log命名成log目录
点击here进入页面
点击next
发现log目录中有一个config.php文件不存在
手动创建config.php文件,并且权限改成666
touch /var/www/html/log/config.php && chmod 666 /var/www/html/log/config.php
也可以使用安装目录中的configure.sh脚本配置权限。注意。要在httpd的目录中,而configuer.sh在loganalyze目录。需要移动至httpd目录
如果还是提示不可写入的话,可以使用一下命令
[root@loganalyzer ~]# cd /var/www/html/loganalyzer
[root@loganalyzer ~]# touch config.php
[root@loganalyzer ~]# chown apache:apache config.php
[root@loganalyzer ~]# chmod 777 config.php
[root@loganalyzer ~]# chcon -h -t httpd_sys_script_rw_t /var/www/html/loganalyzer/config.php
http://yallalabs.com/linux/how-to-setup-loganalyzer-with-rsyslog-on-centos-7-rhel-7/ 参考网址
保持默认
source Type 选择mysql。select view 和table type 都保持默认
选择数据库名,表明,注意大小写区分。输入账号及密码
安装完成
2、描述vsftpd工作原理并以虚拟用户的方式提供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,主动被动都是以服务器角度来称呼的。
命令端口则没有主动被动一说,只有数据端口有主动和被动
虚拟用户:
虚拟用户会同意映射为一个指定的系统账号:访问共享位置,即为次系统账号的家目录,各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定
虚拟用户账户账号可放在文件或者数据库中
文件,编辑文本文件,需要被编码为hash格式,奇数行为用户名,偶数行为密码
首先,安装vsftpd提供ftp服务。yum install vsftpd -y
进入配置目录创建用户名密码
一、创建用户数据库文件,格式为奇数行为用户名,偶数行为密码
• vim /etc/vsftpd/vusers.txt
user1
centos
user2
centos
• cd /etc/vsftpd/
• db_load -T -t hash -f vusers.txt vusers.db
• chmod 600 vusers.db 更改权限
将文本文件转换成为特殊格式的数据库文件
db_load -T -t hash -f vusers.txt vusers.db
创建一个操作系统账号及家目录作为ftp的根目录
mkdir /data/ftproot
useradd -s /sbin/nologin -r -d /data/ftproot vuser
修改ftp根目录所有者
chown vuser.vuser /data/ftproot 作为ftp根需要注意权限。根上不能有写权限,但子目录可以
mkdir /data/ftproot/upload 创建子目录
setfacl -m u:vuser:rwx /data/ftproot/upload 单独赋予vuser权限
接下来让ftp服务可以调用刚创建的用户账号的数据库文件,
vim /etc/pam.d/vsftpd.db #在pam模块中修改调用的ftp配置文件,
auth required pam_userdb.so db=/etc/vsftpd/vusers #验证用户账号数据库
account required pam_userdb.so db=/etc/vsftpd/vusers
在ftp配置文件中修改调用的pam模块
引用刚生成的配置文件
guest_enable=YES 所有系统用户都映射成guest用户
guest_username=ftp 配合上面选项才生效,指定guest用户
重启服务 systemctl restart vsftpd
客户端连接ftp服务器
、虚拟用户建立独立的配置文件
mdkir /etc/vsftpd/vusers.d/ 创建配置文件存放的路径
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/
允许user1用户可读写,其它用户只读
vim user1 创建各用户自已的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
user1可以实现上传
user2则不能上传
实现登陆目录分离
创建user2文件,写入local_root=/data/ftproot2/
[root@centos7 vusers.d]# mkdir /data/ftproot2 创建文目录及文件
[root@centos7 vusers.d]# echo a > /data/ftproot2/a.txt
user2登陆和user1的登陆目录分离
如果需要user2实现下载。则加入几行命令即可
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
实现基于mysql验证的vsftpd虚拟用户
说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库
服务器
一、安装所需要包和包组:
在数据库服务器上安装包:
Centos7:在数据库服务器上安装
yum –y install mariadb-server
systemctl start mariadb.service
systemctl enable mariadb
在FTP服务器上安装vsftpd和pam_mysql包
centos6:pam_mysql由epel6的源中提供
yum install vsftpd pam_mysql
yum -y install mariadb-devel pam-devel vsftpd
https://downloads.mariadb.org/mariadb-galera/5.5.63/ centos7需下载源码
centos7:
yum -y groupinstall "Development Tools"下载编译包组便宜源码pam_mysql
yum -y install mariadb-devel pam-devel vsftpd #安装开发相关的包
tar xf pam_mysql-0.7RC1.tar.gz 解压包
进入pam_mysql解压目录执行编译
./configure --with-pam-mods-dir=/lib64/security --with-mysql=/usr --with-pam=/usr
make && make install
系统会自动将pam_mysql模块放入/etc/pam.d/目录中
二、在数据库服务器上创建虚拟用户账号
• 1.建立存储虚拟用户数据库和连接的数据库用户
mysql> CREATE DATABASE vsftpd;
mysql> SHOW DATABASES;
ftp服务和mysql不在同一主机:
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'192.168.%.%' IDENTIFIED BY 'centos';
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
);
创建记录,对应虚拟用户账户密码
insert users(name,password)values('ftp1',password('centos')),('ftp2',password('centos'));
三、在FTP服务器上配置vsftpd服务
1.在FTP服务器上建立pam认证所需文件
vi /etc/pam.d/vsftpd.mysql 添加如下两行
auth required pam_mysql.so user=vsftpd passwd=centos
host=192.168.64.136 db=vsftpd table=users usercolumn=name
passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=centos
host=192.168.64.136 db=vsftpd table=users usercolumn=name
passwdcolumn=password crypt=2
修改ftp配置文件调用pam的模块
之后重启服务即可利用数据库
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 * #*表示所有客户端,
挂载成功
默认情况下。共享出来为只读方式
/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 软件是用cifs协议。cifs为文件系统,跟nfs文件系统相似,可以实现windows和linux的文件互相共享
安装samba服务
yum install samba
samba有两个服务单元。nmb服务可以解析主机名
/usr/lib/systemd/system/nmb.service
/usr/lib/systemd/system/smb.service
启动服务,139.445为samba服务的tcp端口
需要创建系统账号,给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主机中实现挂载
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
用户独立的配置文件,写入配置文件,创建相应目录
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:
异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如cron等的轮询机制来获取事件,linux内核从2.6.13起支持 inotify,通过inotify可以监控文件系统中添加、删除,修改、移动等各种事件
要利用监控服务(inotify),监控同步数据服务器目录中信息的变化
发现目录中数据产生变化,就利用rsync服务推送到备份服务器上
inotify+rsync 方式实现数据同步
实现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
max_queued_events:inotify事件队列最大长度,如值太小会出现 Event Queue Overflow 错误,默认值:16384
max_user_watches:可以监视的文件数量(单进程),默认值:8192
max_user_instances:每个用户创建inotify实例最大值,默认值:128
inotify参考文档
https://github.com/rvoicilas/inotify-tools/wiki
安装:基于epel源
yum install inotify-tools #基于epel源
Inotify-tools包主要文件:
inotifywait: 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,常用于实时同步的目录监控
inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计
inotifywait命令常见选项
-m, --monitor 始终保持事件监听
-d, --daemon 以守护进程方式执行,和-m相似,配合-o使用
-r, --recursive 递归监控目录数据信息变化
-q, --quiet 输出少量事件信息
--timefmt <fmt> 指定时间输出格式
--timefmt时间格式,参考 man 3 strftime
%Y 年份信息,包含世纪信息
%y 年份信息,不包括世纪信息
%m 显示月份,范围 01-12
%d 每月的第几天,范围是 01-31
%H 小时信息,使用 24小时制,范围 00-23
%M 分钟,范围 00-59
--format <fmt> 指定的输出格式;即实际监控输出内容
-e 指定监听指定的事件,如果省略,表示所有事件都进行监听
--exclude <pattern> 指定排除文件或目录,使用扩展的正则表达式匹配的模式实现
--excludei <pattern> 和exclude相似,不区分大小写
-o, --outfile <file>打印事件到文件中,相当于标准正确输出
-s, --syslogOutput 发送错误到syslog相当于标准错误输出
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
一次性监控/data/目录。
如果data目录中的数据发生变化,则退出
inotifywait -mrq /data 持续监控目录前台监控
后台执行,将事件记录到/root/intofy.log中,并且设置时间格式,记录哪个目录的哪个事件
inotifywait -o /root/inotify.log -drq /data --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event: %e"
当我们对/data/目录进行操作的时候,全部记录日志中
监控特定的操作,创建,删除,移动,和修改才记录到日志中
inotifywait -mrq /data --timefmt "%F %H:%M" --format
"%T %w%f event: %;e" -e create,delete,moved_to,close_write
在192.168.64.136实现监控。在64.137机器上实现rsync服务远程拷贝监控的目录并拷贝至本机
搭建rsync服务器来实现同步
rsync服务搭建在另一台服务器中,
默认centos7自带有rsync包
修改配置文件
vi /etc/rsyncd.conf
uid = root #指定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.64.0/24 #控制网段访问
[backup]
path = /backup/ #需要将哪个目录和远程服务器同步
comment = backup #注释
read only = no #取消只读
auth users = rsyncuser # 指定rsync账号来同步
secrets file = /etc/rsync.pass #虚拟用户密码
在服务端生成虚拟账户验证文件。格式为用户名:密码
echo "rsyncuser:centos" > /etc/rsync.pass &&chmod 600 /etc/rsync.pass
创建backup备份的目录
rsync --daemon 利用daemon启动rsync服务。
客户端配置密码文件
echo "magedu" > /etc/rsync.pass
chmod 600 /etc/rsync.pass
客户端测试同步数据
rsync -avz --password-file=/etc/rsync.pass /data/ rsyncuser@192.168.64.137::backup
同步成功
创建inotify_rsync.sh脚本
#!/bin/bash
SRC='/data/'
DEST='rsyncuser@192.168.64.136::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.log
done
在需要监控的服务器上执行即可