在 Uncategorized 分类下的文章

XCP/XenServer自动化创建并初始化VM

参考资料:http://wiki.xenproject.org/wiki/XCP_Beginners_Guide

在我们的生产环境中,之前一直使用的是EC2的Instances做的前端服务器,在访问量增加的时候,通过设置一个阈值,超过阈值的就自动触发创建一定数量的新的Instances,在访问量低于某一个值的时候,就自动删除一定数量的Instances;由于AWS可以根据设置好的模板复制出一个新主机并且给予一个新的IP地址,所以只需要管理好主机名就是了;这方面,我们通过一个Redis数据库来管理主机名的ID,创建主机的时候会自动根据最大的ID依次递增,而删除主机的时候会自动根据最大的ID依次递减。
但这并不是我这篇文章要讲的重点,要实现这种自动伸缩,方法有很多,我们就是通过很多简单的脚本来实现的。

后来,我们建立了本地机房,购买了一定数量的物理服务器,每台服务器安装了XCP,并打算在上面创建虚拟机。之前我们一直通过的是XenCenter的方式,图形化的操作来创建,但是要实现和上面EC2一样的自动化创建主机的话,我们遇到了一个问题,那就是,每台新建的VM,其IP地址与主机名等在复制之后,不能自动更新。我请教过一些同行,可能是他们并没有这样大规模的使用XCP/XenServer,所以都是在XenCenter里面创建好机器,然后通过console进去修改IP地址和主机名等等。

于是乎,我就在Google上反复搜索,最终找到了一个解决办法。那就是通过修改VM的内核引导程序,将自定义的参数传递给一个叫PV-args的内核参数,这样在VM启动之后就可以通过/proc/cmdline中获取到参数了,在获取到之后,VM在第一次启动时,会执行一个Shell脚本,来根据自定义的参数更新IP地址和主机名等;这样,一台新创建好的VM就可以自动连接到Puppet这样的管理工具了,接着再自动拉取最新的配置,完成整个服务器的自动化配置,然后上线。

环境介绍:
xenhost1 一台物理XCP/XenServer主机
vm-template 之前定义好的模板
vm-host-1 将要创建的VM

以下,就是我的具体操作记录:
获取vm-template的uuid
[root@xenhost1 ~]# xe vm-list | grep -B 1 vm-template

uuid ( RO)           : c77040ae-3a50-9217-ff03-41992c34d1ec
     name-label ( RW): vm-host-1

修改内核启动方式,并传递自定义参数
[root@xenhost1 ~]# xe vm-param-set uuid=c77040ae-3a50-9217-ff03-41992c34d1ec HVM-boot-policy=""
[root@xenhost1 ~]# xe vm-param-set uuid=c77040ae-3a50-9217-ff03-41992c34d1ec PV-bootloader="pygrub"
[root@xenhost1 ~]# xe vm-param-set uuid=c77040ae-3a50-9217-ff03-41992c34d1ec PV-args="_hostname=vm-template _ipaddr=192.168.1.121 _netmask=255.255.255.0 _gateway=192.168.1.1"

启动vm-template
[root@xenhost1 ~]# xe vm-start vm=vm-template

获取自定义参数
[root@vm-template ~]# cat /proc/cmdline

ro root=/dev/mapper/vg_t-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_LVM_LV=vg_t/lv_root crashkernel=129M@0M  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet  _hostname=vm-template _ipaddr=192.168.1.121 _netmask=255.255.255.0 _gateway=192.168.1.1

定义初始化脚本
[root@vm-template ~]# cat /etc/rc.local

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
/root/bootstrap.sh

创建具体的脚本
[root@vm-template ~]# touch /root/bootstrap.sh
[root@vm-template ~]# chmod +x /root/bootstrap.sh
阅读全文 »

, , ,

8 Comments

XCP/XenServer资源监控脚本分享[原创]

一直以来我都以每个月至少一篇原创技术文章来要求自己,不过有的时候真的太懒了,在这里鄙视一下自己。
今天已经是这个月的最后一天了,其实近期的工作,有很多东西都是可以总结成文章分享给大家的。

