ghosTzone
main(_){return _} && echo $? /* Keep It Simple Stupid | 本博客所有文章皆为原创 转载请注明 - ghosTM55 */

如何扼制fork炸弹 6

2008年11月25日 22:10 in bash tags:

  众所周知,bash是一款极其强大的shell,提供了强大的交互与编程功能。这样的一款shell中自然不会缺少“函数”这个元素来帮助程序进行模块化的高效开发与管理。于是产生了由于其特殊的特性,bash拥有了fork炸弹。

  所谓fork炸弹是一种恶意程序,它的内部是一个不断在fork进程的无限循环,fork炸弹并不需要有特别的权限即可对系统造成破坏。现在来看一个最简单的fork炸弹:

:() { :|:& };:

  一行看似无法理解的只有13个字符的命令,即可占用掉所有系统的资源。其实,这行命令如果这样写成bash script就不难理解了:

:()
{
    :|: &
}
;
:

  冒号":"其实是函数名,这个bash脚本就是在不断的执行该函数,然后不断fork出新的进程。那么,有没有办法扼制这种情况的发生呢?答案是肯定的,只需设置进程的limit数即可:

txi@ghosTunix.org:~> ulimit -u
200

  使用工具ulimit即可设置各种限制数,具体的请参考该工具的manual page。在这里笔者限制了max user processes数为200,所以,可以安全地执行这个fork炸弹了:

txi@ghosTunix.org:~> :() { :|:& };:
[1] 9593
txi@ghosTunix.org:~> bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable
 

txi@ghosTunix.org:~> date
Tue Nov 25 14:11:51 CST 2008


read工具的三个常用命令参数 0

2008年11月22日 04:12 in bash tags:

-s
不回显输入的字符,可以应用于密码的输入
-nx
指定最多输入x个字符
-p string
在输入前显示指定字符串

txi@ghosTunix.org:~> date
Mon Jul 28 17:33:30 CST 2008


两种escape alias的方法 2

2008年11月22日 04:05 in bash tags:

txi@ghosTunix.org:dir> alias touch='touch foo'         # 设置一个能显示效果的alias
txi@ghosTunix.org:dir> ls         # 该目录当前没有文件
txi@ghosTunix.org:dir> touch   # 创建一个空文件foo
txi@ghosTunix.org:dir> ls
foo
txi@ghosTunix.org:dir> rm foo # 删除foo文件,供稍后实验用
txi@ghosTunix.org:dir> \touch foo1         # escape方法1
txi@ghosTunix.org:dir> ls
foo1
txi@ghosTunix.org:dir> command touch foo2        # escape方法2
txi@ghosTunix.org:dir> ls
foo1 foo2

txi@ghosTunix.org:~> date
Tue Jul 29 21:55:50 CST 2008


发现一个很有趣的工具——shred 5

2008年11月22日 04:01 in bash tags:

  shred是GNU fileutils中的一员,它的功能简单的说就是涂鸦,把一个文件用随机的编码篡改的一塌糊涂。其宗旨就是更安全地帮助删除一个机密文件:

txi@ghosTunix.org:test> cat txt
helloworld
txi@ghosTunix.org:test> shred txt
txi@ghosTunix.org:test> cat txt
ËgÆ,##WPEõȮ~    !å9û@2`vÑùGìãl$¼Àã¼"÷Ďñ\cïFçà8mGdt#'öxðô
                                                        ö·ÀBS&º7`Ì1¼éOµö}ёÍDèRjXµà     ·u@    ¸÷=IJXpj<l÷çñóɅ`Êå/ËÏg]êhòP¶:¡gw-v
â* ¯m¥ÝLôâ;nãâÅߤÁh>_zïìñ´©C«U            K¶z԰
ɡÈ_`u+«Q>,]Φ    IÖ
}#%)<Àn°ÒV%<½i³ .ÑójAý¯=¯,I
¦®    "
rå±ÝNrNý1ÌÁ¸"îbïս¦`UiávNý(¼DlÕÅ(!shôîV_-ad­Kjy·k    ÃeûGùð£Àª=Û55 Dù­*÷!£?úÉ]ÊÀH­´ò(±÷>õÃñ¬V8gÎç'
                   CÛkg=$fU9+ãȴQcBx©ôÑʒ¥JÎO½]ÄkK2ܾ
                                                   »/¸mÕÝÎÿX)àûÇSîí-slçò9dfP·_áÍC±,êK6yf?!Ëا\ *èqû³½ТøBՂ¾»ñÀIäôGÔ=埰YÒ°V1Dú¡²ý^iÙÓNÒ    ȹleÞ
                                                    ú&ò@·0Þr4yóüA{0ÃX%À
àjU2Ëљ)hô3Ky¯¢R˸Vºeòg¬
                      ¤ïöQâ¡Ô̖ºT\��7£²Ң,ÍZÆbÜ}ôùб
                                               LIpù;6pYäÛ9dl)hQSw·öAÑÁ¡SGG_H^\`߆1LMþ"
ÕÑÀƄP#Ö&¿ÖҼm24Çç<9"H¢Wwffð/`L! Â쫎}øî_ÌŲ²°µgn-±Ěül±ÿày@Ú
                                                   ô°âO$+Uê³Ð水"
0à㦫G;Íè4
......省略无数乱码

  可见,shred可以将一个文件的内容改的面目全非。

txi@ghosTunix.org:~> date
Fri Aug 15 08:38:17 CST 2008


学会使用last 0

2008年11月22日 03:56 in bash tags:

  last命令通过查看(或者说搜索)/var/log/wtmp文件或者使用命令选项-f指定的自定义文件来列出自从该记录文件建立起系统上所有用户登录登出的信息,该工具能够很好的帮助管理员来监视系统的登录情况。

  在last给出的信息中,包含了用户名、登录终端、登录登出时间等多项重要信息,下面就举出常见的使用方法,具体的参考man:

:~$ last -x
这里x是一个数字,该命令将列出最近指定数目条登录登出信息
txi@ghosTunix.org:~> last -3
txi      vc/7         :0               Sat Aug 30 18:50   still logged in
reboot   system boot 2.6.26-ARCH      Sat Aug 30 18:49          (00:14)   
txi      vc/7         :0               Sat Aug 30 17:55 - 17:58 (00:02)

wtmp begins Tue Aug 19 07:54:56 2008
在最后一行可以看到wtmp文件创建的时间

:~$ last -a

将hostname一栏放在最后显示
txi@ghosTunix.org:~> last -3 -a
txi      vc/7         Sat Aug 30 18:50   still logged in    :0
reboot   system boot Sat Aug 30 18:49          (00:22)     2.6.26-ARCH
txi      vc/7         Sat Aug 30 17:55 - 17:58 (00:02)     :0

wtmp begins Tue Aug 19 07:54:56 2008
试比较该例与上一个例子的显示结果的不同

  lastb工具与last相同,但是它需要root权限才能执行,来显示所有可能是恶意的登录事件

txi@ghosTunix.org:~> date
Sat Aug 30 19:16:32 CST 2008