samba服务器 实验笔记
#一: 检查安装和启动服务
[root@redhatlinux9 root]# rpm -qa|grep samba
#	检查SAMBA的安装情况
samba-common-2.2.7a-7.9.0 
samba-client-2.2.7a-7.9.0
samba-2.2.7a-7.9.0
redhat-config-samba-1.0.4-1	#此组件是X WINDOWS下的配置程序,若没有X就不需要安装了.
#	以上所由RPM包均在第一张安装光盘的 /RedHat/RPMS 中。
#	如果未安装需要挂载光驱并进行安装!
[root@redhatlinux9 root]# grep -v "#" /etc/samba/smb.conf|grep -v ";"
#	用命令grep过滤掉所有 # 和 ; 开始的字段,以显示smb.conf这个默认配置文件的内容。
[global]	#全局组参数
 
        workgroup = mygroup		#设置工作组名称
 
        server string = samba server		#设置服务器名称
 
 
        printcap name = /etc/printcap	#设置打印配置文件路径
        load printers = yes			#允许共享打印机
 
        printing = cups			#设置打印系统类型
 
 
        log file = /var/log/samba/%m.log	#设置日志文件路径
 
        max log size = 0			#不对日志文件作长度限制
 
 
 
 	security = user				#设置USER安全等级
        encrypt passwords = yes			#设置用户密码加密
        smb passwd file = /etc/samba/smbpasswd	#设置口令文件路径
 
 
        unix password sync = Yes			#设置SAMBA用户帐号和LINUX系统帐号同步
        passwd program = /usr/bin/passwd %u	#设置本地口令程序
        passwd chat = *New*password* %n\n *Retype*new*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*	#控制SAMBA和/usr/bin/passwd之间的会话,用以对用户密码进行改变.
 
 
        pam password change = yes		#当用户要求更改密码时施用PAM,而不是PASSWD PROGRAM参数所指定的本地口令程序 /usr/bin/passwd .
 
 
 
 
        obey pam restrictions = yes		#当认证用户时,服从PAM的管理限制
 
        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192	#设置服务器和客户之间会话的Cocket选项.
 
        username map = /etc/samba/smbusers		
        dns proxy = no	#不为客户作DNS查询
 
 
[homes]
        comment = Home Directories
        browseable = no
        writeable = yes
        valid users = %S
        create mode = 0664
        directory mode = 0775
 
[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        printable = yes
 
#	以上为SAMBA默认配置文件 /etc/samba/smb.conf 的内容。
[root@redhatlinux9 root]# testparm
#	此命令用来检查配置文件正确性
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Loaded services file OK.
Press enter to see a dump of your service definitions
#	此时回车会显示所有配置文件内容。
[root@redhatlinux9 root]# service smb start
#	立即启动samba服务
启动 SMB 服务:                                            [  确定  ]
启动 NMB 服务:                                            [  确定  ]
#	注意:如果手动编辑SMB.CONF文件,每次修改后必需使用 service smb restart 重启服务使之生效!
[root@redhatlinux9 root]# ntsysv
#	使用NTSYSV命令选中SMB,使得每次开机SAMBA服务即可自动运行。
#---------------------------------------------------------------------------------------------
#二,设置SAMBA密码文件:
#添加单个帐号可参考如下配置:
[root@redhatlinux9 root]# useradd user1
#	创建用户USER1(为SAMBA用户准备个系统帐号,因为SAMBA服务器帐号必需事先存在于系统中。
[root@redhatlinux9 root]# passwd user1
#	设置USER1的口令(注意!此口令并不是SAMBA服务器的用户验证口令,SAMBA的口令独立存在)。
Changing password for user user1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@redhatlinux9 root]# smbpasswd -a user1
#	使用SMBPASSWD命令 -a 参数添加USER1到SAMBA用户,同时下面设置口令。
New SMB password:
Retype new SMB password:
Added user user1.
#	接下来其它客户机就可以使用user1的用户名和口令访问SAMBA的共享资源了。
#若要成批添加SAMBA帐户可参考如下配置:
[root@redhatlinux9 root]# cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd #将/etc/passwd里的用户都添加到SAMBA帐户.
[root@redhatlinux9 root]# vi /etc/samba/smbpasswd #编辑SMBPASSWD文件,去掉无用的帐号即可.
[root@redhatlinux9 root]# chown root.root /etc/samba/smbpasswd #为了安全设置文件和目录权限.
[root@redhatlinux9 root]# chmod 500 /etc/samba/
[root@redhatlinux9 root]# chmod 600 /etc/samba/smbpasswd
[root@redhatlinux9 root]# ll -d /etc/samba/ #查看属主和权限.
dr-x------    2 root     root         4096  7月  4 23:11 /etc/samba/
[root@redhatlinux9 root]# ll /etc/samba/smbpasswd
-rw-------    1 root     root         3960  7月  4 23:10 /etc/samba/smbpasswd
[root@redhatlinux9 root]# smbpasswd student #接下来可以为添加的帐号设置SAMBA口令了.
#---------------------------------------------------------------------------------------------
#三,使用SAMBA共享资源:
#接下来可以使用X WINDOWS下的配置工具在图形化界面下配置共享,也可以使用诸如WEBMIN等工具通过WEB来进行配置。开放资源的时候注意验证方式:
#WINDOWS客户端可以使用网上邻居类似的方式访问SAMBA共享资源,类似:\\192.168.1.216
#linux客户端访问SAMBA服务器 可以直接在X WINDOWS地址栏输入类似: smb://192.168.1.216 形式访问。
#linux客户端命令行下可以使用以下命令:
[root@redhatlinux9 root]# smbclient -L 192.168.1.216
#	-L 代表列出所有目标上的共享资源
added interface ip=192.168.1.216 bcast=192.168.1.255 nmask=255.255.255.0
Password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 2.2.7a]
 
        Sharename      Type      Comment
        ---------      ----      -------
        brus           Disk
        IPC$           IPC       IPC Service (samba server)
        ADMIN$         Disk      IPC Service (samba server)
        root           Disk      Home Directories
 
        Server               Comment
        ---------            -------
        BITEDU12             samba server
        JJ                   Samba Server
        REDHATLINUX9         samba server
 
        Workgroup            Master
        ---------            -------
        MYGROUP              REDHATLINUX9
        YYXH                 YYXH06