有一些用Python和Shell写的脚本,我都放到了GitHub上,其中一个就是XCP/XenServer资源监控的脚本。
XCP/XenServer的XenCenter只有Windows下的客户端,命令行要获取可用的CPU,内存以及磁盘,并没有那么方便,需要通过各个命令行去获取。有的命令还必须在host主机本身运行才可以,比如 xl,因此我在各个XCP/XenServer的宿主OS之间都配置了ssh-key的信任。

我们的环境是由10多台物理服务器装上XCP构成的一个Pool,Pool的Manager是第一个XCP,然后存储是用的每台服务器本身的硬盘。
脚本的输出结果如下:

[root@xen1 ~]# vm_monitor
-------------------------------------------------------
Host xen1: vm-server1 vm-server2
Available: Mem=13/95G  Disk=6/1108G  CPU=18/24Cores
-------------------------------------------------------
Host xen2: vm-server3 vm-server4
Available: Mem=13/95G  Disk=6/1108G  CPU=18/24Cores
-------------------------------------------------------
Host xen3: vm-server5 vm-server6 vm-server7 vm-server8 vm-server9 vm-server10
Available: Mem=13/63G  Disk=151/549G  CPU=8/24Cores
-------------------------------------------------------
Host xen4: vm-server11 vm-server12 vm-server13 vm-server14
Available: Mem=22/63G  Disk=11/549G  CPU=12/24Cores

具体的脚本内容如下:

#!/bin/bash

function get_info(){
  host_name=$1
  host_uuid=$(xe host-list |grep -w ${host_name} -B1 |grep -w uuid |awk '{print $NF}')
  guest_vm=$(xe vm-list resident-on=${host_uuid} is-control-domain=false |grep -w name-label |awk '{print $NF}' |sort -n |xargs)
   
  t_mem_b=$(xe host-param-list uuid=${host_uuid} |grep -w memory-total |awk '{print $NF}')
  f_mem_b=$(xe host-param-list uuid=${host_uuid} |grep -w memory-free-computed |awk '{print $NF}')
  t_mem_g=$(($t_mem_b/1024/1024/1024))
  f_mem_g=$(($f_mem_b/1024/1024/1024))

  xe sr-list |grep -A2 -B3 -w ${host_name} |grep -A1 -B4 -Ew 'lvm|ext' |grep -w name-label |awk -F ': ' '{print $2}' > /tmp/sr_items.tmp
  disk_info=""
  while read sr_name
  do
    disk_uuid=$(xe sr-list |grep -A 2 -B 1 "$sr_name" |grep -B 3 -w "$host" |grep uuid |awk -F ": " '{print $2}')
    t_disk_b=$(xe sr-param-list uuid=$disk_uuid |grep physical-size |cut -d : -f 2)
    u_disk_b=$(xe sr-param-list uuid=$disk_uuid |grep physical-utilisation |cut -d : -f 2)
    f_disk_b=$(($t_disk_b-$u_disk_b))
    t_disk_g=$(($t_disk_b/1024/1024/1024))
    f_disk_g=$(($f_disk_b/1024/1024/1024))
    disk_info="${f_disk_g}/${t_disk_g}G $disk_info"
  done < /tmp/sr_items.tmp

  t_cpu_num=$(xe host-param-list uuid=${host_uuid} |grep -w 'cpu_count' |awk '{print $4}' |cut -d";" -f1)
  v_cpu_sum=0
  for vm in $guest_vm
  do
    vm_uuid=$(xe vm-list |grep -B 1 -w $vm |head -n 1 |awk -F ": " '{print $2}')
    v_cpu_num=$(xe vm-list params=VCPUs-number uuid=${vm_uuid} |grep -w VCPUs |awk -F ": " '{print $2}')
    v_cpu_sum=$(($v_cpu_sum+$v_cpu_num))
  done
  f_cpu_num=$(($t_cpu_num-$v_cpu_sum))
   
  echo "Host $host_name: \"$guest_vm\""
  echo "Available: \"Mem=${f_mem_g}/${t_mem_g}G  Disk=${disk_info} CPU=${f_cpu_num}/${t_cpu_num}Cores\""
}

