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
- HTTP 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、worker_processes number |auto;
- 调试、定位问题
- 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进程
- 1、worker_connections number;
- 配置示例
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功能
- listen字段
-
定义路径相关配置
-
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;
}
-
-
网友评论