[root@redhatlinux9 root]# smbclient //192.168.1.216/brus -U test
#	以上命令是使用用户名TEST连接到目标。
added interface ip=192.168.1.216 bcast=192.168.1.255 nmask=255.255.255.0
Password:
#	输入test的口令。
Domain=[MYGROUP] OS=[Unix] Server=[Samba 2.2.7a]
smb: \> ?
#	得到可用命令的帮助提示「得到的命令类似FTP」。
?              altname        archive        blocksize      cancel
cd             chmod          chown          del            dir
du             exit           get            help           history
lcd            link           lowercase      ls             mask
md             mget           mkdir          more           mput
newer          open           print          printmode      prompt
put            pwd            q              queue          quit
rd             recurse        rename         rm             rmdir
setmode        symlink        tar            tarmode        translate
!
smb: \> ls
#	例如LS列出文件。
  .                                   D        0  Mon Jan  9 20:07:57 2006
  ..                                  D        0  Mon Jan  9 19:32:38 2006
  SAMBA服务器 实验笔记                      3788  Mon Jan  9 20:05:39 2006
  SAMBA服务器 实验笔记.txt                  3788  Mon Jan  9 20:07:57 2006
 
                44287 blocks of size 131072. 30556 blocks available
smb: \> quit
#	quit退出
#还可以使用挂载驱动起的方式『类似WINDOWS的映射网络驱动器』。
[root@redhatlinux9 root]# mkdir /mnt/smbmnt
#	在MNT目录下创建文件夹smbmnt,以备挂载使用。
[root@redhatlinux9 root]# smbmount //192.168.1.216/brus /mnt/smbmnt/
#	挂载 //192.168.1.216/brus 成为本地目录 /mnt/smbmnt
Password:
[root@redhatlinux9 root]# cd /mnt/smbmnt/
#	进入此位置
[root@redhatlinux9 smbmnt]# dir
SAMBA服务器\ 实验笔记  SAMBA服务器\ 实验笔记.txt
#	可以看到类似本地文件系统一样访问使用。
[root@redhatlinux9 smbmnt]# cd; umount /mnt/smbmnt/
#	使用完毕后可以卸载此挂载!
#---------------------------------------------------------------------------------------------
#四,配置共享设置:
#例一,修改全局配置参数:
[root@redhatlinux9 root]# vi /etc/samba/smb.conf
	workgroup = yyxh				#定义工作组名称
	server string = Game Server %v at %h	#定义服务器描述
	hosts allow = 192.168.1. 192.168.2. 127.	#指定允许访问SAMBA服务器的网段
	client code page = 936			#添加此配置,使得客户机可以支持简体中文的共享名
#修改完后保存退出VI.
#--------------------------------------------------------
#例二,使用符号链接组织本地共享资源:
#此例子中我们将文档目录 /usr/share/doc和本地匿名FTP站点目录 /var/ftp 组织在 /var/samba 目录下并共享.
[root@redhatlinux9 root]# vi /etc/samba/smb.conf	#编辑配置文件并添加共享share,配置如下:
[share]				#共享名
        comment = Local Share	#描述
        path = /var/samba/share	#本地路径
        public = yes		#访客可访问
        writable = yes		#可写