if [ $# == 0 ]; then
  host_list=$(xe host-list |grep name-label |awk '{print $4}' |cut -d. -f1 |sort -n)
  for host_name in $host_list
  do
    echo "-------------------------------------------------------"
    get_info ${host_name}
  done
else
  get_info $1
fi

,

No Comments

坑爹的nextgen-gallery插件导致MySQL binlog暴涨

我的Blog在优化过后,一直运行良好,速度也很快。可是从昨天开始突然就变得很卡,登陆到服务器上一看,我擦,磁盘空间占用率100%。仔细一看MySQL binlog占据了绝大部分空间,增长速度迅猛,每10分钟500M的节奏。

fuckedbyng1

这肯定不正常啊,我去。我平均每个月才更新1-3文章。而且前来评论的人也不多,就算是Spam也不会有这么大的量啊。为了找出到底是什么SQL的干活,我停掉了Nginx,然后登陆到mysql中,选定一个binlog文件,执行"mysql -uroot -p -e 'show binlog events in 'binlog.000041' limit 10;' > /tmp/fuckedbyng.log",然后就看到了不断重复的那个坑爹的SQL。

fuckedbyng2

通过这个SQL中的相关内容,Google到了问题的原因,那就是坑爹的刚刚更新过的nextgen-gellery插件的一个Bug。
http://wordpress.org/support/topic/a-warning-ngg_delete_expired_transients-cronjob

fuckedbyng3

在上面的论坛中,有人给出了解决方案,就是注释掉一部分更新后产生的新的相关代码。
因为我已经被激怒了,所以我首先按照以上方法修正了这个bug,再重新启动了我的Nginx,接着直接删除了这个坑爹的插件。其实我本身也不太用得上这个相册插件,呵呵。

, ,

2 Comments

Ansible实战之 自动安装部署MooseFS 以及 与Salt的相关比较

前段时间,了解并学习了Salt,感觉非常不错,于是有了想法和打算要替换掉线上的Puppet。
可是最近情况不妙,一名新加入的同事,极力推荐Ansible,并列举了很多Ansible比Salt优越的地方。当时我对Ansible还不了解,因此不能与其争论,到底谁好谁坏也无法做出判断。
于是,我就选择了之前在Salt上实现过的同一个案例 “自动安装部署MooseFS”,来将它用Ansible实现一遍。在经历了一段时间的学习和填坑的过程之后,终于完成了,同时也有了一些心得。

我参考的是官方文档,从 Getting Started 开始,接着重点参考了 ModulesPractices ,以及 官方的Hadoop示例

我的相关Ansible代码都放在了GitHub上,具体结构如下:
$ tree

.
|-- group_vars
|   |-- all
|   `-- moosefs_all
|-- moosefs.hosts
|-- moosefs.yml
|-- roles
|   |-- common
|   |   `-- tasks
|   |       `-- main.yml
|   |-- moosefs_chunkserver
|   |   |-- handlers
|   |   |   `-- main.yml
|   |   |-- tasks
|   |   |   `-- main.yml
|   |   `-- templates
|   |       |-- mfschunkserver.cfg.j2
|   |       `-- mfshdd.cfg.j2
|   |-- moosefs_client
|   |   `-- tasks
|   |       `-- main.yml
|   |-- moosefs_common
|   |   `-- tasks
|   |       `-- main.yml
|   |-- moosefs_master
|   |   |-- files
|   |   |   `-- index.html
|   |   |-- handlers
|   |   |   `-- main.yml
|   |   |-- tasks
|   |   |   `-- main.yml
|   |   `-- templates
|   |       |-- httpd.conf.j2
|   |       |-- mfsexports.cfg.j2
|   |       |-- mfsmaster.cfg.j2
|   |       `-- mfsmetalogger.cfg.j2
|   `-- moosefs_metalogger
|       |-- handlers
|       |   `-- main.yml
|       |-- tasks
|       |   `-- main.yml
|       `-- templates
|           `-- mfsmetalogger.cfg.j2
`-- site.yml

阅读全文 »

,

5 Comments

SFTP配置与用户管理脚本分享[原创]

公司需要建立一个FTP来管理客户的文件上传,为了安全性我们打算采用SFTP,并要求每个客户通过SSHKEY登陆。
或许你会说:“SFTP不需要配置啊,有SSH直接就可以用了”。的确,但是我们不希望用户能够通过SSH登陆到我们的服务器上,我们希望每个客户只能通过SFTP来管理自己的文件,同时我们还想统一的来管理所有客户的目录。有了这样的需求,默认的SSH配置就不能满足了。

下面,是SFTP的配置步骤,以及我编写的一个用户管理脚本:
1.修改SFTP相关配置
$ sudo vim /etc/ssh/sshd_config

# override default of no subsystems
#Subsystem	sftp	/usr/libexec/openssh/sftp-server
Subsystem	sftp	internal-sftp

Match Group sftpusers
        ChrootDirectory /home/sftp/%u
        ForceCommand internal-sftp

$ sudo /etc/init.d/sshd restart

2.创建用户管理脚本
$ sudo vim sftpusers.sh

#!/bin/bash
#
# Manage sftp users for customers
#  
# Author: Dong Guo
# Last Modified: 2013/09/06 by Dong Guo

userfile=/etc/passwd
groupfile=/etc/group
homedir=/home/sftp
loginshell=/sbin/nologin
groupname=sftpusers
username=$2

function check_root()
{
  if [ $EUID -ne 0 ]; then
    echo "This script must be run as root" 1>&2
    exit 1
  fi
}

function print_help(){
  #Print help messages then exit
  echo "Usage: $0 {create|disable|enable|passwd|sshkey|delete} {username}" >&2
  exit 1
}

function check_usergroup(){
  #Create usergroup if NOT exist
  cut -d : -f 1 $groupfile | grep -wq $groupname
  if [ $? -ne 0 ];then
    groupadd $groupname
  fi
}

function check_homedir(){
  #Create homedir if NOT exist
  if [ ! -d "$homedir" ];then
    mkdir $homedir
  fi
}

function check_username_exist(){
  #Check if user already exist
  cut -d : -f 1 $userfile | grep -wq $username
  if [ $? -eq 0 ];then
    echo "User $username ALREADY exist." && exit
  fi
}

function check_username_notexist() {
  #Check if user not exist
  cut -d : -f 1 $userfile | grep -wq $username
  if [ $? -ne 0 ];then
    echo "User $username NOT exist." && exit
  fi
}

function check_user_disabled(){
  #Check if user ALREADY disabled
  lockfile=$homedir/$username/sftpuser.locked
  if [ -a "$lockfile" ]; then
    echo "User $username ALREADY disabled." && exit
  fi
}

function update_sshkey(){
  #Get the sshkey
  echo -n "Input ssh public key: "
  read sshkey
  #Check if sshkey is empty
  if [ -z "$sshkey" ];then
    echo "Empty ssh public key." && exit
  fi
  #Check if sshkey not correct
  echo $sshkey | grep -Ewq '^ssh-rsa|^ssh-dss'
  if [ $? -ne 0 ];then
    echo "String \"ssh-rsa\" or \"ssh-dss\" NOT found." && exit
  fi
  mkdir $homedir/$username/.ssh
  chmod 700 $homedir/$username/.ssh
  echo "$sshkey" > $homedir/$username/.ssh/authorized_keys
  chmod 600 $homedir/$username/.ssh/authorized_keys
  chown -R $username:$groupname $homedir/$username/.ssh
}


if [ $# != 2 ];then
  print_help
fi

check_root
check_usergroup
check_homedir

case "$1" in
  'create')
    check_username_exist
    useradd -m -d "$homedir/$username" -g $groupname -s $loginshell -c "$username sftp" $username
    chmod 755 $homedir/$username
    chown $username:$groupname $homedir/$username
    if [ $? -eq 0 ]; then
      echo "User $username was created."
    fi
    ;;
   
  'disable')
    check_username_notexist
    passwd -l $username
    touch $homedir/$username/sftpuser.locked
    authfile=$homedir/$username/.ssh/authorized_keys
    if [ -a "$authfile" ]; then
      mv $authfile $authfile.disabled
    fi
    if [ $? -eq 0 ]; then
      echo "User $username was disabled."
    fi
    ;;
  
  'enable')
    check_username_notexist
    passwd -u $username
    rm -f $homedir/$username/sftpuser.locked
    authfile=$homedir/$username/.ssh/authorized_keys
    if [ -a "$authfile.disabled" ]; then
      mv $authfile.disabled $authfile
    fi
    if [ $? -eq 0 ]; then
      echo "User $username was enabled."
    fi
    ;;
   
  'delete')
    check_username_notexist
    echo -n "Delete all the data and account of user $username? [yes|no] "
    read yesorno
    if [ "$yesorno" == "yes" ];then
      userdel -rf $username
      if [ $? -eq 0 ]; then
        echo "User $username was deleted."
      fi
    fi
    ;;

  'passwd')
    check_username_notexist
    check_user_disabled
    passwd $username
    ;;
   
  'sshkey')
    check_username_notexist
    check_user_disabled
    update_sshkey
    if [ $? -eq 0 ]; then
      echo "The sshkey of user $username was updated."
    fi
    ;;
       
  *)
    print_help
    ;;
