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;
}