搭建时间服务器,日志服务器并简述sudo安全切换
CHRONY
对于时间服务器只介绍几个关键的核心知识:
在分布式环境中,相互协作的服务器不需要时间准确,但是要保证时间的一致性,但是有些服务会对时间的准确性有严格的要求。
linux在启动时由内核读取硬件时间,启动后系统时间与硬件时间相互独立运行,没有交集。对于虚拟机来说,它的时间有天然的不确定性,因为它的CPU是由宿主机分配过来的一点CPU。所以假如宿主机的CPU时钟频率震荡为1分钟,那么虚拟机的可能也就是30秒。
假如服务器慢了24小时,不能将服务器的时间直接跳至准确的时间,因为中间的时间会出现空白,导致文件出现异常。所以需要将服务器的时间加快。直到它恢复正常时间。而不是直接跳转。
linux开始使用的是ntp软件,后来使用的chrony。后者更好用,更方便
无论是ntp和chrony,既可以当作客户端,也可以当作服务端。也就是可以是单机同步,也可以让别人来同步你的时间。
测试环境:
server# yum –y install ntp chrony
server# vim /etc/chrony/chrony.conf
server 0.ntp.aliyun.com iburst
server 1.ntp1.aliyun.com iburst
allow 192.168.1.0/24
server# systemctl restart chrony
注意:添加时间服务器,0.后面没有空格。allow:是允许同步的IP范围。
客户端亦是如此,仅将服务器地址设置为之前主机IP即可,查看同步状态:chrnyc sourcestats
### 搭建日志服务器
rserver~]# vim /etc/rsyslog.conf
### Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
### Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
*.info;mail.none;authpriv.none;cron.none :ommysql:192.168.1.91,Syslog,rsyslog,123
rclient ~]# yum -y install mariadn mariadb-server
rclient ~]# vim /etc/my.cnf.d/server.cnf
skip_name_resolve=on
innodb_file_per_table=on
rclient ~]# yum -y install rsyslog-mysql
rclient ~]# mysql
\. /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
grant all on Syslog.* to ‘rsyslog’@’192.168.1.%’ identified by ‘123’;
flush privileges;
rclient ~]# vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none @192.168.1.88
rclient ~]#yum –y install httpd php
documentroot /var/www/rsyslog
<directory “/var/www/rsyslog”>
require all granted
allowoverride none
</directory>
rclient ~] cp -a loganalyzer-4.1.6/src /var/www/rsyslog
rclient ~] cp -a /loganalyzer-4.1.6/contrib/*.sh /var/www/rsyslog/
rclient ~] chmod +x /var/www/rsyslog/configure.sh
rclient ~] configure.sh
rclient ~]
3)sudo 安全切换
sudo 能够让获得授权的用户以另外一个用户(一般为root用户)的身份运行指定的命令
授权配置文件/etc/sudoers,但是一般使用visudo命令进行编辑。因为误操作引起系统异常。
授权配置文件的格式:
users hosts=(runas) commands
含义是,users列表中的用户(组),可以在hosts列表的位置上,以runas用户的身份来运行commands命令列表中的命令。
各个字段可能的值 为:
users: sudo命令的发起用户
用户名 或uid
%用户组名 或%gid (这里要注意用户需把基本组切换为该用户组,才能使用sudo)
User_Alias 用户别名
hosts: 允许的地址
ip地址
主机名
NetAddr
Host_Alias 主机别名
runas: 以某一用户的身份执行
用户名 或uid
Runas_Alias 用户别名
commands: 指定的命令列表
command(命令建议使用完整的绝对路径)
!command 表示禁止某一命令
directory
sudoedit:特殊权限,可用于向其它用户授予sudo权限
Cmnd_Alias 命令别名
这几个字段中hosts,runas, commands都可以用ALL来表示所有。
定义别名的方法:
ALIAS_TYPE NAME=item1,item2,item3,...
NAME:别名名称,必须使用全大写字符
ALIAS_TYPE :User_Alias,Host_Alias,Runas_Alias ,Cmnd_Alias
sodu命令执行时会要求用户输入自己的密码,为了避免频繁验密与安全其见,能记录成功认证结果一段时间,默认为5分钟,即5分钟内不需要再验证用户密码。
以sudo的方式来运行指定的命令
sudo [options] COMMAND
-l 列出sudo配置文件中用户能执行的命令
-k 清除此前缓存用户成功认证结果,之后再次运行sudo时要验证用户密码。
如果想要让用户输入部分命令时不需要进行密码验证,在sudo配置文件中commands列表部分,可以在命令列表前面加上"NOPASSWD",则其后的命令不需要密码,如果某些命令又需要密码就在前面加上“PASSWD”,所以commands列表可以为这种格式:
NOPASSWD 不需要密码的命令列表 PASSWD 需要密码的命令列表
安全提示:在sudo配置文件中
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
上面配置中root用户这行没有问题,但是%wheel这行要注意,如果把某用户加入到%wheel组,当用户把基本组切换为wheel组时就可以像root用户一样运行命令,较有风险的命令举例如下:
sudo su - root 不需要密码就可以切换到root用户
sudo passwd root 修改root用户密码,不需要输入原密码。
建议把%wheel改为 %wheel ALL=(ALL) ALL,!/bin/su,!/usr/bin/passwd root
详解nginx模块使用方法
一、Nginx之目录浏览
二、Nginx之log模块
三、Ning之gzip模块
四、Nginx之https服务
五、Nginx之fastCGI模块
一、配置Nginx提供目录浏览功能
1.修改nginx配置文件
server {
listen 80;
server_name www.nginx.com;
location / {
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
root /data/www;
index 123.html;
}
}
2.浏览器打开验证
autoindex_exact_size off;默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB。
autoindex_localtime on;默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间。
二、Nginx之log模块
ngx_http_log_module
1.access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
//记录日志,
access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition]
access_log syslog:server=address[,parameter=value][format[if=condition]];
access_log off //关闭
例如:access_log logs/access.log combined;
2.log_format name [escape=default|json] string ...;
//定义日志格式,是nginx内建的
$bytes_sent //发送字节数
$connection //连接序列号
$connection_requests //连接请求
$msec //毫秒解析
$pipe //管道
$request_length //请求长度
$request_time //请求时间
$status //状态
$time_iso8601 //日期格式
$time_local //本地时间
http://nginx.org/en/docs/http/ngx_http_core_module.html
//尾部有很多变量
//nginx有内置的log_format,不需要自定义变量进行使用
例如:log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
3.open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
//加快日志查找,缓存日志
open_log_file_cache off; //日志文件需要大量写入,频繁查找并打开浪费大量资源,必要时开启
max:缓存多少条目
inactive:失效时间
min_uses:在指定时间内最少使用的次数
valid:多长时间检查一次有效性
off:关闭
三、Ning之gzip模块
ngx_http_gzip_module //顾虑器,对指定类型的资源压缩以节约资源
1.gzip on|off //是否启用,并不是所有的浏览器都支持压缩
gzip_buffers
2.gzip_comp_level //默认级别为1,
3.gzip_disable regex.. //匹配浏览器类型,对其不进行压缩
msie6
MSIE [4-6].
4.gzip_min_length LENGTH //触发启用压缩功能的响应报文的最小长度
5.gzip_http_version 1.0|1.1 //设定启用压缩响应功能时,http协议版本最小版本
6.gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...
对代理的请求基于何种属性判断其是否应该启用压缩功能;
off:所有代理请求都不压缩
expired:
no-cache:
7.gzip_types MIME-TYPE //指定仅执行压缩的资源内容类型,默认为text/html;
示例:
gzip on;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_disable msie6;
gzip_min_length 2;
gzip_types txt/plain txt/xml application/json application/java-script;
四、Nginx之https服务
1.ngx_http_ssl_module模块简介
ssl
ssl:位于传输层和应用层之间的半层
1.建立tcp三次会话
2.s发送证书给客户端,以及s支持的各种加密算法
3.验证{s证书有效性,受信任的CA颁发的,证书主体,证书完整性}对比特征码,并发送给s自己支持的算法
4.从证书中获取的是对方的公钥,公钥加密算法性能不佳,因此进行密钥交换,DH算法,IKE算法等
为了防止别人插入广告:做全栈https
ssL通过握手建立链接
ssl拆除:在tcp断开之前
ssl建立:在tcp建立链接之后 //一般ssl:建立链接对cpu压力很大
ngx_http_ssl_module
1.ssl on | off; //是否启用
2.ssl_certificate file; //pem格式,本地证书
3.ssl_certificate_key file; //私钥pem格式
//Context http,server
c-->请求https服务,发送http请求
注:在tcp层和ssl层使用的都是基于ip的通信,没有用到FQDN
域名只有在http请求报文的首部的时候会使用到,而http请求报文实在ssl内部完成的,
也就是说在http会话的时候首部的主机名,基本都没有发生作用
ssl建立的过程中,双方身份的识别,是基于ip地址进行的
因此:单ip只提供一个https虚拟主机
4.ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
//ssl v2已经不安全了,因此建议使用tls,v1.1,v1.2版本
5.ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
指定ssl缓存机制,应该开启,提高性能
none:委婉的拒绝或同意
builtin:使用openssl库内建的缓存机制,每个worker之间的缓存是不共享的
worker独立自主管理session,命中率不高{进程第一次被第一个worker服务,第二次可能被第二个服务}
shared:各worker共享的缓存,由nginx进程管理该空间,默认单位bytes,1M大多存储4000个会话,cache名字相同可以被多个server共用
name:缓存空间的名称
例如:ssl_session_cache builtin:1000 shared:SSL:10m;
6.ssl_ciphers ciphers
Default:ssl_ciphers HIGH:!aNULL:!MD5; //openssl所支持的加密算法
ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
openssl ciphers //获取ssl支持的算法
7.ssl_session_timeout time;//重新使用cache中的session
ssl会话超时时长,指ssl session cache中缓存条目的缓存时长
ssl_session_timeout 5m; //默认5min,调大有助于提高服务器性能
8.ssl_prefer_server_ciphers on|off //server倾向于
sslv3和TLS,优先使用server端使用的加密算法
2.配置实现
实验1:配置ssl实现 //自己同时兼任nginx和ca
1.nginx server:
cd /etc/nginx/ssl/
(umask 077;openssl genrsa -out nginx.key 2048)
openssl req -new -key nginx.key -out nginx.csr -days 365 //生成请求和自签用的都是-key
//www.mt.com
2.CA端
cd /etc/pki/CA/
(umask 077;openssl genrsa -out private/cakey.pem 2048)
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
//ca.mt.com
touch serial index.txt
echo 01 > serial
cd /etc/nginx/ssl
openssl ca -in nginx.csr -out nginx.crt -days 365
nginx -t
ningx -s reload
//虽然不受信任,但是通讯过程式加密的
3.配置文件
server {
listen 443 ssl;
server_name www.mt.com;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
root /web/www/;
index index.html index.htm;
location /status {
stub_status;
}
}
五、Nginx之fastCGI模块
1.LNMP概述
LAMP(fpm):
httpd+php:
modules;
cgi:
fcgi:
proxy_fastcgi_module
lNMP:
ngx_http_fastcgi_module
nginx+php: //只有一种选择
nginx+fastcgi
MySQL的连接器有多个:c,php等各不相同
clinet==>nginx--->fpm--->MySQL
php:编译时,支持fpm;./configure --enable-fpm
php-fpm工作方式,类似于httpd的prefork
listen = 127.0.0.1:9000
listen.allow_clients = //允许访问的主机
pm = dynamic|static
pm.start_servers:启动fpm进程时启动的工作进程数量
pm.min_spare_server:最小空闲进程数
pm.max_spare_servers:最大空闲进程数
pm.max_children:最大工作进程数
user = USERNAME
group = GROUPNAME
2.ngx_http_fastcgi_module
yum info php-fpm
yum install php-fpm
yum install php-mysql php-mbstring php-gd php-xml -y
vim /etc/php-fpm.d/www.conf
systemctl start php-fpm
1.vim nginx.conf //动静分离案例
location ~ \.php$ {
root /web/www/;
fastcgi_pass 127.0.0.1:9000; //传送给谁
fastcgi_index index.php; //主页
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; //把后面的参数保存在SCRIPT_FILENAME这个变量中
include fastcgi_params; /etc/nginx/fastcgi_params该文件中定义了很多params
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
root /usr/share/nginx/html;
#cache
expires 3d;
}
}
2.mkdir -pv /usr/local/nginx/html //php文件真实位置
3.https://www.mt.com/info.php //
对应SCRIPT_FILENAME:/usr/local/nginx/html/info.php
$fastcgi_script_name对应的是php.info
然后发送给127.0.0.1:9000
模块指令:
1.fastcgi_pass address: //address是fpm服务器监听的地址和端口
fastcgi_pass localhost:9000;
2.fastcgi_index index.php;
3.fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
4.fastcgi_cache zone |off //是否启用cache,如果启用 ,数据使用哪个缓存空间名称
5.fastcgi_cache_path path [levels=levels] [use_temp_path=on|off]
keys_zone=name:size [inactive=time] [max_size=size]
[manager_files=number] [manager_sleep=time] [manager_threshold=time]
[loader_files=number] [loader_sleep=time] [loader_threshold=time]
[purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
//定义缓存空间,以及如何存储数据,Context:http
path:文件系统路径,用于存放缓存的文件数据
levels=#[:#][:#]层级,最多三级结构 // levels=1:2
keys_zone=name:size //定义内存中用于缓存kv映射关系的空间名称及大小
inactive=time:非活动时间
max_size=size:缓存空间上限
例如:fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=fcgicache:10m;
fastcgi_cache fcgicache
注:只能用于http
6.fastcgi_cache_key 127.0.0.1:9000$request_uri //把什么当做key,缓存到内存中
//定义要使用的缓存键key,例如 fastcgi_cache $request_uri
7.fastcgi_cache_methods GET|HEAD|POST..; //缓存哪些类型的请求
8.fastcgi_cache_min_uses number//最少使用次数
9.fastcgi_cache_valid [code..] time;//哪一种响应码,缓存多长时间
默认不给缓存,对不同响应码,设定其缓存
fastcgi_cache_valid 200 302 10m;
nginx有缓存,fpm也有缓存
nginx如何为fpm缓存
key-value //nginx缓存的是元数据,以及目录结构,错误查找结果等
N级子目录: 2 1 1//一级目录256个,每一级目录16个子目录,每二级目录16个子目录
key:中保存的是文件的路径信息
例如基于md5提取校验码后存放的,分级存放,加快查找速度
实验:fcgi缓存功能的实现
注:调用缓存时,至少应该制定三个参数
fastcgi_cache //指定缓存空间名称
fastcgi_cache_key //把什么当做key
fastcgi_cache_valid //缓存的对象,根据响应码
vim /etc/nginx/nginx.conf
http {
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=fcgicache:10m; //缓存的对应fs
server {
location ~ \.php$ {
root /web/www/;
fastcgi_cache fcgicache;
fastcgi_cache_key $request_uri;
fastcgi_cache_valid 200 300 10m;
fastcgi_cache_valid 301 1h;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name;
include fastcgi_params;
}
}
}
https://www.mt.com/info.php
ls /var/cache/nginx/fastcgi //会有很多目录,缓存
参考博客:
<https://blog.51cto.com/freeloda/1288553>;
<http://www.nginx.cn/doc/>;
<http://nginx.org/en/docs/>;