专栏首页北京马哥教育每个极客都应该知道的Linux技巧

每个极客都应该知道的Linux技巧

检查不是由你运行的程序

难度:高级

应用程序:bash(译注:UNIX或者LINUX的shell)

想象下这个场景-你已经准备好了要和同事在办公室里对战一局快速的Crack Attack(译注:一款免费的OpenGL游戏,类似俄罗斯方块),不料却发现,当你正准备要击败你这个傲慢的下属时,方块却停止了-是什么让你的机器 变得这么慢?这肯定是因为其他的用户运用他们娴熟的经验来盗取你宝贵的CPU时间、服务器或者其他的诡异方式,真烦人!

好,让我们列举出系统中所有不是由你运行的程序!

ps aux | grep -v `whoami`

或者,更巧妙些的是,为什么不列出最占用时间的前十个程序呢:

ps aux--sort=-%cpu | grep -m 11 -v `whoami`

也许最好使用root权限来运行这条指令,因为这样可以过滤出大部分活跃的后台程序。现在你有了这些信息,你可以终止他们的进程,但是更“卑鄙”的是反复地在他们的桌面上运行xeyes(译注:Linux下的一条好玩的命令)!

简单地备份你的网站

难度:简单

应用程序:Backups

如果你想要从一台电脑上备份一个目录,但你仅仅想要复制改变的文件到它的备份而不是复制所有的东西到各自的备份,你可以使用工具rsync来实现它。你需要在这个远程的源备份计算机上有一个账户。下面是这条命令:

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

计算机中一个常见的问题是,你可能想删一部分大的文件(类似音频或视频片段)。如下你可以找到当前目录中最大的那个文件:

ls -lSrh

“r”的作用是将大的文件列在后面,而“h”则是给出易于人们阅读的输出(MB或者诸如此类)。你也可以搜寻最大的MP3/MPEG文件:

ls -lSrh *.mp*

你也可以通过下面这条命令搜寻最大的目录:

du -kx | egrep -v "\./.+/" | sort -n

只列出今天的文件

难度:简单

应用程序:Various

你可能熟悉这个问题,今天早些时候你创建了一个文本文档,而现在立刻就需要它。然而,你想不起来你给它起了个什么可笑的名字,作为一个熟练的 geek,你的家文件夹被836个不同的文件填满了。那你要如何找到它呢?哈哈,这里有很多方法,但是这个小技巧告诉你管道和结合使用两个强力的 shell命令是多么有效:

ls -al --time-style=+%D | grep `date +%D`

ls命令的参数使得这个日期戳以一种特殊的方式呈现。这个狡猾的位就是这样传递给grep来输出的。grep的参数是它自己的命令(因为是倒引号所 以执行),用来将当前的日期替代成匹配的字符。你可以轻易的修改它来搜索其他特别的日期、时间、文件大小或者任何东西。结合它与HACK 26是非常节省输入的。

传输文件但不使用ftp或者scp

难度:简单

应用程序:netcat

需要传输一个目录给其他服务器但是没有FTP或者SCP使用权?那么这个小技巧将会帮助你使用netcat功能。在目的服务器上运行:

nc -l -p 1234 | uncompress -c | tar xvfp -

并且在发送服务器上运行:

tar cfp - /some/dir | compress -c | nc -w 3 [destination] 1234

现在你就可以不需要FTP并且不需要root权限,就能传送文件了。

备份你的bootsector(引导扇区)

难度:高级

应用程序:Shell

妨碍引导装入,双启动和很多其他下热闹的程序会留给你一个混乱的引导扇区。为什么不在你可以备份的时候给它创建一个备份呢:

引导装载器混乱、双启动及许多其他的可怕的进程可能造成乱七八糟的启动区。

dd if=/dev/hda of=bootsector.img bs=512 count=1

很显然,你应该改变这个装置来显示你的boot驱动(有可能是SCSI的sda)。还要非常小心,别把事情搞砸——你可能会轻而易举地毁掉你的驱动!恢复时使用:

dd if=bootsector.img of=/dev/hda

保护日志文件

