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

完成后,显示日志页面:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/434443.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024 年最新 Protobuf 结构化数据序列化和反序列化详细教程

Protobuf 序列化概述 Protobuf&#xff08;Protocol Buffers&#xff09;是由Google开发的一种语言中立、平台中立、可扩展的序列化结构数据的方法。它用于在不同系统之间高效地交换数据。Protobuf使用定义文件&#xff08;.proto&#xff09;来描述数据结构&#xff0c;并通过…

HTML5+JavaScript绘制闪烁的网格错觉

HTML5JavaScript绘制闪烁的网格错觉 闪烁的网格错觉&#xff08;scintillating grid illusion&#xff09;是一种视觉错觉&#xff0c;通过简单的黑白方格网格和少量的精心设计&#xff0c;能够使人眼前出现动态变化的效果。 闪烁的栅格错觉&#xff0c;是一种经典的视觉错觉…

GreenPlum数开手册【语法篇】

GreenPlum数开手册 一、数据类型 1、基本数据类型 类型长度描述范围bigint8字节大范围整数-9223372036854775808 到 9223372036854775807smallint2字节小范围整数-32768到32767integer(int)4字节常用整数-2147483648 到 2147483647decimal可变长用户指定的精度&#xff0c;精…

Android手机投屏方案实现方式对比

文章目录 1.概述2.术语解释2.1 miracast2.2 scrcpy2.4 Wifi Direct2.5 app_process 3.技术实现对比3.1 Miracast3.1.1 Miracast介绍3.1.2 Miracast原理3.1.3 Miracast优缺点分析 3.2 Scrcpy3.2.1 scrcpy 介绍3.2.2 scrcpy的实现原理3.2.3 scrcpy的优缺点分析 3.3 Google cast3.…

在IDEA中构建Jar包,安装Jar包到Maven仓库并在Maven项目中使用

文章目录 0. 关于本文1. IDEA构建Jar包1.1 准备一份Java代码&#xff08;就是你要构建工件的代码&#xff09;1.2 进行如下步骤构建工件 2. 关于Maven3. 将Jar包安装到Maven仓库4. 使用安装的Jar包依赖 0. 关于本文 本文内容&#xff1a; 借助IDEA构建Jar包将Jar包安装到Mave…

青动CRM V3.2.1

全面解决企业销售团队的全流程客户服务难题旨在助力企业销售全流程精细化、数字化管理&#xff0c;全面解决企业销售团队的全流程客户服务难题&#xff0c;帮助企业有效盘活客户资源、量化销售行为&#xff0c;合理配置资源、建立科学销售体系&#xff0c;提升销售业绩。标准授…

shell脚本使用==判断相等报错

文章目录 方法 1&#xff1a;使用 比较符方法 2&#xff1a;强制使用 bash 这个错误的原因是你使用了 比较符&#xff0c;而 /bin/sh (或一些系统的默认 sh 解释器) 可能不支持它。对于 POSIX 兼容的 shell&#xff08;如 /bin/sh&#xff09;&#xff0c;应该使用单个等号…

LeetCode[简单] 136. 只出现一次的数字

给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 思路 当 A 与 B 不同时&#xff0c;按…

2024CSCO 芦康沙妥珠单抗创造晚期TNBC二线治疗新高度

前言 “魔法子弹”的概念从上世纪初提出&#xff0c;经过一百多年的不断探索&#xff0c;抗体药物偶联物&#xff08;ADC&#xff09;从理想照进现实&#xff0c;达到今天百舸争流的盛况&#xff0c;被认为是极具前景的创新疗法&#xff0c;全球范围内已有十余款产品被批准用于…

友元运算符重载函数

目录 1.定义友元运算符重载函数的语法形式 2.双目运算符重载 3.单目运算符重载 1.定义友元运算符重载函数的语法形式 &#xff08;1&#xff09;在类的内部&#xff0c;定义友元运算符重载函数的格式如下&#xff1a; friend 函数类型 operator 运算符&#xff08;形参表&a…

开源标注工具

DoTAT https://github.com/FXLP/MarkTool 后端代码未开放&#xff0c;可能有数据泄露风险 Chinese-Annotator https://github.com/deepwel/Chinese-Annotator 安装非常麻烦&#xff0c;github更新频率比较低&#xff0c;支持功能和doccano类似 IEPY https://github.com/ma…

国庆假节高速免费通行全攻略

关注▲洋洋科创星球▲一起成长&#xff01; 国庆节假期全国收费公路继续对7座以下&#xff08;含7座&#xff09;小型客车免收车辆通行费。 具体免费时段从 10月1日00&#xff1a;00开始 10月7日24&#xff1a;00结束 01 提前出发&#xff0c;免费离开&#xff1a; 如果你在…

Win10系统使用mstsc远程电脑的时候发现隔一段时间就无法使用剪贴板_rdpclip---Windows运维工作笔记055

最近在使用温湿系统的远程桌面功能的时候发现,每当使用一段时间的时候,这个时候远程桌面功能的粘贴板就没办法使用了。 正常情况下,不管我一个电脑远程了多少台电脑,那么这些电脑之间都是可以使用粘贴板的,可以用来从一个电脑中截了图,然后粘贴到另一个电脑中。 但是现…

HuggingChat macOS 版现已发布

Hugging Face 的开源聊天应用程序 Hugging Chat&#xff0c;现已推出适用于 macOS 的版本。 主要特点 Hugging Chat macOS 版本具有以下亮点: 强大的模型支持: 用户可以一键访问多个顶尖的开源大语言模型&#xff0c;包括 Qwen 2.5 72B、Command R、Phi 3.5、Mistral 12B 等等&…

Mathematica线性优化-单纯形/改善单纯形/内点法

引言 Mathematica提供了多种工具和函数来实现线性优化&#xff0c;这些工具可以处理从简单的线性规划问题到复杂的多变量优化问题&#xff0c;最近运筹学作业要熟悉线性优化的编程方法&#xff0c;我们就使用mathematica进行&#xff1a;所有运行代码都在文章上面的资源中&…

【线程】线程池

线程池通过一个线程安全的阻塞任务队列加上一个或一个以上的线程实现&#xff0c;线程池中的线程可以从阻塞队列中获取任务进行任务处理&#xff0c;当线程都处于繁忙状态时可以将任务加入阻塞队列中&#xff0c;等到其它的线程空闲后进行处理。 线程池作用&#xff1a; 1.降…

MySQL 中的 FOREIGN KEY 约束:确保数据完整性的关键

在 MySQL 数据库中&#xff0c;FOREIGN KEY&#xff08;外键&#xff09;约束是一种非常重要的机制&#xff0c;它可以帮助我们确保数据的完整性和一致性。那么&#xff0c;FOREIGN KEY 约束究竟是什么呢&#xff1f;让我们一起来深入了解一下。 一、什么是 FOREIGN KEY 约束&…

帆软通过JavaScript注入sql,实现数据动态查询

将sql语句设置为参数 新建数据库查询 设置数据库查询的sql语句 添加控件 JavaScript实现sql注入 添加事件 编写JavaScript代码 //获取评价人id var pjrid this.options.form.getWidgetByName("id").getValue();//显示评价人id alert("评价人&#xff1a;&…

设计模式之策略设计模式

一、状态设计模式概念 策略模式&#xff08;Strategy&#xff09; 是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 适用场景 当你想使用对象中各种不同的算法变体&#xff0c; …

Vue|插件

在 Vue.js 中&#xff0c;插件是用来扩展 Vue 功能的一种方式&#xff0c;能够帮助开发者扩展和复用功能。通过合理使用插件&#xff0c;可以提高代码的组织性和可维护性 目录 如何使用插件?插件的定义创建及使用插件插件的参数插件的扩展 总结 如何使用插件? 插件的定义 插…