存档

作者存档

免费域名证书+nginx开启https访问

2018年4月7日 没有评论

越来越多的网站开始启用https访问,包括谷歌也表示提升https网站在搜索结果中的排名。

开启https首先需要有域名证书,大多都是要收费的,个人站在使用let‘s encrypt的免费证书就可以。

本站的证书效果:

生成办法:
第一步 下载域名证书工具

第二步 生成证书,只需修改邮箱 网站根目录 域名就可以了。

执行生成证书命令前需要在nginx支持网站所有权验证
2.1 增加隐藏目录访问

2.2 生成域名证书

第三步 修改nginx 配置支持https方式访问

上一步生成的证书

/etc/letsencrypt/live/www.nginx.cn/fullchain.pem
/etc/letsencrypt/live/www.nginx.cn/privkey.pem

第四步 定时更新证书
crontab 中增加定时任务,每15天更新一次证书
Let's Encrypt证书是有效期90天的,需要我们自己手工更新续期才可以

分类: nginx 标签:

mysql审计功能安装使用

2018年3月21日 没有评论

mysql社区版没有审计功能,企业版有审计功能,但是需要付费。

社区版可以使用mcafee开发的审计功能插件libaudit_plugin.so,这个插件可以用在mysql 5.1以后的版本,使用时请下载对应的版本。

https://bintray.com/mcafee/mysql-audit-plugin/release#files

解压拷贝libaudit_plugin.so到mysql的插件目录:

查看MySQL的插件目录:

复制库文件到MySQL库目录下:

# cp audit-plugin-mysql-5.7-1.1.4-725/lib/libaudit_plugin.so /usr/local/mysql/lib/plugin/
# chmod a+x libaudit_plugin.so

进入mysql命令窗口,安装插件:

> install plugin audit soname 'libaudit_plugin.so';
Query OK, 0 rows affected (0.06 sec)
查看mysql当前已经加载了哪些插件:

查看版本:

开启Audit功能:

> SET GLOBAL audit_json_file=ON;
Query OK, 0 rows affected (0.00 sec)
执行任何语句(默认会记录任何语句,有语法错误的不会记录),然后去mysql数据目录查看mysql-audit.json文件(默认为该文件)。

插入一些数据,查看一下mysql-audit.json文件信息(json格式),如下:

复制代码

可以查看插件有哪些可配置的参数:

mysql> SHOW GLOBAL VARIABLES LIKE '%audi%';

其中我们需要关注的参数有:

1. audit_json_file

是否开启audit功能(0为关闭)。

2. audit_json_log_file

记录文件的路径和名称信息(默认放在mysql数据目录下.json文件)。

3. audit_record_cmds

audit记录的命令,默认为记录所有命令。可以设置为任意dml、dcl、ddl的组合。如:audit_record_cmds=select,insert,delete,update。还可以在线设置set global audit_record_cmds=NULL。(表示记录所有命令)

4. audit_record_objs

audit记录操作的对象,默认为记录所有对象( 审计哪些数据库),可以用SET GLOBAL audit_record_objs=NULL设置为默认。也可以指定为下面的格式:audit_record_objs=,test.*,mysql.*,information_schema.*。

5. audit_whitelist_users

用户白名单。

详细的参数说明,可以直接访问官方说明:

https://github.com/mcafee/mysql-audit/wiki/Configuration

最后为了保证重启数据库,配置不丢失,修改my.cnf 配置文件,将下面的配置添加到[mysqld]中,所以在配置文件中my.cnf加入参数:

audit_json_file=on #保证mysql重启后自动启动插件
plugin-load=AUDIT=libaudit_plugin.so #防止删除了插件,重启后又会加载
audit_record_cmds='insert,delete,update,create,drop,alter,grant,truncate' #要记录哪些命令语句,因为默认记录所有操作;
保存重启即可看到效果。

mysql审计插件卸载

直接执行 UNINSTALL PLUGIN AUDIT 卸载会报错:

需要在 my.cnf 中 [mysqld] 下添加 audit_uninstall_plugin=1,重启mysql。重启完毕后执行两次 UNINSTALL PLUGIN AUDIT; 即可卸载。

卸载完成后需要从 my.cnf 中删除 audit_uninstall_plugin=1 ,否则下次mysql启动会报错:[ERROR] /data/mysql/bin/mysqld: unknown variable 'audit_uninstall_plugin=1'

分类: mysql 标签: ,

访问https报Unknown SSL protocol error in connection to错误

2018年3月20日 没有评论

