📄 53.html
字号:
这些文件现在已经包於 Shadow-YYDDMM 套件中。<br>
<br>
<br>
1.3 回覆<br>
请将任何评语、修改或建议寄至: Michael H. Jackson 我会尽快回覆并更正该文件。如果你发现任何问题,请直接 email 给我,我会将此最新技术张贴於新闻群组。<br>
<br>
2、为何shadow你的passwd档?<br>
<br>
大部分目前 linux 发行版本预设值并未包含Shadow Suite 安装。这些版本包括 Slackware 2.3, Slackware 3.0 和其他受欢迎的发行版本。主要原因之一是在原始Shadow Suite版权声明中并未很清楚的描述该软体是否需使用者付费。 Linux 使用 GNU 版权通常允续使用者可免费且任意使用相关套件。<br>
<br>
Shadow Suite现在维护人员 Marek Michalkiewicz 已经可以从在 BSD 样式允需再使用版权之原始作者那接收原始码。 目前版权发行已解决,因此可以预期在未来版本之预设值将包括 password shadowing。 即使如此,你仍需要自行安装。<br>
<br>
如果你的版本是从 CD-ROM 安装。你可能发现即使目前版本并未有Shadow Suite 安装,但你仍然可以在该片 CD-ROM 找到你需要安装的Shadow Suite。<br>
<br>
然而,所有Shadow Suite 3.3.1, 3.3.1-2 版本和 shadow-mk 伴随签入(login)程式和其他suid root程式均有安全上问题,因此不应该使用太久。<br>
<br>
所有必要档案均可以透过匿名 FTP 站或网站找到。<br>
<br>
在没有安装Shadow Suite的 linux 系统,包括密码的帐号使用者资讯通常储存在 /etc/passwd 档。储存的密码为 加密(encrypted)格式。 然而,如果你问一个密码专家,他/她将告诉你真正的密码档只是编码(encoded)而不是加密格式,因为当使用 crypt(3) 时,文字档倍设为 null 且密码是键值(key)。 因此,接下来我将在这篇文件中使用 编码。<br>
<br>
使用在密码栏位编码的演算法於技术上是使用one way hash function。这是一个在单一方向计算简单但逆向计算非常困难的演算法。关於这正确的演算法可以在 2.4 节或於 crypt(3) 操作手册找到。<br>
<br>
当使用者挑选或指定一个密码,系统将随机产生一个值,叫做salt,将密码进行编码。 这表示任何特定的密码可以 4096 中不同方法储存。 salt 值将储存被编码的密码 。<br>
<br>
当使用者签入或提供一个密码, salt 首先接收欲储存编码密码。然後这提供密码会和 salt 值一起编码,且比较已经编码密码。如果有 match ,该使用者通过权限检查。<br>
<br>
随机编码和复原原始密码是有计算复杂度的(但不是不可能的)。然而,在某些系统很多使用者的密码都设为一般文字(或是一般文字的简单变化)<br>
<br>
系统骇客知道这件事,且将简单的加密文字和一般使用4096 salt 值密码之目录。然後他们将比较在资料库之 /etc/passwd 档之编码密码,只要他们找到一个比对,他们可以找到一个帐号之密码。这和dictionary attack有关,且用於未经许可存取系统取得和展开常用的方法之一。<br>
<br>
如果你想过一个 8 码的密码编码成 4096 * 13 码的字串,那麽一个用在描述 400,000 一般文字、名字、密码和简单变化的字典将需要 4GB 硬碟存取空间。 骇客需要做的只是分类字串跟检查比对结果。 自从 4GB 硬碟可以以美金 1000.00 以下买到後,对大多数系统骇客的意义可想而知 。<br>
<br>
如果骇客首先发现你的 /etc/passwd 档,他们只需要将真正包含在 /etc/passwd 档 salt 值的字典编码,这方法可由拥有486级电脑或几个有几百 MB 硬碟空间的十来岁的小孩适用。<br>
<br>
即使没有很大的磁碟空间,像 crack(1) 的工具程式通常可以在足够使用者系统中至少破解一对密码(假设系统使用者倍允许挑选他们想要的密码)。<br>
<br>
/etc/passwd 档也包括一些相关资讯,像使用者 ID 和群组 ID所使用的系统程式;因此 /etc/passwd 档 必须 保持全世界可读性. 如果你改变 /etc/passwd 档以致於没有人可以读取,你将发现的第一件事是 ls -l 命令将取代名称而显示使用者 ID 。<br>
<br>
Shadow Suite 透过将密码存至另一个档(通常是 /etc/shadow 档)来解决该问题。 /etc/shadow 档对任何人设定可读档,只有 root 权限可以读写 /etc/shadow 档。某些程式(像 xlock)不需要改变密码,只需要确认密码即可。这些程式可以以 suid root 执行或者你可以设定一个群组 shadow 用来唯读 /etc/shadow 档,然後这些程式可以执行 sgid shadow。<br>
<br>
透过移动密码至 /etc/shadow 档,我们可以有力的备有骇客从存取编码密码到执行 dictionary attack 的证据。<br>
<br>
除此之外, Shadow Suite 新增许多特色:<br>
<br>
设定档於设定为签入时预设(/etc/login.defs)<br>
新增、修改和删除使用者帐号群组之工具程式<br>
密码寿命计算及到期日<br>
帐号到期日跟锁死<br>
隐藏群组密码 (可选择的)<br>
两倍长度密码 (16 字元密码) [不建议使用]<br>
针对使用者密码选择有较好的控制<br>
可拨接密码<br>
备用有效权限程式 [不建议使用]<br>
安装 Shadow Suite 贡献为有更安全系统,但是还有其他方法可以改善 linux 系统的安全,且最终将有一系列的 Linux 安全 HOWTO's 将讨论其他安全基准和相关文件版本.<br>
<br>
<br>
针对目前其他 linux 安全文件资讯,请参照网址: Linux Security home page.<br>
<br>
2.1 为何您不要 shadow 你的 passwd 档<br>
有一些状况跟设定运用在安装 Shadow Suite 将 不是 好主意: There are a few circumstances and configurations in which installing the Shadow Suite would NOT be a good idea:<br>
<br>
主机没有包含使用者帐号。<br>
主机是在 LAN 上跑且使用网路资讯服务(Network Information Services, NIS)得到或供应使用者名称和密给网路上的其他机器使用(事实上这还是可以执行,但是实际上并不能增加任何安全)。<br>
机器是使用终端主机来验证使用者经由 NFS(Network File System), NIS 或某些其他方法。<br>
机器跑其他软体验证使用者且没有任何 shadow 版本或原始码可获得。<br>
<br>
<br>
2.2 格式化 /etc/passwd 档<br>
一个 non-shadowed /etc/passwd 档格式如下所示:<br>
<br>
username:passwd:UID:GID:full_name:directory:shell<br>
<br>
其中<br>
username<br>
使用者(签入)名称<br>
<br>
passwd<br>
编码密码<br>
<br>
UID<br>
使用者编号<br>
<br>
GID<br>
预设存组编号<br>
<br>
full_name<br>
使用者全名 - 事实上这个栏位称作 GECOS (General Electric Comprehensive Operating System) 栏位且可以储存全名外的资讯。Shadow commands and manual pages refer to this field as the comment field.<br>
<br>
directory<br>
使用者根目录 (绝对路径)<br>
<br>
shell<br>
使用者签入的环境 (绝对路径)<br>
<br>
举例说明:<br>
username:Npge08pfz4wuk:503:100:Full Name:/home/username:/bin/sh<br>
<br>
中,Np 是 salt 且 ge08pfz4wuk 是编码密码。 已编码的 salt/password 就像 kbeMVnZM0oL7I 且这两个字串是一样的密码。对相同密码可能有 4096 种可能的编码。(本□例的密码是 "passwaor",这是比较 不好 的密码)。<br>
<br>
只要 shadow suite 已经安装, /etc/passwd 档将被替代成:<br>
<br>
username:x:503:100:Full Name:/home/username:/bin/sh<br>
<br>
本□例之第二栏位 x 现在只是一个 place holder。 /etc/passwd档的格式并未真的改变,只是不再包含 编码密码。这表示任何程式可以读取 /etc/passwd 档,但并不真的需要确认密码是不是正确地运作。<br>
<br>
这些密码现在被重新放在 shadow 档(通常是在 /etc/shadow 档)。<br>
<br>
<br>
2.3 格式化 shadow 档<br>
/etc/shadow 档包括下列资讯:<br>
<br>
username:passwd:last:may:must:warn:expire:disable:reserved<br>
<br>
其中<br>
username<br>
使用者名称<br>
<br>
passwd<br>
编码密码<br>
<br>
last<br>
密码上次更动日期,以从1970年1月1日算起的天数代表<br>
<br>
may<br>
密码改变前天数<br>
<br>
must<br>
密码最常使用天数<br>
<br>
warn<br>
代表期限前几天就事先警告使用者<br>
<br>
expire<br>
超过密码过期天数後,就关闭该帐号<br>
<br>
disable<br>
帐号关闭,以从1970年1月1日算起的天数代表<br>
<br>
reserved<br>
预备栏位<br>
<br>
依照之前□例将变成:<br>
username:Npge08pfz4wuk:9479:0:10000::::<br>
<br>
<br>
2.4 回顾 crypt(3).<br>
从 crypt(3) 使用者文件得到:<br>
<br>
"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.<br>
<br>
[The] key 是使用者输入的密码。 [编码字串全是 NULLs]<br>
<br>
[The] salt 是从 [a-zA-Z0-9./] 集合中选出的两个位元字串。该字串是用於扰乱在 4096 种不同方法之一个演算法。<br>
<br>
透过得到 key 的每个位元的最低 7 bit[s],可以建立 56-bit key 。 这56-bit key 是用在重复加密一个常数字串(通常是包含所有灵的字串)。 传回值指到加密密码是一连串可印出之13个 ASCII 字元(最前面的一两个字元表示 salt 本身)。 透过每次的呼叫可将传回直指到静态资料。<br>
<br>
<br>
警告讯息: Key space 包括 2**56 即等於 7.2e16 可能的值。与用重大的平行电脑将 Key space 极尽的搜寻是可能。像 crack(1) 软体用来搜寻部分的由人产生之密码的 key space 是可获得的。因此,密码的选择至少应该避免使用一般字及名字。一个用来检查解开密码选择的 passwd(1) 程式使用是值得推荐的。<br>
<br>
<br>
DES 演算法本身有一些使 crypt(3) 在任何其他密码权限区隔介面很差选择的使用方面剧变。如果你计画使用 crypt(3) 介面来加密计画,以下描述千万别这麽作:得要一本加密好书和广泛获得 DES 程式库 ." 一起使用。<br>
<br>
大多 Shadow Suites 包括 16 位元的密码长度两倍之原始码。 在 des 专家建议避免使用当开始对较常密码先简单的编码左半然後右半。由於 crypt 运作方法,这将造成 较差的 安全编码密码。除此之外,使用者有可能记住 16 位元密码是一件比较差的事情。<br>
<br>
<br>
目前有允许权限理论用以取代某些更安全和支援较长密码(例如 MD5 演算法)且保有和 crypt 方法相容的发展工作正在进行。<br>
<br>
<br>
如果你正在寻找一本加密的好书,建议如下:<br>
<br>
"Applied Cryptography: Protocols, Algorithms, and Source Code in C"<br>
by Bruce Schneier<br>
ISBN: 0-471-59756-2<br>
3、取得 Shadow Suite<br>
<br>
3.1 Shadow Suite for linux 的历史(暂不翻译)<br>
3.2 History of the Shadow Suite for linux<br>
DO NOT USE THE PACKAGES IN THIS SECTION, THEY HAVE SECURITY PROBLEMS<br>
<br>
The original Shadow Suite was written by John F. Haugh II.<br>
<br>
There are several versions that have been used on linux systems:<br>
<br>
shadow-3.3.1 is the original.<br>
shadow-3.3.1-2 is linux specific patch made by Florian La Roche and contains some further enhancements.<br>
shadow-mk was specifically packaged for linux.<br>
The shadow-mk package contains the shadow-3.3.1 package distributed by John F. Haugh II with the shadow-3.3.1-2 patch installed, a few fixes made by Mohan Kokal that make installation a lot easier, a patch by Joseph R.M. Zbiciak for login1.c (login.secure) that eliminates the -f, -h security holes in /bin/login, and some other miscellaneous patches.<br>
<br>
The shadow.mk package was the previously recommended package, but should be replaced due to a security problem with the login program.<br>
<br>
There are security problems with Shadow versions 3.3.1, 3.3.1-2, and shadow-mk involving the login program. This login bug involves not checking the length of a login name. This causes the buffer to overflow causing crashes or worse. It has been rumored that this buffer overflow can allow someone with an account on the system to use this bug and the shared libraries to gain root access. I won't discuss exactly how this is possible because there are a lot of linux systems that are affected, but systems with these Shadow Suites installed, and most pre-ELF distributions without the Shadow Suite are vulnerable!<br>
<br>
For more information on this and other linux security issues, see the Linux Security home page (Shared Libraries and login Program Vulnerability)<br>
<br>
3.3 如何取得 Shadow Suite?<br>
目前建议 Shadow Suite 版本目前还是 BETA 测试版,然後,最近版本在生产环境是安全的且没有包含易受攻击的 签入(login) 程式。<br>
<br>
该套件(package)使用惯例命名为:<br>
<br>
shadow-YYMMDD.tar.gz<br>
<br>
其中 YYMMDD 是Suite 的发行日期。<br>
目前 BETA 测试版本是 Version 3.3.3 ,且由 Marek Michalkiewicz 维护。<br>
<br>
还可以从该处得到: shadow-current.tar.gz.<br>
<br>
下列网站也可以找到相关资讯:<br>
<br>
ftp://ftp.icm.edu.pl/pub/linux/shadow/shadow-current.tar.gz<br>
ftp://iguana.hut.fi/pub/linux/shadow/shadow-current.tar.gz<br>
ftp://ftp.cin.net/usr/ggallag/shadow/shadow-current.tar.gz<br>
ftp://ftp.netural.com/pub/linux/shadow/shadow-current.tar.gz<br>
你应该可以获得目前最新的版本。<br>
<br>
你应该不要是用比 shadow-960129 更旧版本,因为它们有 签入 的安全问题。<br>
<br>
於参考资料方面,我用 shadow-960129 档进行安装介绍。<br>
<br>
如果你之前使用 shadow-mk ,你应该更信这个版本且重建编译。<br>
<br>
<br>
3.4 Shadow Suite包含什麽?<br>
Shadow Suite 包括对下列功能之替代程式:<br>
<br>
su, login, passwd, newgrp, chfn, chsh, and id<br>
<br>
该套件还包括新程式:<br>
<br>
chage, newusers, dpasswd, gpasswd, useradd, userdel, usermod, groupadd, groupdel, groupmod, groups, pwck, grpck, lastlog, pwconv, and pwunconv<br>
<br>
除此之外,函式库: libshadow.a 也包括需要存取使用者密码之写和编译程式。<br>
<br>
程式之操作手册也包含在其中。<br>
<br>
<br>
也有对签入程式的 configuration file ,它将被安装在 /etc/login.defs 档。<br>
4. 编译程式<br>
<br>
4.1 解压缩<br>
在接收套件後第一个步骤就是 unpacking。该套件是 tar 档案格式使用 gzip 压缩,所以首先将该档案移到 /usr/src ,然後输入:<br>
<br>
tar -xzvf shadow-current.tar.gz<br>
<br>
这将会 unpack 到一个目录:/usr/src/shadow-YYMMDD<br>
<br>
<br>
4.2 设定 config.h 档<br>
第一件事是你需要复制 Makefile 和 config.h 档:<br>
<br>
<br>
cd /usr/src/shadow-YYMMDD<br>
cp Makefile.linux Makefile<br>
cp config.h.linux config.h<br>
<br>
<br>
然後你应该留意 config.h 档。 该档案包括某些设定选项的定义。如果你使用 建议 套件,我建议你在第一次设定关掉 group shadow support。<br>
<br>
shadowed group passwords 预设值是开启的。 在 config.h 档关到这个设定,且改变 #define SHADOWGRP 变成 #undef SHADOWGRP。我建议您一开始关掉它们,然後如果你真的需要 group passwords 和 group administrators 时你在开启它们和重新编译。 如果你开启它, 你 必须 建立 /etc/gshadow 档。<br>
<br>
<br>
开启长密码的选项也不建议使用。<br>
<br>
不要 改变 #undef AUTOSHADOW 的设定。<br>
<br>
AUTOSHADOW 选项初始设计是用以让 shadow 可以像 function 一样执行。理论上听起来不错,但是没办法正确的运作。 如果你开启这个选项,且这个程式以 root 权限在执行, 它会像 root 权限执行一项呼叫 getpwnam() ,然後变更 /etc/passwd 档 (有no-longer-shadowed 密码)。 这类程式包括 chfn 和 chsh。(如果 root 在呼叫 getpwnam() 之前使用 chfn 和 chsh,使用者帐号将没有办法真实且有效交易。)<br>
<br>
<br>
如果你要建立 libc,同样的警告也有效,它有个 SHADOW_COMPAT 作相同的事。 它 不应该被使用!如果你开始从你的 /etc/passwd 档撷取编码密码,这会是个问题。<br>
<br>
如果你正使用比 4.6.27 还高的 libc 版本,你将需要在 config.h 和 Makefile两个档做很多改变。在 config.h 档的编辑和改变:从:<br>
<br>
#define HAVE_BASENAME<br>
<br>
到:<br>
#undef HAVE_BASENAME<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -