当前位置: 首页 > news >正文

Linux入门攻坚——34、nsswitch、pam、rsyslog和loganalyzer前端展示工具

nsswitch:network service switch

名称解析:name <---> id
认证服务:用户名、密码验证或token验证等

    名称解析和认证服务都涉及查找位置,即保存在哪里。如linux认证,passwd、shadow,是在文件中,还可能在数据库中等。名称解析中名称和对应的地址保存方式等。认证服务也可能用到名称解析服务,如Linux输入的是用户名,认证时是解析成id在认证密码。

以解析库为例,可能存储的方式:
  文件、MySQL、NIS、LDAP、DNS等
  那么一个解析程序要实现解析功能,就必须实现这几种存储方式的访问驱动,这将是很麻烦的事情。解决方法是做一个中间层——通用框架。
  做一个通用框架,通过配置文件,让这个框架灵活指定使用哪种存储。

对于一台主机中的通用框架,通常是提供一个库文件,方便各个程序使用。在前面学习自制Mini Linux时,使用dropbear用到认证时,就使用了这样的一种框架:nsswitch,提供的库是/usr/lib64/libnss3.so

然后,还能看到提供的不同的存储访问文件,如dns、file、nis、db等
所以,通用框架与各存储交互的实现是通过:
    /usr/lib64/libnss*,/lib64/libnss*
    具体是实现哪种存储访问,通过配置文件/etc/nsswitch.conf


这里,passwd、shadow、group等相当于数据库的名,后面的files等相当于实现,实现有很多种,如files,nis,dns,db等。
而实现有其默认值,如passwd的实现files,默认是/etc/passwd文件等
配置文件说明:配置文件中数据库名后的实现可以有多个,使用时按顺序依次查找
    db:  store1 store2  。。。
    每种存储中查找的结果状态:STATUS => success | notfound | unavail | tryagain
    对于每种状态参数的行为:ACTION => return | continue
    示例:  host:files nis [NOTFOUND=return] dns,对主机名的解析,先从file中查找,没有找到,即状态为NOTFOUND,行为采取默认continue,就是继续找下一个存储,即nis,如果nis中也没有找到,即状态为NOTFOUND,默认是继续去找dns,这里设置了[NOTFOUND=return],就改变了nis的行为,找不到就返回了,不找了。这个写法与直接去掉后面的dns的区别是,如果nis不存在,而不是查找找不到,那么就查找后面的dns。

配置文件中services配置的是files,默认就是找/etc/services,hosts配置的files,默认找/etc/hosts,netstat命令,使用-tnl选项,不进行地址和端口的解析,使用-tl,将解析地址和端口,此时就用到了nsswitch,将地址和端口进行了解析。

可用通过命令来查找对应的数据库中的信息:getent database [netry]

pam:pluggable authentication module,插入式认证模块

pam与nsswitch类似,nsswitch是实现名称解析的通用框架,而pam是实现认证的通用框架。

认证时密码的存储方式和位置各种各样,对于实现认证的程序来说,也面临多种存储驱动的问题。

认证库:文件、MySQL、LDAP、NIS  。。。
通用框架:与各存储交互的实现,以及各种辅助性功能,如密码认证通过,但是用户是被锁定状态,也不能允许认证通过,再比如,修改密码是的复杂度不符合时的处理等。
pam所在位置:/lib64/security/

每个模块实现一种功能,实际使用中可能要配置使用多个模块,实现一种功能组合。

