跳转至

工程实践与运维

SQL注入攻击示例与防范措施

注入攻击是OWASP总结的十大web安全风险中排在第一位的攻击形式, 而SQL注入(SQL Injection)攻击是注入攻击中最常见的一种形式。SQL注入漏洞可以从数据库读取敏感数据,修改数据库数据(插入/更新/删除),对数据库执行管理操作(例如关闭DBMS),恢复DBMS文件上存在的给定文件的内容系统,并在某些情况下向操作系统发出命令。

作为开发要防范这些攻击,就需要了解这些攻击方式。现列出Mysql数据库下几种常见SQL注入攻击示例,以作参考。

高并发情况下服务器调优

TCP内核参数调优

调整全连接队列长度

TCP 建立连接时要经过 3 次握手,在客户端向服务器发起连接时, 对于服务器而言,一个完整的连接建立过程,服务器会经历 2 种 TCP 状态:SYN_REVD, ESTABELLISHED。对应也会维护两个队列:

  1. 一个存放SYN的队列(半连接队列,也成SYN队列)
  2. 一个存放已经完成连接的队列(全连接队列, 也称Accept队列)

当一个连接的状态是 SYN RECEIVED 时,它会被放在 SYN 队列中。 当它的状态变为 ESTABLISHED 时,它会被转移到另一个队列。应用程序只从已完成的连接的队列中获取请求。

在Linux中如何使用logrotate管理日志

原文:How To Manage Log Files Using Logrotate In Linux

几天前,我们发布了一份指南,介绍了如何在CentOS系统上设置集中式Rsyslog服务。今天,在本指南中,我们将了解如何在Linux上使用日志轮换来管理日志文件。该实用程序简化了日志文件的管理,尤其适用于每天生成大量日志文件的系统。顾名思义,LogRotate以固定的时间间隔将日志完全从系统中轮转出来。它还允许日志文件的自动轮转、压缩、删除和传输。每个日志文件可以每天、每周、每月或在变得太大时处理。

Awk三十分钟入门到精通

简介

Awk是Linux系统中强大的文本处理命令工具。它名字来源于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。Awk是一个工具,也是一种程序语言,类似c语言,但无需提前进行变量声明定义。一个Awk程序由一系列的模式(pattern)和动作(action)组成, 模式用于描述在输入的文本中搜索哪些数据, 当某一行文本搜索到(即匹配某个模式)之后,动作定义了如何操作该行文本。

程序格式

一个awk程序格式如下:

pattern { action }

awk的操作逻辑是扫描文本每一行, 搜索可以被模式(pattern)匹配的行, 若行能够匹配模式,则接着进行执行动作(action)。

在扫描每一行过程中,awk会自动把当前行分解为一个个的字段,默认是空格进行分割,\(0表示当前行内容,\)1为当前行的第一段,$2为当前行的第二段,以此类推。

Ansible如何通过跳板机连接目标机器

Ansible是配置管理工具,能够自动化部署,管理服务器。在实际工作中,我会用ansible来进行项目依赖的服务部署,比如nginx服务器,redis等部署。

在生产环境下,多台服务器往往部署在一个局域网内,没有公网ip,也不会对外暴露端口,这就导致本地不能通过ssh直接连接生产服务器。它需要连接到跳板机后然后再进行生产服务器操作。通过跳板机操作一来更安全,二来可以更好的监控和权限控制,但如果想要本地使用ansible对服务器进行操作,就被限制住了。此时我们可以更改ssh配置进行处理,已达到本地机器"直接"连接远程生产机器的目的。

Tmux——终端复用神器

Tmux是终端复用器(terminal multiplexer)的缩写。通过启动Tmux会话,然后在该会话中打开多个窗口,并且分屏形成矩形窗格,执行不同操作,能极大提高终端操作效率。tmux支持的特性有:

  1. 支持创建任意数量的窗口(window)
  2. 支持同一个窗口创建任意数量的窗格(panel)
  3. 支持垂直或水平分割窗口,并可以任意调整窗格大小
  4. 支持会话分离和重连
  5. 允许用户之间进行会话分享

Supervisor快速使用指南

简介

Supervisor是用于监控和管理类UNIX操作下进程的C/S系统。Supervisor不是作为进程id为1的init的替代,它只是用来控制应用程序的进程,它会跟其他进程开机启动时候一样,通过pid为1的进程启动。为了高可用,它本身也需要监控。

Supervisor的构成有4部分:

  • supervisord

    supervisord是Supervisor的守护进程,是C/S中S端,它响应客户端的命令,监控,重启奔溃异常退出的子进程,以及记录子进程的stdoutstderr等。supervisord默认配置文件是/etc/supervisord.conf

  • supervisorctl

    supervisorctl是Supervisor的命令行客户端,supervisorctl工作原理是发送命令给supervisord,来对其他进程的启动,关闭等操作

  • Web Server

    Supervisor也支持web形式客户端

  • XML-RPC Interface

    Supervisor提供了XML-RPC接口,通过此接口,我们可以询问和控制supervisor

Jupyter Notebook部署

Jupyter Notebook 是科学计算必备工具之一,它是一个开源的web应用程序,允许你创建和共享实时代码,可以用来进行数据清理和转换、统计建模、数据可视化、机器学习等等工作。

下面是使用supervisour和nginx来部署公开jupyter notebook服务过程。

安装jupyter notebook

推荐python3环境下安装jupyter。我系统是Ubuntu 18.04里面内置了python3,所以直接安装jupyter,如果系统python版本是python2.7,可以使用virtualenvwrapper进行多版本python管理。

下面使用pip来安装jupyter notebook

sudo apt-get install python3-pip // 安装pip3
sudo pip3 install jupyter // 安装jupyter

Docker使用过程中问题汇总

下面是我在使用docker过程中遇到的一些问题以及解答,现记录下来备查。

1. 为什么有很多<none>:</none>镜像,有的删除不掉,有些却删除不掉?

我们执行命令docker images -a有时候会发现不少:镜像,使用docker rmi image_name删除这些none镜像时候,有时候能够成功,有时候却不能成功。这究竟为什么?

我们知道镜像是分层的,上面一层依赖下一层,下一层是上一次的父镜像层。就像下面这样:

我们可以通过docker inspect查看镜像ID 和父层镜像ID