在早期的Linux操作系统中,“/etc/passwd”文件包含系统中每个用户的信息。用户的口令虽然经过一定的数字和逻辑算法后作为一个运算结果(可见字符串)被放到passwd文件中,但加密强度并不大。于是,早期的黑客只要拿到“/etc/passwd”文件,就意味着系统已经攻破一半了。后来,随着安全级别的提高,出现了将passwd文件中的口令单独加密的情况,加密后的结果和其他辅助信息存储在shadow文件中。至于采用何种保存形式和加密算法,可以通过 /usr/sbin/authconfig程序设置。用户登录时输入的口令经计算后与“/etc/passwd”和“/etc/shadow”中的结果进行比较,符合则允许登录,否则拒绝登录。
一个强壮、有效的口令应当至少包含8个字符。不要使用个人信息(如生日、名字、用户名、电话号码等)作为口令,计算机型号等尽量不要出现在密码中,普通的英语单词也不适合作为口令(因为可以采用字典攻击法)。口令中最好有一些非字母字符(如数字、标点符号、控制字符等),尽量不要将口令写在纸上或存放在计算机文件中。设置口令的一个好方法是将不相关的字母和数字或控制字符相连,长度不少于8位。
为了强制用户指定足够强壮的密码,需要修改“/etc/login.defs”文件的PASS_ MIN_LEN参数(口令最小长度)。同时,应限制口令的使用时间,保证定期更换口令,建议修改PASS_MIN_DAYS参数(口令使用时间)。login.defs文件的参数设置如图2-15所示。
图2-15 login.defs文件的参数设置
Linux账户的密码加密后存放于“/etc/shadow”文件中。Red Hat Enterprise Linux默认使用MD5算法,但目前这个算法已经很不安全了。很多经典的黑客教程给出的方法都是拿到shadow文件后破解root用户的密码,如果能用更难破解的SHA算法加密密码无疑可以提高服务器的安全性。
以下方法综合了http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-upgrading-password-hashing/和http://kbase.redhat.com/faq/docs/DOC-15806两篇文章的内容,且针对Red Hat Enterprise Linux 5.2以上版本。
显示当前密码加密算法,代码如下,输出“password hashing algorithm is md5”。
# authconfig --test | grep hashing
设置使用SHA512算法,代码如下。
# authconfig --passalgo=SHA512 --update
在笔者的Red Hat Enterprise Linux 5.3中,提示“unknown algorithm sha512”,使用了SHA512算法,原因不明。再次显示,就更改为SHA256算法。
最后,对所有用户都需要重新设置密码才能生效。可以使用“# chage -d 0 userName”命令强制所有用户在下次登录时修改密码。
在笔者使用的Arch Linux中,设置方法与以上稍有不同,具体如下(参考了http:// wiki.archlinux.org/index.php/SHA_Passwords的内容)。
修改“/etc/pam.d/passwd”文件,代码如下。
#%PAM-1.0 #password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 #password required pam_unix.so md5 shadow use_authtok password required pam_unix.so md5 shadow nullok
把最后一行的md5值用SHA256算法替换。
然后,修改“/etc/default/passwd”文件,将“CRYPT=des”修改为“CRYPT=sha256”。最后,强制所有用户重新修改密码。
Linux使用的是DES(加密函数式是Crypt)或MD5(函数式是Md)加密算法,由于计算量非常大,所以很难被逆向或破解。DES口令的密文是由13个ASCII字符组成的字符串,而MD5口令密文的起始字符总是“$1$”。
如图2-16所示是一个被攻陷的红帽系列的Linux操作系统,入侵者远程溢出服务器后获得了一个root权限的登录界面。
图2-16 被入侵的Linux操作系统
如何获取root用户的密码呢?入侵者打开了“/etc/passwd”文件,如图2-17所示。
图2-17 查看etc/passwd文件
看来,主机的账户使用了shadow加密。继续查看“/etc/shadow”文件,如图2-18所示,“root”行的冒号后面就是加密后的密码。
图2-18 获取加密的密码字符串
现在就可以开始破解了。
破解Linux口令的工具很多,如John the Ripper、Crack by Alex Muffett和Cracker Jack等,其中John the Ripper的功能最为强大,速度也最快。
将“/etc/shadow”文件下载到本地,先使用John the Ripper的简单模式尝试一下,但没有得到结果,如图2-19所示。
图2-19 使用John the Ripper破解密码
加载一个字典,看看情况。这里使用“-w=1.txt”命令指定字典文件。很快,root密码被破解了,结果是“bigapple”,如图2-20所示。
图2-20 成功破解密码