网站升级httsp后,用curl访问,长时间不返回结果,报ssl handshake 协议错误,具体如下。
原因是curl版本太旧,可以使用curl的--sslv3参数,或者升级curl本本。

$ curl -v https://www.264.cn/shengqi/ --user-agent "Mozilla/5.0" --silent

* timeout on name lookup is not supported
* Trying 47.52.250.55...
* TCP_NODELAY set
* Connected to www.264.cn (47.52.250.55) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* Unknown SSL protocol error in connection to www.264.cn:443
* Curl_http_done: called premature == 1
* stopped the pause stream!
* Closing connection 0

分类: linux 标签: ,

ModuleNotFoundError: No module named 'win32com'

2018年1月19日 4 条评论

python 中的win32com包

python解决ModuleNotFoundError: No module named 'win32api'

安装完pypiwin32报找不到win32api,需要重启动解释器

分类: python 标签:

如何在ubuntu 16.04 上安装Nginx

2017年12月9日 3 条评论

概述

Nginx 是世界上最受欢迎的web服务器,许多大流量的主机都采用Nginx作为服务器。在大多数场景下作为web服务器的Nginx比Apache更加节省资源,它也可当作反向代理服务器。

本文主要介绍如何在ubuntu16.04上安装Nginx

前提条件

开始以前,你需要有一个安装好的ubuntu16.04,并且你需要有一个拥有sudo权限的非root普通用户。

第一步:安装Nginx

Ubuntu默认的源中就有Nginx,所以安装是比较简单的。

首先,更新apt源,以便软件是最新的,然后就可以安装nginx:

  • sudo apt-get update
  • sudo apt-get install nginx

执行这两个命令之后,apt-get就会安装好Nginx和它依赖的软件。

第二步:配置防火墙

开始测试Nginx前,我们需要配置防火墙,以便允许外界访问nginx服务。Nginx在安装的时候使用ufw注册自己作为一个服务,这样对nginx的访问就会变得很容易。

显示所有ufw应用的配置:

sudo ufw app list

你可以得到一个配置的输出列表:

我们可以看到,有三个Nginx的配置:

  • Nginx Full: 这个配置打开 80端口和443端口
  • Nginx HTTP: 这个配置只打开80 (普通, 未加密通信)
  • Nginx HTTPS: 这个配置只打开 443 (TLS/SSL 加密通信 )

一般来说我们应该配置最严的限制,因为本文我们还没有配置SSL,所以我们只打开80端口。

我们执行:

验证修改状态:

我们可以看到HTTP是被打开的:

第三步: 检查你的web server

安装完成后,Ubuntu 16.04 会自动启动 Nginx. 我们可以使用systemd 检查运行状态:

输出

服务已经正常启动,当然最好的确认方法是通过访问web页面的方式。

如果我们能访问到默认加载页就证明启动成功了。

如果你不知道服务器的ip可以使用如下命令:

 

有了IP之后,在浏览器里输入:

http://server_domain_or_IP

你就能看到Nginx的默认加载页了:

Nginx default page

第四步: 管理 Nginx 进程

现在我们已经有nginx在运行了,我们可以再试一些管理命令:

停止nginx:

启动nginx:

重启nginx:

修改配置文件后,平滑加载配置命令(不会断开用户访问):

默认,nginx是随着系统启动的时候自动运行。如果你不想开机启动,那么你可以禁止nginx开机启动:

重新配置nginx开机自动启动:

第五步: 熟悉Nginx的文件和目录

现在我们已经管理nginx了,接下来可以熟悉一下nginx的目录结构和一些重要的文件:

网站文件位置

      • /var/www/html: 网站文件存放的地方, 默认只有我们上面看到nginx页面,可以通过改变nginx配置文件的方式来修改这个位置。

服务器配置

      • /etc/nginx: nginx配置文件目录。所有的nginx配置文件都在这里。
      • /etc/nginx/nginx.conf: Nginx的主配置文件. 可以修改他来改变nginx的全局配置。
      • /etc/nginx/sites-available/: 这个目录存储每一个网站的"server blocks"。nginx通常不会使用这些配置,除非它们陪连接到  sites-enabled 目录 (see below)。一般所有的server block 配置都在这个目录中设置,然后软连接到别的目录 。
      • /etc/nginx/sites-enabled/: 这个目录存储生效的 "server blocks" 配置. 通常,这个配置都是链接到 sites-available目录中的配置文件
      • /etc/nginx/snippets: 这个目录主要可以包含在其它nginx配置文件中的配置片段。重复的配置都可以重构为配置片段。

日志文件

    • /var/log/nginx/access.log: 每一个访问请求都会记录在这个文件中,除非你做了其它设置。
    • /var/log/nginx/error.log: 任何Nginx的错误信息都会记录到这个文件中。
