![[ 永远的UNIX::UNIX技术资料的宝库 ]](/images/title.gif)
|
| 首页 > 应用技术 > 其它 > 正文 |
 |
| Samba-HOWTO最新汇集--2. Samba 2.x中的LanMan和NT口令加密 |
| 本文出自: http://6bytes.com/meaculpa 编译:meaculpa (2001-05-31 11:00:00) |
目录表
2.1. 介绍
2.2. 工作原理
2.3. 重要的安全性说明
2.3.1. SMB加密的好处
2.3.2. 非加密口令的好处
2.4. smbpasswd文件
2.5. smbpasswd命令
2.6. 设定Samba支持LanManager加密
2.1. 介绍
Samba兼容LanManager和Windows NT口令加密。
本文描述了SMB口令加密算法的工作原理,并给出了建议,请仔细阅读。
--------------------------------------------------------------------------------
2.2. 工作原理
LanManager加密与UNIX口令加密稍微有些相似。SMB服务器使用一个存放用户口令散列值的文件,该文件的建立过程为:取得用户的明文口令,将首字母转为大写,然后要么截短到,要么用空字节补足14个字节长。然后把这14个字节值作为两个56位的DES密钥,用来产生出一个‘魔术’8字节值,最后形成一个16字节的值,并由服务器及客户机保存,这就是“散列口令”。
Windows NT的加密机制就更高级了,它对用户口令的Unicode码进行MD4散列运算,而且也产生一个16字节的不可逆散列值。
当客户端(LanManager、Windows for WorkGroups、Windows 95或Windows NT)要装载一个Samba驱动器(或使用Samba资源),就先发出一个连接请求并与服务器协商要使用的协议。Samba服务器在回复时产生一个8字节的随机值(这个值称为“质询”),并把它发回客户端,然后再保存起来。注意,对于每个连接其质询都是不一样的。
然后,客户端对上述16字节散列口令再加上5个空字节,把结果作为三个56位的DES密钥,再用这三个密钥去加密8字节的质询值,最后形成一个24字节的“响应”值。
客户端通过SMB调用SMBsessionsetupX(当选用用户级安全时)或SMBtconX(当选用共享级安全时)把响应值发给Samba服务器。当使用Windows NT协议级时,用户口令的散列值与响应值都要经过上述的计算,并通过SMB调用发给服务器,所以就有两个24字节的值。
Samba服务器用自己保存的16字节散列口令值(从smbpasswd取得,该文件在后面描述)和质询值重复以上计算,然后检查计算结果与客户端提供的24字节值是否匹配。如果匹配,那么允许客户端进行访问,否则拒绝访问。
注意,Samba服务器不了解也不保存用户口令的明文值 - 只是用它来进行加密。同样,这个明文口令或散列值也不在网络上传输,这样就增强了安全性。
--------------------------------------------------------------------------------
2.3. 重要的安全性说明
从表面上看,UNIX和SMB的口令加密技术很相似,其实区别很大。在UNIX中,登录时通常通过网络发送明文口令,这很糟糕。而SMB加密机制虽然不通过网络发送明文口令,但它把16字节散列值保存在磁盘上,这也很糟糕。原因何在?因为该16字节散列值与“口令”等价:虽然不能从它那里得到用户的口令,但可以把它们用在一个经过修改的客户端程序中,以便访问服务器。虽然这需要一定的攻击技术,但却是完全可能的。所以请妥善保护smbpasswd。
当然了,理想的情况是,我们希望既不在网络上也不在磁盘上操作明文口令。遗憾的是这不可能,因为Samba要与其它SMB系统(Win、WfWg、Win95等)保持兼容。
警告
注意,Windows NT 4.0 Service pack 3改变了缺省的验证机制,不再在线发送明文口令。解决方法是,要么让Samba使用加密口令,要么编辑NT的注册表,重新允许使用明文口令。详情请参见WinNT.txt文档。
具有同样情况的微软操作系统还有:
安装了基本网络重定向功能的MS DOS Network client 3.0
更新了网络重定向功能的Windows 95
Windows 98 [se]
Windows 2000
注意:当前,微软所有的SMB/CIFS客户端都支持通过SMB质询/响应机制进行验证。允许使用明文口令并不会禁止客户参与加密验证的能力。
--------------------------------------------------------------------------------
2.3.1. SMB加密的好处
不通过网络传送明文口令。使用网络嗅探器无法记录传输的口令。
NT必须使用SMB加密口令同服务器进行通信。如果该服务器还在使用用户级安全模式,它会拒绝浏览服务器。它在每次连接时坚持要用户输入口令,当然这很烦人,而唯一的解决方法就是使用SMB加密。
--------------------------------------------------------------------------------
2.3.2. 非加密口令的好处
明文口令不保存的磁盘上。
可以使用与其它UNIX服务一样的口令,如login和ftp。
你可能已经使用了发送明文口令的其它服务(如telnet和ftp),所以多加一个也无关紧要。
--------------------------------------------------------------------------------
2.4. smbpasswd文件
为了使Samba使用上述那些协议,必须查找用户名的16字节散列值。不幸的是,由于UNIX口令值也是通过散列功能来实现的,因此必须使用一个单独的口令文件smbpasswd存放这个16字节值。同时使用两个口令文件就应该避免同步问题。你可以用一个叫mksmbpasswd.sh的工具从UNIX的/etc/passwd文件产生一个smbpasswd文件,如:
$ cat /etc/passwd | mksmbpasswd.sh > /usr/local/samba/private/smbpasswd
如果你使用了NIS系统,就用:
$ ypcat passwd | mksmbpasswd.sh > /usr/local/samba/private/smbpasswd
我们把mksmbpasswd.sh程序放在Samba包的source目录中。而smbpasswd文件缺省情况是保存在以下目录的:
/usr/local/samba/private/smbpasswd
这里的/usr/local/samba/private/目录应该属于root,并且它的权限应是0500(chmod 500 /usr/local/samba/private)。
同样,这个目录里的smbpasswd文件也应属于root,且具有权限0600(chmod 600 smbpasswd)。
smbpasswd文件的格式如下(这里已被换行,在文件中应该是每项占一行):
username:uid:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:\
[Account type]:LCT-:Long name
其中,Samba只使用username、uid、XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX、[Account type]和last-change-time这几项。
这里XXX段中两个冒号‘:’之间的32个‘X’字符极其重要,如果冒号间的字符不足32个,那么Samba对该账号的验证将会失败。其中第一个XXX段用于Lanman口令散列,而第二个则是Windows NT版本。
这个口令文件在建立时,所有用户的口令都是有32个‘X’字符。这样就禁止了用户对服务器的访问。当用户设置了口令后,‘X’字符改变为32个ascii十六进制值,用来表示其口令的16字节散列值。
要把用户口令设为空的话(不推荐),可以用vi编辑该文件并用“NO PASSWORD”这样的ascii文本替换头11个字符(不带引号)。
例如,把bob的口令清除之后,他的账号项应该如下:
bob:100:NO PASSWORDXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:\
[U ]:LCT-00000000:Bob's full name:/bobhome:/bobshell
如果你想让用户用smbpasswd命令设置他们自己的口令,就可以用NO PASSWORD来初始化他/她的口令项,这样他们在更改新口令时就不必输入旧口令了(不推荐,这不安全)。不过,必须让用户不提供口令也可以用smbpasswd程序连接到smbd进程,为此,你只要在smb.conf文件的[global]段中加入以下内容:
null passwords = yes
更安全的做法应该是为用户分配一个缺省口令而不是采用上述方法。
注意:要小心保护smbpasswd文件。如果有人可以接触这个文件,那他(具有足够的协议知识)就可以访问你的SMB服务器(要有足够的协议知识)。
--------------------------------------------------------------------------------
2.5. smbpasswd命令
使用smbpasswd命令可以维护smbpasswd文件中的两个32字节口令字段。我们通常把它安装在/usr/local/samba/bin/目录中(或者你的主Samba二进制程序目录)。
注意,在Samba 1.9.18p4中,不要把这个程序配置为可以setuid到root身份(新版smbpasswd代码已经限制这个操作,不用担心会被意外地按这种方式运行)。
现在,smbpasswd程序以客户机/服务器模式工作,它作为客户端连接本地smbd,然后更改用户口令。所以,它就有下面这些优点:
smbpasswd不再被setuid到root身份 - 消除了大部分的安全问题。
现在,smbpasswd可以更改Windows NT服务器上的口令(在更改NT域用户口令时只能将请求发给NT主域控制器)。
普通用户运行smbpasswd程序只要打:
$ smbpasswd
Old SMB password: <在此键入旧口令 - 如没有旧口令则打回车>
New SMB Password: <键入新口令>
Repeat New SMB Password: <重复输入>
如果旧口令输入有问题,或者两个新口令不匹配,就无法更改口令。
如果是以普通用户调用该程序,只能更改其自身的Samba口令。
如果是以root用户运行,就可以使用选项来指定要更改口令的用户。注意,smbpasswd不会提示或检查旧口令,因此可以用它来为忘记口令的用户重新分配口令。
对于熟悉UNIX的用户来说,smbpasswd的工作方法与使用passwd或yppasswd命令类似。
关于这个程序的详情请参见它的手册页。
--------------------------------------------------------------------------------
2.6. 设定Samba支持LanManager加密
下面简要描述一下如何来设定Samba,使它支持LanManager加密:
先编译安装好Samba。
在smb.conf文件的[global]段中加入encrypt passwords = yes选项,打开口令加密功能。
在Makefile文件指定的目录(--prefix=)中建立一份原始的smbpasswd口令文件。参见前面smbpasswd文件部分的详情。
提示,完成之后可以用smbclient工具来测试一下。
(http://www.fanqiang.com)
进入【UNIX论坛】
|
|
| 相关文章 |
巧配samba实现WIN2000和Linux文件共享 (2001-12-23 08:30:00) Samba的图形化配置工具-SWAT (2001-10-01 07:00:00) Samba的三种典型配置 (2001-09-30 13:05:00) 如何利用Samba实现Linux与Windows98的资源共享 (2001-09-30 09:05:00) Samba的简介 (2001-09-30 08:05:01) Samba 和 Windows 的密码处理认证方式 (2001-09-30 07:05:00) RedHat6.2服务器配置方案大全--第三章 DHCP,第四章 Samba (2001-09-28 09:00:00) 中文man手册:smbstatus - 报告当前samba的联接状态 (2001-09-22 13:05:00) 中文man手册:make_smbcodepage - 为Samba创建代码页文件 (2001-09-21 08:00:00) 寻找Linux下的网络邻居(图形工具:gnomba,Tk Samba,xSMBrowser,LinNeighborhood) (2001-08-24 09:00:00)
|
===更多相关=== |
|
|
 |
★ 樊强制作 欢迎分享 ★ |