摘要:Linux用户管理主要分为两方面:密码管理,以及用户与用户组的管理。对系统管理员账户来说,最需要保护的就是密码,如果密码被盗,也就意味着灾难的降临。另一方面,用户帐号文件也是需要管理保护的对象。本文对这两方面分别进行了阐述。
Linux作为一种多任务、多用户的操作系统,在同一时间段上可能为众多用户使用,且用户的管理直接关系到整个系统的安全,用户需要对其中的密码管理和帐户文件管理进行着重的强调和保护。
Linux用户管理主要分为两方面:密码管理,以及用户与用户组的管理。下面将对这两方面分别进行阐述。
1. 密码管理
密码是用户登录Linux系统的钥匙,如果没有钥匙总是要费一番力气后,才能登录到目标操作系统。无论入侵者采用何种远程攻击,如果无法获得管理员或超级管理员的用户密码,就无法完全控制整个系统。若想访问系统,最简单也是必要的方法就是窃取用户的密码。因此,对系统管理员账户来说,最需要保护的就是密码,如果密码被盗,也就意味着灾难的降临。
入侵者大多是通过各种系统和设置漏洞,获得管理员密码来获得管理员权限的,然后,再实现对系统的恶意攻击。账号的弱密码设置会使入侵者易于破解而得以访问计算机和网络,而强密码则难以破解,即使是密码破解软件也难以在短时间内办到。密码破解软件一般使用3种方法进行破解:字典猜解、组合猜解和暴力猜解。毫无疑问,破解强密码远比破解弱密码困难得多。因此,系统管理员账户必须使用强密码。
据统计,大约80%的安全隐患是由于密码设置不当引起的。因此,密码的设置无疑是十分讲究技巧的。在设置密码时,请遵守密码安全设置原则,该原则适用于任何使用密码的场合,既包括Windows操作系统,也包括UNIX/Linux操作系统。
John the Ripper是一个工具软件,用于在已知密文的情况下尝试破解出明文的破解密码软件。目前的最新版本是JOHN1.7版,主要支持对DES、MD5两种加密方式的密文进行破解工作。它可以工作于多中不同的机型以及多种不同的操作系统之下,目前已经测试过能够正常运行的操作系统有:Linux x86、freeBSD、x86、Solaris、SPARC、OSF/1 Alpha、DOS、WinNT/WinXP系列等。
John the Ripper 1.7是目前比较好的破解密码工具,在解密过程中会自动定时存盘,用户可以强迫中断解密过程(使用ctrl+c组合键),下次还可以从中断的地方继续进行下去(john-restore命令)。任何时候敲击键盘,用户都可以看到整个解密的进行情况,所有已经被破解的密码会被保存在当前目录下的JOHN.POT文件中,SHADOW中所有密文相同的用户会被归成一类,这样JOHN就不会进行无谓的重复劳动了。在程序的设计中,关键的密码生成的条件被放在JOHN.INI文件中,用户可以自行修改设置,不仅支持单词类型的变化,而且支持自己编写C的小程序限制密码的取值方式。
在使用该软件前,我们可以从网上下载其最新版本john-1.7.3.4 for Linux版本,它包含DOC、SRC和RUN三个目录,在SRC目录下,在机器上执行如下命令即可:
make make clean linux-x86-any |
安装好后,可以切换到RUN目录下,进行测试,如下所示:
cd ../run ./john –test |
John the ripper提供了如下多达10余种的命令,供用户选择使用:
1、pwfile:<file>[,..]:用于指定存放密文所在的文件名,(可以输入多个,文件名一我“,”分隔,也可以使用*或者 这两个通配符引用一批文件)。也可以不使用此参数,将文件名放在命令行的最后即可。
2、wordfile:<字典文件名>-stdin:指定的用于解密用的字典文件名。也可以使用STDIO来输入,就是在键盘中输入。
3、rules:在解密过程中使用单词规则变化功能。如将尝试cool单词的其他可能,如COOLER、Cool等,详细规则可以在JOHN.INI文件中的[List.Rules:Wordlist]部分查到。
4、incremental[:<模式名称>]:使用遍历模式,就是组合密码的所有可能情况,同样可以在JOHN.INI文件中的[Incremental:*****]部分查到。
5、single:使用单一模式进行解密,主要是根据用户名产生变化来猜测解密,可以消灭比较低级的用户。其组合规则可以在JOHN.INI文件中的[List.Rules:Single]部分查到,我们在下面详细解释。
6、external:<模式名称>:使用自定义的扩展解密模式,用户可以在john.ini中定义自己需要的密码组合方式。JOHN也在INI文件中给出了几个示例,在INI文件的[List.External:******]中所定义的自订破解功能。
7、restore[:<文件名>]:继续上次的破解工作,JOHN被中断后,当前的解密进度情况被存放在RESTORE文件中,用户可以拷贝这个文件到一个新的文件中。如果参数后不带文件名,JOHN默认使用RESTORE文件。
8、makechars:<文件名>:制作一个字符表,用户所指定的文件如果存在,则将会被覆盖。JOHN尝试使用内在规则在相应密钥空间中生成一个最有可能击中的密码组合,它会参考在JOHN.POT文件中已经存在的密钥。
9、show:显示已经破解出的密码,因为JOHN.POT文件中并不包含用户名,同时用户应该输入相应的包含密码的文件名,JOHN会输出已经被解密的用户连同密码的详细表格。
10、test:测试当前机器运行JOHN的解密速度,需要1分钟,它会得出在当前的情况下解密的各种可能情况下相应的解密速度,如同时解密100个用户时的平均速度,使用 遍历法解密模式时解密的速度。salts指用户个数,如果给出的对于100个用户解密的平均速度为18000次/秒,那么表明同时对100个用户解密,解 密的速度为每个180次/秒。因为绝大多数的时间被用于密钥比较过程中了。所以应该对用户进行挑选。
11、users:<login|uid>[,..]:只破解某类型的用户或者属于某个组的用户。如果得到的PASSWD文件没有包含密文,那么在得到SHADOW后应该进行组合,JOHN的附带程序 UNSHADOW.EXE可以完成这一过程,当然了,用户也可以手工做。一般的能够进入CSH的用户都是解密的首选对象。也可以要UID=0的ROOT级别 的用户。
12、shells:[!]<shell>[,..]:和上面的参数一样,这一选项可以选择对所有可以使用shell的用户进行解密,对其他用户不予理睬。“!”就是表示不要某些类型的用户。例如:“-shells:csh”。
13、salts:[!]<count>:只选择解密用户大于<count>的帐号,可以使用户得到选择的权利,尽快的得到所需要的用户的PASS。
14、lamesalts:指定用户中密码所使用的cleartext。(我不大清楚此功能的作用)。
15、timeout:<几分钟>:指定解密持续的时间是几分钟,到时间JOHN自动停止运行。
16、list:在解密过程中在屏幕上列出所有正在尝试使用的密码,建议不要使用,它会将大部分时间浪费在显示上,极大地拖慢解密速度。一般只是适用于重定向输出到文件后,检验用户所设定的某些模式是否正常。
17、beep-quiet:当解密出密码时是否要让PC喇叭叫一下,以提醒用户。
18、noname-nohash:不使用内存来保存“用户名”等内容。
19、des-md5:指定使用的解密方式是解DES还是MD5,对于解密DES密码不用理会这一选项。
除了口令破解程序之外,在这个软件包中,还包含了其他几个实用工具,它们对于实现口令破解都有一定的帮助,这些工具都放置在run目录下,下面分别予以简要介绍。
(1)unshadow PASSWORD-FILE SHADOW-FILE
unshadow命令将passwd文件和shadow文件组合在一起,其结果用于John破解程序。通常应该使用重定向方法将这个程序的结果保存在文件中,之后将文件传递给John破解程序。
(2)unafs DATABASE-FILE CELL-NAME
unafs从二进制AFS数据库中提取口令散列值,并生成John可用的输出,通常应该把这个输出重定向到文件中。
(3)unique OUTPUT-FILE
删除字典表中的重复词汇,但不改变字典表中各词条项的顺序。
安装好后,我们可以灵活使用如下几种方式来对自己的账户密码进行测试:
通常情况下,许多用户的密码命名方式非常简单,比如foo、hello、world等等,或者很多都是与用户名相同的密码口令,那么我们一般可以先采用简单解密方式来对系统中的密码进行简单的初步试探,如果发现能够成功破解,那么就需要对这些密码口令的强度进行加强,如下所示:
./john –single “/etc/shadow” Loaded 2 password hashes with 3 different salts (FreeBSD MD5 [32/32]) liyang (liyang) guesses: 1 time: 0:00:00:00 100% c/s: 6975 trying: 999991900 |
在上述命令中,我们发现系统存在一个liyang用户,其用户名和密码均为liyang,因而通过最简单的方式便能将其发现和利用,如果为黑客破解则将造成不可设想的后果,因而我们的用户应该立即根据此种情况进行口令加强。
其次,用户可以使用字典文件来对系统用户的恶密码强度进行试探和测试。人们常用hello、superman、cooler、asdfgh、123456等作为自己的密码。而-rules参数则在此基础上再加上些变化,如字典中有单词cool,则JOHN还会尝试使用cooler、CoOl、Cool等单词变化进行解密。一般视SHADOW中的用户多少及用户的字典大小、用户的机器速度,解密时间从几小时到几天不等。下面给出使用该方式进行解密的例子,假设我们已经生成了一个password.lst文件,其中包含了常用的以字典单词为依据的密码,那么我们对系统中的用户密码使用该方式进行试探破解,由于字典中保留了young这样一个单词,因而用户google的密码所以也被试探出来,网络管理员同样需要对该密码进行加固,比如添加适当的后缀、字母和数字等:
./john --wordlist=password.lst "/etc/shadow" Loaded 2 password hashes with 2 different salts (FreeBSD MD5 [32/32]) young (google) guesses: 1 time: 0:00:00:01 100% c/s: 3571 trying: zhongguo |