配置文件:/etc/pam.conf/etc/pam.d/*.conf
通常每个应用使用一个单独的配置文件,如登录,使用/etc/pam.d/login,su使用/etc/pam.d/su
通常是一个规则栈。

配置文件中每行定义一种检查规则:
格式:type   control    module-path  module-arguments
  type:检查功能类别。
         auth:账号的认证和授权
         account:与账号管理相关的非认证功能
         password:用户修改密码时密码检查规则
         session:用户获取到服务之前或使用服务完成之后要进行的一些附加性操作
  control:同一种功能的多个检查之间如何进行组合;
    有两种实现机制:
        1、使用一个关键词来定义:如sufficient,required,requisite;
        2、使用一或多个“status=action”形式的组合表示
    简单机制:
        required:表示本模块必须返回成功才能通过认证。但是如果该模块返回失败的话,失败结果也不会立即通知用户,而是要等到同一stack中的所有模块全部执行完毕再将失败结果返回给应用程序。可以认为是一个必要条件。
        requisite:与required类似,该模块必须返回成功才能通过认证。但是一旦该模块返回失败,将不再执行同一stack内的任何模块,而是直 接将控制权返回给应用程序。是一个必要条件。
        sufficient:表明本模块返回成功已经足以通过身份认证的要求,不必再执行同一stack内的其它模块,但是如果本模块返回失败的话可以忽略。可以认为是一个充分条件。
        optional:表明本模块是可选的,它的成功与否一般不会对身份认证起关键作用,其返回值一般被忽略。
        include:调用其他的配置文件中定义的配置项。
    复杂机制:[status1=action1,status2=action2,...]
        status:返回状态,ok,。。。
        action:ok,done,die,ignore,bad,reset
    module-path:模块路径:
        /lib64/security/:此目录下的模块引用时可使用相对路径
    module-arguments:模块参数

模块:
    (1)pam_shells.so,检查是否是安全的shell。
    (2)pam_limits.so,模块通过读取配置文件完成用户对系统资源的使用控制
        /etc/security/limits.conf
        /etc/security/limits.d/*
      <domain> <type> <item> <value>
        <domain>:username@group*(所有用户)
        <type>:softhard(由root设定,通过kernel强制生效);软限制和硬限制;-:二者同时限定
        <item>:nofile-所能够同时打开的最大文件数量,nproc-所能够同时运行的最大进程数量;
            msqqueue:使用的POSIX消息队列能够占用的最大内存空间;
            sigpending:所能够使用的最大信号数量;
        <value>:

ulimit -n #:文件数量
ulimit -u #:进程数量

PAM的配置文件,有点类似网络安全配置中的ACL,只不过PAM更复杂。
对于同一种类型(type),如auth,可能有多行auth,每行的module不一样,实现的功能不一样,即多行相同的type实现了一个功能组,对于多行auth,还有一个问题是这一行认证通过或不通过以后,对后续行的操作的规定(或说影响),这就是control来规定的。

做一个简单的测试:对sshd服务,其PAM配置文件如下:

添加一个用户:设置其shell为tcsh

以此用户远程ssh登录:

可以登录成功。然后修改/etc/pam.d/sshd,在第一行添加:
auth       required     pam_shells.so
意思是使用pam_shells.so进行安全shell的验证。
然后testpam退出重新登录,依然可以登录系统:

将/etc/shells中的tcsh注释掉:

再次登录,无法登录系统,

因为testpam的shell是/bin/tcsh,而这个shell因为没有在/etc/shells中,说明是不安全的shell,而pam_shells.so就是验证是否是安全shell,因为不是了,所以,拒绝登录。

rsyslog:日志

系统主要的日志类型:历史日志。(其他的还有如数据库的事务日志等)
    历史事件:记录什么样的事项,要根据日志的级别。
        日志级别:事件的关键性程度,loglevel
        日志中都记录哪些信息:时间,事件,...
系统日志服务:为各应用程序记录日志,是操作系统提供的一个公共的日志系统,为一些小的应用提供日志功能,而不需要每个应用单独编写日志功能。
    syslog:(centos5)
        syslogd:system,主要为用户空间的进程记录日志
        klogd:kernel,为内核进程记录日志

rsyslog:(centos6提供的日志功能) 也包括  syslogd和klogd:不但能为本地主机,而且能够为远程主机记录日志,集中式日志管理功能。其特点如下
    多线程:
    支持UDP,TCP,SSL,TLS,RELP等协议
    MySQL,PGSQL,Oracle实现日志存储;
    强大的过滤器,可实现过滤日志信息中任何部分;
    自定义输出格式;
elasticsearch(一个高性能分布式搜索和分析引擎,可用于日志分析),logstash(日志收集器),kibana(是为 Elasticsearch设计的开源分析和可视化平台,elasticsearch的前端)——elk

日志收集方:
  facility:设施,从功能或程序上对日志进行分类,多个应用(同一类)的日志流统一到一个统一的收集管道中,叫做facility。系统提供的facility:
    auth,authpriv,cron,daemon,kern,lpr,mail,mark,news,security,user,uucp,local0-local7,syslog
  priority:级别
    debug,info,notice,warn(warning),err(error),crit(critical),alert,emerg(panic)
   
指定级别:
      *:所有级别
      none:没有级别
      priority:此级别及更高级别的日志信息
      =priority:此级别本身
配置文件中:facility.priority   /var/log/message

程序环境:

主程序:/sbin/rsyslogd
配置文件:/etc/rsyslog.conf
服务脚本:/etc/rc.d/init.d/rsyslog
系统引导时的信息记录在/var/log/dmesg中。

配置文件rsyslog.conf说明:
  RULES:facility.priority    target
  target:
    文件路径:记录于指定的日志文件中,通常在/var/log下,路径前的“-”表示异步写入;
    用户:将日志通知给指定用户,*代表所有用户
    日志服务器:@host,host必须监听在tcp或udp协议514端口上提供服务;
    管道: | COMMAND

文件记录的日志的格式:
  事件产生的日期时间   主机   进程(pid):事件内容
有些日志记录二进制格式:/var/log/wtmp/var/log/btmp
  /var/log/wtmp:当前系统上成功登录的日志;last命令查看
  /var/log/btmp:当前系统上失败的登录尝试;lastb命令查看
lastlog命令:显示当前系统上每一个用户最近一次的登录时间;

rsyslog服务器:
  在rsyslog配置文件中,将监听打开,可以监听udp或tcp
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

配置后,重新启动服务:
service rsyslog restart

监听端口已经启动。

这样,其他主机就可以通过这些端口向此主机发送日志信息。

测试其他主机向此主机发送信息:
先要配置其他主机的/etc/rsyslog.conf,配置某日志的target,即存储位置为此主机
日志主机:192.168.147.130,客户端:192.168.147.129,配置129上的日志配置文件:


在客户端(129)上安装vsftp:yum install tree,在日志主机上:

可以看到,客户端日志信息已经开始被记录在日志主机上了。
注意:日志主机上先关闭防火墙。service iptables stop

测试将日志记录在mysql数据库中:
mysql数据库建在129上(客户端主机),日志主机(130)上需要有mysql的驱动:

安装rsyslog-mysql:yum install rsyslog-mysql,安装后查看安装的文件:rpm -ql rsyslog-mysql

主要就是一个so文件。还有一个createDB.sql,是初始化日志库的SQL语句文件:

然后在mysql服务器上配置:
创建日志库的用户:

直接执行日志库的sql文件,初始化数据库:
# mysql -usyslogu -p123456 -h192.168.147.129 < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql 
至此,日志数据库的初始化完成。

在日志服务器上修改配置文件,加载mysql的驱动模块,配置target:

配置后重新启动服务。

此后的日志记录到mysql数据库中:select * from SystemEvents\G;

至此,日志服务存储到文件和存储到mysql中就配置完成。
loganalyzer:下一步,就是为基于mysql的日志服务配置一个日志前端展示应用:loganalyzer
1)下载:LogAnalyzer 3.6.6 
2)安装支持环境。LogAnalyzer就是一个php的web应用,链接mysql日志库,然后以各种方式展示或查询或分类日志,对日志分析,实现就是这样的一个功能。所以需要安装httpd、php等。
yum install httpd php php-mysql php-gd
3)测试httpd、php、mysql是否运行正常
编写测试页面:/var/www/html/index.php

注意:防火墙和selinux都需要关闭。
4)解压:tar xf loganalyzer-3.6.6

src下的内容拷贝到/var/www/html/log/下,将contrib下的文件也拷贝到/var/www/html/log/下,同时将拷贝过去的contrib下的文件(configure.sh  secure.sh),增加执行权限:
chmod +x *.sh
然后运行这两个程序:./configure.sh     ./secure.sh
5)修改配置文件权限:chmod 666 config.php
如果config.php不存在,这个命令将创建文件。
6)在浏览器上执行安装,即访问install.php

完成后,显示日志页面:

后面就是这个网站的使用了。

相关文章:

Linux入门攻坚——34、nsswitch、pam、rsyslog和loganalyzer前端展示工具

nsswitch&#xff1a;network service switch 名称解析&#xff1a;name <---> id 认证服务&#xff1a;用户名、密码验证或token验证等 名称解析和认证服务都涉及查找位置&#xff0c;即保存在哪里。如linux认证&#xff0c;passwd、shadow&#xff0c;是在文件中&…...

如何在Excel中快速找出前 N 名,后 N 名

有如下销售额统计表&#xff1a; 找出销售额排前 10 名的产品及其销售额&#xff0c;和销售额排倒数 10 名以内的产品及其销售额&#xff0c;结果如下所示&#xff1a; 前 10 名&#xff1a; spl("E(?1).sort(ProductSales:-1).to(10)",A1:C78)后 10 名&#xff1…...

创意实现!在uni-app小程序商品详情页轮播中嵌入视频播放功能

背景介绍 通过uni-app框架实现商城小程序商品详情页的视频与图片轮播功能&#xff0c;以提升用户体验和增加商品吸引力。通过展示商品视频和图片&#xff0c;用户可以更全面地了解商品细节&#xff0c;从而提高购买决策的便利性和满意度。这种功能适用于各类商品&#xff0c;如…...

WAF,全称Web Application Firewall,好用WAF推荐

WAF&#xff0c;全称Web Application Firewall&#xff0c;即Web应用防火墙&#xff0c;是一种网络安全设备&#xff0c;旨在保护Web应用程序免受各种Web攻击&#xff0c;如SQL注入、跨站脚本&#xff08;XSS&#xff09;、跨站请求伪造&#xff08;CSRF&#xff09;等。 WAF通…...

docker中搭建nacos并将springboot项目的配置文件转移到nacos中

前言 网上搜索docker中搭建nacos发现文章不是很好理解&#xff0c;正好最近在搭建nacos练手。记录一下整个搭建过程。文章最后附上了一些过程中遇到的问题&#xff0c;大家可以按需要查看。 docker中搭建nacos并将springboot项目的配置文件转移到nacos中 前言1 docker中下拉na…...

概率论原理

智慧挺不喜欢我&#xff0c;他告诉我需要有耐心&#xff0c;答案在后面&#xff1b;而我总想马上得到答案&#xff1b;但它也会给我奖励&#xff0c;因为我总会自己去寻找答案 B站 大大的小番茄 普林斯顿微积分 PDF 一化儿 BILIBILI 泰勒展开式 知乎https://www.zhihu.com…...

MYSQL的安装和升级

MySQL的RPM安装通常分为不同的包&#xff0c;包括Server、Common、Client、Devel、Libs、Libs-compat、Test、Source&#xff0c;请写出上述每个包的功能。 Server&#xff1a;包含MySQL服务器的核心文件和服务。安装此包后可以运行MySQL数据库服务器。 Common&#xff1a;包…...

深入解析 RISC-V 递归函数的栈使用:以阶乘函数为例

在处理递归函数时&#xff0c;RISC-V 体系架构的寄存器数量有限。为了确保每次递归调用能正确保存和恢复寄存器的状态&#xff0c;栈&#xff08;stack&#xff09;提供了灵活的解决方案。本文将结合具体的汇编代码和递归的阶乘函数 fact 来讲解 RISC-V 中如何利用栈进行寄存器…...

【保研纪念】计算机保研经验贴——南大cs、复旦cs、中南cs

文章目录 一、个人情况二、经验总结三、夏令营情况1、南京大学计算机学院&#xff08;5月31日-6月2日&#xff09;2、复旦大学计算机学院&#xff08;7月1日-7月4日&#xff09;3、中南大学计算机学院&#xff08;7月5日-7月7日&#xff09;4、武汉大学计算机学院 四、预推免情…...

TopOn对话游戏魔客:2024移动游戏广告应如何突破?

TopOn对话游戏魔客&#xff1a;2024移动游戏广告应如何突破&#xff1f; 近年来&#xff0c;游戏广告投放的成本日益走高&#xff0c;ROI如何回正&#xff0c;素材如何创新等问题困扰着每一个广告主。在隐私政策的实施下&#xff0c;广告投放难度也在不断升级。 据data.ai发布…...

Chainlit集成LlamaIndex实现知识库高级检索(BM25全文检索器)

检索原理 BM25Retriever类是一个基于BM25算法设计的检索器&#xff0c;它主要用于从一组文档或节点中检索出与查询最相关的文档或节点。这个类的设计目的是为了提高文本检索的效率和准确性&#xff0c;尤其是在处理大量文本数据时。 BM25&#xff08;Best Matching 25&#x…...

Dubbo入门案例

Dubbo 学习地址&#xff1a;Dubbo3 简介_w3cschool&#xff1b; 01-Dubbo入门案例 ​ 我们先来新建一个Dubbo的小案例来体验一下Dubbo的使用&#xff0c;我们先来创建一个springboot的项目。 1.1-zookeeper下载启动 ​ 在编写我们的入门案例之前&#xff0c;我们需要先去下…...

android设计模式的建造者模式,请举例

在Android开发中&#xff0c;建造者模式&#xff08;Builder Pattern&#xff09;是一种常用的设计模式&#xff0c;它主要用于构建复杂对象。建造者模式通过将复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。这种模式特别适用于那些需要多个…...

【探索智谱AI的CogVideoX:视频生成的新前沿】

2024年8月6日&#xff0c;智谱AI宣布其开源视频生成模型CogVideoX&#xff0c;激发了开发者的创造力和对新技术的期待。 一、CogVideoX模型概述 CogVideoX 是一款先进的视频生成工具&#xff0c;可基于最长 226 个 token 的提示生成视频&#xff0c;时长可达 6 秒&#xff0c;…...

ant design vue做表单验证及form表单外验证、父子嵌套多个表单校验

1、form表单验证(若有时遇到输入框有值但是还是触发验证规则了&#xff0c;请检查form表单绑定正确吗、校验规则正确吗、表格数据字段名正确吗) <a-form:model"formState":label-col"{ span: 8 }":wrapper-col"{ span: 16 }":rules"rul…...

爱速搭百度低代码开发平台

爱速搭介绍 爱速搭是百度智能云推出的低代码开发平台&#xff0c;它灵活性强&#xff0c;对开发者友好&#xff0c;在百度内部大规模使用&#xff0c;有超过 4w 内部页面是基于它制作的&#xff0c;是百度内部中台系统的核心基础设施。 它具备以下功能&#xff1a; 页面制作…...

2024icpc(Ⅱ)网络赛补题E

E. Escape 思路&#xff1a; 可以看成 Sneaker 和杀戮机器人都不能在原地停留&#xff0c;然后杀戮机器人有个活动范围限制。如果 Sneaker 和杀戮机器人可以在原地停留&#xff0c;那么 Sneaker 到达一个点肯定会尽可能早&#xff0c;而且时间必须比杀戮机器人到达这个点短。那…...

mac怎么设置ip地址映射

最近开发的项目分为了两种版本&#xff0c;一个自己用的&#xff0c;一个是卖出去的。 卖出的域名是和自己的不一样的&#xff0c;系统中有一些功能是只有卖出去的版本有的&#xff0c;但我们开发完之后还得测试&#xff0c;那就需要给自己的电脑配置一个IP地址映射了&#xf…...

StringReader 使用 JAXB自动将 XML 数据映射到 Java 对象

import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.StringReader; public class JAXBExample { public static void main(String[] args) { try { // 假设这是从某处获取的XML字符串 S…...

【系统架构设计师】专题:系统分析和设计

文章目录 一、处理流程设计1.1 流程表示工具1.2 业务流程重组BPR1.3 业务流程管理BPM二、系统设计三、人机界面设计四、结构化方法4.1 结构化分析(Structured Analysis,SA)。4.2 结构化设计(Structured Design,SD)。4.3 结构化编程(Structured Programming,SP)。4.4 数据库设…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

flow_controllers

关键点&#xff1a; 流控制器类型&#xff1a; 同步&#xff08;Sync&#xff09;&#xff1a;发布操作会阻塞&#xff0c;直到数据被确认发送。异步&#xff08;Async&#xff09;&#xff1a;发布操作非阻塞&#xff0c;数据发送由后台线程处理。纯同步&#xff08;PureSync…...