Rootop 服务器运维与web架构

2024-04-18
发表者 Venus
udev自定义设备名称已关闭评论

udev自定义设备名称

测试环境 almalinux9.3

规则配置文件必须以 .rules 为后缀名
udev按照配置文件名的字母顺序来查询全部规则文件,匹配到后会继续匹配其他规则文件。

在规则文件里,除了#开头的行,所有的非空行都为一条规则,一条规则不能扩展到多行。
规则由多个键值对组成,并由逗号隔开,键值对可以分为"条件匹配键值对"(以下简称 "匹配键" )和"赋值键值对"(以下简称 "赋值键"),一条规则可以有多条匹配键和多条赋值键。
匹配键是匹配一个设备属性的所有条件,当一个设备的属性匹配了该规则里所有的匹配键,就认为这条规则生效,然后按照赋值键的内容,执行该规则的赋值。


匹配键:
ACTION          事件(uevent)的行为,例如:add(添加设备)、remove(删除设备),udev守护进程帧听来自内核的uevent
KERNEL          内核设备名称,例如:sda,cdrom;
DEVPATH         设备的 devpath 路径;
SUBSYSTEM       设备的子系统名称,例如:sda 的系统为 block;
BUS             设备在 devpath 里的总线名称,例如:usb;
DRIVER          设备在 devpath 的设备驱动名称,例如:ide-cdrom;
ID              设备在 devpath 里的识别号;
SYSFS{filename} 设备的 devpath 路径下,设备的属性文件 "filename" 里的内容;
ENV{key}        环境变量。在一条规则中,可以设定最多五条环境变量的 匹配键;
PROGRAM         调用外部命令;
RESULT          外部命令 PROGRAM 的返回结果。

操作符:
==  比较键、值,若等于,则该条件满足;
!=  比较键、值,若不等于,则该条件满足;
=   对一个键赋值;
+=  为一个表示多个条目的键赋值;
:=  对一个键赋值,并拒绝之后所有对该键的改动。目的是防止后面的规则文件对该键赋值。

赋值键:
NAME     在 /dev 下产生的设备文件名。只有第一个对某个设备的 NAME 的赋值行为生效,之后匹配的规则再对设备的 NAME 赋值行为将被忽略。如果没有任何规则对设备的 NAME 赋值,udev 将使用内核设备名称来产生设备文件;
SYMLINK  为 /dev/ 下的设备文件产生符号链接。由于 udev 只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的 udev 规则所产生的文件,推荐使用符号链接。
OWNER,GROUP,MODE 为设备设定权限;
ENV{key} 导入一个环境变量。



1、查看usb设备的厂商id和设备id
[root@localhost rules.d]# lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port / Mobile Action MA-8910P
Bus 001 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

ID   067b:2303
VENDOR_ID:MODEL_ID

2、根据厂商id或设备id去udev里匹配
[root@localhost rules.d]# udevadm info /dev/* | grep -C 20 2303

找到 DEVNAME|ID_VENDOR_ID|ID_MODEL_ID|SUBSYSTEM|ID_PATH 这几个字段用于配置自定义设备名称

规则配置文件路径 /etc/udev/rules.d

# 根据ID_PATH作为匹配条件
[root@localhost rules.d]# cat usb2console.rules 
SUBSYSTEM=="tty", ENV{ID_PATH}=="pci-0000:02:00.0-usb-0:2.1:1.0",SYMLINK+="usb2consoleline"

# 根据厂商设备id作为匹配条件
[root@localhost rules.d]# cat usb.rules 
SUBSYSTEM=="tty", ENV{ID_VENDOR_ID}=="239a", ENV{ID_MODEL_ID}=="80f4",SYMLINK+="usb-pi"
SUBSYSTEM=="tty", ENV{ID_VENDOR_ID}=="067b", ENV{ID_MODEL_ID}=="2303",SYMLINK+="usb-consoleline"

取子系统SUBSYSTEM等于tty,且变量ID_VENDOR_ID等于xxx,且变量ID_MODEL_ID等于xxx时,设置赋值键symbol link等于xxx

重插拔usb测试,查看/dev/usb-*的自定义名称

参考:https://blog.csdn.net/u014674293/article/details/121627305

2024-04-12
发表者 Venus
windows route命令配置路由已关闭评论

windows route命令配置路由

通过route命令可以设置自定义路由,如通往指定网段走指定网关,默认访问公网走另一个网关。

# 持久化路由保存在注册表中,位置如下:
计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes

# 持久化路由规则 -p 参数
PS C:\Windows\system32> route add 192.168.0.0 mask 255.255.0.0 192.168.6.1 -p
 操作完成!

