大部分目前 Linux 发行版本预设值并未包含Shadow Suite 安装。 这些版本包括 Slackware 2.3, Slackware 3.0 和其他受欢迎的发行版本。 主要原因之一是在原始Shadow Suite版权声明中并未很清楚的描述该软件是 否需使用者付费。 Linux 使用 GNU 版权通常允续使用者可免费且任意使用相关套件。
Shadow Suite现在维护人员 Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> 已经可以从在 BSD 样式允需再使用版权之原始作者那接收原始码。 目前版权发行已 解决,因此可以预期在未来版本之预设值将包括 password shadowing。 即使如此, 你仍需要自行安装。
如果你的版本是从 CD-ROM 安装。你可能发现即使目前版本并未有Shadow Suite 安装,但你仍然可以在该片 CD-ROM 找到你需要安装的Shadow Suite。
然而,所有Shadow Suite 3.3.1, 3.3.1-2 版本和 shadow-mk 伴随签入(login)程序和 其他suid root程序均有安全上问题,因此不应该使用太久。
所有必要文档均可以透过匿名 FTP 站或网站找到。
在没有安装Shadow Suite的 Linux 系统,包括密码的帐号使用者信息通常储存在
/etc/passwd
档。
储存的密码为 加密(encrypted)格式。 然而,如果你问一个密码专家,他/她将
告诉你真正的密码档只是编码(encoded)而不是加密格式,因为当使用
crypt(3) 时,文字档倍设为 null 且密码是键值(key)。 因此,接下来我将在这篇文件中使用
编码。
使用在密码栏位编码的演算法于技术上是使用one way hash function。这是一个 在单一方向计算简单但逆向计算非常困难的演算法。关于这正确的演算法可以在 2.4 节或 于 crypt(3) 操作手册找到。
当使用者挑选或指定一个密码,系统将随机产生一个值,叫做salt,将密码进行 编码。 这表示任何特定的密码可以 4096 中不同方法储存。 salt 值将储存被编 码的密码 。
当使用者签入或提供一个密码, salt 首先接收欲储存编码密码。然后这提供密码 会和 salt 值一起编码,且比较已经编码密码。如果有 match ,该使用者通过权限检查。
随机编码和复原原始密码是有计算复杂度的(但不是不可能的)。然而,在某些系统 很多使用者的密码都设为一般文字(或是一般文字的简单变化)
系统骇客知道这件事,且将简单的加密文字和一般使用4096 salt 值密码之目录。然
后他们将比较在资料库之 /etc/passwd
档之编码密码,只要他们找到一个比对,他们
可以找到一个帐号之密码。这和dictionary attack有关,且用于未经许可存取系统取
得和展开常用的方法之一。
如果你想过一个 8 码的密码编码成 4096 * 13 码的字串,那么一个用在描述 400,000 一般文字 、名字、密码和简单变化的字典将需要 4GB 硬盘存取空间。 骇客需要做的只是分类字串跟检查 比对结果。 自从 4GB 硬盘可以以美金 1000.00 以下买到后,对大多数系统骇客的意义可想而 知 。
如果骇客首先发现你的 /etc/passwd
档,他们只需要将真正包含在
/etc/passwd
档 salt
值的字典编码,这方法可由拥有486级电脑或几个有
几百 MB 硬盘空间的十来岁的小孩适用。
即使没有很大的磁盘空间,像 crack(1) 的工具程序通常可以在足够使用者系统中至少破解一对 密码(假设系统使用者倍允许挑选他们想要的密码)。
/etc/passwd
档也包括一些相关信息,像使用者 ID 和群组 ID所使用的系统程序;因此
/etc/passwd
档 必须 保持全世界可读性. 如果你改变 /etc/passwd
档以致于没有人可以读取,你将发现的第一件事是 ls -l
命令将取代名称而显示使用者 ID
。
Shadow Suite 透过将密码存至另一个档(通常是 /etc/shadow
档)来解决该
问题。 /etc/shadow
档对任何人设定可读档,只有 root 权限可以读写
/etc/shadow
档。某些程序(像 xlock)不需要改变密码,只需要确认密码即可。这些程序
可以以 suid root 执行或者你可以设定一个群组 shadow 用来唯读
/etc/shadow
档,然后这些程序可以执行 sgid shadow。
透过移动密码至 /etc/shadow
档,我们可以有力的备有骇客从存取编码密码到执行
dictionary attack 的证据。
除此之外, Shadow Suite 新增许多特色:
/etc/login.defs
)安装 Shadow Suite 贡献为有更安全系统,但是还有其他方法可以改善 Linux 系统的安全 ,且最终将有一系列的 Linux 安全 HOWTO's 将讨论其他安全基准和相关文件版本·
针对目前其他 Linux 安全文件信息,请参照网址: Linux Security home page.
有一些状况跟设定运用在安装 Shadow Suite 将 不是 好主意: There are a few circumstances and configurations in which installing the Shadow Suite would NOT be a good idea:
一个 non-shadowed /etc/passwd
档格式如下所示:
username:passwd:UID:GID:full_name:directory:shell
其中
username
使用者(签入)名称
passwd
编码密码
UID
使用者编号
GID
预设存组编号
full_name
使用者全名 - 事实上这个栏位称作 GECOS (General Electric Comprehensive Operating System) 栏位且可以储存全名外的信息。Shadow commands and manual pages refer to this field as the comment field.
directory
使用者根目录 (绝对路径)
shell
使用者签入的环境 (绝对路径)
username:Npge08pfz4wuk:503:100:Full Name:/home/username:/bin/sh
中,Np
是 salt 且 ge08pfz4wuk
是编码密码。
已编码的 salt/password 就像 kbeMVnZM0oL7I
且这两个字串是一样的密码。对相同
密码可能有 4096 种可能的编码。(本范例的密码是 "passwaor",这是比较 不好 的密码)。
只要 shadow suite 已经安装, /etc/passwd
档将被替代成:
username:x:503:100:Full Name:/home/username:/bin/sh
本范例之第二栏位 x
现在只是一个 place holder。 /etc/passwd
档的格式
并未真的改变,只是不再包含 编码密码。这表示任何程序可以读取 /etc/passwd
档,但并不真的需要确认密码是不是正确地运作。
这些密码现在被重新放在 shadow 档(通常是在 /etc/shadow
档)。
/etc/shadow
档包括下列信息:
username:passwd:last:may:must:warn:expire:disable:reserved
其中
username
使用者名称
passwd
编码密码
last
密码上次更动日期,以从1970年1月1日算起的天数代表
may
密码改变前天数
must
密码最常使用天数
warn
代表期限前几天就事先警告使用者
expire
超过密码过期天数后,就关闭该帐号
disable
帐号关闭,以从1970年1月1日算起的天数代表
reserved
预备栏位
username:Npge08pfz4wuk:9479:0:10000::::
从 crypt(3) 使用者文件得到:
"crypt 是密码加密方程序。 It is based on the Data Encryption Standard algorithm with variations intended (among other things) to discourage use of hardware implementations of a key search.
[The] key 是使用者输入的密码。 [编码字串全是 NULLs]
[The] salt 是从 [a-zA-Z0-9./] 集合中选出的两个位元字串。 该字串是用于扰乱在 4096 种不同方法之一个演算法。
透过得到 key 的每个位元的最低 7 bit[s],可以建立 56-bit key 。 这56-bit key 是用在重复加密一个常数字串(通常是包含所有灵的字串)。 传回值指到加密密码是一连串 可印出之13个 ASCII 字元(最前面的一两个字元表示 salt 本身)。 透过每次的呼叫可将 传回直指到静态资料。
警告信息: Key space 包括 2**56 即等于 7.2e16 可能的值。与用重大的平行电脑
将 Key space 极尽的搜寻是可能。像 crack(1)
软件用来搜寻部分的由人
产生之密码的 key space 是可获得的。因此,密码的选择至少应该避免使用一般字及名字。
一个用来检查解开密码选择的 passwd(1)
程序使用是值得推荐的。
DES 演算法本身有一些使 crypt(3)
在任何其他密码权限区隔界面很差选择的使用
方面剧变。如果你计划使用 crypt(3)
界面来加密计划,以下描述千万别这么作:
得要一本加密好书和广泛获得 DES 程序库 ." 一起使用。
大多 Shadow Suites 包括 16 位元的密码长度两倍之原始码。 在 des
专
家建议避免使用当开始对较常密码先简单的编码左半然后右半。由于 crypt
运作方法
,这将造成 较差的 安全编码密码。除此之外,使用者有可能记住 16 位元密码是
一件比较差的事情。
目前有允许权限理论用以取代某些更安全和支持较长密码(例如 MD5 演算法)且保有和
crypt
方法兼容的发展工作正在进行。
如果你正在寻找一本加密的好书,建议如下:
"Applied Cryptography: Protocols, Algorithms, and Source Code in C" by Bruce Schneier <schneier@chinet.com> ISBN: 0-471-59756-2