美文网首页
chrony、rsyslog、sudo、nginx模块

chrony、rsyslog、sudo、nginx模块

作者: 请叫我飘哥 | 来源:发表于2019-03-25 19:58 被阅读0次

    1、搭建时间服务器,日志服务器并简述sudo安全切换

    • 搭建时间服务器

    Linux操作系统中大家熟悉的时期服务器有两个:

    ntp
    chrony
    • 这里我们以chrony来搭建时间服务器
      chrony是一个ntp协议的实现程序,既可以当做服务端,也可以充当客户端;它专为间歇性互联网连接的系统而设计,当然也能良好应用于持久互联网连接的环境;chrony有三个时间参考:硬件时钟、实时时钟以及手动同步。
      • chrony的程序安装
        [root@node01 ~]# yum -y install chrony
      
      • chrony的程序环境
      [root@node01 ~]# rpm -ql chrony
      ...
      /etc/chrony.conf        #主配置文件
      /usr/bin/chronyc        #客户端程序
      /usr/sbin/chronyd       #服务端程序
      
      • chrony配置服务端
      [root@node01 ~]# vim /etc/chrony.conf
      两个主要配置:
      server cn.pool.ntp.org iburst    #1、格式为:server  时间服务器域名  iburst
      allow 10.192.0.0/16  #允许指定网段的客户端进行时间同步
      [root@node01 ~]# systemctl  enable chronyd
      [root@node01 ~]# systemctl  start chronyd
      
      • chrony客户端配置
      [root@ceph_deploy ~]# yum -y install chrony
      [root@ceph_deploy ~]# vim /etc/chrony.conf
      一个主要配置
      server 10.192.2.222 iburst   #server指向时间服务器ip地址或域名
      [root@ceph_deploy ~]# systemctl  enable chronyd
      [root@ceph_deploy ~]# systemctl  start chronyd
      
      • 客户端测试
      [root@ceph_deploy ~]# chronyc sources
      210 Number of sources = 1
      MS Name/IP address         Stratum Poll Reach LastRx Last sample               
      ===============================================================================
      ^* ns1.peaoguo.com               3   6   377    40  +4852us[-2383us] +/-  159ms
       或者ntpdate测试
      [root@ceph_deploy ~]# ntpdate 10.192.2.222
      22 Mar 16:04:13 ntpdate[2314700]: adjust time server 10.192.2.222 offset -0.009135 sec
      
    • 搭建日志服务器收集bash命令日志

    通常我们想知道某个用户在服务器上到底执行了那些命令,以备后续做故障分析和审计分析等等,这了我们用rsyslog收集日志,并转发给mysql服务器,然后通过web页面进行展示,设计方案如下:


    rsyslog日志转发过程
    • 环境准备
      为了方便,我这里将web和日志转发放在一台服务器(10.192.2.222),将Mariadb和客户端放在一台服务器(10.192.1.161),
      1、客户端服务器和日志转发服务器均安装rsyslog服务,默认操作系统已经安装rsyslog服务,如果没有运行如下命令
      yum -y install rsyslog
      2、数据库服务器安装安装Mariadb,和授权
      yum -y install mariadb-server
      MariaDB [(none)]> GRANT ALL PRIVILEGES ON Syslog.* TO rsyslog@10.192.2.222 IDENTIFIED BY 'rsyslog'
      3、安装LogAnalyzer及web服务
      LogAnalyzer软件下载地址http://loganalyzer.adiscon.com/
      上传 loganalyzer-4.1.7.tar.gz 安装包至web服务器

      [root@node01 ~]# tar -xzvf  loganalyzer-4.1.7.tar.gz  -C /data/
      [root@node01 ~]# cd /data
      [root@node01 data]# ln -vs loganalyzer-4.1.7  rsyslog
      [root@node01 data]# yum -y install httpd
      [root@node01 data]# vim /etc/httpd/conf.d/rsyslog.conf
      <VirtualHost 10.192.2.222:80>
           ServerName www.rsyslog.com
           DocumentRoot  "/data/rsyslog"
           <Directory "/data/rsyslog">
             Options None
             AllowOverride None
             Require all granted
          </Directory>
      </VirtualHost>
      [root@node01 data]# systemctl start httpd
      
    • 客户端配置
      思路:将bash命令按照一定格式保存在一个文件中,在通过rsyslog的转发功能将其转发给日志收集服务器,

      创建一个任何人都只有追加权限的文件
      [root@ceph_deploy ~]# mkdir -p /var/log/bash/
      [root@ceph_deploy ~]# touch /var/log/bash/bash.log 
      [root@ceph_deploy ~]# chown nobody:nobody /var/log/bash/bash.log
      [root@ceph_deploy ~]# chmod 002 /var/log/bash/bash.log
      [root@ceph_deploy ~]# chattr +a /var/log/bash/bash.log
      
      添加环境变量,将每一条命令日志存入上面创建的文件中
      [root@ceph_deploy ~]# vim /etc/profile
      export HISTORY_FILE=/var/log/bash/bash.log
      export SRC_IP=`who am i |awk '{ print $5}'|sed 's/(//g'|sed 's/)//g'`
      export PROMPT_COMMAND='{ date "+%F %T #### USER:$USER  IP:$SRC_IP PS:$SSH_TTY ppid=$PPID pwd=$PWD #### $(history 1 | { read x cmd; echo "$cmd"; })";} >>$HISTORY_FILE'
      [root@ceph_deploy ~]# source /etc/profile
      
      配置rsyslog
      #load imfile module
      $ModLoad imfile
      $WorkDirectory /etc/rsyslog.d
      $PrivDropTOGroup root
      $InputFilePollInterval 1
      $InputFilePersistStateInterval 1
      
      #bash.log
      $InputFileName /var/log/bash/bash.log
      $InputFileTag bashTag:
      $InputFileStateFile bash_log
      $InputFileSeverity info
      $InputFileFacility local0
      $InputRunFileMonitor
      
      #bash audit
      local0.info     @@10.192.2.222:514
      
      
    • 日志转发服务器配置
      思路:将收集到的日志转发给MariaDB服务器保存

      安装rsyslog写入mysql数据库接口工具
      [root@node01 ~]# yum -y install rsyslog-mysql
      
      修改rsyslog配置文件
      [root@node01 ~]# vim /etc/rsyslog.conf 
      $ModLoad imtcp                    
      $InputTCPServerRun 514    设置为rsyslog收集转发服务器监听tpc514端口
      $ModLoad ommysql      加载写入mysql模块
      
      将特定的日志转发给mysql服务器
      local0.info                                              :ommysql:10.192.1.161,Syslog,rsyslog,rsyslog
      [root@node01 ~]# systemctl restart rsyslog
      
    • web服务器查看bash日志
      在客户端服务器输入两条bash命令

      [root@ceph_deploy ~]# pwd
      /root
      [root@ceph_deploy ~]# ifconfig
      

      浏览器查看


      查看bash命令记录
    • sudo安全切换

      • 功能简介:
        sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录和管理时间,同样也提高了安全性。
      • sudo运行流程
        1、当用户运行sudo时,系统于/etc/sudoers文件里查找该用户是否有运行sudo的权限
        2、若具有运行sudo的权限,那么用户输入自己的password,注意这里输入的是用户自己的password
        3、假设password正确,进行sudo后面的命令,root运行sudo是不须要输入password的,切换到的身份与运行者身份同样的时候。也不须要输入password。
      • 修改sudo配置文件
        sudo配置文件有两个/etc/sudoers和/etc/sudoers.d/*
        使用visudo命令修改配置文件visudo -f /etc/sudoers.d/file
      • 授权格式
        who where=(whom) commands
        users hosts=(runas) commands
        users:username,#uid,%groupname,%#gid,user_ailas
        hosts: ip, hostname,NetAddr,host_alias,ALL
        ruanas:runas_alias,ALL
      • 示例
      别名定义了一个USERADMIN组,包含zhangsan和lisi两个用户
      User_Alias   USERADMIN=zhangsan,lisi
      
      别名定义了一组NETADM命令组,可使用ip和route这两个路径,这里必须用绝对路径
      Cmnd_Alias   NETADM=/usr/sbin/ip,/usr/sbin/route
      
      别名定义了一组USERADM命令组,用用于用户添加和删除
      Cmnd_Alias   USERADM=/usr/sbin/useradd,/sbin/userdel,/usr/bin/passwd,/sbin/reboot
      
      这里wangwu用户拥有两个命令组的权限,前一组不需要输入密码,后一组执行时需要输入用户
      wangwu  ALL=(ALL)   NOPASSWD:NETADM,PASSWD:USERADM
      
      USERADMIN 用户组拥有USERADM命令组的命令执行权限
      USERADMIN  ALL=(ALL)  USERADM
      
      xp用户拥有USERADM中命令组中除了reboot的权限
      xp      ALL=(ALL)       USERADM,!/sbin/reboot
      

    2、详解nginx模块使用方法

    • nginx简介
      Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务
      nginx高度模块化,但其模块早期不支持DSO机制,近期版本支持动态装载和卸载
    • 模块分类:
      • 核心模块:core module
      • 标准模块:
        • HTTP modules:
          • Standard HTTP modules
          • Optional HTTP modules
        • Mail modules
        • Stream modules
      • 第三方模块
    • 核心模块
      • 正常运行必备的配置:
        • 1、user;指明运行使用的用户
        • 2、pid /PATH/TO/PID_FIEL;指定存储nginx主进程进程号的文件路径
        • 3、include file | mask;指明包含进来的其它配置文件片段
        • 4、load_module file;指明要装载的动态模块
      • 性能优化相关配置
        • 1、worker_processes number |auto;
          worker进程的数量,通常应该为当前主机的cpu的物理核心数
          auto:当前主机物理CPU核心数
        • 2、worker_cpu_affinity cpumask ...;
          worker_cpu_affinity auto [cpumask];
          0001:0号CPU
          0010:1号CPU
          例如:
          worker_processes number 2
          worker_cpu_affinity 0100,1000;
          这表示机器有4颗CPU,nginx启用2个进程,分别绑定在后两颗CPU上
        • 3、worker_priority number;
          指定worker进程的nice值,设定work进程优先级:[-20到20之间]
        • 4、worker_rlimit_nofile number;
          worker进程所能够打开的文件数量上限
      • 调试、定位问题
        • 1、daemon on|off; 是否以守护进程方式运行Nginx
        • 2、master_process on|off;是否以master、worker模型运行nginx;默认为on
        • 3、error_log file [level]
      • 事件驱动相关的配置
        events {
        ...
        }
        • 1、worker_connections number;
          每个worker进程所能打开的最大并发连接数量
          nginx最大并发=worker_processes*worker_connections
        • 2、use method;指明并发连接请求的处理方法;
          例如 use epoll;
        • 3、accept_mutex on|off
          处理新的连接请求的方法,on意味着有各worker轮流处理新请求,off意味着每个新请求都会通知所有的worker进程
      • 配置示例
      user nginx ;                             #进程运行使用的用户和组
      pid logs/nginx.pid;                       #指定存储nginx主进程号的文件路径
      include vhost/*.conf;                     #指明包含进来的其他配置文件
      #include mime.type                        #指明包含进来的其他文件类型
      #load module file;                        #指明要装载的动态模块
      worker_processes 4 | auto;                #worker进程的数量,应小于等于cpu核心数,auto为当前主                         
                                            #机cpu核心数
      worker_cpu_affinity 0001 0010 0100 1000;  #将worker进程与通过cpumask与指定cpu绑定
      worker_priority -10;                      #指定worker进程的nice值,范围[-20,20]
      worker_rlimite_nofile 2000;               #指定worker进程能够打开的最大文件数
      
      #daemon on;                               #是否已守护进程方式运行Nginx
      #master_process on;                       #是否已master-worker模型运行Nginx,默认on
      
      error_log /var/log/nginx-error.log info;  #错误日志
      
      events {                                  #事件驱动相关配置
          use epoll;                            #指明并发连接请求的处理方式
          worker_connections 2048;              #每个worker进程能够打开的最大并发连接数
          #accpet mutex on | off;               #处理新连接的方式,on意味着由每个worker轮流处理新请    
                                            #求,off意味着每个新请求到达都会通知所有worker进程
      }
      
    • 标准模块-HTTP modules
      • 虚拟主机server{...}

        • listen字段
          listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
          listen address[:port][default_server][ssl][http2|spdy] [backlog=number] [rcvbuf=size] [sndbuf_size]
          default_server设定为默认虚拟主机
          ssl限制仅能通过ssl连接提供服务
          backlog=number后援队列长度
          rcvbuf=size接收缓冲区大小
          sndbuf=size发送缓冲区大小
        • server_name字段
          server_name name ... ;
          server_name www.peaoguo.com
          指明虚拟主机的主机名称,后可跟多个由空白字符分隔的字符串
          支持*通配任意长度的任意字符,server_name *.peguo.com www.peguo.*
          支持~起始的字符做正则表达式模式匹配,server_name ~^www\d+\.peguo\.com
          匹配顺序:
          1、首先是字符串精确匹配
          2、左侧*通配符
          3、右侧*通配符
          4、正则表达式
        • tcp_ondelay on|off;
          在keepalived模式下的连接是否启用TCP_NODELAY选项
          tcp_nopush on|off;
          在sendfile模式下,是否启用TCP_CORK选项;
        • sendfile on|off;
          是否启用sendfile功能
      • 定义路径相关配置

        • root path;
          设置web资源路径映射,用于指明用户请求的url所对应的本地文件系统上的文档所在路径,可用的位置:http、server、location,if in location
        • location [=|~|~*|^~] url {...}
          在一个server中location配置段可存在多个,用于实际从url到文件系统的路径映射,
          nginx会根据用户请求的url来检查定义的所有location,并找出一个最佳匹配,而后应
          用其配置
          =:对url做精确匹配
          ~:对url做正则表达式模式匹配,区分字符大小写
          ~*:对url做正则表达式模式匹配,不区分字符大小写
          ^~:对url左半部分做匹配检查,不区分字符大小写
          匹配优先级:=,^~,~,~/~*,不带符号
          root /vhosts/www/htdocs/
          http://www.peaoguo.com/index.html--->/vhosts/www/htdocs/index.html
        • alias path;
          定义路径别名,文档映射的另一种机制,仅能用于location
          注意:location中使用root指令和alias指令的意义不同,
          root,给定的路径对应于location中/url/左侧的/
          alias,给定的路径对应于location中的/url/右侧的/
        • index file ...;
          默认资源,http,server,location
        • error_page code ... [=[response]] url;
        • try_file file ...url;
      • 定义客户端请求的相关配置

        • keepalive_timeout timeout [header_timeout];
          设定保持连接的超时时长,0表示禁止长连接,默认为75S
        • keepalive_requests number;
          在一次长连接上所允许请求的资源的最大数量,默认为100
        • keepalive_disable none | browser ......;
          对哪种浏览器禁用长连接
        • send_timeout time;
          向客户端发送响应报文的超时时长,此处,是指两次写操作之间的间隔时长
        • client_body_buffer_size size;
          用于接收客户端请求报文的body部分的缓冲区大小,默认为16K,超出此大小时,其将被暂存到磁盘上的由client_body_path指定所定义的位置;
        • client_body_temp_path path [level1 [level2 [level3]]];
          设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数据
          16进制的数字
          client_body_path /var/tmp/client_body 1 2 2
          1、表示用一位16进制数字表示一级子目录;0-f 16个
          2、表示用两位16进制数字表示二级子目录;00-ff 256个
          2、表示用两位16进制数字表示三级子目录;00-ff 256个
      • 对客户端进行限制的相关配置

        • limit_rate rate;
          限制响应给客户端的传输速率,单位是bytes/second,0表示无限制
        • limit_excetp method ...{...}
          限制对指定请求方法之外的其它方法的使用客户端
          limit_rate GET{
          allow 10.192.0.0/16 ;
          deny all;
          }
      • 文件操作优化的配置

        • aio on|off |threads[=pool];
          是否启用aio功能
        • directio size|off;
          在LInux主机启用O_DIRECT标记,此处意味文件大小等于给定的大小时使用,例如directio 4m;
        • open_file_cache off;
          open_file_cache max=N [inactive=time];
          nginx可以缓存以下三种信息:
          1、文件的描述符、文件大小和最近一次的修改时间
          2、打开的目录结构
          3、没有找到的或者没有权限访问的文件的相关信息
          max=N 可缓存的缓存项上限,达到上限后会使用LRU算法实现缓存管理
          lnactive=time;缓存项的非活动时间,在此处指定的时长内未被命中的或命中次数少于open_file_chache_min_uses指令所指定的非活动项
        • open_file_cache_valid time;
          缓存项有效性的检查频率,默认为60S
        • open_file_cache_min_uses number;
          在open_file_cache 指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项
        • open_file_cache_errors on |off
          是否缓存查找时发送错误的文件一类信息;
      • ngx_http_access_module模块:
        实现基于IP的访问控制功能

        • allow address |CIDR|unix; all;
        • deny address |CIDR|unxi; all;
          使用范文http,server,location,limit_except
      • ngx_http_auth_basic_module模块
        实现基于用户的的访问控制,使用basic机制进行用户认证

        • auth_basic_string | off;
        • auth_basic_user_file file;
          location /admin/ {
          alias /web/app/;
          auth_basic "ADMIN AREA";
          auth_basic_user_file /etc/nginx/.ngxpasswd;
          }
          注意:htpasswd命令由httpd-tools所提供
      • ngx_http_stub_status_module模块
        用于输出nginx的基本状态信息

        • stub_status;
          配置示例:
          location /nginx_admin_status {
          stub_status;
          }
          各状态参数含义:
          Active Connections:活动状态的连接数
          accepts:已经接受的客户端请求的总数
          handled:已经处理完成的客户端请求的总数
          requests:客户端发来的总的请求数
          Reading:处于读取客户端请求报文首部的连接的连接数
          Writing:处于向客户端发送响应报文过程中的连接数
          Waiting:处于等待客户端发出请求的空间连接数
      • ngx_http_log_module模块

        • log_format name string ...;
          string可以使用nginx核心模块及其它模块内嵌的变量
        • access_log path [format [buffer=size [gzip[=level]] [flush=time [if=condition]];
          access_log off;
          访问日志文件路径,格式及相关的缓冲配置
          buffer=size
          flush=time
          • open_log_file_cache max=N [inacitve=time] [min_uses=N] [valid=time]
            open_log_file_cache off
            缓存各日志文件相关的元数据信息
            max:缓存的最大文件描述符数量
            min_uses:在inactive指定的时长内访问大于等于此值方可被当做活动项;
            inactive:非活动时长
            valid:验证缓存中各缓存项是否为活动项的时间间隔
      • ngx_http_gzip_module

        • gzip on|off;
        • gzip_comp_level level; level级别1-9
        • gzip_disable regex ...;
        • gzip_min_length length;
          启用压缩功能的响应报文大小阀值
        • gzip_buffers number size;
          支持实现压缩功能时为其配置的缓冲区数量及每个缓存区大小
        • gzip_proxled off |expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any ...;
          nginx做为代理服务器接收从被代理服务器发送的响应报文,在何种情况下压缩。
          off:对代理的请求不启用
          no-cache,no-store,private:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;
        • gzip_types mime-type ...;
          压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能
          示例:
          gzip on;
          gzip_comp_level 6;
          gzip_type text/css text/xml text/html application/javascript;
      • ngx_http_ssl_moudle

        • ssl on|off;
        • ssl_certificate file;
          当前虚拟主机使用PEM格式的证书文件;
        • ssl_certificate_key file;
          当前虚拟主机上与其证书匹配的私钥文件;
        • ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
          支持的ssl协议版本,默认为后三个;
        • ssl_session_cache off |none |[builtin[:size]] [shared:name:size];
          builtin[:size]:使用OpenSSL内建的缓存,此缓存为每个worker进程私有
        • ssl_session_timeout time;
          客户端一侧的连接可以复用ssl session cache中缓存的ssl参数的有效时长
          配置示例:
          server {
          listen 443 ssl;
          server_name www.peaoguo.com;
          root /data/www/ssl;
          ssl on;
          ssl_certificate /etc/nginx/ssl/nginx.crt;
          ssl_certificate_key /etc/nginx/ssl/nginx.key;
          ssl_session_cache shared:sslcache:20m;
          }
      • nginx_http_rewite_modules
        将用户请求的URI基于regex所描述的模式进行检查,而后完成替换

        • rewrite regex replacement [flag]
          将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI
          注意:如果在同一级配置块中存在多个rewirte规则,那么会自上而下组个检查,被某条件规则替换完成后,会重启新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;
          [flag]
          last:重写完成后停止对当前URI在当前的location中后续的其它重新操作,而后对新的URI启动新一轮重新检查,提前重 启新一轮循环。
          break: 重写完成后停止对当前URI在当前的location中后续的其它重新操作,而后直接跳转至重写规则配置块之后的其它配置,结束循环。
          redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,不能以http:// 或https://开头。
          permanent:重新完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求。
        • return
          return code [text];
          return code URL;
          return URL;
        • rewrite_log on|off;
          是否开启重写日志
        • if (condition) {...}
          引入一个新的配置上下文,条件满足时,执行配置块中的配置指令;server,location,condition
          • 比较操作符:
            ==
            !=
            ~:模式匹配区分字符大小写;
            ~*:模式匹配,不区分大小写
            !~:模式不匹配,区分大小写
            !~*:模式不匹配,不区分大小写
          • 文件及目录存在性判断:
            -e,!-e
            -f,!-f
            -d,!-d
            -x,!-x
        • set $variable value;
          用户自定义变量;
      • ngx_http_referer_module

        • valid_referers none |blocked|server_names|string...;
          定义referer首部的合法可用值;
          none:请求报文首部没有referer首部
          blocked:请求报文的referer首部没有值
          server_names:参数,其可以有值作为主机名或主机名模式
          arbitrary_string:直接字符串,但可使用*做通配符
          regular expression:被指定的正则表达式模式匹配到的字符串,要使用~开头,例如~.*\.peaoguo\.com;
          配置示例:
          valid_referers none blocked server_names *.peaguo.com peaguo.* *.peaoguo.* *~\.peaoguo\.;
          if($invalid_referer) {
          return http://www.peaguo.com/invalid.jpg;
          }

    相关文章

      网友评论

          本文标题:chrony、rsyslog、sudo、nginx模块

          本文链接:https://www.haomeiwen.com/subject/rgtrvqtx.html