免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-15 12:06 |只看该作者 |倒序浏览
如何正确地设置系统环境变量PATH \r\n\r\n内容提要: \r\n系统环境变量PATH 定义了用户执行的命令在系统中的查找顺序。如果在PATH 变量中指定了当前目录“. ”,就有可能给系统安全带来隐患。它是如何发生的,又将如何避免呢?\r\n\r\n\r\n说明 : \r\n-------------------------------------------------------------------------------- \r\n首先对系统环境变量PATH 的背景知识做一些简单介绍:\r\n环境变量PATH 是由一连串由冒号隔开的目录名组成,它定义了用户执行的命令在系统中的查找顺序。当你输入一条命令但没有指定绝对路径时(譬如,输入\" ls \" 而不是\" /bin/ls \" ),你的命令行解释器(shell) 将会按照PATH 中给出的路径顺序依次查找,直到找到和所输入命令名称相同的可执行文件,然后再执行这个文件。PATH 变量一般在用户配置文件$HOME/ . profile, 或系统环境配置文件/etc/environment 中定义。\r\n\r\n在PATH 变量中我们常会用到当前目录“. ”,另外,在PATH 中同样可以用空目录名来代表当前目录,二者是等效的。\r\n对csh 用户,格式如下:\r\n\r\nsetenv PATH :/usr/ucb:/bin:/usr/bin \r\nsetenv PATH . :/usr/ucb:/bin:/usr/bin \r\n\r\n对sh 或ksh 用户:\r\n\r\nPATH=:/usr/ucb:/bin:/usr/bin export PATH \r\nPATH= . :/usr/ucb:/bin:/usr/bin export PATH \r\n\r\n在PATH 变量中加入当前目录“. ”会带来很多方便-- 要想执行当前目录下的程序a.out ,我们只需要输入“a.out ”而不必输入“. /a.out ”。但这同时也带来了潜在的安全隐患。\r\n\r\n我们可以想一想当前目录“. ”处于PATH 的第一位时(就像这样 PATH= . :/usr/ucb:/bin:/usr/bin ),会发生什么问题?\r\n\r\n假设你-- 系统管理员-- 的当前目录是一个所有用户都有写权限的公用目录,如/tmp 。如果恰好有人在这个目录下放了他自己的程序\" /tmp/ls \" ,这时你输入\" ls \" 并且执行(当然,你的本意是执行\" /bin/ls \" 程序,就像通常一样),可你的命令行解释器(shell) 实际执行的却是\" ./ls \", 也就是\" /tmp/ls \", 一个来路不明的程序!无须赘言,它的后果可能十分严重。如果它是木马程序等恶意软件,你的系统的安全性就已经被破坏了。\r\n\r\n所以一个相对好一点的方法是把当前目录“. ”放到PATH 的最后面,就像这样:\r\n\r\nPATH=/usr/ucb:/bin:/usr/bin: . \r\n\r\n现在你再在/tmp 目录下执行\" ls \" ,命令解释器将会依次搜索/usr/ucb,/bin 以及/usr/bin 目录去寻找\" ls \" 程序,这一切都发生在搜索当前目录“. ”之前,这样就降低了在无意中执行其他人的\" ls \" 程序的风险。但这种方法同样不是百分之百的安全-- 如果你是一个笨拙的输入者,有时会把\" ls -l \" 错敲成\" sl -l \", 那你仍然有运行\" ./sl \" 的风险,特别是当前目录还真有一个\" sl \" 程序的时候。有些“聪明的”攻击者会估计各种可能的输入错误,用它们来做程序的名字,并把它们放到各个公用目录下,所以要小心哟。\r\n\r\n因此很多经验丰富的UNIX 用户在PATH 中根本不加入当前目录“. ”,以避免潜在的安全隐患:\r\n\r\nPATH=/usr/ucb:/bin:/usr/bin \r\n\r\n对系统管理员来说,这是被强烈推荐的一种做法。虽然这样做,你需要输入\" . /program\" 来执行当前目录下的程序,稍微麻烦一些,但为了消除系统的安全隐患,这么做还是值得的。

论坛徽章:
0
2 [报告]
发表于 2007-10-15 12:51 |只看该作者
鼓励LZ,不过有些小错请修订比如\r\nPATH=:/usr/ucb:/bin:/usr/bin export PATH\r\nPATH= . :/usr/ucb:/bin:/usr/bin export PATH \r\n\r\n应该是\r\nPATH=:/usr/ucb:/bin:/usr/bin ; export PATH\r\nPATH= . :/usr/ucb:/bin:/usr/bin ; export PATH
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP