{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
samba是一个网络服务器,用于linux和windows共享文件之用;samba即可以用于windows和linux之间的共享文件,也一样用于linux和linux之间的共享文件;不过对于linux和linux之间共享文件有更好的网络文件系统nfs(nfs也是需要架设服务器的)。samba可以定位为一套功能极为强大的文件服务器软件,所谓文件服务器就是将文件服务主机上的目录分享出来,让您可以透过网络对分享出来的目录里的文件,做执行、读取、写入等动作。基本上nt/2000的网域是使用netbeui做计算机命名服务,使用广播封包来侦测网络上有哪些计算机、哪些目录提供资源共享,而samba与unix主机间的沟通(如目录、文件分享)是透过tcp/ip协议达成任务,samba若要与nt网域做沟通,透过tcp/ip当然是行不通的,只好使用netbios对nt网域做广播,让windows机器能够认识它,进而成为nt网域成员;因此samba是使用smbd守护进程透过tcp/ip联系unix主机,而使用nmbd守护进程透过netbios对nt/2000网域做联系,也就是说samba使用两种机制达成资源共享的目的。
若没有安装samba,在ubuntu中可以用sudoapt-getinstall来安装samba和smbfs(samba的文件系统)。smb是samba的主要启动服务器,让其它机器能知道此机器共享了什么;如果不打开nmb服务器的话,只能通过ip来访问,比如在windows的ie浏览器上键入下面的一条来访问://192.168.1.5/共享目录。samba服务的启动、重启和停止用"sudo/etc/samba/smb"后跟start、restart或stop。1、主要的samba工具(服务器端和客户端):smbcaclssmbcontrolsmbencryptsmbmountsmbprintsmbstatussmbtreesmbclientsmbcquotassmbpasswdsmbspoolsmbtarsmbumounttestparmtestprnsswatsmbdnmbdsmbclient:利用这个工具可连接其它unixlike的sambaserver,或是连接windows机器,以取得档案分享服务。testparm:这个工具可让您测试smb.conf档定义是否正确。smbstatus:这个工具可用来显示目前client端连接到sambaserver的联机状况。nmblookup:这个工具可使用nt/2000网域内的主机名称查询出对应的ip地址。smbpasswd:这个工具可用来建立、变更登入sambaserver的加密密码。swat:这个工具让您可使用web接口(如:ie、netscape)对sambaserver做组态设定。2、samba配置文件:为/etc/samba/smb.conf,ubuntu下的默认内容为:
#debiangnu/linux下的samba套件配置文件例子##这是主要的samba配置文件。为了理解这里列出的选项,你应该阅读smb.conf(5)手册页。#samba有一大堆的配置选项,有很多并没有在这里的例子中列出#任何以;号或#号开始的行都是注释,会被忽略。在这里的例子中,我们将使用#作为释放,#使用;的行表示配置文件的选项,这个选项你可能希望激活它#注意:每当你修改这个文件时,你应该运行命令"testparm"进行检查,以确保你没有犯基本#的语法错误。##=======================全局设置=======================[global]#######浏览/标识########samba服务器要加入的windows工作组名(即nt域名)workgroup=workgroup#在nt域中显示的samba服务器名,%h为本机的主机名serverstring=%hserver(samba,ubuntu)#windows因特网名字服务支持部分:#wins支持-通知samba的nmbd组件激活wins服务器;winssupport=no#wins服务器-通知samba的nmbd组件,让它作为一个wins客户端#注意:samba既可以是一个wins服务器,也可以一个wins客户端,但只能为其中之一;winsserver=w.x.y.z#这将禁止nmbd通过dns搜索netbios名称dnsproxy=no#什么样的名字服务,以及我们应该用什么样的顺序来解析主机名:下面是对ip地址;nameresolveorder=lmhostshostwinsbcast#######网络########要监听的特定网卡/网络集:这可以是网卡名或网卡的ip地址/掩码;通常首选网卡名;interfaces=127.0.0.0/8eth0#只绑定到命名的接口或网络;你必须通过使用上面的'interfaces'选项来使用它。#如果你的samba机器没有受防火墙的保护,或者它自己就是一个防火墙,则建议你激活本选项。#然而,本选项不能正确地处理动态的或非广播的接口;bindinterfacesonly=true####调试/记帐#####设置samba为每个连接的机器使用独立的日志文件,%m表示客户机的netbios名logfile=/var/log/samba/log.%m#设置sambaserver日志文件的最大容量,单位为kb,0代表不限制maxlogsize=1000#是否只通过syslog来记录日志消息;syslogonly=no#我们想让samba记录最小数量的日志消息到syslog中。所有消息应该记录到/var/log/samba/log.{smbd,nmbd}中。#如果你想通过syslog来记录日志,你应该把下面的参数设置得大一点syslog=0#当samba崩溃时做一些可感觉到的动作:发送一个回溯信息给管理员panicaction=/usr/share/samba/panic-action%d#######认证########设置samba服务器的安全性等级。user等级表示每个访问服务器的用户需要在服务器上#有一个unix账号,这总是一个好主意。其他细节可参考#/usr/share/doc/samba-doc/htmldocs/samba3-howto/servertype.html;security=user#表示是否指定用户密码以加密的形态发送到samba服务器encryptpasswords=true#如果你正使用加密的密码,samba将需要知道你使用的密码数据库类型passdbbackend=tdbsamobeypamrestrictions=yes#此项默认不使用,它是用来设置guest帐号名;guestaccount=nobody#指定登录无效的用户,即不能用这些用户来登录invalidusers=root#用来控制当passdb中的加密smb密码被更改时,是否进行同步unixpasswordsync=yes#指定设置unix帐号密码的程序,其中%u表示用户名称passwdprogram=/usr/bin/passwd%upasswdchat=*enter/snew/s*/spassword:*%n/n*retype/snew/s*/spassword:*%n/n*password/supdated/ssuccessfully*.#表示可以使用pam来修改smb客户端的密码,而不使用“passwdprogram”选项中指定的程序pampasswordchange=yes#控制成功的认证怎样映射到匿名连接maptoguest=baduser##########域############表示本机器能对用户进行登录认证。主控制器pdc和从控制器bdc都必须激活本选项。如果你是bdc,则你必须把#'domainmaster'设置为no;domainlogons=yes##下面的设置只有在'domainlogons'被设设置时才会起作用:#指定用户配置文件所在的目录(从客户端的角度看),接着需要在samba服务器上#有一个[profiles]共享(参看下面);logonpath=//%n/profiles/%u#配置文件存放的路径:在用户的主目录中;logonpath=//%n/%u/profile#下面的设置只有在'domainlogons'被设设置时才会起作用:#指定用户主目录的位置(从客户端的角度看);logondrive=h:;logonhome=//%n/%u#下面的设置只有在'domainlogons'被设设置时才会起作用:#指定登录时运行的脚本,它必须存放在[netlogon]共享中#注意:必须按dos文件的格式约定来存放;logonscript=logon.cmd#设置允许通过samrrpc管道在域控制器中创建unix用户账号。这里表示创建一个带有失效的unix密码的#用户账号,可以修改它以适应你的需要;adduserscript=/usr/sbin/adduser--quiet--disabled-password--gecos""%u##########打印###########设置在开机时自动加载浏览列表,以共享打印机;loadprinters=yes#指定打印系统的类型,这里为lpr(ng)打印;printing=bsd#设置打印机配置文件名;printcapname=/etc/printcap#cups打印,参看cupsys-client包中的cupsaddsmb(8)手册页;printing=cups;printcapname=cups############杂项#############允许samba服务器使用其他的配置文件,%m表示客户机的netbios名;include=/home/samba/etc/smb.conf.%m#用来设置服务器和客户端之间会话的socket选项,可以优化传输速度#更多细节参看smb.conf(5)和/usr/share/doc/samba-doc/htmldocs/samba3-howto/speed.html#y你可能想在linux系统中添加下面两项:#so_rcvbuf=8192so_sndbuf=8192socketoptions=tcp_nodelay#下面的参数仅在安装了linpopup包后才会有用;messagecommand=/bin/sh-c'/usr/bin/linpopup"%f""%m"%s;rm%s'设置samba服务器是否要成为网域的主浏览器,网域主浏览器可以管理跨子网域的浏览服务#如果你要把本机器配置成从控制器,则必须设置成'no';domainmaster=auto#一些winbind方面的默认配置;idmapuid=10000-20000;idmapgid=10000-20000;templateshell=/bin/bash#下面是sarge中的默认行为;winbindenumgroups=yes;winbindenumusers=yes#设置usershare选项,以允许非root用户用netusershare命令来共享文件#usershare的最大值,0(默认即为0)意味着usershare不激活;usersharemaxshares=100#允许有usershare特权的用户创建公共的共享,而不只是授权一个共享usershareallowguests=yes#=======================共享定义=======================#取消下面的注释,会激活默认用户目录的共享。这将把每个用户的主目录共享为//server/username;[homes];comment=homedirectories;browseable=no#用户主目录是否设置为只读,如果你想让它可写,则设置为no;readonly=yes#由于安全的原因,文件创建掩码设置为0700,如果你想以group=rw的权限创建文件,则应设置为0775;createmask=0700#由于安全的原因,文件创建掩码设置为0700,如果你想以group=rw的权限创建文件,则应设置为0775;directorymask=0700#默认情况下,//server/username共享能被任何连接samba服务器的用户访问。取消下面的#注释可确保只有username能连接到//server/username,%s表示当前登录的用户名;validusers=%s#取消下面的注释,可为基于域的登录创建netlogon目录(你还需要配置samba作为一个域控制器);[netlogon];comment=networklogonservice;path=/home/samba/netlogon;guestok=yes;readonly=yes;sharemodes=no#设置存放配置文件的共享目录#取消下面的注释,可创建profiles目录来存放用户的配置文件(参看上面的'logonpath'选项,#你还需要配置samba作为一个域控制器)。下面的路径应该对所有用户可写,以便当他们第一次登录#时能够创建他们的配置目录;[profiles];comment=usersprofiles;path=/home/samba/profiles;guestok=no;browseable=no;createmask=0600;directorymask=0700#设置共享的打印机目录[printers]comment=allprintersbrowseable=nopath=/var/spool/sambaprintable=yesguestok=noreadonly=yescreatemask=0700#windows客户端使用这个共享名作为下载打印驱动的源位置[print$]comment=printerdriverspath=/var/lib/samba/printersbrowseable=yesreadonly=yesguestok=no#允许写入该共享的用户,把下面的ntadmin改为windows系统管理员所在的组名;writelist=root,@ntadmin#一个例子:对你的cd_rom进行共享;[cdrom];comment=sambaserver'scd-rom;readonly=yes;locking=no;path=/cdrom;guestok=yes#下面两个参数表示当访问cdrom共享时怎样自动挂载cd-rom。要让它能工作,必须在/etc/fstab中包含#类似于下面的条目:#/dev/scd0/cdromiso9660defaults,noauto,ro,user00#在连接后,cd-rom可以自动解挂。如果你不想使用自动挂载/解挂功能,那就要把cd挂载到/cdrom下;preexec=/bin/mount/cdrom;postexec=/bin/umount/cdrom
我们用得最频繁的是共享目录的设置选项,其含义如下:[共享名]:在客户端显示的共享名comment=任意字符串:是对该共享的描述,可以是任意字符串,不过最好把访问的用户名和密码写入。path=共享目录路径:用来指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的netbios名,用宏表示主要用于[homes]共享域。例如,如果我们不打算用home段做为客户的共享,而是在/home/share/下为每个linux用户以他的用户名建个目录,作为他的共享目录,这样path就可以写成path=/home/share/%u。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios名的路径,作为不同机器的共享资源,就可以这样写path=/home/share/%m。browseable=yes/no:用来指定该共享是否可以浏览。writable=yes/no:用来指定该共享路径是否可写。available=yes/no:用来指定该共享资源是否可用。adminuser=该共享的管理者:用来指定该共享的管理员(对该共享具有完全控制权限)。在samba3.0中,如果用户验证方式设置成“security=share”时,此项无效。例如"adminusers=bobyuan,jane"(多个用户中间用逗号隔开)。validusers=允许访问该共享的用户:用来指定允许访问该共享资源的用户。例如"validusers=bobyuan,@bob,@tech"(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示。)invalidusers=禁止访问该共享的用户:用来指定不允许访问该共享资源的用户。例如"invalidusers=root,@bob"(多个用户或者组中间用逗号隔开。)writelist=允许写入该共享的用户:用来指定可以在该共享下写入文件的用户。例如"writelist=bobyuan,@bob"。public=yes/no:用来指定该共享是否允许guest账户访问。guestok=yes/no:意义同"public"。readonly=yes:共享目录是否只读。createmask=0700:文件创建掩码。directorymask=0700:目录创建掩码。3、samba配置实例:(1)创建共享目录:我们在自己主目录下创建一个共享目录share,它只允许new用户访问。创建共享目录的命令如下:
cd~mkdirsharechmod777share
注意在ubuntu系统中创建共享目录时要使用777,让所有用户可读可写可运行。当把这个共享设置添加到smb.conf中时,我们把文件创建掩码和目录掩码设置为0755,由于掩码的作用,这样new用户对这个共享目录有读写执行权限,其他用户只有读和执行权限。修改配置文件smb.conf(修改之前先作一下备份),把下面的共享设置加入到smb.conf的末尾:
[share]comment=sharedfolderwithusername:new,password:...path=/home/zhouhuansheng/sharepublic=yeswritable=yesvalidusers=newcreatemask=0755directorymask=0755available=yesbrowseable=yes
(2)创建登录用户并添加到samba的密码数据库中:创建new这个账号,以便远程用户能通过它来访问共享。
sudouseraddnew
要注意,上面这个new是linux账号,我们没有给它设置本机登录密码,因此它不能从本机登录,只能从远程访问。由于客户端要用这个账号来登录samba服务器,因此我们还要把这个账号添加到samba服务器的smbpasswd文件中(因为登录到samba服务器也就必须要登录到linux系统,因此必须先在/etc/passwd中有这个账号,然后我们再把它添加到smbpasswd文件中去),并为它设置一个登录的smb密码,注意samba的登录密码可以和本机登录密码不一样。
sudosmbpasswd-anew#接下来输入两次smb密码即可
以后要修改new用户的smb密码时也用这个命令,从smbpasswd文件中移除这个账号则用命令"smbpasswd-xnew"。创建了用户后,要建立用户映射文件,并且security安全级别要设置为user,这表示登录samba服务器必须要有一个账号。修改smb.conf中的security选项,并在下面添加usernamemap选项:
security=userusernamemap=/etc/samba/smbusers
用户映射文件smbusers用来包含所有的samba用户名,在其中添加一行内容:new="networkusername",表示new这个账号是网络上的远程用户。(3)修改显示字符集以防止出现乱码:由于ubuntu系统中通常使用utf-8编码,而windows主机中一般使用gbk编码,为防止在windows中显示为乱码,找到[global],改一下workgroup选项的值,并在下面加一些字符集选项:
workgroup=workgroupdisplaycharset=utf-8unixcharset=utf-8doscharset=cp936
这里因为大部分windows主机的默认工作组名为workgroup,因此我们改成这个值,你必须确保你的windows主机的工作组名与smb.conf中的配置一致。注意如果你的ubuntu中的字符集为zh_cn.gb2312或zh_cn.gbk,则displaycharset和unixcharset都要设置为cp936(即简体中文)。设置完毕后,需要注销一次。才可以看到中文的目录。(4)当所有设置均完成后,运行一下testparm,检查一下配置是否有语法错误,然后重启samba服务。4、访问共享目录:(1)windows访问linux中的共享:这个比较简单,像正常的windows主机之间的共享访问一样。在“网上邻居”里查看工作组,里面会显示ubuntu主机,点击可看到相应的共享。也可以在资源管理器的地址栏中输入://ubuntu的ip,就会列出相应的共享。双击共享,然后输入用户名new和相应的smb密码,即可进入共享目录。由于我们配置为可写,因此你还可以往共享目录里写东西。注意如果window中可以看到共享目录,但是就是打不开,原因就在于权限问题。假设你在自己ubuntu系统下右击一个文件夹,点共享,然后创建共享文件,你还必须把它设置为可读可写可运行,这样在windows中才能访问它。(2)linux访问windows中的共享:第一种方法:用smb访问。直接点击系统菜单中的"位置->网络",里面有个“windowsnetwork",点进去,再找你要找的电脑和文件,届时可能需要被访问的那个计算机的帐号和密码。这种方法的成功率不高。第二种方法:用ubuntu系统自带的连接到服务器功能来访问。点击"位置->连接到服务器",在服务类型中选择“windowsshare”,在"server"中输入windows计算机的ip地址或计算机名、"folder"中输入共享文化夹名、"username"中输入windows的账号、"domainname"中输入windows的工作组名,点击连接,然后输入账号的密码,这样在ubuntu系统桌面上就会显示这个共享的文件夹。这个方法的成功率比较高。接下来的两种方法是最基本的方法。第三种方法:用mount或smbmount把远地的共享目录挂载到本地。
cd/mntsudomkdirwindsudomount-tsmbfs-oiocharset=utf8,username=new,password=new//192.168.0.180/my_pictures/mnt/wind
先建立一个挂载点,然后用samba的new用户及其密码来挂载远程windows中的共享目录。由于本地ubuntu使用utf8,为防止显示乱码,指定传输的字符集为utf8。这样共享目录my_pictures就被挂载到/mnt/wind下了。也可用smbmount命令,它其实就是加了参数的mount(注意回车后可能还会要你输入一遍密码)。
sudosmbmount//192.168.0.180/my_pictureswind-oiocharset=utf8user=newpass=new
第四种方法:用smbclient工具来连接到共享目录,这是一个类似于ftp的工具。
smbclient//192.168.0.180/my_pictures-unewpassword:new