第十三周

153 阅读8分钟

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

时间服务器:

服务端:

yum install chrony

vim /etc/chrony.conf

allow 192.168.0.0/16 ##允许此配置生效

local stratum 10 ##根据需要是否开启(当此服务器不能和互联网上的时间服务器同步时,是否依旧时间同步)

systemctl start chronyd

systemctl enable chronyd

客户端:

yum install chrony

vim /etc/chrony.conf

server 192.168.1.20 iburst

systemctl start chronyd

chronyc sources -v ##客户端同步本地时间服务器时间

日志服务器:

服务端:

yum install rsyslog

vim /etc/rsyslog.conf

$ModLoad imudp

$UDPServerRun 514

$ModLoad imtcp

$InputTCPServerRun 514

systemctl restart rsyslog

客户端:

*.info;mail.none;authpriv.none;cron.none @192.168.1.20 ##对应信息:-表示异步;没有表示同步

systemctl restart rsyslog

sudo:

sudo 能够让用户通过授权以另外一个用户(一般为root用户)的身份运行指定的命令

授权配置文件/etc/sudoers,但是一般使用visudo命令进行编辑,避免误操作引起系统异常。

单个用户授权操作:

visudo

## Allows people in group wheel to run all commands

baimaozi ALL=(ALL) /usr/sbin/useradd,/sbin/userdel ##授权用户添加删除权限

useeadd baimaozi

echo baimaozi | passwd --stdin baimaozi

su baimaozi

sudo useradd test1

sudo userdel test1

组授权:

visudo

## Allows people in group wheel to run all commands

%wheel ALL=(ALL) ALL, !/bin/su, !/usr/bin/passwd root ##用户不能使用su,passwd指令

newgrp wheel

sudo useradd test1

sudo ifconfig ens33

别名授权:

visudo

## Allows people in group wheel to run all commands

User_Alias USERADMIN1 = baimaozi

User_Alias USERADMIN2 = hongmaozi

Cmnd_Alias NETADMINCMD = /usr/sbin/ip, /usr/sbin/ifconfig, /usr/sbin/route

Cmnd_Alias USERADMINCMD= /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd, !/usr/bin/passwd root

USERADMIN1 ALL=(ALL) NETADMINCMD ##授权用户1的命令

USERADMIN2 ALL=(ALL) NOPASSWD: NETADMINCMD, PASSWD: USERADMINCMD ##授权用户2的命令,其中使用NETADMINCMD命令不需要密码,USERADMINCMD命令需要密码

useeadd hongmaozi

echo hongmaozi | passwd --stdin hongmaozi

su hongmaozi

sudo useradd test1

sudo userdel test1

sudo passwd named

su baimaozi

sudo ifconfig

sudo ip a l

sudo -l

-l 可以输出当前用户所拥有的权限

sudo -k

-k 选项让每次使用sudo的时候都输入密码

2、详解nginx模块使用方法

参数介绍:

user nginx; ##用户所属的用户及组

worker_processes 1 | auto; ##物理核心数,可指定数量,一般等于小于物理核心数

error_log /var/log/nginx/error.log warn; ##指定错误日志的存放路径以及记录级别

pid /var/run/nginx.pid; ##指定PID的存放路径

worker_cpu_affinity 0001 0010 0100 1000; ##将worker进程与通过cpumask与指定cpu绑定

worker_rlimite_nofile 2000; ##指定worker进程能够打开的最大文件数

error_log /var/log/nginx-error.log info; ##错误日志

