Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1760121
  • 博文数量: 290
  • 博客积分: 10653
  • 博客等级: 上将
  • 技术积分: 3178
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 23:08
文章存档

2013年(6)

2012年(15)

2011年(25)

2010年(86)

2009年(52)

2008年(66)

2007年(40)

分类: 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客户端工具需要安装smbclientsmbfs两个软件包

安装命令:

        apt-get install smbclient smbfs

smbclient

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

findsmb

用于查看本网段提供网络共享服务的机器

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]

smbget

类似于wget的下载工具, 用于下载SMB资源.

详细用法参阅手册页:

smbstar

用于直接备份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

显示共享目录树形结构

比如:

~# 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)

smbcacls

用于获取或设定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

smbcquotas

用于设定或获取NTFS分区格式共享目录的磁盘配额

rpcclient

用来查看以及设置共享打印机驱动程序.

~# 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]

smbspool

使用SMB服务器共享的打印机.

smbmount

用于将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

命令格式:

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] 之外的任何节都被认为是共享资源
节标题忽略大小写

语法和语义

参数=值

“\”表示继续到下一行

注释行用“#”或“;”字符开头

变量,都以“%”字符作为前缀

includecopy 参数可以用于向配置文件中插入或复制节.

[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

添加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.

设置共享目录、打印机等;如果不打开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 allowhosts 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 = 0771

veto 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会自动让其他访问守候,为了文件不被破坏



阅读(3216) | 评论(0) | 转发(0) |
0

上一篇:mount or unmount

下一篇:关于NFS共享介绍

给主人留下些什么吧!~~