检查不是由你运行的程序
难度:高级
应用程序:bash(译注:UNIX或者LINUX的shell)
想象下这个场景-你已经准备好了要和同事在办公室里对战一局快速的Crack Attack(译注:一款免费的OpenGL游戏,类似俄罗斯方块),不料却发现,当你正准备要击败你这个傲慢的下属时,方块却停止了-是什么让你的机器 变得这么慢?这肯定是因为其他的用户运用他们娴熟的经验来盗取你宝贵的CPU时间、服务器或者其他的诡异方式,真烦人!
好,让我们列举出系统中所有不是由你运行的程序!
代码语言:javascript复制ps aux | grep -v `whoami`
或者,更巧妙些的是,为什么不列出最占用时间的前十个程序呢:
代码语言:javascript复制ps aux--sort=-%cpu | grep -m 11 -v `whoami`
也许最好使用root权限来运行这条指令,因为这样可以过滤出大部分活跃的后台程序。现在你有了这些信息,你可以终止他们的进程,但是更“卑鄙”的是反复地在他们的桌面上运行xeyes(译注:Linux下的一条好玩的命令)!
简单地备份你的网站
难度:简单
应用程序:Backups
如果你想要从一台电脑上备份一个目录,但你仅仅想要复制改变的文件到它的备份而不是复制所有的东西到各自的备份,你可以使用工具rsync来实现它。你需要在这个远程的源备份计算机上有一个账户。下面是这条命令:
代码语言:javascript复制rsync -vare ssh jono@192.168.0.2:/home/jono/importantfiles/* /home/jono/backup/
这样我们就备份了192.168.0.2地址上/home/jono/importantfiles/目录下的所有文件到当前机器上的/home/jono/backup目录下。
找到最大的文件
难度:简单
应用程序:Shell
计算机中一个常见的问题是,你可能想删一部分大的文件(类似音频或视频片段)。如下你可以找到当前目录中最大的那个文件:
代码语言:javascript复制ls -lSrh
“r”的作用是将大的文件列在后面,而“h”则是给出易于人们阅读的输出(MB或者诸如此类)。你也可以搜寻最大的MP3/MPEG文件:
代码语言:javascript复制ls -lSrh *.mp*
你也可以通过下面这条命令搜寻最大的目录:
代码语言:javascript复制du -kx | egrep -v "./. /" | sort -n
只列出今天的文件
难度:简单
应用程序:Various
你可能熟悉这个问题,今天早些时候你创建了一个文本文档,而现在立刻就需要它。然而,你想不起来你给它起了个什么可笑的名字,作为一个熟练的 geek,你的家文件夹被836个不同的文件填满了。那你要如何找到它呢?哈哈,这里有很多方法,但是这个小技巧告诉你管道和结合使用两个强力的 shell命令是多么有效:
代码语言:javascript复制ls -al --time-style= %D | grep `date %D`
ls命令的参数使得这个日期戳以一种特殊的方式呈现。这个狡猾的位就是这样传递给grep来输出的。grep的参数是它自己的命令(因为是倒引号所 以执行),用来将当前的日期替代成匹配的字符。你可以轻易的修改它来搜索其他特别的日期、时间、文件大小或者任何东西。结合它与HACK 26是非常节省输入的。
传输文件但不使用ftp或者scp
难度:简单
应用程序:netcat
需要传输一个目录给其他服务器但是没有FTP或者SCP使用权?那么这个小技巧将会帮助你使用netcat功能。在目的服务器上运行:
代码语言:javascript复制nc -l -p 1234 | uncompress -c | tar xvfp -
并且在发送服务器上运行:
代码语言:javascript复制tar cfp - /some/dir | compress -c | nc -w 3 [destination] 1234
现在你就可以不需要FTP并且不需要root权限,就能传送文件了。
备份你的bootsector(引导扇区)
难度:高级
应用程序:Shell
妨碍引导装入,双启动和很多其他下热闹的程序会留给你一个混乱的引导扇区。为什么不在你可以备份的时候给它创建一个备份呢:
引导装载器混乱、双启动及许多其他的可怕的进程可能造成乱七八糟的启动区。
代码语言:javascript复制dd if=/dev/hda of=bootsector.img bs=512 count=1
很显然,你应该改变这个装置来显示你的boot驱动(有可能是SCSI的sda)。还要非常小心,别把事情搞砸——你可能会轻而易举地毁掉你的驱动!恢复时使用:
代码语言:javascript复制dd if=bootsector.img of=/dev/hda
保护日志文件
难度:高级
应用程序:很多
在一个入侵过程中,一个入侵者将会很可能在很多系统日志中留下能反映他行为的迹象:一个有价值的审计追踪应该被保护。没有可靠的日志,就很难发现攻 击者是如何侵入,或者是从哪里来的攻击。这个信息在分析事件、联系相关方面并给予反馈上,是很关键的。但是,如果入侵成功,什么才能阻止他来移除他的这些 错误行为的痕迹呢?
这就是文件属性能发挥作用、挽回败局的地方(或者至少使事情没那么糟)。Linux和BSD都有给文件和目录分配额外的属性这个功能。这不同于标准的Unix权限方案中,系统为所有的用户提供的普遍的属性设置,而且它们比文件权限或者ACL都要更深层次影响文件访问。
在Linux中,你可以看到并且通过lsattr和chattr命令分别修改一个给出文件的设置。在写这篇文章时,Linux的文件属性只能在你使 用ext2和ext3时获得。这还有些XFS和ReiserFS的关于获得属性支持的内核补丁。一个保护日志文件的有用的属性是append-only。 当这个属性被设置后,文件不能被删除,而且写操作只能被允许在文件的最后追加。
在Linux下要设置append-only标志,运行这条命令:
代码语言:javascript复制chattr afilename
看看 a属性是如何工作的:创建一个文件然后设置它的append-only属性:
代码语言:javascript复制touch /var/log/logfile
echo "append-only not set" > /var/log/logfile
chattr a /var/log/logfile
echo "append-only set" > /var/log/logfile
bash: /var/log/logfile: Operation not permitted
企图第二次写文件失败,因为它将覆盖这个文件。然而,在文件的末尾追加仍然是被允许的:
代码语言:javascript复制echo "appending to file" >> /var/log/logfile
cat /var/log/logfile
append-only not set
appending to file
显而易见,一个获得root特权的侵入者能意识到使用了文件属性,并且可以通过运行chattr -a来移除append-only标志。为了防止这种情况,我们需要禁用移除append-only属性的性能,在Linux下使用功能机制完成这个。
Linux功能模型分割特权给全能的root账户,并且允许你有选择的禁用它们。为了防止一个用户移除一个文件的append-only属性,我们 需要移除CAP_LINUX_IMMUTABLE功能。当体现在当前运行系统中时,这个功能允许append-only属性被修改。为了当前系统中获得修 改这个功能的设置,我们将简单有效地调用lcap(http://packetstormsecurity.org/linux/admin/lcap-0.0.3.tar.bz2).
为了解压和编译这个工具,运行这条命令:
代码语言:javascript复制tar xvfj lcap-0.0.3.tar.bz2 && cd lcap-0.0.3 && make
然后,不允许修改append-only标志,运行:
代码语言:javascript复制./lcap CAP_LINUX_IMMUTABLE
./lcap CAP_SYS_RAWIO
第一条命令移除了改变append-only标志的功能,然后第二条移除了原始I/O的功能。这是很有必要的,因为这样就能保护文件不被访问块设备 时驻留在其上的东西修改。这阻止了访问/dev/mem和/dev/kmem,有可能给入侵者提供恢复CAP_LINUX_IMMUTABLE功能的漏 洞。为了在boot上移除这项功能,添加之前的两条命令到你的系统启动脚本中(例如/etc/rc.local)。你应该确保这个功能在boot命令中被 移除了,防止其他启动脚本出问题。一旦lcap移除了内核功能,就只能通过重启系统来恢复了。
在做这些之前,你应该明白,给你的日志文件添加append-only标志,将会造成日志循环脚本失败。然而,做这件事将会极大的提升你的审计追踪的安全性。安全性的提升在突发事件中会被证明是很有用的。