分类: nginx 标签: ,

苹果ios同步icloud照片到新手机

2017年11月15日 没有评论

换了个新手机,想把icloud里面的照片下来。一直也没搞懂苹果的更新机制。

设置的是通过icloud恢复,结果发现没有可用备份。那只能设置为新手机了。

设为新手机后使用已有的icloud账户登录后,以前通讯录,照片会自动恢复。

设置方式是:照片需要打开 设置->照片->icloud照片图库

打开照片后发现里还是没有照片,网上查了查也看不到什么原理。

最后无意间发现照片有了。

原来是要想同步照片需要三个条件:
1.需要打开icloud照片图库
2.手机接入wifi
3.手机充电状态是。

才会下载照片到新手机。

分类: iOS/Mac 标签: ,

git skip worktree文件恢复

2017年10月20日 没有评论

从远程pull文件一致报error: Your local changes to the following files would be overwritten by merge:
提示有文件未commit,可是本地已经无文件可,后来发现提示未提交这些文件都是skip worktre文件,需要恢复取消skipwork状态,然后暂存本地的修改,再进行pull远程文件就可以了。

把所有标记为skip worktree的问价取消标记命令:

git ls-files -v 显示所有文件的状态
grep -i ^S cut -c 3- 提取从第三个字符开始到结尾,去掉状态只保留路径
tr '\012' '\000'替换换行符 (\012) 为 (\000)
xargs -0 git update-index --no-skip-worktree 把以0分割的路径字符传给 git update-index --no-skip-worktree 取消

忽略修改,从而不用提交到库里面。
git update-index --assume-unchanged /path/file

如果想恢复该文件,可以用
git update-index --no-assume-unchanged /path/file 来恢复跟踪

分类: 小技巧 标签:

TCP连接建立的三次握手与连接断开四次挥手

2017年9月4日 没有评论

TCP三次握手

一、什么是三次握手

三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

二、三次握手的目的

三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。客户端执行连接请求时。将触发三次握手。

三、三次握手过程

第一次握手:
客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。
第二次握手:
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的ISN加1以.即X+1。
第三次握手.
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1。如果正确则连接建立成功,客户端和服务器进入ESTABLISHED状态,完成三次握手,随后客户端与服务器之间可以开始传输数据了。把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1。

TCP四次挥手

一、什么是四次挥手

TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,任何一方执行close操作即可产生挥手操作。

二、四次挥手过程

第一次挥手:

客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户机进入FIN_WAIT_1状态。
第二次挥手:

服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态。
第三次挥手:

服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态。
第四次挥手:

客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。

有限状态机FSM:Finite State Machine
1、CLOSED 没有任何连接状态
2、LISTEN 侦听状态,等待来自远方TCP端口的连接请求
3 、SYN-SENT 在发送连接请求后,等待对方确认
4、SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
5、ESTABLISHED 代表传输连接建立,双方进入数据传送状态
6、FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
7 、FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
8、 TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
9、CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
10、LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失

11、CLOSING 双方同时尝试关闭传输连接,等待对方确认

附加问题:

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次挥手?
答:因为当服务器收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来回应的,SYN报文是用来同步的。但是关闭连接时,当服务器收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,”发送的FIN报文已经收到”。只有等到客户端所有的报文都发送完了,客户端才能发送FIN报文,因此不能一起发送。故需要四步挥手。
【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:四个报文都发送完毕,客户端和服务器可以直接进入CLOSE状态了,但有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文,确保之前的数据不会丢失后再进入close状态。

原文:http://www.178linux.com/85976

分类: 网络编程 标签:

tcpdump抓取http的请求头和响应信息

2017年8月21日 没有评论

tcpdump过滤HTTP的GET请求:

sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

tcpdump过滤HTTP的POST请求:

sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

tcpdump过滤HTTP的请求和响应头信息,以及请求和响应消息体信息:

tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
tcpdump -X -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

分类: linux 标签:

The listener supports no services

2017年8月14日 1 条评论

[oracle@localhost ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 14-AUG-2017 13:56:45

Copyright (c) 1991, 2013, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 14-AUG-2017 13:54:44
Uptime 0 days 0 hr. 2 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/product/11gR2/network/admin/listener.ora
Listener Log File /home/oracle/product/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully

tlister启动没有服务

#netmgr
在database services下增加实例名配置,替换红色部分为你的实例名。

客户端连接报错:
ORA-12541:TNS:no listener
把127.0.0.1 替换为你机器的ip

分类: oracle 标签: