日志和文件共享
rsyslog 管理
系统日志术语
-
facility:设施,从功能或程序上对日志进行归类
#内置分类 auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, syslog #自定义的分类 local0-local7
-
Priority 优先级别,从低到高排序
debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)
参看帮助: man 3 syslog,man logger
rsyslog配置文件
- /etc/rsyslog.conf 配置文件格式:由三部分组成
- MODULES:相关模块配置
- GLOBAL DIRECTIVES:全局配置
- RULES:日志记录相关的规则配置
facility格式:
格式: facility.priority; facility.priority… target
* #所有的facility
facility1,facility2,facility3,... #指定的facility列表
priority格式:
*: 所有级别
none:没有级别,即不记录
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息
target格式:
文件路径:通常在/var/log/,文件路径前的-表示异步写入
用户:将日志事件通知给指定的用户,* 表示登录的所有用户
日志服务器:@host,把日志送往至指定的远程UDP日志服务器 @@host 将日志发送到远程TCP日志服务器
管道: | COMMAND,转发给其它命令处理
网络日志服务
客户端将日志推送到服务端
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none @10.0.0.28:514
*.info;mail.none;authpriv.none;cron.none @@10.0.0.28:514
服务端开启服务
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")
# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")
实现loganalyzer 展示数据库中的日志
日志服务器:10.0.0.17
yum -y install rsyslog-mysql
scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 10.0.0.28:/data
vim /etc/rsyslog.conf
$ModLoad ommysql.so
*.info :ommysql:10.0.0.28,Syslog,rsyslog,123456
httpd服务器:10.0.0.18
tar xvf loganalyzer-4.1.12.tar.gz
cd loganalyzer-4.1.12/
cp -r src /var/www/html/log
cd /var/www/html/log/
touch config.php
chmod 666 config.php
MySQL服务器:10.0.0.28
yum -y install mysql-server
mysql> source /data/mysql-createDB.sql
mysql> create database rsyslog@'10.0.0.%' idengtified by '123456';
mysql> grant all on Syslog.* to rsyslog@'10.0.0.%';
[root@centos7 ~]# curl http://10.0.0.18/log/index.php -I
HTTP/1.1 200 OK
Date: Sun, 03 Jul 2022 20:37:01 GMT
Server: Apache/2.4.37 (centos)
X-Powered-By: PHP/7.2.24
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Set-Cookie: PHPSESSID=ooc2me43gu9fcc0rp17pj8q2uv; path=/
Content-Type: text/html; charset=UTF-8
logrotate 日志转储
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转 储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行
相关文件 计划任务:/etc/cron.daily/logrotate
程序文件:/usr/sbin/logrotate
配置文件: /etc/logrotate.conf
日志文件:/var/lib/logrotate/logrotate.status
配置文件主要参数
compress --> 压缩日志文件的所有非当前版本
daily,weekly,monthly --> 按指定计划轮换日志文件
delaycompress --> 压缩所有版本,除了当前和下一个最近的
endscript --> 标记 prerotate 或 postrotate 脚本的结束
errors "emailid" --> 给指定邮箱发送错误通知
missingok --> 如果日志文件丢失,不要显示错误
notifempty --> 如果日志文件为空,则不轮换日志文件
olddir "dir" --> 指定日志文件的旧版本放在 “dir” 中
postrotate --> 引入一个在日志被轮换后执行的脚本
prerotate --> 引入一个在日志被轮换前执行的脚本
rotate 'n' --> 在轮换方案中包含日志的 n 个版本
sharedscripts --> 对于整个日志组只运行一次脚本
size='logsize' --> 在日志大小大于 logsize(例如 100K,4M)时轮换
格式范例:
cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 100
missingok
compress
delaycompress
notifempty
create 644 ngnix nginx
postrotate
if [ -f /app/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /app/nginx/logs/nginx.pid`
fi
endscript
}
网络文件共享服务
存储类型分为三种
直连式存储:Direct-Attached Storage,简称DAS
DAS存储设备与服务器主机之间的连接通道通常采用SCSI连接, DAS存储设备主要是磁盘阵列(RAID: Redundant Arrays of Independent Disks)、磁盘簇 (JBOD:Just a Bunch Of Disks)等。
存储区域网络:Storage Area Network,简称SAN
存储区域网络,这个是通过光纤通道或以太网交换机连接存储阵列和服务器主机,最后成为一个专用的 存储网络。S
网络附加存储:Network-Attached Storage,简称NAS
NAS存储就是存储设备通过标准的网络拓扑结构(比如以太网)添加到一群计算机上。与DAS以及SAN不 同,NAS是文件级的存储方法。采用NAS较多的功能是用来进行文件共享。
FTP
ftp用户在家目录内进行上传下载,创建等操作时,需要系统权限和应用权限
基于MySQL验证的vsftp虚拟用户
数据库服务器准备:10.0.0.18
MariaDB [(none)]> create databse vsftpd;
MariaDB [vsftpd]> create table users (id INT AUTO_INCREMENT NOT NULL primary key,name char(50) binary not NULL,password char(50) binary not NULL);
MariaDB [vsftpd]> insert into users(name,password) values('ftp_user',password('123456'));
Query OK, 1 row affected (0.001 sec)
MariaDB [vsftpd]> select * from users;
+----+----------+-------------------------------------------+
| id | name | password |
+----+----------+-------------------------------------------+
| 1 | ftp_user | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+----+----------+-------------------------------------------+
1 row in set (0.000 sec)
MariaDB [vsftpd]> grant all on vsftpd.* to vsftpd@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.000 sec)
MariaDB [vsftpd]> flush privileges;
ftp服务器准备:10.0.0.17
#centos7以上需编译安装
yum -y install gcc gcc-c++ make mariadb-devel pam-devel vsftpd
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-pam-mods-dir=/lib64/security
make install
ll /lib64/security/pam_mysql*
-rwxr-xr-x 1 root root 882 Jul 4 14:57 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141712 Jul 4 14:57 /lib64/security/pam_mysql.so
vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.18 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.18 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
pam_service_name=vsftpd.mysql
guest_enable=YES
guest_username=vuser
user_config_dir=/etc/vsftpd/conf.d/
vim /etc/vsftpd/conf.d/ftp_user
local_root=/data/ftp
vsftpd.mysql文件说明
注意:以上参考 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()函数加密
NFS
软件包:nfs-utils
NFS配置文件:
/etc/exports
/etc/exports.d/*.exports
配置文件格式:
/dir 主机1(opt1,opt2) 主机2(opt1,opt2)...
格式说明:
以#开始的行为注释
主机格式:
anonymous:表示使用*通配所有客户端
单个主机:ipv4,ipv6,FQDN
IP networks:两种掩码格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16
wildcards:主机名通配,例如:*.magedu.com,IP不可以
netgroups:NIS域的主机组,@group_name
每个条目指定目录导出到的哪些主机,及相关的权限和选项
默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写
async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性低
sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘,性能低,安全性高
root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS
7以前的版本为nfsnobody
no_root_squash 远程root映射成NFS服务器的root用户
all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
no_all_squash (默认)保留共享文件的UID和GID
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使
用
常用命令:
exportfs
-v #查看本机所有NFS共享
-r #重读配置文件,并共享目录
-a #输出本机所有共享
-au #停止本机所有共享
#查看远程主机的NFS共享
showmount -e hostname
挂载方式
临时挂载
mount -o rw,nosuid,fg,hard,intr 远程目录 挂载目录
fg #(默认)前台挂载
bg #后台挂载
hard #(默认)持续请求
soft #非持续请求
intr #和hard配合,请求可中断
rsize #和wsize 一次读和写数据最大字节数,rsize=32768
_netdev #无网络服务时不挂载NFS资源
vers #指定版本,客户端centos8默认4.2 ,centos7默认4.1 centos6默认4.0
开机挂载
vim /etc/fstab
远程目录(10.0.0.17:/data) 挂载目录(/data) nfs defaults,_netdev 0 0
autofs
软件包:autofs
服务文件:/usr/lib/systemd/system/autofs.service
配置文件:/etc/auto.master
配置格式:
vim /etc/auto.master
/misc /etc/auto.misc
vim /etc/auto.misc
#表示/misc下面的子目录和nfs共享/export目录的子目录同名
* server:/export/&
samba
相关包:
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
挂载方法
手动挂载
mount -o user=wang,password=magedu //server//shared /mnt/smb
开机挂载
cat /etc/fstab
#可以用文件代替用户名和密码的输入
//server/homes /mnt cifs credentials或cred=/etc/smb.txt 0 0
用户管理:
实现samba用户说明
包:samba-common-tools
工具:smbpasswd pdbedit
用户数据库:/var/lib/samba/private/passdb.tdb
说明:samba用户须是Linux用户,建议使用/sbin/nologin
添加 samba用户:
smbpasswd -a <user>
pdbedit -a -u <user>
修改用户密码:
smbpasswd <user>
删除用户和密码:
smbpasswd -x <user>
pdbedit -x -u <user>
查看samba用户列表
pdbedit -L -v
查看samba服务器状态:
smbstatus
配置说明:
samba 配置文件 /etc/samba/smb.conf 格式 ,使用.ini文件的格式
帮助:man smb.conf
用 [ ] 分成以下几部分
全局设置:
[global] 服务器通用或全局设置的部分
特定共享设置:
[homes] 用户的家目录共享
[printers] 定义打印机资源和服务
[sharename] 自定义的共享目录配置
其中:#和;开头的语句为注释,大小写不敏感
samba配置中的宏定义:
%m 客户端主机的NetBIOS名
%M 客户端主机的FQDN
%H 当前用户家目录路径
%U 当前用户的用户名
%g 当前用户所属组
%h samba服务器的主机名
%L samba服务器的NetBIOS名
%I 客户端主机的IP,是i的大写字母
%T 当前日期和时间
%S 可登录的用户名
[global]
workgroup = workgroup
netbios name = smbserver #此设置需要启动nmb服务才可能生效
interfaces 指定服务侦听接口和IP
hosts allow 可用逗号,空格,或tab分隔,默认允许所有主机访问,也可在每个共享独立配置,如在[global]设置,将应用并覆盖所有共享设置,可以是以下格式:
IPv4 network/prefix: 172.16.0.0/24 IPv4 前缀: 172.16.0.
IPv4 network/netmask: 172.16.0.0/255.255.255.0
主机名: desktop.example.com
以example.com后缀的主机名: .example.com
hosts allow = 172.16. .example.com
hosts deny 拒绝指定主机访问,格式和hosts allow 相同
config file=/etc/samba/conf.d/%U 用户独立的配置文件
Log file=/var/log/samba/log.%I 不同客户机采用不同日志
log level = 2 日志级别,默认为0,不记录日志
max log size=50 日志文件达到50K,将轮循rotate,单位KB
Security三种认证方式:
user:samba用户(采有linux用户,samba的独立口令)
passdb backend = tdbsam 密码数据库格式
共享目录配置
[共享名称] #远程网络看到的共享名称
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
[share]
path = /data/dir
valid users=wang,@admins
writeable = no
browseable = no
实时同步
实现实时同步的方法
inotify + rsync 方式实现数据同步
sersync :前金山公司周洋(花椒直播)在 inotify 软件基础上进行开发的,功能更加强大
工作原理:
要利用监控服务(inotify),监控同步数据服务器目录中信息的变化
发现目录中数据产生变化,就利用rsync服务推送到备份服务器上
inotify:
异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如cron等的轮询机制来获取事件,
linux内核从2.6.13起支持 inotify,通过inotify可以监控文件系统中添加、删除,修改、移动等各种事件
实现inotify软件:
inotify-tools
sersync
lrsyncd
inotify+rsync使用方式
inotify 对同步数据目录信息的监控
rsync 完成对数据的同步
利用脚本进行结合
inotify-tools工具
格式
inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]
常用选项
-m, --monitor 始终保持事件监听
-d, --daemon 以守护进程方式执行,和-m相似,配合-o使用
-r, --recursive 递归监控目录数据信息变化
-q, --quiet 输出少量事件信息
--exclude <pattern> 指定排除文件或目录,使用扩展的正则表达式匹配的模式实现
--excludei <pattern> 和exclude相似,不区分大小写
-o, --outfile <file> 打印事件到文件中,相当于标准正确输出,注意:使用绝对路径
-s, --syslogOutput 发送错误到syslog相当于标准错误输出
--timefmt <fmt> 指定时间输出格式
--format <fmt> 指定的输出格式;即实际监控输出内容
-e 指定监听指定的事件,如果省略,表示所有事件都进行监听
inotifywait 的--timefmt常用格式
--timefmt "%Y-%m-%d %H:%M:%S"
inotifywait 的 --format常用格式:
--format "%T %w%f event: %;e"
--format '%T %w %f'
inotifywait -e 选项常用格式
-e create,delete,moved_to,close_write,attrib
实现samba共享/www
samba服务端:10.0.0.17
yum -y install samba
groupadd -r admins
useradd -s /sbin/nologin -G admins samuser
smbpasswd -a samuser
cd /data/
mkdir www
chgrp admins www
chmod 2775 www
vim /etc/samba/smb.conf
[share]
path=/data/www
write list=@admins
systemctl start smb nmb
客户端:10.0.0.27
mount -o user=samuser,password=123456 //10.0.0.17/share /data/share
实现LAMP+NFS
将wordpress网站文件通过NFS远程挂载到LAMP服务器
LAMP服务器:10.0.0.18
yum -y install httpd php php-json php-mysqlnd nfs-utils mysql-server
vim /etc/fstab
10.0.0.27:/data/wordpress /var/www/html nfs defaults 0 0
mount -a
mysql> create database wordpress;
mysql> create user wordpress@'10.0.0.%' identified by '123465';
mysql> grant all on wordpress.* to wordpress@'10.0.0.%';
systemctc start httpd mysqld
NFS服务器:10.0.0.27
yum -y install nfs-utils
wget https://cn.wordpress.org/latest-zh_CN.zip
unzip latest-zh_CN.zip
mv wordpress /data/
groupadd -g 48 apache
useradd -u 48 -g apache -s /sbin/nologin -r apache
chown -R apache:apache /data/wordpress
vim /etc/exports.d/wordpress.exports
/data/wordpress *(rw,all_squash,anonuid=48,anongid=48)
exportfs -r
#注意:LAMP服务器和NFS服务器apache的uid和gid相同
实现实时同步
备份服务器:10.0.0.17
1.inotify配合脚本实现
yum -y install rsync #主备服务器都需要安装rsync
数据端运行脚本
vim inotify.sh
#!/bin/bash
rpm -q rsync || yum -y install rsync
inotifywait -mrq --timefmt "%Y-%m%d %H:%M:%S" --format "%T %w %f" -e create,delete,moved_to,close_write,attrib /www |while read DATA TIME DIR FILE;do
rsync -az --delete /data/ 10.0.0.17:/data/
done
2.sersync
备份服务器:10.0.0.18
yum -y install rsync-daemon
/etc/rsyncd.conf
uid = root
gid = root
#port = 874
#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 = 10.0.0.0/24
[backup] #数据端 <remote ip="10.0.0.18" name="backup"/> 选项中的name
path = /data/backup/
comment = backup dir
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pas
mkdir /data/backup/
echo "rsyncuser:123456" > /etc/rsync.pas
systemc enable --now rsyncd
数据端
tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz
mv GNU-Linux-x86 /usr/local/serync
ln -s /usr/local/serync/sersync2 /usr/local/sbin/sersync
vim /var/local/serync/confxml.xml
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/> #属性修改
<modify start="false"/>
</inotify>
<localpath watch="/www"> #需备份目录
<remote ip="10.0.0.18" name="backup"/> #备份目录,此处backup为备份服务器端定义[backup],使用ssh模式此处需改为真是路径
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsyncuser" passwordfile="/etc/rsync.pas"/> #开启认证用户,使用daemon模式,此用户为备份端定义用户auth users = rsyncuser,关闭此处选项,开启<ssh start="true"/>,更改为ssh模式
sersync -dro /var/local/serync/confxml.xml
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!