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

深圳网站建设大公司网站模块源码

深圳网站建设大公司,网站模块源码,互联网保险的特点有哪些,一个网站的年维护费audispd调研 1 问题背景 在Linux中#xff0c;当某个进程调用audit_set_pid将自己的pid保存到内核的audit模块后#xff0c;如果有日志生成#xff0c;kaudit内核线程就会通过netlink通信机制将审计日志发送给audit_pid#xff0c;因此#xff0c;只能有一个进程占用aud…audispd调研 1 问题背景 在Linux中当某个进程调用audit_set_pid将自己的pid保存到内核的audit模块后如果有日志生成kaudit内核线程就会通过netlink通信机制将审计日志发送给audit_pid因此只能有一个进程占用audit并接收audit日志那如果有另一个进程已经占用audit呢例如auditd或者其他组件。 一种方式是可以将选择权交给用户用户可以看到当前占用audit的进程然后再决定是否将已经占用audit的进程杀死然后进行占用。另一种方式是如果用户已经在使用auditd接收日志是否有一种方式可以让auditd在运行的同时我们也能够接收和处理日志呢这种场景下就可以使用audispd。 2 audispd audispd是作为auditd的子进程运行而audispd会开启一些插件用于接收审计日志例如syslog或者sedispatch等也就是说日志转发路径变成了 kauditd - auditd - audispd - af_unix/syslog/sedispatch 下面逐个看下配置文件。 auditd.conf local_events yes write_logs yes // 将日志写入磁盘 log_file /var/log/audit/audit.log log_group root log_format RAW flush INCREMENTAL_ASYNC // 刷新模式当前为异步增量刷新模式 freq 50 // 接收到多少条日志后就写入磁盘 max_log_file 8 // 日志文件大小8MB num_logs 5 // 最大文件个数 priority_boost 4 // disp_qos lossy dispatcher /sbin/audispd // 将审计日志转发的目的进程的文件名以上是auditd.conf中的部分配置项除了控制auditd写入日志文件的配置项还有与日志转发相关的两个配置项dispatcherdisp_qos其中dispatcher是负责日志转发的组件auditd在启动后会拉起该程序然后将收到的日志转发给该程序该程序可以从标准输入读取审计日志disp_qos则是控制当审计日志太多时auditd和dispatcher之间的行为auditd和dispatcher之间有一个128K的队列当队列满时日志会被丢弃(lossy)或者auditd会等待队列有空间可以放入(lossless)。 audispd.conf q_depth 250 // 队列深度 overflow_action SYSLOG // 当内部队列满时的行为当前值表示会写入一条syslog的日志 priority_boost 4 // max_restarts 10 // 重启插件的最大次数 name_format HOSTNAME // 节点信息如何插入日志中当前值表示会将HOSTNAME写入到日志中 plugin_dir /etc/audisp/plugins.d/ // 插件的路径在plugin_dir目录下存放的就是插件的配置每个配置项告诉audispd应该如何转发日志例如af_unix.conf active no // 是否启用yes/no direction out // path builtin_af_unix // 插件二进制的绝对路径对于内部插件就是插件的名称内部插件有af_unix和syslog type builtin // 类型builtin/always args 0640 /var/run/audispd_events // 参数 format string // 格式binary/string从插件类型看总共有三种类型 内部插件的af_unixaudispd将审计日志发送给unix套接字 内部插件的syslogaudispd将审计日志发送给syslog 外部插件audispd将审计日志发送给某个程序的标准输入 从上面对几个配置文件进行分析可以发现auditd和audispd只是作为审计日志转发的中间组件并且使用队列作为中间缓冲而对于内核的日志发送者来说日志的接收者只有auditd。 从几个组件的启动方来看auditd负责拉起audispdaudispd负责拉起always类型的插件。 因此如果在某些场景下希望与auditd同时运行且获取审计日志可以使用audispd的af_unix插件但是可能存在其他问题 规则是全局的多个程序都只设置自己的规则每个程序都会收到所有的数据对于新增af_unix插件的操作如果插件的目录是默认的当然没有问题如果是其他路径可能无法获取到插件目录audispd增加新的af_unix插件后需要重启auditd才能生效如果agent启动一段时间后出现问题退出就会导致频繁kill auditd会造成启动失败如果其他非auditd程序正在使用audit那就无法使用audispd如果audispd没有启动可能是由于启动异常也可能是由于没有需要启动的插件如何区分 3 高版本中的audispd 如何查看auditd的版本号auditd自身没有提供查看版本号的选项只能通过日志或者包管理工具查看auditd的版本号。 CentOS中在/var/log/messages中会打印auditd的版本号也可以通过rpm -qi audit查看版本号。对于ubuntu类在/var/log/kern.log中没看到auditd的版本号但是可以通过dpkg -l | grep auditd查看版本号。 audit-userspace仓库的标签最早只有2.7.4这个版本已经有audispd而从3.0.0开始audispd作为auditd的一个线程工作因此auditd就包含了audispd原有的能力。 4 audispd引入的性能问题 由于使用audispd进行日志中转在中转过程中引入了两个队列 auditd和audispd之间有一个128K的缓存队列disp_qos用于控制缓存队列满的行为audispd内部会维护一个队列q_depth用于控制队列的长度 测试环境 CentOS 7.5(3.10.0-1160.102.1.el7.x86_64)4C8Gaudit: backlog_limit8192 只启动auditdaudispd没有配置插件 是否丢弃日志可以通过查看auditctl -s中的lost或者/var/log/messages日志文件。 事件量级(eps)是否丢弃日志系统CPU1000NO1.3%5000NO5%6000NO6%7000NO7%8000YES8%9000YES10%10000YES10% 启动auditdaudispd开启af_unix插件并使用socat命令接收审计日志 使用socat - UNIX-CONNECT:/var/run/audispd_events命令接收审计日志是否丢弃日志可以查看/var/log/messages中的dispatch err (pipe full) event lost日志。 事件量级(eps)q_depth是否丢弃日志系统CPU备注50080NO2%500250NO2%5005000NO2%100080YES4%1000250YES4%10005000YES4%用例执行3分钟开始丢弃日志 不启动auditd使用其他程序占用并接收审计日志 #include stdio.h #include libaudit.h #include errno.hint main() {pid_t pid getpid();printf(current pid%d\n, pid);int fd audit_open();int ret 0;ret audit_set_pid(fd, pid, WAIT_YES);if(ret0) {perror(audit set_pid failed: );}ret audit_set_backlog_limit(fd, 8192);if(ret0) {perror(audit_set_backlog_limit failed: );}struct audit_reply audit_rep;struct sockaddr_nl local_addr;memset(local_addr, 0, sizeof(local_addr));local_addr.nl_family AF_NETLINK;do {fd_set read_mask;FD_ZERO(read_mask);FD_SET(fd, read_mask);ret select(fd 1, read_mask, NULL, NULL, NULL);if(ret 0 ) {break;}ret audit_get_reply(fd, audit_rep,GET_REPLY_NONBLOCKING, 0);audit_rep.msg.data[audit_rep.len] \0;printf(recv audit msg: %s\n, audit_rep.msg.data);} while(1);audit_close(fd); }如果保留上面的代码中的printf语句事件量级只能到1000eps2000eps就开始丢弃日志如果将printf语句注释事件量级则可以到9000eps。 从上面的测试结果可以得出以下结论 auditd和audispd之间的队列对目标程序接收审计日志的影响很大完全限制了处理的审计日志量级audispd内部的q_depth参数对审计日志量级影响不大测试时可以忽略性能排序直接读取审计日志并快速处理 启动auditd但不启动audispd 启动audispd转发日志 5 audispd源码解析 auditd中与audispd相关的逻辑有两个地方 audispd的拉起auditd接收审计日志并将审计日志发送给audispd 在auditd的main函数中会调用init_dispatcher()拉起dispatcher也就是audispd。 init_dispatcher()会干下面三件事 使用socketpair创建两个socket保存到disp_pipe根据qos选项设置socket的O_NONBLOCK如果qos设置为lossy则将disp_pipe中的socket设置为O_NONBLOCK否则就不设置使用fork和execl在子进程启动dispatcher并且在执行execl之前将disp_pipe[0]设置到stdin上这样dispatcher的stdin就是disp_pipe[0] 拉起audispd后会执行audit_set_pid占用audit然后设置audit fd的事件处理函数netlink_handler。在netlink_handler中会调用audit_get_reply读取数据在收到审计日志后调用distribute_event进行事件的分发。distribute_event调用dispatch_event发送审计日志并且调用handle_event将日志写入到本地磁盘。 dispatch_event()调用writev将数据写入到dispatcher由于disp_pipe[0]对应的是dispatcher的stdin因此调用writev将数据写入disp_pipe[1]时dispatcher就可以收到数据在多次尝试后失败就会进行错误处理此处有三种情况 如果错误码是EAGAIN并且是第一次调用dispatch_event则直接返回因此可以在第二次再次调用如果失败数量少于REPORT_LIMIT则打印dispatch err () event lost的错误信息如果失败数量到达REPORT_LIMIT则打印dispatch error reporting limit reached - ending report notification. 打印错误信息后如果失败数量继续增加则不会继续打印除非某次发送数据成功错误计数器清0重新开始计算。 在audispd中会调用audit_fddup(0)得到用于接收数据的文件描述符再读取plugins.d目录下的插件然后启动各个插件接下来就是注册事件回调和事件处理 add_event()注册audit_fd的POLLIN事件以及事件的回调函数process_inbound_event创建子线程inbound_thread_main在子线程中调用poll()判断是否有fd可读然后调用对应的fd的回调函数对于audit_fd来说就会调用process_inbound_eventprocess_inbound_event()调用readv读取数据然后将数据放到队列中main()中的event_loop()从队列中读取数据然后遍历所有的插件根据插件类型调用不同的发送函数如果是syslog则调用send_syslog发送如果是af_unix则调用send_af_unix发送如果是always则调用wirte_to_plugin发送 从代码中只看到audispd中队列的处理先将事件放到队列中然后再从队列中读对于auditd和audispd之间的缓冲应该是依赖socketpair创建的socket的缓冲区但是socket的缓冲区大小是由系统配置决定的而且auditd的代码中也没看到调用setsockopt设置缓冲区大小的代码。 6 结论 audispd能够将auditd收到的日志转发出来供多个程序使用也让其他程序能够得以与auditd同时运行但是使用该方式需要解决auditd的启停问题以及audispd带来的性能损耗问题因此如果直接使用audit接收日志不会引起其他的问题建议还是直接使用占用audit的方式。
http://www.w-s-a.com/news/662519/

相关文章:

  • 做最精彩绳艺网站产品设计培训
  • 营销型网站建设品牌深圳网络推广最新招聘
  • 单位网站等级保护必须做吗广州app软件开发公司
  • 免费flash网站模板怎么仿网站链接
  • 泉州网站建设哪家好平面设计转行做什么比较好
  • 忘记网站备案账号设计一个网站
  • 国内购物网站哪个最好海珠营销网站建设报价
  • 小型网站搭建logo免费制作
  • dede 网站模板哈尔滨房产信息网官方网站
  • 设计师个人作品集模板班级优化大师网页版登录
  • 高端网站建设教学网站开发前期准备工作
  • 网站评论列表模板设计官网的
  • 怎么做可以访问网站ui设计自学学的出来吗
  • 网站如何接入支付宝软件开发工作内容描述
  • 廊坊网站建设搭建整合营销传播的效果表现为
  • 网站服务器在本地是指园林绿化
  • 公司网站建设需要什么科目网站代运营价格
  • 网站建设前的ER图ppt模板图片 背景
  • 做一个网站花多少钱网站导航营销步骤
  • 仙桃网站定制做房产网站能赚钱吗
  • 西安网站制作模板最新源码
  • 南京江宁网站建设大学高校网站建设栏目
  • 模板网站建设明细报价表做网站第一
  • 公司网站建设系统软件开发 上海
  • 怎么让公司建设网站固安县建设局网站
  • 360免费建站官网入口手机网站建设设计
  • 商城网站建站系统dw如何做网页
  • 网站建设的公司收费我有网站 怎么做淘宝推广的
  • 网站建设策划书事物选题手机兼职app
  • html5 微网站模版wordpress博客速度很慢