免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 17111 | 回复: 3
打印 上一主题 下一主题

如何正确地设置系统环境变量PATH [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-15 12:06 |只看该作者 |倒序浏览
如何正确地设置系统环境变量PATH

内容提要:
系统环境变量PATH 定义了用户执行的命令在系统中的查找顺序。如果在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" 来执行当前目录下的程序,稍微麻烦一些,但为了消除系统的安全隐患,这么做还是值得的。

评分

参与人数 1可用积分 +2 收起 理由
yuhuohu + 2 我很赞同

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2007-10-15 12:51 |只看该作者
鼓励LZ,不过有些小错请修订比如
PATH=:/usr/ucb:/bin:/usr/bin export PATH
PATH= . :/usr/ucb:/bin:/usr/bin export PATH

应该是
PATH=:/usr/ucb:/bin:/usr/bin ; export PATH
PATH= . :/usr/ucb:/bin:/usr/bin ; export PATH

论坛徽章:
0
3 [报告]
发表于 2007-10-15 13:21 |只看该作者
学习一下,楼主写的好

论坛徽章:
0
4 [报告]
发表于 2007-10-15 13:26 |只看该作者

谢谢指点

谢谢指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP