2).通过用户口令
使用以下参数来限制通过用户口令访问:
security
参数security可以确定对客户用户名/口令的验证方式。缺省为"user",即对Samba服务器的任何访问都要通过用户名/口令的验证。如果客户登录客户机,如Windows
所用的用户名与Samba服务器上的UNIX用户名一致,则通过口令验证后就可以访问;如Windows
所用的口令也与UNIX一样,那么不经任何提示就可以访问。
但如果客户机上登录的用户名与Samba服务器上的UNIX用户名不一致,则需要在一个映射文件中(如/etc/smbusers)写入客户机用户名到UNIX用户名的映射,同时使用"username
map"参数指定映射文件,例如:
username map = /ect/smbusers
在/etc/smbusers文件中的内容如下:
cuckoo = "cuckoo doo"
这样,在客户机上以"cuckoo
doo"注册后,再与Samba服务器连接时,输入UNIX客户cuckoo的口令就可以进入,因为Samba已经把"cuckoo
doo"映射为cuckoo。
security参数的另一个值是"share",表示Samba服务器不需要客户机使用用户名/口令来登录,而是根据每个共享的设置来决定是否需要用户名/口令验证。设置security为share一般用于客户机上大多数用户名与Samba服务器上UNIX用户名不相同的情况,以及Samba服务器主要提供guest访问。
在smb.conf文件中,如果没有设置"encrypt
passwords",Samba将使用UNIX的password数据库来验证用户口令。这需要客户机将口令以"普通文件"的方式传递过来。如果设置了"encrypt
passwords",Samba则使用另一个加密口令文件,通过"smb passwd file"来设置,例如:
encrypt passwords = yes
smb passwd file = /etc/smbpasswd
3).通过用户名
public
guest ok
上面的两个参数的功能相同,都可以使用相应的服务允许guest用户,即不需要用户名/口令验证。如果还指定了"guest
only",那么相应的服务器只允许由guest用户来访问。
invalid users
valid users
这两个参数分别设置不允许注册某个服务和允许注册某个服务的用户列表。一个用户同时出现在两个列表中的时候,不允许注册优先。列表中的用户名可以用空格隔开,以"@"开头的名字被认为是NIS
组名或UNIX组名;以"+"开头的名字被认为是UNIX组名;以"&"开头的名字只被认为是NIS组名。
only user
此参数控制是否只允许在"user ="列表中指定的用户访问某个服务。如果设置为true,则只有在"user ="列表中的用户才能访问。
4).通过是否可以读写来控制
read only
此参数设置为"yes",则使用服务的用户不能在该服务的目录中创建或修改文件。
writable
writeable
write ok
这三个参数功能相同。如果它们被设置为"no",则使用服务的用户不能在该服务的目录中创建或修改文件。
read list
write list
这两个参数分别指定只允许对一个服务进行只读访问或同时有"写"权限的主机列表,这里,如果一个主机同时在两个列表里,则"写"优先。
5).通过是否在浏览器列表中显示来控制
browsable
browseable
这两个功能相同的参数控制该段是否在浏览列表中列出。浏览列表列出的是可获得的共享列表。一般[home]段禁止浏览,以提高安全性。
3、Windows 9x做为SMB客户的设置
1).配置microsoft网络客户
在客户机(WIN9X)上,在控制面板里添加microsoft网络客户。选中microsoft网络客户--标识--计算机名-- my_computer_name--my_group,其中,my_computer_name将作为表示客户机的NetBIOS名,
my_group为组名
2).编辑注册表记录
如果在SMB服务器上的smb.conf 文件中没有用到"encrypt
passwords",即使用"普通文本"格式的口令,则必须要编辑注册表,来允许使用"普通文本"格式的口令。
在Windows的注册表的以下条目中:
/HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/VxD/VNETSUP
新建DWORD值,将新建的值命名为EnablePlainTextPassword;双击EnablePlainTextPassword,将键值设为1。
3).重新启动
重新启动计算机,以用户名/口令登陆。该用户名/口令将用于与SMB服务器连接时进行用户身份认证,所以如果要访问SMB服务器上用户自己的home目录,建议使用与SMB服务器上相同的用户名/口令。
4).访问Samba服务器
通过网络邻居浏览访问Samba服务器,可以在列表里选择,也可以在命令窗口里使用命令:
\\sambaserver
4 、Samba服务器提供的其他命令
smbstatus
smbstatus指令用于显示当前的SMB服务器的连接状态。例如,在IP地址为202.204.3.16的"cuckoo"客户机上,用户john访问SMB服务器的"public"服务时,命令输出如下:
/usr/bin/smbstatus
Samba version 2.0.3
Service uid gid pid machine
----------------------------------------------
public john john 10009 cuckoo (202.204.3.16) Fri Jul 21 20:3
No locked files
Share mode memory usage (bytes):
1048464(99%) free + 56(0%) used + 56(0%) overhead = 1048576(100%) total
此命令可以附加一些开关来显示不同的内容,下表列出了主要的开关及其含义:
表1-2 smbstatus命令主要选项表
nmblookup
nmblookup命令用于把一个NetBIOS名字映射到IP地址。对于上面的例子,可以使用下面的命令查找主机cuckoo:
/usr/bin/nmblookup sale
可以使用合适的选项来允许nmblookup查询一个IP广播域或是一个单独的机器,该命令常用的选项参看表1-3。
表1-3 nmblookup 命令主要选项列表
smbclient
smbclient是访问SMB服务器资源的客户程序。该程序提供的接口与ftp程序类似,访问操作包括从SMB服务器下载文件到本地,或从本地上载文件到SMB服务器,还可以在SMB服务器上检索目录信息等。
命令语法如下:
/usr/bin/smbclient //smbserver/service [passwd][-U username]
其中,smbserver是SMB服务器的NetBIOS名,一般与服务器的主机名一样,但不是必须的。"service"为服务器提供的服务,如文件服务public或打印服务printer。
passwd是访问某些服务时需要的口令。如果在命令行输入,后面则不会再提示输入口令。否则,将在后面提示输入口令。虽然有些要访问的服务器不需要口令,但仍然会有输入口令的提示。如果不希望有口令提示,则可以在命令行使用"-N"选项。
如果要使用其他的端口与SMB服务器进行TCP连接,可以使用"-p"选项来指定,缺省值为139。
"-U"可以指定与SMB服务器连接时使用的用户名。如果没有指定,smbclient使用环境变量USER指定的值作用户名。如果没有USER环境变量,则用"guest"。
在环境变量USER中,可以设置"USER=username%password",这样就不用在命令行上输入口令。同时,使用ps命令看不到命令行参数,具有一定的安全性。同样,也可以使用"-U
username%password"的形式指定用户名和口令。?quot;-U"指定的口令"%password"要优先于在命令行[password]中指定的口令。
"-L"选项可以列出在一个服务器上提供的服务,例如:
/usr/bin/smbclient -L smbserver
使用下面的命令可以进入与ftp类似的提示状态:
/usr/bin/smbclient //smbserver/service
执行结果:
smb:\>
其中""表示服务器当前的工作目录。在该提示符下可以使用的命令可以通过"?"、"help"命令列出。命令不分大小写。
在该提示符下除了可以使用很多与ftp类似的命令外,还有命令recurse,它可以被设置为on,以便在使用mget或mput命令时能够get或put匹配的子目录。recurse缺省为off,即只get或put当前目录中的文件。
在该提示符下还可以使用下面的命令:
smb:\>tar c localfile filename
将服务器上文件名为"filename"的文件和目录(可以使用通配符)经过tar 拷贝到本地的"localfile "文件中。或者:
smb:\>tar x localfile filename
可以把本地tar 文件localfile 中的文件filename拷贝到服务器上;如果filename省略,则拷贝所有的文件。
上面的命令也可以在smbclient命令行上来执行,如:
/usr/bin/smbclient //smbserver/service [passwd] -T c local file filename
/usr/bin/smbclient //smbserver/service [passwd] -T x local file filename
smbprint
smbprint是在Linux系统下将打印文件提交给远地SMB服务器打印的脚本程序。程序中调用的命令就是smbclient。下面举例说明此命令的使用方法。
例如,远端SMB服务器NetBios名为prtserver(Windows
9X),提供打印服务。服务名为netpcl(NEC激光打印机),不需要口令。
在Linux系统中配置如下:
1. 编辑/etc/printcap文件,加入下面一行
smb:lo=/dev/null:sd=/usr/spool/smb:sh:if=/usr/bin/smbprint:af=/var/spool/lpd/smb/acct
2.建立目录/usr/spool/smb、/var/spool/lpd/smb
3.用下面命令建立记帐文件
touch /var/spool/lpd/smb/acct
4.建立/var/spool/lpd/smb/.config文件,包含下面内容:
server = prtserver
service = necpcl
password = ""
5.编辑/usr/bin/smbprint文件,在smbclient命令参数中使"echo
translate"有效,这样可以使UNIX文件到Windows 9x系统打印时,进行<LF>与<CR/LF>的转换。
6.启动lpd:
/etc/rc.d/init.d/lpd start
7.使用lpr命令打印/etc/hosts文件
/lpr -P smb/etc/hosts
lpr缺省使用的打印机名为lp,这里使用的是smb。
5、使用Samba加密口令
客户机访问Samba服务器时进行的用户身份认证包括使用"普通文本"格式的口令,通过网络传送给SMB服务器,与UNIX的帐户数据库(如/etc/passwd)进行核查;或者使用加密口令,通过"SMB
challenge/response"验证进行核查。本文着重介绍加密口令的用法。
在Samba服务器中使用了与Windows NT兼容的口令加密算法,因此可以像Windows NT一样对Samba的客户进行用户口令核实。
Windows
NT使用一个包含用户口令hashed值的文件,是通过对用户的"普通文本"的口令经过加密算法得到的,称为"hashed口令"。不能从该hashed 值返回得到原始的"普通文本"的口令。在Samba服务器上可以形成同样的hashed口令,保存在smbpasswd文件中。
当一个Samba客户(如Windows 9x
或NT)使用Samba资源时,它先请求一个连接,并商讨连接使用的协议。Samba回答客户请求时产生一个随机值,发送给客户,并且还储存在Samba服务器上,称为"challenge"。"challenge"对于每一个客户连接是不一样的。
客户然后使用hashed口令与"challenge"进行加密运算,产生24个字节的"response",发送给Samba服务器。
Samba服务器使用自己保存的hashed值的用户口令(保存在smbpasswd文件中)与先前产生的"challenge"进行同样的加密运算,将产生的结果与客户发送过来的结果进行比较,如果结果相同,则客户被允许访问;否则,禁止用户访问。
对于Samba服务器来说,它不存储"普通文本"格式的口令,储存的是从"普通文本"口令转换的hashed口令。并且在网络连接时,"普通文本"和 "hashed口令"都不被传送,所以比UNIX安全。因为当客户程序与UNIX服务器连接时(如telnet),口令往往是以"普通文本"在网络上传送的,可以被网络窃听软件(如tcpdump)截获。Samba加密口令文件smbpasswd会被利用成为潜在的漏洞。所以该文件是要由root所有,读写权限应该为600。
Windows 9x
或NT缺省的用户认证方式是使用加密的口令,这?quot;普通文本"不在网络上传送。相应的,Samba也要使用加密口令的认证方式。但如果想使用"普通文本"格式的口令,可以编辑Windows
NT的注册表来允许。这样,Samba服务器就可以使用/etc/psswd文件来验证用户口令,而不需要smbpasswd文件。
要想让Samba使用与Windows
NT兼容的口令加密算法,则必须在Samba服务器上保存包含与用户名对应的hashed值的口令文件。可以使用/usr/bin/mksmbpasswd.sh程序产生加密口令文件的框架,文件名由"smb
passwd file"参数设置,这里是/etc/smbpasswd,命令行格式为:
cat /etc/passwd |mksmbpasswd.sh >/etc/smbpasswd
然后root可以使用smbpasswd命令可以设置用户口令,例如设置客户cuckoo的smb口令为smbpassword:
/usr/bin/smbpsswd cuckoo smbpassword
root还可以使用smbpsswd 进行添加用户、取消口令等操作。但添加的用户必须在/etc/psswd文件中存在。普通用户使用smbpsswd
命令只能像使用passwd程序一样更改自己的smb口令。
三、Samba常见故障排除
Samba的故障排除可以在SMB服务器和SMB客户机上通过各自的命令来完成。
1 SMB服务器上的操作
1).使用下面的命令来查看是否有错误的配置。
/usr/bin/testparm /etc/smb.conf
2). 在服务器上以及客户机上用ping命令检查tcp/ip是否正常工作。
3). 在SMB服务器上用
/usr/bin/smbclient -L SMBserver
命令将得到一个共享的列表。
如果出现失败信息,则要检查与服务器相关的"hosts allow"、"hosts deny"、"valid users"、"invlid
users"等参数的设置。如果出现"connection
refused",则检查Samba服务器进程是否启动;若Samba以守护进程形式运行的话用"netstat -a"命令检查端口是否处于监听状态。
4). 运行了命令"/usr/bin/nmblookup SMBserver",将返回SMB服务器的IP地址。否则nmbd没有正确的运行。
5). 运行"/usr/bin/nmblookup -d 2 '*'
"命令,在子网中运行NetBIOS/TCPIP的主机将会响应。否则说明nmblookup
不能正确的得到广播地址,可以尝试在smb.conf文件中用interfaces参数人工设置IP地址、广播地址和子网掩码。
6). 运行"/usr/bin/smbclient
'\\SMBserver\homes"命令,需要输入客户在SMB服务器上的用户口令,然后会出现类似"smb>"的提示符。这时可以使用dir 命令浏览客户在SMB服务器帐户目录下的文件,用help命令可以得到其他命令的帮助。如果不能出现类似"smb>"的提示符,并且有 "invalid
network name"的错误信息,则有可能homes共享没有正确的设置;或者有"Bad password",则要检查"shadow
password"、"password encryption"以及参数"valid users"和"path"的设置。
2、SMB客户机上的操作
1). 运行"net view \\SMBserver"命令,应该能够列出SMB服务器上的共享。
如果出现类似"network name not found"的错误,则要检查客户机上DNS或WINS的设置。如果出现"Invalid network
name"或"bad password error"的错误,则参照与上面"smbclient
-L"命令中同样的错误结果的解决方法。要注意客户机将要用客户注册客户机时所用的用户名/口令去与SMB服务器连接,所以在SMB服务器上,用户最好有同样的用户名/口令。
2). 使用"net use
x;\\SMBserver\homes"命令,可以把SMB服务器上客户home目录映射到客户机"x:"盘,"x:"应该是一个客户机上未用的盘号。这样,共享的目录可以在客户机上以"x:"盘来看待。正常的信息为"command
complete successfully"。
如果要停止使用"x:"盘,可以使用"net use
x:/delete"命令。如果不能正常的把客户的home目录映射到"x:"盘,则要检查SMB服务器上"hosts
allow"等参数的配置。如果客户机上的用户名不能与服务器上的用户名匹配,尝试使用"username map"选项。
3). 如果在SMB服务器上没有使用"encrypted passwords",则在客户机上要在注册表中允许使?quot;普通文本"格式的口令。
小结
Samba是SMB的一种实现方法,主要用来实现Linux系统的文件和打印服务。Linux用户通过配置使用Samba服务器可以实现与Windows用户的资源共享。
守护进程smbd和nmbd是Samba的核心,在全部时间内运行。nmbd
程序使得通过企图计算机可以浏览Linux服务器。Smbd守护进程在SMB软件包到达网上时对它们进行处理,并且为使用或共享它的资源与Linux进行协调。
在安装完Samba后,还需要定制它的配置文件smb.conf,才能使Samba正常工作以符合要求。smb.conf文件的的语法结构与 Windows的*.ini文件十分类似;文件结构主要包括三部分:全局参数部分、目录共享部分、打印共享部分;本文着重介绍了如何配置各选项以完成特定的功能。
通过使用不同的参数,可以实现对Samba的不同访问控制:通过主机地址限制访问、通过用户口令限制访问、通过用户名限制访问、通过验证读写权限限制访问、通过是否在浏览器列表里显示来控制等。所有这些方法,大大的增强了Samba服务器的安全性。