Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103042
  • 博文数量: 42
  • 博客积分: 1445
  • 博客等级: 上尉
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-28 13:57
文章分类

全部博文(42)

文章存档

2010年(10)

2009年(32)

我的朋友

分类: LINUX

2009-09-15 20:59:08

关于PATH安全注意

首先对系统环境变量PATH 的背景知识做一些简单介绍:
环境变量PATH 是由一连串由冒号隔开的目录名组成,它定义了用户执行的命令在系统中的查找顺序。当你输入一条命令但没有指定绝对路径时(譬如,输入” ls ” 而不是” /bin/ls ” ),你的命令行解释器(shell) 将会按照PATH 中给出的路径顺序依次查找,直到找到和所输入命令名称相同的可执行文件,然后再执行这个文件。PATH 变量一般在用户配置文件$HOME/ . profile, 或系统环境配置文件/etc/environment 中定义。

在PATH 变量中我们常会用到当前目录“. ”,另外,在PATH 中同样可以用空目录名来代表当前目录,二者是等效的。
对csh 用户,格式如下:

setenv PATH :/usr/ucb:/bin:/usr/bin
setenv PATH . :/usr/ucb:/bin:/usr/bin

对sh 或ksh 用户:

PATH=:/usr/ucb:/bin:/usr/bin;export PATH
PATH= . :/usr/ucb:/bin:/usr/bin;export PATH

在PATH 变量中加入当前目录“. ”会带来很多方便– 要想执行当前目录下的程序a.out ,我们只需要输入“a.out ”而不必输入“. /a.out ”。但这同时也带来了潜在的安全隐患。

我们可以想一想当前目录“. ”处于PATH 的第一位时(就像这样 PATH= . :/usr/ucb:/bin:/usr/bin ),会发生什么问题?

假设你– 系统管理员– 的当前目录是一个所有用户都有写权限的公用目录,如/tmp 。如果恰好有人在这个目录下放了他自己的程序” /tmp/ls ” ,这时你输入” ls ” 并且执行(当然,你的本意是执行” /bin/ls ” 程序,就像通常一样),可你的命令行解释器(shell) 实际执行的却是” ./ls “, 也就是” /tmp/ls “, 一个来路不明的程序!无须赘言,它的后果可能十分严重。如果它是木马程序等恶意软件,你的系统的安全性就已经被破坏了。

所以一个相对好一点的方法是把当前目录“. ”放到PATH 的最后面,就像这样:

PATH=/usr/ucb:/bin:/usr/bin: .

现在你再在/tmp 目录下执行” ls ” ,命令解释器将会依次搜索/usr/ucb,/bin 以及/usr/bin 目录去寻找” ls ” 程序,这一切都发生在搜索当前目录“. ”之前,这样就降低了在无意中执行其他人的” ls ” 程序的风险。但这种方法同样不是百分之百的安全– 如果你是一个笨拙的输入者,有时会把” ls -l ” 错敲成” sl -l “, 那你仍然有运行” ./sl ” 的风险,特别是当前目录还真有一个” sl ” 程序的时候。有些“聪明的”攻击者会估计各种可能的输入错误,用它们来做程序的名字,并把它们放到各个公用目录下,所以要小心哟。

因此很多经验丰富的UNIX 用户在PATH 中根本不加入当前目录“. ”,以避免潜在的安全隐患:

PATH=/usr/ucb:/bin:/usr/bin

对系统管理员来说,这是被强烈推荐的一种做法。虽然这样做,你需要输入” . /program” 来执行当前目录下的程序,稍微麻烦一些,但为了消除系统的安全隐患,这么做还是值得的。

阅读(796) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~