难度:高级

应用程序:很多

在一个入侵过程中,一个入侵者将会很可能在很多系统日志中留下能反映他行为的迹象:一个有价值的审计追踪应该被保护。没有可靠的日志,就很难发现攻 击者是如何侵入,或者是从哪里来的攻击。这个信息在分析事件、联系相关方面并给予反馈上,是很关键的。但是,如果入侵成功,什么才能阻止他来移除他的这些 错误行为的痕迹呢?

这就是文件属性能发挥作用、挽回败局的地方(或者至少使事情没那么糟)。Linux和BSD都有给文件和目录分配额外的属性这个功能。这不同于标准的Unix权限方案中,系统为所有的用户提供的普遍的属性设置,而且它们比文件权限或者ACL都要更深层次影响文件访问。

在Linux中,你可以看到并且通过lsattr和chattr命令分别修改一个给出文件的设置。在写这篇文章时,Linux的文件属性只能在你使 用ext2和ext3时获得。这还有些XFS和ReiserFS的关于获得属性支持的内核补丁。一个保护日志文件的有用的属性是append-only。 当这个属性被设置后,文件不能被删除,而且写操作只能被允许在文件的最后追加。

在Linux下要设置append-only标志,运行这条命令:

chattr +afilename

看看+a属性是如何工作的:创建一个文件然后设置它的append-only属性:

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

企图第二次写文件失败,因为它将覆盖这个文件。然而,在文件的末尾追加仍然是被允许的:

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).

为了解压和编译这个工具,运行这条命令:

tar xvfj lcap-0.0.3.tar.bz2 && cd lcap-0.0.3 && make

然后,不允许修改append-only标志,运行:

./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标志,将会造成日志循环脚本失败。然而,做这件事将会极大的提升你的审计追踪的安全性。安全性的提升在突发事件中会被证明是很有用的。

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-03-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux 文件管理命令语法、参数、实例全汇总(一)

    命令:cat cat 命令用于连接文件并打印到标准输出设备上。 使用权限 所有使用者 语法格式 cat [-AbeEnstTuv] [--help] [--v...

    小小科
  • 恢复删除的文件

    当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动...

    小小科
  • 恢复删除的文件

    当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动...

    小小科
  • PHP的yaf框架类加载机制

    这里的local_library指的是application.ini文件中设置的application.library 的值

    anakinsun
  • 毕啸南专栏 | 对话李开复:AI科学家的转型之路

    作者简介:毕啸南,知名青年学者,量子位专栏作家,《中国AI领袖人物访谈》系列制片人、主持人。点击文末阅读原文,关注量子学园的毕啸南专栏,跟随他一起持续深度对话李...

    量子位
  • 大咖 | IEEE专访李开复:五个问题直面人工智能的危机

    霍金先生前曾三番五次表态,“人工智能可能会毁灭人类”。钢铁侠马斯克曾经提出,人工智能有可能会成为人类文明的最大威胁,呼吁政府快速采取措施,有效监管这项技术。

    大数据文摘
  • GetDiskFreeSpaceEx函数的一点处理

    GetDiskFreeSpaceEx()函数可以得到驱动器的簇信息,剩余空间以及总大小。

    phith0n
  • Linux tcp/ip 源码分析 - connection termination

    前两篇文章中我们讲到,shutdown和close方法会发送fin消息给对方,开始tcp连接的关闭流程,现在我们从源码角度看下tcp连接关闭的具体过程,以及中间...

    wangyuntao
  • 对上一篇文章中tcp问题的进一步思考

    上篇文章 一个有关tcp的非常有意思的问题 中我们讲到,在tcp建立连接后,如果一端关闭了连接,另一端的第一次write还是可以写成功的,文章中也分析了造成这种...

    wangyuntao
  • Qt开源作品4-网络调试助手

    网络调试助手和串口调试助手是一对的,用Qt开发项目与硬件通信绝大部分都是要么串口通信(RS232 RS485 Modbus等),要么就是网络通信(TCP UDP...

    feiyangqingyun

扫码关注云+社区

领取腾讯云代金券