events { ##事件驱动相关配置

worker_connections 2048; ##每个worker进程能够打开的最大并发连接数

accpet mutex on | off; ##处理新连接的方式,on意味着由每个worker轮流处理新请求,off意味着每个新请求到达都会通知所有worker进程

客户端相关配置参数:

1.keepalived_timeout timeout [header_timeout];

设置保持连接的超时时长,0表示禁止保持连接,默认为75s;

2.keepalived_requests number;

一次长连接允许请求的最大资源数量,默认100

3.keepalived_disable none | browser;

对哪种浏览器禁止长连接

4.send_timeout time;

向客户端发送响应报文的超时时长,此处指两次写操作之间的时间间隔

5.client_body_buffer_size size;

用于接收客户端请求报文body部分的缓冲区大小,默认为16k,超过此大小将被暂存到磁盘上由client_body_tmp_path定义的位置

6.client_body_tmp_path path [ level1 [ level2 [ level3 ];

定义用于存储客户端请求报文body部分的临时存储路径和子目录结构、数量

client_body_tmp_path /var/tmp/client_body 1 2 2

1:表示用1位16进制数字表示一级子目录:0-f

2:表示用2位16进制数字表示二级子目录:00-ff

3:表示用2位16进制数字表示三级子目录:00-ff

对客户端进行限制的相关配置参数:

1.limit_rate rate;

限制响应客户端请求的传输速率,单位bytes/senond,0表示不限制

2.limit_except method { ... };

限制对指定请求方法之外的其他方法使用的客户端

各模块介绍:

ngx_http_access_module模块:

实现基于ip的访问控制

1.allow address | CIDR | unix: | all;

2.deny address | CIDR | unix: | all;

http, server, location, limit_except


ngx_http_auth_basic_module模块:

实现基于用户的访问控制,使用basic机制进行用户认证;

1.auth_basic string | off;

2.auth_basic_user_file file;

location /admin/ {

alias /webapps/app1/data/;

auth_basic "Admin Area";

auth_basic_user_file /etc/nginx/.ngxpasswd;

}

示例:

yum install httpd-tools

htpasswd -c -m /etc/nginx/.ngxpasswd tom

htpasswd -m /etc/nginx/.ngxpasswd jerry

vim /etc/nginx/conf.d/vhost.conf

server {

listen 80;

server_name 192.168.1.19;

root /data/nginx/vhost;

location / {

allow all;

}

location ^~/admin {

auth_basic "admin area ";

auth_basic_user_file /etc/nginx/.ngxpasswd;

}

}

mkdir -p /data/nginx/vhost/admin

vim /data/nginx/vhost/admin/index.html

/usr/sbin/nginx -t

/usr/sbin/nginx -s reload

http://192.168.1.19/admin/


ngx_http_stub_status_module模块:

用于输出nginx的基本状态信息;

Active connections: 活动状态的连接数;

accepts:已经接受的客户端请求的总数;

handled:已经处理完成的客户端请求的总数;

requests:客户端发来的总的请求数;

Reading:处于读取客户端请求报文首部的连接的连接数;

Writing:处于向客户端发送响应报文过程中的连接数;

Waiting:处于等待客户端发出请求的空闲连接数;

示例:

vim /etc/nginx/conf.d/vhost.conf

server {

listen 80;

server_name 192.168.1.19;

root /data/nginx/vhost;

location /ngxstatus {

auth_basic "admin area ";

auth_basic_user_file /etc/nginx/.ngxpasswd;

stub_status;

}

/usr/sbin/nginx -t

/usr/sbin/nginx -s reload

http://192.168.1.19/ngxstatus


ngx_http_log_module模块:

1、log_format name string ...;

string可以使用nginx核心模块及其它模块内嵌的变量;

2、access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

access_log off;

访问日志文件路径,格式及相关的缓冲的配置;

buffer=size

flush=time

3、open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];

open_log_file_cache off;

缓存各日志文件相关的元数据信息;

max:缓存的最大文件描述符数量;

min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项;

inactive:非活动时长;

valid:验正缓存中各缓存项是否为活动项的时间间隔;

示例:

vim /etc/nginx/conf.d/vhost.conf

server {

listen 80;

server_name 192.168.1.19;

root /data/nginx/vhost;

access_log /var/log/nginx/vhost_access.log main;

location /ngxstatus {

auth_basic "admin area ";

auth_basic_user_file /etc/nginx/.ngxpasswd;

stub_status;

access_log off; ##不记录日志

}


ngx_http_gzip_module模块:

1、gzip on | off;

Enables or disables gzipping of responses.

2、gzip_comp_level level;

Sets a gzip compression level of a response. Acceptable values are in the range from 1 to 9.

3、 gzip_disable regex ...;

Disables gzipping of responses for requests with “User-Agent” header fields matching any of the specified regular expressions.

4、 gzip_min_length length;

启用压缩功能的响应报文大小阈值;

5、gzip_buffers number size;

支持实现压缩功能时为其配置的缓冲区数量及每个缓存区的大小;

6、gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;

nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的;

off:对代理的请求不启用

no-cache, no-store,private:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;

7、gzip_types mime-type ...;

压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能;

示例:

vim /etc/nginx/nginx.conf

http {

gzip on;

gzip_comp_level 6;

gzip_types text/xml text/css application/javascript;

}


ngx_http_ssl_module模块:

1、 ssl on | off;

Enables the HTTPS protocol for the given virtual server.

2、ssl_certificate file;

当前虚拟主机使用PEM格式的证书文件;

3、ssl_certificate_key file;

当前虚拟主机上与其证书匹配的私钥文件;

4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];

支持ssl协议版本,默认为后三个;

5、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;

[shared:name:size]:在各worker之间使用一个共享的缓存;

6、ssl_session_timeout time;

客户端一侧的连接可以复用ssl session cache中缓存 的ssl参数的有效时长;

示例:

vim /etc/nginx/conf.d/vhostssl.conf

server { ## nginx 1.15 及以后的版本,不需要再写 ssl on

listen 443 ssl;

server_name 192.168.1.19;

root /data/nginx/vhost;

access_log /var/log/nginx/vhost_ssl_access.log main;

ssl_certificate /etc/nginx/ssl/nginx.crt;

ssl_certificate_key /etc/nginx/ssl/nginx.key;

ssl_protocols sslv3 TLSv1 tlsv1.1 tlsv1.2;

ssl_session_cache shared:SSL:10m;

location ^~/admin {

auth_basic "admin area ";

auth_basic_user_file /etc/nginx/.ngxpasswd;

}

location ^~/ngxstatus {

auth_basic "admin area ";

auth_basic_user_file /etc/nginx/.ngxpasswd;

stub_status;

}

}


ngx_http_rewrite_module模块:

1.rewrite regex replacement [flag]

将用户请求的URI基于regex所描述的模式进行检查,然后完成替换;

注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;

flag:

last:重写完成后停止对当前URI在当前location中后续的其他重写操作,而后对新URI启动新一轮重写检查;提前重启新一轮循环

break:重写完成后停止对当前URI在当前location中后续的其他重写操作,而后直接跳转到重写配置块之后的其他配置;跳过循环

redirect:重写完成后以临时重定向的方式直接返回重写后的新URI给客户端,由客户端重新发起请求,不能使用http和https开头

permanent:重写完成后以永久重定向的方式直接返回重写后的新URI给客户端,由客户端发重新发起请求

2.return

return code [text];

return code URL;

return URL;

3.rewrite_log on | off;

是否开启重写日志

4.if (condition) { ... }

引入一个新的配置上下文,条件满足时,执行配置块中的配置指令,location,server

condition:

比较操作符:

==

!=

~:模式匹配,区分字符大小写;

~*:模式匹配,不区分字符大小写;

!~:模式不匹配,区分字符大小写;

!~*:模式不匹配,不区分字符大小写;

文件及目录存在性判断:

-e, !-e 判断是否存在

-f, !-f 判断是否存在文件

-d, !-d 判断是否存在文件夹

-x, !-x 判断是否存在且可执行

5.set $variable value;

定义变量并赋值

示例:

vim /etc/nginx/conf.d/vhostssl.conf

server {

listen 80;

server_name 192.168.1.19;

root /data/nginx/vhost;

access_log /var/log/nginx/vhost_access.log main;

rewrite /(.*)\.png$ http://192.168.1.19/$1.jpg;

rewrite /(.*)$ https://192.168.1.19/$1;

location ^~/admin {

auth_basic "admin area ";

auth_basic_user_file /etc/nginx/.ngxpasswd;

}

location ^~/ngxstatus {

auth_basic "admin area ";

auth_basic_user_file /etc/nginx/.ngxpasswd;

stub_status;

}

}


ngx_http_referer_module模块:

1、valid_referers none | blocked | server_names | string ...;

定义referer首部的合法可用值;

none:请求报文首部没有referer首部;

blocked:请求报文的referer首部没有值;

server_names:参数,其可以有值作为主机名或主机名模式;

arbitrary_string:直接字符串,但可使用*作通配符;

regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~.*\.magedu\.com;

配置示例:

valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;

if($invalid_referer) {

return http://www.magedu.com/invalid.jpg;

}