全部博文(290)
分类: LINUX
2010-02-02 22:40:09
SAMBA: Send Message Block
局域网上共享文件和打印机的一种协议,能够使Unix与Windows系统之间进行共享服务,使Windows能够采用 "网上邻居" 进行访问Unix主机.
让NETBIOS和SMB这两个协议运行于TCP/IP通信协议之上,并且使用Windows的NETBEUI协议让LINUX可以在网络邻居上被Windows看到.
SAMBA基于的两个守护进程: nmbd
smbd
smbd: 设置共享目录、打印机等;如果不打开nmb服务器的话,只能通过IP来访问
nmbd: 管理群组、NetBIOS Name等解析工作;
139: 主要用于提供Windows文件和打印机共享以及Unix中的Samba服务。
137: 主要用于"NetBIOS Name Service"(NetBIOS名称服务)
要获取Samba客户端工具需要安装smbclient
和smbfs
两个软件包
安装命令:
apt-get install smbclient smbfs
SAMBA客户端程序, 与FTP相类似的一个命令行程序
~# smbclient //192.168.102.43/movies -U tony
Password:
Domain=[TONYBOX] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
smb: \> ?
? altname archive blocksize cancel
case_sensitive cd chmod chown close
del dir du exit get
getfacl hardlink help history lcd
link lock lowercase ls mask
md mget mkdir more mput
newer open posix posix_open posix_mkdir
posix_rmdir posix_unlink print prompt put
pwd q queue quit rd
recurse reget rename reput rm
rmdir showacls setmode stat symlink
tar tarmode translate unlock volume
vuid wdel logon listconnect showconnect
!
smb: \>
也可以这样:
~# smbclient \\\\192.168.102.43\\movies -U tony
Password:
Domain=[TONYBOX] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
smb: \>
smbclient
工具的常用命令选项:
[-s smb.conf] 指定使用的配置文件
[-R name resolve order]指定使用的名称解析顺序
[-p port]指定访问端口
[-I dest IP] 规定要连接的服务器的I P地址
[-U username]规定在建立连接后登录进入服务器所使用的用户名称
[-L NetBIOS name] 可得到服务器支持的所有服务列表
命令示例:
~# smbclient -L //192.168.102.43 -U tony
Password:
Domain=[TONYBOX] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
Sharename Type Comment
--------- ---- -------
E$ Disk Default share
USBKiller Disk
IPC$ IPC Remote IPC
D$ Disk Default share
print$ Disk Printer Drivers
movies Disk
Z$ Disk Default share
F$ Disk Default share
ADMIN$ Disk Remote Admin
C$ Disk Default share
session request to 192.168.102.43 failed (Called name not present)
session request to 192 failed (Called name not present)
Domain=[TONYBOX] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
Server Comment
--------- -------
Workgroup Master
--------- -------
而下面的命令则可以得到目录中的文件列表
~# smbclient //192.168.102.43/USBKiller -c dir -U tony
用于查看本网段提供网络共享服务的机器
debian-server:~# findsmb
*=DMB
+=LMB
IP ADDR NETBIOS NAME WORKGROUP/OS/VERSION
---------------------------------------------------------------------
192.168.201.2 DBSRV [WORKGROUP] [Windows Server 2003 3790 Service Pack 2] [Windows Server 2003 5.2]
192.168.201.11 GZJST-ZWZX +[WORKGROUP] [Windows Server 2003 3790 Service Pack 2] [Windows Server 2003 5.2]
169.254.205.12 unknown nis name
192.168.201.15 NETMAN [GZJS] [Windows 5.0] [Windows 2000 LAN Manager]
192.168.201.16 NEWSRV [GZJS] [Windows Server 2003 3790 Service Pack 2] [Windows Server 2003 5.2]
192.168.201.18 XZSP [GZJS] [Windows Server 2003 3790 Service Pack 2] [Windows Server 2003 5.2]
192.168.201.130 C4E24347D5DC443 [WORKGROUP] [Windows 5.0] [Windows 2000 LAN Manager]
192.168.201.222 DEBIAN-SERVER +[MSHOME] [Unix] [Samba 3.0.26a]
类似于wget
的下载工具, 用于下载SMB资源.
详细用法参阅手册页:
用于直接备份SMB/CIFS共享资源到UNIX磁带设备的shell脚本,是个在smbclient基础上建立的非常小的shell脚本,用于把SMB共享资源直接写到磁带上。
用法:
smbtar -s server -u user -p password -x sharename -t output
其中server是服务器的名字,user为用户名,password为密码,sharename为要备份的共享文件名,output为备份文件的名字.
例:
#smbtar -s 10.0.0.2 -u redhat -p redhat -x share -t share.tar
显示共享目录树形结构
比如:
~# smbtree
MSHOME
\\DEBIAN-SERVER debian-server server
\\DEBIAN-SERVER\tony Home Directories
\\DEBIAN-SERVER\netlogon Network Logon Service
\\DEBIAN-SERVER\print$ Printer Drivers
\\DEBIAN-SERVER\IPC$ IPC Service (debian-server server)
用于获取或设定NT文件或目录的访问权限列表.
比如:
# smbcacls //192.168.102.43/movies -U tony hfs.exe
Password:
REVISION:1
OWNER:\Everyone
GROUP:\Everyone
~# smbcacls //192.168.102.43/USBKiller -U tony update
Password:
REVISION:1
OWNER:TONYBOX\tony
GROUP:TONYBOX\None
ACL:NT AUTHORITY\SYSTEM:ALLOWED/0/FULL
ACL:TONYBOX\tony:ALLOWED/0/FULL
ACL:TONYBOX\Guest:ALLOWED/19/READ
ACL:NT AUTHORITY\SYSTEM:ALLOWED/16/FULL
ACL:NT AUTHORITY\SYSTEM:ALLOWED/27/0x10000000
ACL:TONYBOX\tony:ALLOWED/16/FULL
ACL:TONYBOX\tony:ALLOWED/27/0x10000000
用于设定或获取NTFS分区格式共享目录的磁盘配额
用来查看以及设置共享打印机驱动程序.
~# rpcclient -c 'getdriver "HP LaserJet 1022n"' 192.168.102.43 -U tony
Password:
[Windows NT x86]
Printer Driver Info 3:
Version: [3]
Driver Name: [HP LaserJet 1022n]
Architecture: [Windows NT x86]
Driver Path: [\\192.168.102.43\print$\W32X86\3\IMFNT5.DLL]
Datafile: [\\192.168.102.43\print$\W32X86\3\SDhp1020.SDD]
Configfile: [\\192.168.102.43\print$\W32X86\3\SDNT5UI.DLL]
Helpfile: [\\192.168.102.43\print$\W32X86\3\SDhp1020.HLP]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\SDhp1020.DLL]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\SUhp1020.dll]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\SUhp1020.ent]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\ZJBIG.dll]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\ZLhp1020.dll]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\SUxml.dll]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\xerces-c.dll]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\hp1020.img]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\hp1022.img]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\hp1022n.img]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\zshp1020.exe]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\ZSHP1020.HLP]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\SUHP1020.VER]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\vshp1020.dll]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\IMFPRINT.DLL]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\QDPRINT.DLL]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\Sd32.dll]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\SDIMF32.DLL]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\SDDM32.DLL]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\SDDMUI.DLL]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\Sr32.dll]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\ZGDI32.DLL]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\SDhp1020.UNZ]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\ZSPOOL.DLL]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\ZSPOOL32.EXE]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\ZTAG32.DLL]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\ZUNINST.EXE]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\zlm.dll]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\IMF32.DLL]
Dependentfiles: [\\192.168.102.43\print$\W32X86\3\SDNTUM4.DLL]
Monitorname: [HPLJ1020LM]
Defaultdatatype: [RAW]
使用SMB服务器共享的打印机.
用于将windows的共享目录挂载到LINUX本机, 功能与 mount -t smbfs 可以装载一个Linux SMB文件系统。它通常在带 "-t smbfs" 选项执行 mount(8) 命令时被作为mount.smbfs执行。当然内核必须支持smbfs文件系统 格式为 smbmount 共享资源地址 加载点 -o 参数
/mnt# mkdir smb
/mnt# smbmount //192.168.102.43/movies /mnt/smb -o username=tony
Password:
/mnt#
常用参数
username=SMB 用户名 username
password=SMB 密码 assword
port=SMB服务器端口remote SMB port number
fmask=文件 umask
dmask=目录 umask
iocharset=Linux字符集 (iso8859-1, utf8)
codepage=服务器字符集 codepage (cp850)
guest 以匿名方式登录don't prompt for a password
ro 只读方式加载mount read-only
rw 读写方式加载mount read-write
卸载则需要使用smbumount.
命令格式:
smbumount {mount-point}
例如
~# smbumount /mnt/smb
smbmnt
是装载 SMB 文件系统的协助工具,用于协助
Samba 服务器的安装与配置
安装对应软件包
~# apt-get update
~# apt-get install samba samba-common
此用户必须是系统用户
比如:
# smbpasswd tony
/etc/init.d/samba start|restart|stop
[global] //[global]段的开始
...
[homes] //[global]段的结束,[home]段的开始
...
[printers] //[homes]段的结束,[printers]段的开始
...
[sharedoc] //[printers]段的结束,[sharedoc]段的开始
...
其中
[global] 和服务器的整体功能相关的一些参数,系统角色和缺省值
[homes] 利用这个特殊共享,用户可以连接到他们的主目录,而不要求为每个用户定义一个特定的共享
[printers] 从/etc/printcap中创建打印机资源
[sharedoc] 为用户自定义共享节,名字和个数可以根据自己的需求设置
[global] 之外的任何节都被认为是共享资源
节标题忽略大小写
语法和语义
参数=值
“\”表示继续到下一行
注释行用“#”或“;”字符开头
变量,都以“%”字符作为前缀
include
和 copy
参数可以用于向配置文件中插入或复制节.
[global] #全局设定
workgroup = MSHOME #设定samba server的工作组为MSHOME, 即在网上邻居中所处的工作组为 MSHOME;
; netbios name = #你可以指定你samba服务器的netbios名字。通过windows机器的网络邻居可以看到这个名字。如果你没有特别指定,Linux将会使用它自己的网络名作为netbios名。
server string = %h server #设定samba server 的服务器说明
; wins support = no
dns proxy = no
log file = /var/log/samba/log.%m #设定日志文件的存储位置 %m代表访问机器名称
max log size = 1000 #设定sambaserver所能存储日志的最大容量, 单位:KB
syslog = 0 #设定日志级别,级别越高,记录内容越多
panic action = /usr/share/samba/panic-action %d
security = user #设定服务器访问的安全登记, user: 使用用户名密码登录
encrypt passwords = true #是否对samba用户的密码进行加密处理
passdb backend = tdbsam #设定SAMBA用户密码的存放方式, 为tdbsam时密码存放在 /var/lib/samba/passdb.tdb 文件中
#如果设为smbpasswd方式则需要使用smb passwd file 来指定密码文件存放路径
obey pam restrictions = yes #当用户认证时,服从PAM的管理限制
; guest account = nobody #设定系统的试用账号
invalid users = root #禁止root用户通过网络访问
; unix password sync = no #设定在系统添加用户时是否同时添加到samba用户列表
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .
socket options = TCP_NODELAY
#共享项目设定
[homes] #访问者的主目录设定
comment = Home Directories #说明文字
browseable = no #在浏览资源时, 是否显示共享名称, 设为否, 则必须使用完整路径在能访问
writable = no #是否可以写操作
create mask = 0700 #创建文件时的默认权限
directory mask = 0700 #创建目录时的默认权限
valid users = %S #可以访问的用户名单
#打印机设定
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba #共享资源的完整路径
printable = yes #是否允许打印
public = no #是否可以匿名访问, 设为no, 则必须使用用户名密码访问
writable = no
create mode = 0700
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes #是否设定问只读模式
guest ok = n
测试smb.conf 配置文件
~# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
# adduser etony
# smbpasswd -a etony
New SMB password:
Retype new SMB password:
Added user etony.
# smbpasswd etony
New SMB password:
Retype new SMB password:
# smbpasswd -x etony
Deleted user etony.
设置共享目录、打印机等;如果不打开nmb服务器的话,只能通过IP来访问.
是samba的一个名字解析程序,管理群组、NetBIOS Name等解析工作.
用户当前状态下访问SMB服务器的情况.
~# smbstatus
Samba version 3.0.26a
PID Username Group Machine
-------------------------------------------------------------------
3599 tony tony tonybox (192.168.102.43)
Service pid machine Connected at
-------------------------------------------------------
IPC$ 3599 tonybox Wed Nov 14 13:29:25 2007
tony 3599 tonybox Wed Nov 14 13:30:22 2007
Locked files:
Pid Uid DenyMode Access R/W Oplock SharePath Name Time
--------------------------------------------------------------------------------------------------
3599 1000 DENY_NONE 0x100001 RDONLY NONE /home/tony . Wed Nov 14 13:30:22 2007
用于设置smb用户的密码, smb 用户首先必须是系统用户
添加系统用户
# adduser etony添加samba用户
# smbpasswd -a etony
New SMB password:
Retype new SMB password:
Added user etony.修改用户密码
# smbpasswd etony
New SMB password:
Retype new SMB password:删除用户
# smbpasswd -x etony
Deleted user etony.
检查当前smb.conf配置文件的正确性
~# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[netlogon]"
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
follow symlinks 是否使用符号链接 wide links 允许遵循共享目录树之外的链接
admin users = melissa 有着administrative 权限的用户可以读、写或修改任何包含在用户已明确给予 administrative 权限的资源里的任何信息
preexec=<命令或脚本路径名>
postexec=<命令或脚本路径名>
root preexec=<命令或脚本路径名>
root postexec=<命令或脚本路径名>
例如对于CDROM共享:
root preexec=/user/sbin/mount -o ro /dev/cd0 /mnt/cdrom
root postexec=/user/sbin/umount /mnt/cdrom
hosts allow 和 hosts deny
通过
hosts allow
和hosts deny
参数指定的主机名和/或IP地址进行的基于主机的访问控制 可以满足最简单的认证需要。多个参数以空格隔开, 表示方法可以为完整的IP地址或网段.例如: hosts allow = 192.168. except 192.168.0.10
认证级别
security = share, user, server, domain
share---不需要提供用户名和密码
user----需要提供用户名和密码,而且身份验证由 samba server 负责
server--需要提供用户名和密码,可指定其他机器(winNT/2000/XP)或另一台 samba server作身份验证
domain--需要提供用户名和密码,指定winNT/2000/XP域服务器作身份验证
password level = <位数>;
username level = <位数>;
设定用户名密码的最长位数
valid users 和 invalid users
设定只有此名单内的用户才能/不能访问共享资源(拒绝优先)(用户名/@组名) 如果用户名以 @或&字符作前缀,则说明相应的用户名代表一个用户组,如果以+字符作为前缀,则用UNIX组文件对该用户名进行检查
force group 和 force user
指定存取资源时须以此设定的群组使用者/使用者进入才能存取(用户名/@组名)
guest ok
是yes/否no公开共享,若为否则进行身份验证(只有当security = share 时此项才起作用)
guest account
设定访问 samba server 的来宾帐户(即访问时不用输入用户名和密码的帐户),若设为pcguest的话则为默认为"nobody"用户
read only
是yes/否no以只读方式共享当与writable发生冲突时也writable为准
read list
设定此名单内的成员为只读(用户名/@组名)
writeable
是yes/否no不以只读方式共享当与read only发生冲突时,无视read only
write list
若设定为只读时,则只有此设定的名单内的成员才可作写入动作(用户名/@组名)
force security mode, force create mode, force directory mode, force directory security mode 和 security mask
当用户在NT上更改远程文件的权限时,Samba就把它们映射为UNIX标准权限,并把它们与security mask选项的值进行比较,如果该选项没有把被更改权限所对应的那一位设为1,就忽略这一位的更改(标准UNIX权限有12位)。如果把该选项的某一位设 为0,那么用户就不能更改这一位所对应的权限了。
如果你没有明确地这个选项,那么它的值就和create mask 选项的值相同。如果想允许用户修改文件的所有权限(三个权限组),就把它设为0777就可以了。
security mask 和 create mask
建立文件时所给的权限, 如果security mask没设,则按照create mask 模式.
例如:
security mask = 0777
create mask = 0660
directory security mask 和 directory mask
建立目录时所给的权限
例如:
directory mask = 0771veto files
隐藏/限定指定文件
选项将文件说明与斜线字符(/)区别开,并支持标准通配符,星号(*)以及问号(?)。如果不允许共享EXE文件,COM文件,或者DLL文 件,可以将一个veto文件属性设置如下:
veto files = /*.exe/*.com/*.dll/
hide files
在客户端进行访问的时候是不显示隐藏文件;
hide dot files
指明是不是像unix那样隐藏以"."号开头的文件。
delete veto files
当用户删除有veto files的目录时, 是否允许删除veto files以及目录.
delete readonly = no # 是否允许dos用户删除只读文件
# 是否允许dos用户删除只读文件
dont descend
指定 Samba 不应该进入共享中的目录。它可以方便地防止 Samba 进入一个包含递归符号链接的目录,或者限制对如 /proc 和 /dev 等无关目录的访问。请务必测试 dont descend= 设置来确保它们能使用.
例如,您可能需要将 "dont descend= /dev" 换为 "dont descend= ./dev"。
locking
#由于文件只能同时被打开一次,当文件打开时,samba会自动让其他访问守候,为了文件不被破坏