esac

$ sudo chmod +x sftpusers.sh

3.创建SFTP用户并测试
$ ./sftpusers.sh

Usage: ./sftpusers.sh {create|disable|enable|passwd|sshkey|delete} {username}

阅读全文 »

2 Comments

使用screen命令进行多人协同操作

Linux在需要将某个命令放到后台操作的时候,有好几种方式,使用screen就是其中一种。
今天我要给大家展示的是如何通过screen进行多人协同操作,以及新人培训。
具体应用场景如下:
1. 公司来了一位新人Dong,上面安排了名叫Zaur的老员工来进行入职培训;
2. 培训的内容涉及到一些线上环境的介绍,其中有Puppet,Hadoop等。

Zaur作为一个前辈,想到了一个非常好的办法,那就是带着Dong一起到命令行里面去操作,具体实现的方法,就是将一个screen终端切割成多个窗口,按照培训章节命名,Dong登陆到screen终端实时体验Zaur的操作,并在Zaur的要求下进行重复操作以加深印象。

首先,Zaur首先登陆到一台普通的服务器,创建好对应的终端:
$ cp /etc/screenrc ~/.screenrc

启用多窗口功能,取消以下选项前的注释
$ vim ~/.screenrc

caption always "%{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw %=%{mk}@%H %{yk}%D %{ck}%M%{wk} %{ck}%d %{gk}%c"

$ screen -dmS training
$ screen -r training

然后创建好培训所需的章节(多窗口,相关按键)
Ctrl + a,进入编辑状态

进入编辑状态后相关操作如下:
Shift + a, 重命名当前窗口
c, 创建新窗口
1-9,进入指定编号的窗口
\, 询问是否关闭整个终端
d, 挂起整个终端
exit, 退出当前窗口

按照培训计划创建的窗口如下:
screen-windows

然后,Dong所需要做的事情,就是使用相同的账号登陆到相同的机器上,连接上Zaur创建的终端,然后切换到对应的窗口,这样Zaur做的所有操作,都会实时的展现出来,还可以进行操作。

$ screen -x training

No Comments

安装配置高性能SSH Server - HPN-SSH

HPN-SSH 是一款高性能的SSH Server,主要通过Patch补丁的方式集成到OpenSSH得到应用。
根据官方的各种数据展示,在数据传输上的性能是OpenSSH的10倍。
如果我们采用了OpenSSH通道进行数据传输,比如通过SCP,Rsync等方式,那么采用HPN-SSH是一个不错的选择。

我的思路是将HPN-SSH整个编译安装到/opt/hpn-ssh目录下面,同时绑定6022号端口与指定特定路径的PID文件,这样就可以与系统原有的OpenSSH同时运行,互不影响。

下面是具体的安装与配置步骤:
1. 下载OpenSSH
# wget http://ftp5.usa.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.1p1.tar.gz

2. 下载HPN-SSH补丁
Download HPN SSH Patch for OpenSSH 6.1
http://www.psc.edu/index.php/component/remository/func-startdown/861/

3. 解压OpenSSH并引用HPN-SSH补丁
# tar xzvf openssh-6.1p1.tar.gz
# gzip -d openssh-6.1p1-hpn13v14.diff.gz

# cd openssh-6.1p1
# patch < ../openssh-6.1p1-hpn13v14.diff # ./configure --prefix=/opt/hpn-ssh # make # make install 4. 修改配置文件 # vim /opt/hpn-ssh/etc/sshd_config

port 6022
Protocol 2
SyslogFacility AUTHPRIV
PermitRootLogin no
AuthorizedKeysFile	.ssh/authorized_keys
X11Forwarding yes
#UsePrivilegeSeparation sandbox		# Default for new installations.
PidFile /opt/hpn-ssh/run/sshd.pid
Subsystem	sftp	/opt/hpn-ssh/libexec/sftp-server