#更改完毕后保存并退出VI.
[root@redhatlinux9 root]# mkdir -p /var/samba/share	#创建目录 /var/samba/share
[root@redhatlinux9 root]# cd /var/samba/share/		#进入此目录的路径
[root@redhatlinux9 share]# ln -s /usr/share/doc doc	#创建符号链接文件
[root@redhatlinux9 share]# ln -s /var/ftp/ ftp		#创建符号链接文件
[root@redhatlinux9 share]# ll
总用量 0
lrwxrwxrwx    1 root     root           14  7月  4 23:37 doc -> /usr/share/doc
lrwxrwxrwx    1 root     root            9  7月  4 23:37 ftp -> /var/ftp/
[root@redhatlinux9 share]# ls
doc  ftp
#------------------------------------------------------
#例三,为所有用户配置只读共享和读写共享:
#此例子中我们将 /mnt/cdrom 目录设置只读共享、为 /tmp 目录设置读写共享。并且大家应该注意的是,为配置所有用户相应权利的共享,被共享目录的本地文件系统上应该具有其他人的相应权限。
#----------------------------------------------------------------------------------------------
#附录,SAMBA配置语法:
#1, 文件结构:
[Global]
#用于定义全局参数和缺省值.
[Homes]
#用于定义用户的HOME目录共享.
[Printers]
#用于定义打印机共享.
[Userdefined_ShareName]
#用户自定义共享(可以有多个)
#---------------------------------
#2, 语法:
;或#
#注释.
[Name]
#节名称
\
#续行符
%
#变量名前缀
参数=值
#一个配置选项, 值可以有两种数据类型.若使用字符串可以不用引号定界字符串.布尔值可以是 1/0 或 yes/no 或 true/false
#-------------------------------
#3, 变量(宏):
%S
#当前服务名.
%P
#当前服务的根路径.
%u
#当前服务的用户名.
%g
#给定%u 的所在的主工作组名.
%H
#给定%u 的宿主目录.
%v
#SAMBA\版本号.
%h
#运行SAMBA的机器的主机名.
%m
#客户机的NETBIOS名
%L
#服务器的NETBIOS名
%T
#当前的日期和时间
#-----------------------------------------
#4, 安全等级:
#SAMBA有四种安全等级,可以使用 security 参数进行指定.它们分别是:
#用户 模式 是基于SAMBA服务器的用户验证(SAMBA服务器的默认配置)。
#共享 模式 是无验证,任何用户都可以访问共享的资源。
#服务器 模式 是指定一台WINDOWS NT主机来验证用户。
#域 模式 是指定MS WINDOWS的活动目录域控制器来验证用户。
#--------------------------------------------------------------------------------------------
#附录: 全局参数设置:
#1, 基本全局参数:
netbios name
#设置SAMBA的NETBIOS名. 例如: netbios name = mysmb
workgroup
#设置要SAMBA加入的工作组. 例如: workgroup = WorkGroup
server string
#指定浏览列表里的机器描述. 例如: server string = SmbSvr %v at %h
client code page
#设置客户字符编码页. 例如: client code page = 936
#----------------------------
#2, 安全全局参数:
socket address
#指定samba监听的IP地址. 例如: socket address = 192.168.1.200
admin user
#设置管理员帐号. 例如: admin user = osmond
security
#定义SAMBA的安全等级. 例如: security = User
encrypt passwords
#指定是否使用加密口令. 例如: encrypt passwords = yes
smb passwd file
#指定SAMBA口令文件的路径. 例如: smb passwd file = /etc/samba/smbpasswd
map to guest
#设置GUEST身份登录时用户名及密码错误时的出力方式. 例如: map to guest = Never
username map
#指定SMB名字和UNIX名字映射文件的路径. 例如: username map = /etc/samba/smbusers
hosts allow
#指定可以访问SAMBA的主机和网络. 例如: hosts allow = 192.168.1. [url]www.biteedu.com[/url]
hosts deny
#指定不可以访问SAMBA的主机和网络. 例如: hosts deny = 192.168.2.
#--------------------------------
#3, 日志全局参数:
log file
#指定日志文件名. 例如: log file = /var/log/samba/%m.log
max log size
#指定日志文件的最大尺寸(KB). 例如: max log size = 100
#--------------------------------
#4, 运行效率全局参数:
change notify timeout
#设置服务器周期性异常通知, 例如: change notify timeout = 90
deadtime
#客户端无操作多少分钟后服务器端中断连接. 例如: Deadtime = 10
getwd cache
#是否使用cache功能. 例如: getwd cache = NO
Keepalive
#服务器每隔多少秒向客户端发送KEEPALIVE包用于确认客户端是否工作正常.例如: Keepalive = 60
max open file
#同一个客户端最多能打开的文件数目. 例如: max open file = 1000
cocket options
#设置服务器和客户端之间会话的SOCKET选项. 例如: socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
#------------------------------------------
#附录, 设置共享资源参数:
#1, 基本参数:
comment
#指定对共享的描述. 例如: comment = my share
path
#指定共享服务的路径. 例如: path = /tmp
#-------------------------------------------
#2, 访问控制参数:
writable
#指定共享的路径是否可写. 例如: writable = yes
browseable
#指定共享的路径是否可浏览(默认为可以). 例如: browseable = no
available
#指定共享资源是否可用. 例如: available = no
read only
#指定共享的路径是否为只读. 例如: read only = yes
public
#指定是否允许GUEST帐户访问. 例如: public = yes
guest account
#指定一般性客户的帐号. 例如: guest account = nobody
guest ok
#指定是否可以允许guest帐户访问. 例如: guest ok = yes
guest only
#指定是否只允许guest帐户访问. 例如: guest only = yes
read list
#设置只读访问列表. 例如: read list = tom, @stuff
write list
#设置读写访问列表. 例如: write list = tom, @stuff
valid users
#指定允许使用服务的用户列表. 例如: valid users = tom, @stuff
invalid users
#指定不允许使用服务的用户列表. 例如: invalid users = tom, @stuff

