我们学习了很久的Unix系统的知识。Unix操作系统有很多值得学习的地方,这里我们主要介绍Unix操作系统中的Unix口令的知识,主要是Unix口令文件的格式及安全机制的讲解。下面大家就一起来学习下吧!
作为Internet上最流行的服务器操作系统,Unix安全性倍受关注。Unixd的安全性主要靠口令实现,因此,Unix口令加密算法几度改进,现在普遍采用DES算法对口令文件进行25次加密,而对每次DES加密产生的结果,都要用2的56次方次查找与匹配才能进行一次遍历,要破解这样的Unix口令,其工作量是巨大的,所以从理论上说这种Unix口令是相当安全的。
然而不幸的是我们仍然不时听道Unix口令被攻破的消息。这些Unix口令是如何被攻破的,我们又怎样才能保证Unix口令的安全呢。下面将对这一问题进行探讨。
Unix口令文件的格式及安全机制
Unix口令文件passwd是一个加密后的文本文件,储存在/etc目录下。该文件用于用户登录时校验用户的口令,仅对root权限可写。口令文件中每行代表一个用户条目,格式为:LOGNAME : PASSWORD : UID : GID : USERINFO : HOME : SHELL。
每行的头两项是登录名和加密后的Unix口令,UID和GID是用户的ID号和用户所在组的ID号,USERINFO是系统管理员写入的有关该用户的信息,HOME是一个路径名,是分配给用户的主目录,SHELL是用户登录后将执行的shell(若为空格则缺省为/bin/sh)。目前多数Unix系统中,口令文件都做了Shadow变换,即把/etc/passwd文件中的口令域分离出来,单独存在/etc/shadow文件中,并加强对shadow的保护,以增强口令安全。
Unix系统使用一个单向函数crypt()来加密用户的Unix口令。Crypt()是基于DES的加密算法,它将用户输入的口令作为密钥,加密一个64bit的0/1串,加密的结果又使用用户的Unix口令再次加密;重复该过程,一共进行25次。最后的输出为一个13byte的字符串,存放在/etc/passwd的PASSWORD域。单向函数crypt()从数学原理上保证了从加密的密文得到加密前的明文是不可能的或是非常困难的。
当用户登录时,系统并不是去解密已加密的Unix口令,而是将输入的Unix口令明文字符串传给加密函数,将加密函数的输出与/etc/passwd文件中该用户条目的PASSWORD域进行比较,若匹配成功,则允许用户登录系统。
这样,我们就了解了关于Unix口令的文件的格式及安全机制的知识了。
【编辑推荐】