# 只打印ipv4路由表 
PS C:\Windows\system32> route print -4
===========================================================================
接口列表
  2...00 0c 29 97 98 56 ......Intel(R) 82574L Gigabit Network Connection
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
          0.0.0.0          0.0.0.0      192.168.6.1     192.168.6.53     25
        127.0.0.0        255.0.0.0            在链路上         127.0.0.1    331
        127.0.0.1  255.255.255.255            在链路上         127.0.0.1    331
  127.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
      192.168.0.0      255.255.0.0      192.168.6.1     192.168.6.53     26
      192.168.6.0    255.255.255.0            在链路上      192.168.6.53    281
     192.168.6.53  255.255.255.255            在链路上      192.168.6.53    281
    192.168.6.255  255.255.255.255            在链路上      192.168.6.53    281
        224.0.0.0        240.0.0.0            在链路上         127.0.0.1    331
        224.0.0.0        240.0.0.0            在链路上      192.168.6.53    281
  255.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
  255.255.255.255  255.255.255.255            在链路上      192.168.6.53    281
===========================================================================
永久路由:
  网络地址          网络掩码  网关地址  跃点数
      192.168.0.0      255.255.0.0      192.168.6.1       1
===========================================================================

# 删除路由
PS C:\Windows\system32> route delete 192.168.0.0 mask 255.255.0.0
 操作完成!
 

# 添加2条测试规则 
PS C:\Windows\system32> route add 10.1.1.0 mask 255.255.255.0 10.1.1.1
 操作完成!
PS C:\Windows\system32> route add 10.1.2.0 mask 255.255.255.0 10.1.2.1 -p
 操作完成!
 
# 打印路由,通配符匹配  -4为只显示ipv4协议栈
PS C:\Windows\system32> route print 10.1.* -4
===========================================================================
接口列表
  2...00 0c 29 97 98 56 ......Intel(R) 82574L Gigabit Network Connection
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
         10.1.1.0    255.255.255.0         10.1.1.1     192.168.6.53     26
         10.1.2.0    255.255.255.0         10.1.2.1     192.168.6.53     26
===========================================================================
永久路由:
  网络地址          网络掩码  网关地址  跃点数
         10.1.2.0    255.255.255.0         10.1.2.1       1
===========================================================================

2024-04-08
发表者 Venus
rsyslog中定义日志路径配置参数解释已关闭评论

rsyslog中定义日志路径配置参数解释

在ubuntu中要看ssh登录日志会发现是没有secure日志文件的,而是auth.log文件,实际这是由于centos和ubuntu配置的日志名称不一样。
下面是两者的区别。

# ubuntu中的配置
auth,authpriv.*			/var/log/auth.log
*.*;auth,authpriv.none		-/var/log/syslog
kern.*				-/var/log/kern.log
mail.*				-/var/log/mail.log
mail.err			/var/log/mail.err
*.emerg				:omusrmsg:*

# centos中的配置
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

# 参数解释

# *.* 含义
第一个*代表所有设施代码
以下是一些常见的日志设施:
kern - 内核消息
user - 用户级别消息
mail - 邮件系统
daemon - 系统守护进程
auth - 安全/认证消息
syslog - syslogd 生成的消息
lpr - 行打印子系统
news - 网络新闻子系统
uucp - UUCP 子系统
cron - 计划任务子系统
authpriv - 安全/认证消息(私有)
ftp - FTP 守护进程

第二个*代表日志级别
在 syslog 中,每条日志消息都会根据其重要性被赋予一个优先级。这些优先级从最高到最低依次是:
emerg(紧急): 表示系统不可用的紧急情况。
alert(警报): 需要立即采取行动的情况。
crit(严重): 表示重要系统组件的严重问题。
err(错误): 非紧急的故障。
warning(警告): 警告信息,可能会导致错误。
notice(通知): 正常但值得注意的事件。
info(信息): 一般性的信息性消息。
debug(调试): 调试信息,通常只在开发时使用。

# none含义
auth.none表示不记录任何auth设施代码的日志消息。用于排除特定设施代码的日志,以避免重复记录或将其记录到不同的文件中。
例如,在配置*.*;auth,authpriv.none -/var/log/syslog中,
*.*会匹配所有消息,但是auth,authpriv.none会排除所有auth和authpriv设施的日志,这样它们就不会被记录

# , ; 逗号分号含义
逗号代表“和”的关系,比如auth,authpriv.* 就是auth和authpriv的所有级别日志
分号代表“排除”,比如*.*;auth,authpriv.none就是匹配所有设施代码的所有级别日志,但是排除auth和authpriv的所有日志

# - 减号含义
在rsyslog配置文件中,减号 - 代表使用异步方式写入日志。
这意味着日志消息会先被存储在内存中,然后在稍后的某个时间点批量写入磁盘。
这种方法可以减少磁盘I/O操作,提高性能,但如果系统突然崩溃,可能会丢失那些还没有被写入磁盘的日志消息