···········································
注意:SAMBA的共享指向的是一个本地的目录,所以目录权限会直接影响用户的访问权力。
所以如果是用share方式设置共享安全级别,可以用chmod 命令设定其它用户的权限。
chmod 775 /brus    将被共享的本地路径目录权力设为ROOT所有权力,其它用户读并运行。
chmod -R 775 /brus  将所有该目录下的子目录和文件权力设置为其它用户读并运行。
··········································· 附录: 一、 客户命令: 1. smbclient smbclient 命令用来存取远程 samba 服务器上的资源,它的界面到目前为止还是文本方式的,命令形式和 ftp 类似。 smbclient 命令的语法是: smbclient <servicename> [password] [options] 其中 servicename 是要连接的资源名称,资源名称的形式如下: //server/service 其中 server 是远程服务器的 netbios 名字,对于 windows 服务器来说,就是它们出现在“网络邻居”中的名字。 service 是各 server 所提供的资源的名字,同样是出现在“网络邻居”中的名字。 password 是存取该资源所需的口令。 如果既没有给出 password 参数,也没有使用 -N 选项。smbclient 会提示用户输入口令;如果目标资源并不需要口令,用户可直接回车跳过。 -N 选项禁止 smbclient 提示用户输入口令,当连接不需要口令的资源时可以使用该选项。 使用 -L 选项将列出远程服务器提供的所有资源。如果不知道服务器的 netbios 名,可以使用 -I 选项来指定它的 IP 地址,如: smbclient //unknown/service -I 192.168.1.2 使用了 -I 选项之后,servicename 中的 netbios 名部分将被忽略。 smbclient 命令运行之后,会出现如下提示符(和 DOS 提示符比较相像): smb:\> 用户在该提示符下输入各种命令。其命令和 ftp 相似,如 cd、lcd、get、mget、put、mput 等,其他比较常用的命令如下所示: 1. ?[comand] 显示有关command的帮助信息,若无command参数,则列出所有可能的命令。 2. ![shell command] 在本地执行shell命令,如果没有给出shell command,则在本地运行一个shell。用户可以在该shell中执行各种命令,用exit回到smbclient。 3. lowercase 关闭或者打开文件名小写转换。如果打开,smbclient 会自动将 get 和 mget 命令取回的文件以相应的小写文件名命名。 4. print <filename> 在远程服务器上打印文件 filename。 5. queue 显示打印队列。 6. quit 或者 exit 退出 smbclient。 smbclient 的 mget 和 mput 命令可以使用通配符“*”和“?”,它们还可以工作在递归模式下。当工作在递归模式时,它们将处理当前目录以及所有由 mask 命令指定的子目录。 用 recurse 命令打开或关闭递归模式。 mask 命令指定一个含通配符的模式,当 mget 和 mput 工作在递归模式时,它们将只处理能匹配该模式的目录;如果不工作在递归模式,则忽略该模式。 mask 命令的使用方法是: mask <expr> expr 是含通配符的模式。smbclient 还可以发送 WinPopup 消息,方法是: smbclient -M NetBIOS_name NetBIOS_name 是目标计算机的 NetBIOS 名。连接建立后,键入要发送的消息,按Ctrl-d 组合键结束。 Smbclient 的工作模式和 ftp 还有一点相像的地方:当我们要处理绝大多数的文件(如执行一个在远端的文件)时必须先下载到本地系统上,然后才能执行相应的操作。 这种操作方法自有它的好处,如比较节省网络资源,但也会造成文件的重复存取。 smbclient 命令则可以直接利用远端的文件资源而不用先下载。 可用的 smbclient 开关: sharename : 完整的共享名路径。如 \\server\share。 -U username : 登录的用户名。 password : 登录用口令。 -L : 列出所有已知的服务器和共享资源。 连接到NT服务器 comet 以访问共享目录dir1 ,登录的用户名与口令之间用%分开: smbclient \\\\comet\\dir1 -U gugong%password smbclient -L comet 开关 -L 查询服务器 comet 中的可用共享资源。 它还会查询系统(comet)的浏览器,以发现该服务器(comet)已经在网上发现的其它共享资源。 2. smbmount 要使用 smbclient 安装 samba 文件系统,linux 内核必须包含 smbfs 的支持模块。在 Turbolinux 里默认内核包含了该模块。除非你自己重新编译了新内核才需要加以注意。smbmount 命令的语法是: smbmunt <servicename> <mount-point> 其中 servicename 是资源名,mount-point 是安装点。 smbmount 常用的选项有: 1) -C smbmount 默认将口令转换成大写,使用 -C 选项禁止这种转换。 2) -N 当连接不需要口令的资源时应该使用本选项。 3) -P password 指定口令。如果没有指定 -N 或 -P 选项,smbmount 会提示用户输入口令。 4) -s server-name smbmount 的行为和 smbclient 不同,它使用服务器的 Internet 主机名(即 hostname 命令给出的主机名)来获得其 IP 地址,而不是使用服务器的 NetBIOS 名。如果服务器使用不同的 NetBIOS 和 Internet名,则应该用 -s 选项指定其 NetBIOS 名,而在 servicename 中使用Internet 主机名。 5) -c command-string 执行指定的相对独立的命令。 6) -I hostname/IP 本选项恰好和 -s 选项相反,它允许在 servicename 中使用服务器的NetBIOS 名,而在 -I 之后指定服务器的 Internet 主机名或IP地址。 -I 和 -s 的效果是一样的,smbmount 总是利用 Internet 主机名查找主机。,然后用服务器的 NetBIOS 名登录(有些服务器要求客户机给出自己的 NetBIOS 名)。 7) -U username 如果用户在服务器上的帐号和本地机上的不同,则应该使用该选项指定在服务器上的帐号。 ****** 如果要装载一个 SMB 的文件系统,建议使用“-c”选项来使 smbmount ****** 执行 mount 命令。例如: ****** smbmount "\\\\server\\tmp" -c 'mount /mnt -u 123 -g 456' 这样就可以把名字叫做“server”的计算机的共享资源“tmp”的内容装载到本地的 /mnt 目录下,并给这个目录以及其下所有的文件分配一个本地的 uid(UserID)123 和 gid(Group ID)456 。这样正确执行了之后(指用户输入了正确的路径和密码),读者就可以在 /mnt 目录下看到本来使远端计算机上的内容,并且可以与操作本地的文件一样进行各种被允许的操作,这样非常节省本地的系统资源。 卸载一个已经装载的 SMB 文件系统用 smbumount 命令。smbumount 命令的格式非常简单,只要指定要卸载的装载点就可以了。 可用的 smbmount 开关: sharename : 以 //server/share 格式输入的共享名。 mount point : 希望附着共享文件的目录。 -I server : 包含共享资源的服务器。 -U username : 登录时使用的用户名。(和 -n 类似,但比 -n 更管用!) -P password : 登录时使用的口令。 -N : 没有口令的登录名,不用提示输入口令。 -h : 列出可用开关的简单帮助信息。 想用登录名“gugong”和口令“123”来安装共享文件“\\comet\dir1”到目录“/mnt/comet” smbmount \\\\comet\\dir1 /mnt/comet -I comet -U gugong -P 123 3. smbumount 要卸掉上一例子中创建的共享安装,可以输入: smbumount /mnt/comet 二、 服务 除了客户服务功能,SAMBA 还允许 UNIX 系统发布文件和打印共享。 有三个文件提供这种连接性: nmbd (/usr/sbin/nmbd) smbd (/usr/sbin/smbd) smb.conf (/etc/smb.conf) 1. nmbd nmbd 实用工具控制系统的 NetBIOS 通信。 它作为后台程序运行,并且负责监听用于名字服务请求的 NetBIOS 端口。 当接收了名字服务请求时, nmbd 用系统的 IP 地址作出回答。 负责保持浏览器能通报在一个已知的工作组中哪个成员在编写 NetBIOS 名字目录。 可用的 nmbd 开关: -D 告诉 nmbd 作为后台进程运行。 -H lmhost_file 路径和 NetBIOS 主机名字文件的路径名字。 -d number 告诉 nmbd 运行于由 number 指定的调试级。0~5有效。 -l log_file_base 指定日志文件的库名。 -n NetBIOS_name 在主机名不宜用的条件下,指定该系统的 NetBIOS 名字。 -p port_number 改变缺省的监听端口号。 -s config_file 若 smb.conf 没有在 /etc 目录下,则指定其位置。 2. smbd smbd 实用工具是负责所有文件和打印共享服务的后台进程。 一旦客户通过 nmbd 寻址到一个 SAMBA 服务器,就由 smbd 负责客户的文件和打印请求。 可用的 smbd 开关: -D 告诉 smbd 作为后台进程运行。 -O socket_option 调节通信参数。 -a 重写日志文件,缺省是添加。 -d number 告诉 smbd 运行于由 number 指定的调试级。0~5有效。 -l log_file_base 指定日志文件的库名。 -p port_number 改变缺省的监听端口号。 -s config_file 若 smb.conf 没有在 /etc 目录下,则指定其位置。 3. smb.conf smb.conf 在初始化期间被用于配置 nmbd 和 smbd. /etc/rc.d/init.d/smb stop /etc/rc.d/init.d/smb start [global] Global Setting 与配置特定的共享相对,全局设置用于配置整体 SAMBA 环境。全局设置列出在段标题[global]下。 该节中的参数适用于整个 Samba 服务器,或者是其他节的默认值。 guest account=username 浏览共享资源时,允许指定可用的有效客户帐户。该帐户必须是有效的帐户名,并且只能拥有最小限度的系统权利。通常为ftp 的这种设置将允许访问共享资源。 workgroup=Workgroup 允许指定该系统应该加入的工作组名。Workgroup 与域很相似,因为它们都代表了一个 NetBIOS 系统的套件合。Workgroup 与域不同的地方在于,没有套件中的帐户管理——所有的登录名和口令都由每个单独的系统管理。 Home Directories 当用户得到 SAMBA 的认证后,有一个选项允许用户访问作为共享 SAMBA 主目录。目录的位置可以从 /etc/smbpasswd 文件只查询到,该文件被用于在全系统范围内定义登录名和口令。主目录设置与 smb.conf 被一起列在段标题[homes]下。(?) Other Shares 你可以把文件系统的任何部分设置为共享。创建共享时,以附上了方括号的共享名作为共享部分的开始,例如 [public]。在共享名之后,每行用列出的一个命令,你指定任何你想应用于该共享部分的参数。 Share Setting 以下是一个可用于处理共享资源的某些命令的简短列表: browseable=yes/no 它指出共享对于正在浏览的客户是否可见,或者共享通过使用UNC(通用命名约定)才能访问。例如要访问共享名 public ,而其浏览功能已经被关闭(no),则必须通过输入 UNC\\server\pubic 来访问它。它不会出现在浏览列表中(即在浏览器中不可见)。 creat mode=number 在SAMBA 共享条件下创建文件时,允许分配给这些文件以缺省许可这个字段的数值使用和 chmod 命令一样的数字格式。和 create mask 相反。 only guest=yes 指定用户对该共享资源的访问只能是客户级的。如果文件许可被正确地设置,则其作用是用户只能看到目录下的文件,但不能进行读写操作。 path=share directory path 定义了一个目录,当用户要访问一个已发布了的共享名字时,就可以访问上述被定义的目录。例如,如果创建了一个名为 public 的共享资源,并且指定 path 等于 /usr/expense/template,则对共享的 public 的访问将直接进入 template 目录,系统将不允许进入该目录的上一级目录结构,而只能进入下一级。 public= yes/no 定义一个共享是否对公共访问开放。当设置为 yes 时,在系统上没有帐户的用户将基于所定义的客户帐户的属性来接收访问。 valid users=username 指定只有具有特定的登录名的用户才能访问共享。可以指定用空格分开的多个登录名。( all 表示所有) writable=yes/no 定义了一个共享能否使用读/写许可来访问,或一个文件系统能否替代地被认为只读。定义用户接受到访问级的是这个设定和分配给用户 UNIX 帐户一些许可的组合,不管其中哪一个较低。例如,如果用户访问标记为可写的共享,但其 UNIX 帐户有只读许可,那么该用户只能得到该共享的只读访问权。 [home] 如果配置文件中包含该节,那么服务器就可以动态地为用户提供连接到其私人目录的共享. 如果用户要求连接一个配置文件中不存在的共享,服务器就假设用户提供的共享名是一个帐号,然后在本地的密码文件中查找该帐号.如果该帐号存在,并且用户提供了正确的口令,那么服务器就拷贝[在home]节来建立一个新的共享,同时作出如下修改: 1> 将共享名改为帐号名. 2> 如果在[home]节中没有指定要共享的目录,那么就使用该帐号的私人目录. 3> 如果要在[home]节中指定 path 参数,那么宏 %S 是非常有用的,它代表当前共享的名称.例如: path=/data/%S 这种方法允许为 PC 用户和 Linux 用户提供不同的私人目录. 由此可见,使用 [home] 节可以简单而快速地允许大量用户存取各自的私人目录.如果用户请求的共享名就是 homes ,服务器同样会为其动态地建立共享,唯一的不同是新共享的名称仍然是 homes. [printers] 该节有点类似于 [homes] 节,只不过是针对打印机的.如果配置文件中包含 [homes] , 用户就可以连接到本地 printcap 文件中定义的任何一台打印机.如果用户请求连接一个配置文件中不存在的共享,若 [homes] 节存在,那么服务器会像上节所述那样处理该请求;否则服务器将请求连接的共享名视为一个打印机名,并且在 printcap 文件中查找是否存在可以匹配的打印机,如果存在,就拷贝 [printers] 节以建立新的共享. 注意: [printers] 节必须是可打印的,否则服务器将拒绝装载配置文件,例如: [printers] path = /home/samba/print/public writeable = no guest ok = yes printable = yes 宏替换: 配置文件中允许宏替换,"注意大小写". ----------------------------------------------------------------------- 宏 描 述 ----------------------------------------------------------------------- %S 当前服务或共享的名称 %P 当前服务或共享的目录 %u 当前服务或共享使用的用户名 %g %u 所在组的名称 %U 当前会话使用的用户名(登录名?!),即客户机所期望的用户名,可以和客户机真正得到的用户名不同. %G %U 所在组的名称 %H %u 的私人目录(主目录) %v Samba 的版本号 %h Samba 服务器的 NetBIOS 名 %m 客户机的 NetBIOS 主机名(Win9x的机器名) %L 服务器的 NetBIOS 名 %N 服务器的(?????)名 %M 客户机的 Internet 主机名 %I 客户机的 IP 地址 %T 当前的日期和时间 %d 当前服务器进程 ID %a 远程客户机的体系结构,目前只能识别WfWg,NT,和 Win 95、98,并且不是100%可靠,其他系统被标示为 UNKNOWN ----------------------------------------------------------------------- 三、 用户身份验证: 帐号对于 Samba 来说非常重要,用户必须拥有合法的帐号才能连接非 guest 性质的Samba 服务,并且该帐号决定了他享有的权限.即使一个共享是 guest 共享, Samba 也需要一个特定的帐号来提供服务. 用户有许多种连接 Sabma 服务的方法.服务器遵循下面的步骤决定是否允许一个连接,如果所有的步骤都失败了,就拒绝连接;如果其中有一步成功了,就不再执行其后的步骤. 1> 如果请求连接的共享包含 " guest only = yes " 参数,那么用户就以" guest account = " 参数制定的身份连接,而不考虑其提供的密码. 2> 如果客户机提供了一个帐号/密码对,并且该帐号/密码对通过了 Linux 系统的身份验证,那么用户就以该帐号连接.注意这里包括以 "\\server\service\%username" 形式提供的帐号. 3> 检查客户机的 NetBIOS 名称(亦即 Windows 在网络中使用的计算机名)以及其他曾使用过的帐号,如果有一个可以和提供的密码匹配,那么就允许连接. 4> 如果客户机已经通过了帐号\密码验证,并且向服务器发送了验证标志( validation token),那么用户就以该帐号连接. 5> 如果请求的共享包含 " user = " 参数,同时客户机提供了一个密码,并且该密码可以和帐号列表中的一个帐号匹配,那么用户就以该帐号连接.如果" user = " 参数中的某个帐号以 " @ " 开头,那么它会被视为一个用户组名,该组中所有的用户帐号都被包含在 " user = " 列表中. 四、 Samba 的安全级 Samba 有四种安全级,由参数 security 定义,该参数只能出现在 [global] 中,是一个全局参数. 这四种安全级是 share,user,server,domain ,其中后三种属于安全模式( Security Mode ),这里重点讨论 share 和 user 安全级. 1) security = share 当客户机连接到一个 share 安全级的服务器时,它在连接共享之前,不需要首先提供正确的帐号和密码就可以登录到服务器(虽然 Windows 95/98/NT 等客户机在连接share 级服务器时会发出一个登录请求,该请求只包含帐号).相反的,客户机只有在连接特定的共享时才需提供密码. 注意: 服务器总是使用有效的 Linux 帐号来提供服务,即使是工作在 share 安全级. 因为客户机并不向 share 级的服务器提供帐号,所以服务器使用下面的技术来确定使用什么帐号提供服务: 1> 如果该共享包含 " guest only =yes " 参数,则使用 " guest account= " 参数指定的 guest 帐号,忽略下面的步骤. 2> 如果连接请求同时提供一个帐号,那么该帐号被认为是潜在的帐号. 3> 如果客户机在此之前发出过登录请求,那么该请求包含的帐号也被视为潜在的帐号. 4> 客户机请求连接的共享名被视为潜在帐号. 5> 客户机的 NetBIOS 名被视为潜在帐号. 6> " user = " 列表中的帐号被视为潜在帐号. 如果 " guest only " 参数为假,则检查所有的潜在帐号,使用第一个和密码匹配的帐号.如果 guest only " 参数为真,或者该共享允许使用 " guest account " ,则使用之,否则拒绝连接.可见, share 服务器决定帐号的过程是很复杂的. 2) security = user 这是 Samba 默认使用的安全级.使用 user 安全级时,服务器要求客户机首先以正确的帐号和密码登录(可以对帐号进行映射). " user = " 和 "guest only " 等可能改变用户身份的参数只有在用户成功登录之后才起作用. 注意: 客户机请求连接的共享名只有在登录之后才传递给服务器,因此没有通过身份验证的用户无法访问任何共享(包括 guest 共享).可以使用 "map to guest " 选项将未知用户映射为 guest 用户,以允许访问 guest 共享. 3) security = server 在 server 安全级下, Samba 使用远程 SMB 服务器(如 Windows NT 服务器)进行身份验证,如果失败则自动切换到 user 安全级.对于客户机来说, server 安全级和 user 安全级没有什么不同. 4) security = domain 要是用本模式,必须使用 smbpasswd 程序将 Samba 服务器加到一个 Windows NT 域中,并且使用"加密口令(Encrypted Passwords)".在本安全级下, Samba 借助 Windows NT 主控服务器( Windows NT Primary )或者是后备域控制器(Backup Domain Controller) 进行身份验证,采取 Windows NT 服务器相同的行为. *************************************************************************** share 和 user 安全级的比较 share 安全级面向资源,用户每连接一个非 guest 共享都需要提供一个密码.如果主要提供 guest 共享,就应该使用 share 安全级. user 安全级面向用户,用户登录后,就无需再为单独的共享提供密码,比较方便.如果用户再 PC 上的帐号和在 Linux 上的帐号相同,那么使用 user 安全级是非常合适的. *************************************************************************** 五、 常用参数 1) 全局参数: 1>NetBIOS name 设定Samba服务器的NetBIOS名,客户机用这个名字来识别它,默认值是主机DNS名的第一部分. 2>workgroup 设定Samba服务器所在的工作组. 3>server string 设定服务器的描述信息,其值可以任意设定. 4>security 设定服务器的安全级,有效值是share,user(默认),server,doamin. 5>announce as 通常,Samba服务器会对外宣称自己是一个Windows NT服务器,可以用该选项来更改这个设定.其有效值是"NT","Win95"或者"WfW",分别代表Windows NT ,Windows 95 和 Windwos for Workgroups. 6>log file 指定Samba服务器的日志文件. 7>max log size 设定日志文件的最大长度,其值是一个整数,单位是千字节.如果日志文件超出了规定的长度,Samba会为文件名加上后缀.old,然后再建立一个新文件.如果该值是0,则没有限制,默认值是 max log size = 5000. 8>map to guest guest用户映射,有效值是"Never"、"Bad User"、"Bad Password"。 9>username map 用户映射,其值是一个文件名。 10>load printers 布尔值,决定是否装载printcap文件中所有的打印机以供浏览。默认值是 load printers = yes。 2) 其他参数 有些参数有“同义词”,这些同义词放在其后的括号中。 1>path(或directory) 设定要共享的目录。路径中出现的%u会被替换成为客户机使用的Linux帐号,%m会被替换为客户机的NetBIOS名。 2>comment 注释信息。 3>guest ok(或public) 如果该参数为yes,则对应的共享允许以guest方式访问。默认值是no。 4>guest account 为guest访问方式指定Linux帐号,Samba使用该帐号提供服务,它的权限就是guest用户享有的权限。 5>guest only 布尔值,决定该共享是否允许以guest方式访问。如果已经指定了 guest ok 或 public 参数,则本参数不起作用。默认值是 no。 6>browsable(browseable) 布尔值,决定该共享是不是可浏览的。如果其值为yes,则相应的共享会出现在“网络邻居”中。 7>read only 布尔值,决定该共享是否以只读方式共享。 8>writeable(或write ok) 布尔值,决定是否允许用户修改相应的共享。 9>user(或username users) 为共享指定潜在的帐号列表。 10>invalid users 禁止访问该共享的用户列表。 11>valid users 允许访问该共享的用户列表。 12>writelist 具有写权限的用户列表。在该列表中的用户可以修改相应的共享,即使该共享的 read only 选项被设为真。 13>readlist 具有只读权限的用户列表。无论该共享是否设置了read only选项,该列表中的用户都只享有只读权限。 14>admin users 超级用户列表。该列表中的用户对相应的共享拥有一切权限。 15>force user 指定一个Linux帐号,所有用户都使用该帐号访问相应的共享。这有助于在用户间共享文件。该帐号只有在连接之后才起作用(!),因此客户机仍然需要提供正确的帐号和口令以连接共享。一旦连接确立,客户机将以该帐号进行任何文件操作,而不管它连接时使用的帐号是什么。 16>force group(或group) 同force user类似,只不过强制的是用户组。 17>available 该选项允许用户关闭一个共享,其默认值是yes。 18>allow host(或hosts allow) 允许访问相应共享的主机列表,主机间用逗号、空格或制表符分隔。可以使用IP地址和主机名来标识主机。 19>deny hosts(或hosts deny) 禁止访问相应共享的主机列表。 20>preexec 指定连接建立之后执行的命令,例如: preexec = echo \"%u connected to %S from %m(%l)\" >> /tmp/log 会在连接建立时向日志文件中追加一条记录。 21>postexec 指定连接断开之后执行的命令。 22>root preexec 和preexec类似,但是这里指定的命令是以root权限运行的。这通常用来安装一个文件系统,如CDROM等。 23>root postexec 和postexec类似,但这里指定的命令是以root权限运行的。可以用来卸载文件系统。 六、 使用用户映射 Samba提供的用户映射机制包括“guest用户映射”和“用户映射”两种: 1) guest用户映射 guest用户映射仅适用于安全模式(user,server和domain安全级).如果一个用户没有通过身份验证,就可以将其映射为guest用户,从而允许他访问guest共享.这里 guest 用户由"guest account="参数指定. guest用户映射由全局参数"map to guest"控制,它只能放在[global]节中,可以是如下三个值: 1>map to guest = Never 不进行映射,拒绝非法用户访问任何资源.这是默认行为. 2>map to guest = Bad User 如果用户使用一个不存在的帐号登录,就将它映射为guest用户;如果提供的帐号正确而口令错误,则禁止连接. 3>map to guest = Bad Password 将使用错误口令登录的用户映射为guest用户.这样的设置会产生一个问题,即如果用户不小心键入了错误的口令,服务器会"偷偷地"将他映射为guest用户,而不 出任何错误信息,这样用户会在不知情的情况下受到种种访问限制. 2) 用户映射 全局参数"username map"用来控制用户映射,它允许管理员指定一个映射文件,该文件包含了在客户机和服务器间进行用户映射的信息,如: username map = /usr/local/samba/lib/users.map 用户映射经常用来在 Windows 和 Linux 主机之间进行映射,因为用户可能在两个系 统上拥有不同的帐号;另一个用途是将几个用户映射为一个用户,以使他们能更方便地共享文件. 下面是一个映射文件的例子: # Map Windows admain to Linux root root = admin administrator ; Map all the members of group system(用户组) to sys sys = @system 等号左边的是单独的 Linux 帐号,等号右边的是要映射的帐号列表.服务器逐行分析映射文件,如果提供的帐号和某行右侧列表中的帐号匹配,就把它替换为等号左边的帐号. 如果该行前面没有"!"符号,则继续分析下面的行,否则不继续分析. "@"符号表示其后跟的是一个用户组,该组中所有的用户都会被映射为相应的 Linux帐号. 符号"*"是通配符,它可以匹配任何用户帐号. 以"#"或";"开头的行是注释行. 如果要映射包含空格的帐号(Windows帐号中允许有空格),可以用引号将其括起来,如: # Map a windows account to LInux account tridge = "Andrew Tridgell" 下面的例子将帐号fred和mary映射为帐号sys,将其他帐号映射为guets帐号. !sys = mary fred guest = * 注意: 服务器将对出现在任何位置上的帐号进行映射.例如,如果连接到 \\server\fred,并且fred被映射为mary,那么实际连接的是\\server\mary,用户应该提供mary的口令,而不是fred的口令.Samba默认不提供用户映射. 七. 使用加密口令 从 Windows NT 4.0 Service Pack 3 开始,Microsoft决定不再在网络中传递未加密的口令,而仅传递加密口令 (Encripted Password),新版本的Windwos 95 以及Windows98也采用这一约定.这些客户机在和不支持加密口令并且以 user 安全级运行的 Samba 服务器通信时,会遇到很大的困难.为了能顺利地和这些客户机通信,Samba 也加入了对加密口令的支持. 1) Samba 口令文件 为了使用加密口令,Samba 需要一份自己的口令文件,并且该文件应该和Linux/etc/passwd 文件保持同步,可以使用mksmbpasswd.sh脚本来制作这份文件: cat /etc/passwd | mksmbpasswd.sh > /etc/smbpasswd 其中smbpasswd就是需要的口令文件,其权限应该设为0600,拥有者是root.samba口令 文件中的记录和 /etc/smbpasswd 文件的记录一一对应.每行的格式如下: username:uid:xxx...xxx:xxx...xxx:Logname:user home dir:user shell 它的格式和 /etc/passwd 文件基本相同,只有密码字段不同.密码字段由两个部分组成, 每部分都是32个"x".这两部分就是Samba使用的加密口令,前一部分用于和LANManager通信, 后一部分用于和 Windows NT通信. Linux 的口令是无法破译的,因此刚建立的口令文件中所有的用户都没有正确的口令,用32个"x"来表示.root用户可以使用 smbpasswd 命令为每个用户设定一个初始口令,这样用户就可以使用smbpasswd命令更改自己的 samba口令了. smbpasswd的使用方法和 passwd 命令类似. root 用户也可以将口令设置为空,方法是手工修改口令文件,将前11个"x"改为 "NO PASSWORD": NO PASSWORDxxx...xxx:xxx...xxx 这样当smbpasswd命令询问用户旧密码时,就可以直接按回车键跳过. 2) 指定 samba 使用加密口令 要使 samba 使用加密口令,必须在 /etc/ssmb.conf 文件中的 [global]节中加入以下参数: encrypt passwords = yes smb passwd file = /etc/smbpasswd 其中第一行通知 samba 使用加密口令。第二行给出口令文件的路径。如果允许用户使用空口令,则应该使用如下参数: null passwords = yes 但这会带来安全问题。 3) smbpasswd 命令 smbpasswd 命令除了可以修改用户口令之外,还可以帮助 root 用户添加和删除用户。smbpasswd 命令如果被 root 用户运行,那么它将直接修改口令文件,而不需要借助smbd;如果被普通用户运行,smbpasswd 就以客户机/服务器模式工作,它连接到smbd 以完成必要的修改。客户机/服务器模式使得 smbpasswd 不必成为一个 SUID 程序,避免产生安全漏洞。 smbpasswd命令常用选项有: 1> -a 增加一个用户帐号,该帐号必须出现在 /etc/passwd 文件中,亦即是一个合法的 Linux 帐号,只有 root 可以使用本选项。 2> -d 禁止一个用户帐号,并不将其删除,仅供 root 使用。 3> -e 恢复一个被禁止的用户帐号,仅供 root 使用。 4> -n 将帐号的口令设为空,即将口令字段的前11个字符改为“NO PASSWORD”。 仅供 root 使用。 5> -r remote_machine_name 本选项允许用户指定远程主机,如果没有该选项,那么smbpasswd 默认修改本地 Samba 服务器上的口令。remote-machine-name 是 远程主机的 NetBIOS 名。 6> -U username 本选项只能和 -r 选项连用。当修改远程主机上的口令,用户可以用该选项指定欲修改的帐号。这允许在不同系统中使用不同帐号的用户修改自己的口令。 7> -s 该选项使 smbpasswd 以 silent (沉默)模式工作,在此模式下,smbpasswd 将从标准输入读取数据,而不是默认的 /dev/tty,这样可以帮助用户编写调用 smbpasswd 的脚本。 4) 怎样才能不使用加密口令 上面曾提到,使用加密口令主要是为了能顺利地和 Windows NT 等客户机进行通信。为了达到这个目的,也可以修改 Windows NT 的注册表,以强制其使用不加密的口令(Plain Password)。 TurboLinux 的 /usr/doc/samba-2.0.3/docs 目录中有两个注册表文件,它们可以用来自动修改 Windows NT 4 和 Windows 95 的注册表,用户只需在 Windows 系统中双击其图标即可。这两个文件是:NT4_PlainPassword.reg 和 Win95_plainPassword.reg。 上面是老的啊。新的 SAMBA 2.2.1a 、2.2.2a 跟上面的不一样的。 具体在 smbmount 和 smbclient 命令。其余的差不多的。 现在,windows 的共享文件夹可以直接写在 /etc/fstab 中,例如: //2000_server/gugong /mnt/smb/2000 smbfs username=gugong,password=123,rw,noauto 0 0 在 shell 中, 用 mount [-t smbfs] /mnt/smb/2000 装载 (因为上面是 noauto;若是 auto,系统启动时会自动装载)。 作 域登录 服务 的 /etc/samba/smb.conf ,主要是加上: domain master = yes preferred master = yes domain logons = yes 主要是这个“domain logons = yes”起作用的 ! 具体的 /etc/samba/smb.conf 请 看这个文件 。 [url]http://www.ehuilong.com/gugong/gugong/linux/config/samba/smb.conf[/url]