5. 编写Service脚本
# vim /etc/init.d/hpn-sshd

#!/bin/bash
#
# Start up the HPN-SSH Plugged-in OpenSSH server daemon
#

PROG=HPN-SSH
HPN_SSH_HOME=/opt/hpn-ssh
SSH_KEYGEN=$HPN_SSH_HOME/bin/ssh-keygen
SSHD=$HPN_SSH_HOME/sbin/sshd
SSHD_CONFIG=$HPN_SSH_HOME/etc/sshd_config
PID_FILE=$HPN_SSH_HOME/run/sshd.pid

check_root()
{
  if [ $EUID -ne 0 ]; then
    echo "This script must be run as root" 1>&2
    exit 1
  fi
}

check_ssh_keys()
{
  if [ ! -a $HPN_SSH_HOME/etc/ssh_host_key ]; then
    $SSH_KEYGEN -A
  fi
}

start()
{
  check_root
  check_ssh_keys
  echo $"Starting $PROG..."
  $SSHD -f $SSHD_CONFIG
}

stop()
{
  check_root
  echo $"Stopping $PROG..."
  if [ -a $PID_FILE ] ; then
    kill -9 `cat $PID_FILE`
    rm -f $PID_FILE
  else
    echo "PID_FILE:$PID_FILE does NOT exist"
    exit 1
  fi
}

restart() {
  stop
  start
}

status() {
  SSHD_PORT=`grep -E '^Port' $SSHD_CONFIG`
  RUNNING_PID=`ps aux | grep $SSHD_CONFIG | grep -v grep | awk '{print $2}'`
  if [ -a $PID_FILE ] ; then
    if [ -z $RUNNING_PID ]; then
      echo "PID_FILE:$PID_FILE exists but $PROG is NOT running"
      exit 1
    fi
    echo "$PROG is running at PID:`cat $PID_FILE` on $SSHD_PORT"
  else
    echo "$PROG is stopped"
    exit 1
  fi
}

case "$1" in
  start)
    start
    sleep 1
    status
    ;;
  stop)
    stop
    status
    ;;
  restart)
    restart
    ;;
  status)
    status
    ;;
  *)
    echo $"Usage: $0 {start|stop|restart|status}"
esac

# chmod +x /etc/init.d/hpn-sshd

6. 启动关闭HPN-SSH
# /etc/init.d/hpn-sshd start

Starting HPN-SSH...
HPN-SSH is running at PID:19657 on Port 6022

# /etc/init.d/hpn-sshd stop

Stopping HPN-SSH...
HPN-SSH is stopped

2 Comments

源码编译安装配置Lighttpd

1. 安装系统依赖
# yum -y install glib2-devel openssl-devel pcre-devel
# yum -y install gcc gcc-c++ make

2. 下载源码包并编译安装
# wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.32.tar.gz
# tar -zxvf lighttpd-1.4.32.tar.gz
# cd lighttpd-1.4.32
# ./configure
# make
# make install

3. 创建启动脚本与配置文件
# sed -e 's/FOO/lighttpd/g' doc/initscripts/rc.lighttpd.redhat > /etc/init.d/lighttpd
# chmod 755 /etc/init.d/lighttpd
# echo "LIGHTTPD_CONF_PATH=/etc/lighttpd/lighttpd.conf" > /etc/sysconfig/lighttpd
# install -Dp ./doc/config/lighttpd.conf /etc/lighttpd/lighttpd.conf
# cp -R doc/config/conf.d/ /etc/lighttpd/
# cp doc/config/conf.d/mod.template /etc/lighttpd/modules.conf

4. 创建执行用户
# ln -s /usr/local/sbin/lighttpd /usr/sbin/lighttpd
# mkdir -p /srv/www/htdocs
# groupadd lighttpd
# adduser -M -g lighttpd -s /sbin/nologin lighttpd
# chown -R lighttpd:lighttpd /srv/www

# mkdir /var/log/lighttpd
# chown lighttpd:lighttpd /var/log/lighttpd

5. 修改相关配置
# vim /etc/lighttpd/modules.conf
---
#server.modules += ( "mod_Foo" )

# vim /etc/lighttpd/lighttpd.conf
---
server.use-ipv6 = "disable"

6. 启动Lighttpd
# /etc/init.d/lighttpd start

No Comments