设施代码是在rsyslog配置中用来指定日志消息来源的标识符。这些代码帮助将日志消息分类,以便于管理和分析。
在UNIX和类UNIX系统中,日志消息被分为不同的设施,每个设施代表了系统的一个特定部分或者应用程序。
例如,kern代表内核消息,mail代表邮件系统消息,而auth代表认证系统消息。这些设施代码是根据标准和系统实现预定义的
而local0到local7是为本地使用保留的,可以由系统管理员自定义用途。

2024-04-08
发表者 Venus
ubuntu中修改mysql的datadir目录启动失败Permission denied已关闭评论

ubuntu中修改mysql的datadir目录启动失败Permission denied

在Ubuntu中atp安装的mysql,默认数据目录在/var/lib/mysql ,添加了一块硬盘,需要将数据目录改为独立硬盘中。
修改mysql配置文件后重启报错,提示权限拒绝,修改了目录属主属组仍旧不行。

root@iZwz9g269i424nee31ly7yZ:/mysql/data# systemctl status mysql
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sun 2024-04-07 17:14:53 CST; 10s ago
    Process: 891921 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
    Process: 891929 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)
   Main PID: 891929 (code=exited, status=1/FAILURE)
     Status: "Server shutdown complete"
      Error: 13 (Permission denied)

Apr 07 17:14:53 iZwz9g269i424nee31ly7yZ systemd[1]: mysql.service: Scheduled restart job, restart counter is at 5.
Apr 07 17:14:53 iZwz9g269i424nee31ly7yZ systemd[1]: Stopped MySQL Community Server.
Apr 07 17:14:53 iZwz9g269i424nee31ly7yZ systemd[1]: mysql.service: Start request repeated too quickly.
Apr 07 17:14:53 iZwz9g269i424nee31ly7yZ systemd[1]: mysql.service: Failed with result 'exit-code'.
Apr 07 17:14:53 iZwz9g269i424nee31ly7yZ systemd[1]: Failed to start MySQL Community Server.

最终发现是apparmor这个服务导致的,apparmor是与selinux类似的访问控制机制。

root@iZwz9g269i424nee31ly7yZ:~# cat /etc/apparmor.d/usr.sbin.mysqld 
将
# Allow data dir access
  /var/lib/mysql/ r
  /var/lib/mysql/** rwk

改为
# Allow data dir access
  /mysql/data/ r,
  /mysql/data/** rwk,

# 重启apparmor及mysql
root@iZwz9g269i424nee31ly7yZ:~# /etc/init.d/apparmor restart
root@iZwz9g269i424nee31ly7yZ:~# systemctl restart mysql

2024-04-08
发表者 Venus
rsyslog日志收集已关闭评论

rsyslog日志收集

# 日志收集端,存放客户端发送过来的日志

1、开启tcp接收
[root@localhost ~]# cat /etc/rsyslog.conf |grep -vE "^#|^$" | grep 514
$InputTCPServerRun 514

2、创建配置文件,定义存储路径。
[root@localhost ~]# cat /etc/rsyslog.d/119.conf 
$template NginxLog, "/var/log/nginx/%FROMHOST-IP%/%$YEAR%-%$MONTH%-%$DAY%/%PROGRAMNAME%.log"
if $programname == 'nginx-access' then -?NginxLog
if $programname == 'nginx-error' then -?NginxLog

%FROMHOST-IP% 以客户端ip命名目录
%$YEAR%-%$MONTH%-%$DAY% 年月日命名目录
%PROGRAMNAME%.log" 等于客户端中InputFileTag的值

最终效果如下:
[root@localhost ~]# ll /var/log/nginx/192.168.6.119/2024-04-07/*
-rw------- 1 root root 1997 Apr  7 02:10 /var/log/nginx/192.168.6.119/2024-04-07/nginx-access.log
-rw------- 1 root root 1694 Apr  7 02:10 /var/log/nginx/192.168.6.119/2024-04-07/nginx-error.log
目录会自动创建,不需要手动提前建好。

[root@localhost ~]# systemctl restart rsyslog

# 日志发送端

[root@localhost ~]# cat /etc/rsyslog.d/nginx.conf 
$ModLoad imfile
$InputFilePollInterval 5
$WorkDirectory /var/spool/rsyslog
$PrivDropToGroup root

$InputFileName /var/log/nginx/access.log
$InputFileTag nginx-access:
$InputFileStateFile stat-nginx-access
$InputFileSeverity info
$InputFilePersistStateInterval 25000
$InputRunFileMonitor

$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-error:
$InputFileStateFile stat-nginx-error
$InputFileSeverity info
$InputFilePersistStateInterval 25000
$InputRunFileMonitor
*.* @@192.168.6.114:514

# @@是以tcp方式发送到目标ip的514端口。