以前我将信将疑,现在我深信不疑。

经过我的抽样测试,已经可以证明,WooYun的第二批爆料也是真实的:
http://www.wooyun.org/bugs/wooyun-2010-03523
看来黑客们的世界真的是很阴暗的,我们只不过看到了冰山一角,就足以如此震惊。

一位前辈告诉我,他在国内的一些安全论坛很早就看到了相关的传言,后来经过证实绝大多数都是是真实的,也告诉我早就存在于一些专门盗取用户账号与信息的组织了,专业程度非常惊人。

以下是其中部分信息:
第一个地下组织,我简称密码组织,该密码组织经过多年的发展,已经掌握了国内几乎所有人的网上密码。这些密码包括几乎国内所有论坛、邮箱等等密码,密码库早已达到TB级边,我随手给了些名不见经传的小站邮箱(随手google的),70%小站的任意邮箱密码全查出来了,知名站点就更不在话下,包括网站管理密码。主要的思路建立在我03年提出的一个研究未来攻击思维的文章,在这就不必多说了。他们搞站点、搞邮箱密码全是直接查出来的,根本不需要攻击,成功率极高。这是那个帖子里的内容,我2月前看到的,后来的验证,基本上都是真的。
第二个地下组织,秘密武器是自己研发的攻击平台,其中包含有大量的0day以及未公开的攻击技术。业内有一些搞站的特殊业务,有些业内众牛都无法搞定的高安全性站点,只要肯花钱,交给他们,他们都能拿下来。我试着给了几个全球排名前十的公司的主站,瞬间全拿到了root。
……

如此看来,“你以为你在冲浪,其实你在裸奔”,这句话真的不假,我之前刚刚接触抓包,数据监控,分析和过滤的一些安全设备和技术的时候,都非常惊讶,原来门槛真的不高,很容易就可以学会,当自己看到周围人的所有上网数据尽收眼底的时候,当参与到一个与中国移动垃圾短信过滤的项目中的时候,我发现原来所有的互联网信息安全其实都是假象。

在这次CSDN和人人网等大型网站用户账号与密码的泄露被自己亲自证实之后,以前我所有将信将疑的事情,现在我都深信不疑。

下面,公布部分泄露出来的迅雷下载地址:

(多玩网-800W) (猫扑-1000W) (人人网-500W) (CSDN-600万)
(7k7k小游戏-2000万) (嘟嘟牛) (178游戏网-1000W)

8 Comments

悲剧的CSDN!600多万用户账号与密码泄露!!

今天,在技术群里有人贴出了一个链接,链接直接到了WooYun.org漏洞报告平台,提到了一个CSDN的漏洞信息: http://www.wooyun.org/bugs/wooyun-2010-03692
文章标题非常引人注目:“CSDN数据库泄露,大量用户真实账号密码外泄。”

我看了以后将信将疑,赶快追随其提到的迅雷分享链接,取到了大小为274M的后缀为sql的文件(其实不是真正的SQL)。为了方便通过grep查询,我将该文件传到了自己一台Linux服务器上,首先很迫切的就是想查询一下自己的密码,看是不是真的,结果经过查询之后!非常震惊!自己的密码就放在那里!!当初为了安全还设置的很复杂,结果还是敌不过垃圾到无法形容的CSDN!震惊之余我赶快把所有用到该密码的地方都一一修改了!

接着出于好玩,让周围很多朋友和同事告诉我他们的账号,结果绝大多数都被我把密码给查出来了,他们也非常吃惊,并不停的骂CSDN垃圾,一个个都急着去更新密码。

这次不管CSDN给出怎样的解释,都是无济于事的,用户名和密码,最起码也是应该经过MD5加密的,这一点最初级的程序员都知道。这次完全暴露了CSDN作为一个技术社区在技术上的拙劣!我奉劝大家今后都不要把自己的Blog和社区活动放在CSDN上了。

下面是我在Linux服务器上操作的部分截图,文件我保留下来了,这东西非常值得纪念。

这里是CSDN创始人蒋涛的新浪微博截图,他们给出的理由是备份文件被泄露,也就直接说明了所有用户的密码是未经过加密存储的,真的很垃圾!有黑客说根本不像是备份,而是通过注入导出的,不过只导出了用户名,密码和邮箱字段。

,

No Comments