Samba实现Linux和Windows文件共享

http://linux.chinaunix.net/techdoc/net/2007/05/28/958930.shtml

 

 

tar -I或者bunzip2命令都可以解压.bz2文件
tar xvfj example.tar.bz2
tar xvfz example.tar.gz
tar xvfz example.tgz
tar xvf example.tar
unzip example.zip
tar -jvxf some.bz,就是把tar的zvxf 改成jvxf
zip/tar rh8下有一个图形界面的软件file-roller可以做这件事。另外可以用unzip *.zip解开zip文件,unrar *.rar解开rar文件,不过unrar一般系统不自带,要到网上下载。
# rpm2cpio example.rpm │ cpio -div
# ar p example.deb data.tar.gz | tar zxf -
Alien提供了.tgz, .rpm, .slp和.deb等压缩格式之间的相互转换: sourceforge.net/projects/alien sEx提供了几乎所有可见的压缩格式的解压接口:sourceforge.net/projects/sex 0058 在多级目录中查找某个文件的方法(青海湖)
find /dir -name filename.ext
du -a | grep filename.ext
locate filename.ext



利用Samba实现Linux和Windows文
件共享-组建Samba文件服务器

随着网络应用的发展,越来越多的公司都开始使用文件共享服务器,方便大家互相传递文件。目前,文件服务器一般采用的都是Windows系列操作系统,但Windows操作系统的缺点显而易见,购买费用高,工作不稳定,容易受到攻击,要求服务器配置高等。对于Windows来说,Linux的稳定性和安全性是Windows平台远不能及的,并且Linux 对服务器配置要求不高,管理简单,最重要的是它完全免费,用户不用花费一分钱就可以得到。因此,Linux可以说是一个相当理想的网络操作系统。不过,Linux与我们常使用的Windows操作系统并不兼容,但我们可以通过在Linux系统上配置Samba服务,使Windows用户像访问Windows文件服务器一样通过网络邻居来访问Linux文件服务器。
什么是Samba:
注意:
SMB(Serve Message Block)通信协议是微软和英特尔在1987年制定的协议,诸如Windows,OS/2等许多操作系统都是使用SMB来执行服务器/客户机方式的联网。而Samba则是将SMB协议搬到UNIX上来应用的一套软件。

准确地说,Samba是一套使用SMB(服务器报文块)协议的应用程序。正是因为Samba支持SMB协议,它允许Linux系统出现在Windows的网络邻居中,使Windows用户享受由Linux主机提供的文件与打印服务。并且,还提供如下服务:
(1)提供Windows NT风格的文件和打印机共享服务。
(2)可以进行Windows网络上的主机名称解析(NetBIOS name),可作为WINS服务器使用。
  
(3)可以提供使用者登入Samba主机时的身份认证,区分不同用户的不同权限。
注意:
NetBIOS网络基本输入/输出系统。这是一个应用程序编程接口(API),目的是允许程序员编写网络应用程序。

Samba的安装:
Samba最新的版本为3.0,考虑到目前主流的Linux操作系统多数还是使用Samba 2.2版,所以笔者仍以Samba 2.2版为例介绍Samba的配置和使用。
1.如何获得Samba
大部分Linux发行版的安装盘上都包含Samba附件。如果需要最新版可以访问http://www.samba.org 下载源代码包进行编译,或者访问你的Linux发行版的软件升级站点获得。
附:常见Linux发行版软件升级FTP站点Linux版本ftp站点
Linux版本ftp站点
RedHat Linux
ftp://updates.redhat.com
Debian GNU/Linux
ftp://ftp.debian.org/debian/dists
Mandrake Linux
ftp://mandrake.redbox.cz/Mandrake-updates
   
2.安装
使用RPM来安装:
使用RPM安装非常简单!只需要输入安装命令:rpm  -ivh  RPM包文件名即可,安装完成后执行 rpm  -qa |grep samba 应该显示出你安装上的Samba RPM软件包名,证明你已安装成功了。
需要注意的是,不同的Linux版本对于RPM档案的命名并不一样。比如:
在Red Hat 9中,需要安装三个RPML软件包,分别是Samba,Samba-common,Samba-client.
在Mandrake 9.1中,则有四个PRM软件包需要安装:Samba-server,Samba-doc,Samba-common,Samba-client.
使用源代码包安装:
各个Linux发行版提供的Samba的功能都差不多,一般没有必要进行额外的安装与设定,不过,如果您还是想要自已尝试安装自已的Samba的话,可以到Samba的官方网站上下载Samba的源码,然后在自已的机器上面编译。
目前最新的2.2版本是Samba 2.2.8a,下载samba-2.2.8a.tar.gz这个文件,然后按照下面的步骤编译。需要提醒的是,下面的编译是在Red Hat 9系统上面进行的。
wget http://samba.te8.com/samba/ftp/samba-2.2.8a.tar.gz
tar zxvf samba-2.2.8a.tar.gz -C /usr/local/src
cd /usr/local/src/samba-2.2.8a/source
./configure --prefix=/usr/
--libdir=/etc/samba/
--with-lockdir=/var/lock/samba/
--with-privatedir=/etc/samba/
--with-automount/
--with-smbmount --with-pam/
--with-quotas --with-syslog

编译并安装:
Make:make install
   
Samba的配置与实例:
   
我们经Red Hat 9的Samba软件包为例,介绍它的一些配置文件与执行程序。如果使用其它Linux系统,那也没有关系,因为文件名都是一样的,只是目录不同!读者可以用locate,find,whereis这些命令去搜寻smb.conf等文件的位置。
   
一.Samba配置文件smb.conf参数说明
   
安装好Samba服务以后,让我们一起来配置一台Samba文件共享服务器。
a.首先以root用户身份登陆服务器,在Linux服务器上建立一个目录export,输入指令为:
   
makedir export
b.修改目录权限为所有用户可以访问,但只有目录所属用户和root用户可写,输入指令为:
chmod 755 export
c.编缉smb.conf文件。
接下来,我们将介绍如何编辑smb.conf文件、如何编辑共享目录以及对变量的说明。
1.编辑smb.conf文件的[global]部分
这一部分是配置samba服务的全局配置。
[global]
workgroup = mygroup
        server string = Samba Server
        netbios name = fileshare
        printcap name = /etc/printcap
        load printers = yes
        printing = lprng
        log file = /var/log/samba/log.%m
        max log size=500
        security = user
        encrypt passwords = yes
        smb passwd file = /etc/samba/smbpasswd
        socket options = TCP_NODELAYSO_RCVBUF=8192 SO_SNDBUF=8192

重要参数说明:
     workgroup: 工作组名,一般同一部门设定相同的工作组
   server string: 主机注释,说明主机用途,可以任意填写
      netbios name: netbios名字,不能与局域网内其他主机重名,如果不设定,Linux将会使用它自已的网络名作为netbios名.
      log file: 日志文件存储位置
     max log size: 日志文件大小,单位是K
      security: 可用的安全模式。如果使用security=user将会要求每个用户都在Samba服务器上拥用一个账号,如果你不需要Samba服务器管理用户,同时打算让所有人使用同样的共享资源,可以设为:security=share
   encrypt passwords: 因为Windows98以上操作系统网络邻居密码均为加密,所以一般设置为"yes".
        
2.编辑共享目录
  
这个部分则是针对每个共享的目录或者设备进行权限方面的设置
[softshare]
        comment    =My Soft  Share
        path        =/softshare
        read only  =no
        public      =yes
        writable    =yes
        create mode =0664
        directory  mode =0775

重要参数说明:
     comment  :这个目录的说明!
     path      :这个共享目录对应的Linux文件系统里面的目录。
     read  only:是否只读?
      public :是否让所有可以登入的用户看到这个共享目录?
      writable : 是否可以写入?这里需要注意:read only与writable意义差不多,如果writable和read only设定意义相反,那最后出现的那个设定值为主要的设定!
      create mode与directory mode设定共享目录的权限
3.关于变量:   
在Samba当中,为了简化设定,有许多的变量值提供给系统管理员来使用,如上面的
log file = /var/log/samba/log.%m中的%m.主要的变量如下表:
        
        
变量 说明
%S 当前的共享名
%m 客户端NetBios名
%M 客户端DNS名,也就是HOSTNAME
%L SAMBA 主机的NetBIOS 主机名称
%H 用户的home 目录
%U 目前登陆用户的用户名
%g 登陆用户的主组的名称
%h Samba主机的DNSQ名,也就是HOSTNAME
%I 客户端的IP
%T 当前的日期与时间
%V Samba的版本
二.配置举例
通过以上的介绍,相信大家都已经学会如何配置一台Ssmba文件共享服务器,但实际应用中,用户对文件共享服务器会产生不同的要求,现在笔者对实际使用中一些不同的要求进行配置。
1.配置匿名访问的Samba文件服务器
配置smb.conf:
在这个例子中,我们只把/tmp目录共享,并且没有设定任何的登入权限的限制!因为amb.conf原本的设置已经共享了很多的目录,所经你必须要将其他的共享先关闭!关闭的方法有很多,你可以将smb.conf备份后移除、重新建一个,或者是将没有用到的那一行以":"或者是"#"注释掉!
  
[root@server root]# cd/etc/samba
[root@server samba]# cp amb.confsmb.conf.bak
[root@server samba]# vi smb.conf
[global]
client code page=936
workgroup=workgroup
netbios name=share
server string=SAMBA Server
log file=/varlog/samba/log.%m
max log size=0
security=share
socket options=TCP_NODELAYSO_PCVBUF=8192 SO_SNDBUF=8192

# max log size=0表示日志文件大小没有限制
# 需要注意的是 如果想配置匿名samba服务器 security=share是必须的
[tmp]
        comment=tmp
        paih=/tmp
        read only=no
        public=yes

#  path:对应Linux文件系统中的真实目录名
#  read only=no和public=yes表示该共享目录可写并可匿名访问
  
测试smb.conf 配置并启动Samba服务:
使用restparm指令:
testparm 可以用来查看所有Samba的属性,除非你在smb.conf指定这些属性值,否则它们就都是默认值.如果查看没有什么错误,然后执行命令
[root@server samba]# /etc/rc.d/init.d/smb start
需要注意的是,这里是以Redhat系统为例进行说明,其他Linux系统samba执行命令需要进行相应修改.
看到以下两行
Stsring SMB services:[OK]
Starting NMB services:[OK]

      
Samba服务就被启动了!需要提醒的是,如果默认情况下Samba已经启动.要先用kill命令将其杀掉方可重新启动
2.配置需要认证用户的文件共享Samba服务器
在这个例子里,我们要分享每个用户的home目录和/public这个特定目录(也就是说,每个用户登陆后,只能看到自已的主目录和共享的pubilic目录)。首先编缉smb.conf文件。
[root@server samsa]# vi smb.conf
[global]
        workgroup=workgroup
        netbios name=fileshare
        server string=SAMBA Server
        client code page=936
        security=user
        encrypt passwords=yes
        smb passwd file=/etc/samba/smbpasswd
        hosts allow=192.168.0.127
        log file=/var/log/samba/%m.log
        max log size=0
        sooket options=TCP_NODELARSO_RCVBUF=8192 SO_SNDBUF=8192
        dns proxy=no

# 注意这里security=user而不是sercurity=share.
# 密码文件为/etc/samba/smbpasswd.
# 当设定了hosts allow 之后,hosts allow 里面没有指定的IP将无法登入Samba主机。如果想要不限IP或者使用防火墙管理,就不要设定 hostsallow 了
[homes]
comment=Home Directories
        browseable=no
        writable=yes
        valid users=%S
        create mode=0664
        directory mode=0775

#  设置每个用户的home 目录共享。
#  create mode 指的是新建文件的权限,而 directory mode 则是新建目录的权限
#  valid users是设置有权限进入的用户,这里设定为%S!所以,每个用户就可以进入自已的home目录!
[public]
comment=public share
        path=/home/public
        public=yes
        writable=yes

[root@server samba]# mkdir /public
注意:
和匿名Samba服务器的区别主要是security=这个选项,如果设定值是user就表明用户登陆时需要用户名和密码,如果设定值是share就表明用户无需用户名、密码即可登录!

3.增加Samba用户密码和账号
在Linux系统下、权限的分配是通过UID和GID来进行的,任何程序都需要取得UID与GID (User ID 与Group ID)之后,才能够拥有相应的权限,存取文件,在使用 Samba服务访问Linux系统时,也需要使用Linux 系统时,也需要使用Linux系统下的UID 与GID来进行权限分配。当我们登入Samba服务器时,使用的Samba上的用户,也就是说,在Samba的用户,必须对应Linux系统中的一个用户。
举个例子:如果你想要使用test用户访问Samba服务器,那么在Samba服务器上就必须要有test这个真实用户,也就是说可以在/etc/passwd这个文件找到test这个用户及相对应的UID和GID、这样才能在test用户访问Samba服务时赋予这个用户相应的权限。如果服务器没有test这个账号,那你就需要在服务器系统里增加这个用户,命令为:useradd test ( 注意区分大小写)。在系统里增加了这个用户后,还需要使用smbpasswd命令、把这个用户增加到samba系统中、samba 并不能使用/etc/passwd文件里的所有账号。具体命令为:
[root@server samba]# smbpasswd-a test
    New SMB password: 4.Samba共享目录的权限设置原则
  
Samba服务的用户和Linux系统的用户是对应的关系、当我们以Samba服务的用户访问sSamba服务器,会取得对应Linux系统用户的相关访问权限、/etc/samba/smb.conf中的参数writable.readonly.public.valid users.invalid users等,也会限制访问Samba服务的用户权限。但是要记住的原则是拒绝权限优先,也就是无论Linux系统还是Samba 服务、只要其中之一对该用户拒绝访问的话、该用户就无法访问共享资源。
举例来说,/public我们在 smb.conf 文件中设定的是writable=yes,当我以test访问SAMBA 服务器后,对于prblic应该是可读可写的!但如果/prblic目录在Linux系统中的权限test用户不可写的话,那么test用户是不能对/public写入的。所以,需要修改/public目录的权限设置,使test用户在Linux系统中也可以写入/public目录。这样你才可以以test用户身份从网络邻居向/public目录写入数据。
从Windows系统上访问Samba文件服务器和访问一台Windows系统的文件共享服务器一样简单。用户直接通过网络邻居访问即可。当然,也可用DOS命令:net use drive//ipaddress/service/user:username进行访问。
注意:
带有下划线的字符是格式:drive为要装载的磁盘:service是smb.conf中定义的共享用户名:username是Samba用户名。

    例:net use f://192.168.1.1/public/user:test
    将samba服务器上的public目录共享为Windows机器的f盘
   
四.Samba服务器的故障诊断
一般来说,Samba服务器几乎不会出现什么问题,如果出现了问题,我们可以按照下面的步骤检查。
1.检查网络
首先检查服务器和客户机之间的网络连接是否正常,可以利用一些ping、traceroute等命令工具进行判断。如果网络连接正常,检查在服务器上或者服务器和客户机之间是否安装了防火墙、如果安装了防火墙、是否把Samba服务需要使用的端口(135、139)封掉了。如果用NetBIOS Name访问不了Samba主机,可以用Samba服务器的IP地址访问试试。如果问题仍然存在,那么进行下一步——检查Samba的配置。
2.检查Samba配置
看看Samba服务是否正在运行、输入下面的命令:
[root@server samba]#/etc/rc.d/init.d/smb status
命令执行后如果出现下面的情况就表示Samba服务正在运行,否则重新启动Samba服务:
   
    smbd(pid 14913 12754 12566 9605 4637 4619) is running...
    nmbd (pid 4623)is running...

  
注意:
pid 后面的数字可能不同。

如果Samba服务已经正常运行,而客户机却不能访问共享目录,老是出现"没有相关写入的权限"提示、通常是权限分配问题。也就是Linux系统的文件访问权限与Samba服务器的文件访问权限不相符。登陆Linux系统、检查并修改共享目录对应的Linux目录的 权限分配。一定要记住:smb.conf 里面设定的权限只是在Samba服务运行当中"预计"要给用户的权限,并不能取代Linux系统对用户的文件访问权限分配.
写在最后
经过10年多的发展,经历了世大的变化、Samba已经发展成为Linux系统中的通用组件、其功能相当强大、本文由于篇幅所限、只对Samba服务的基本功能"文件共享"进行了介绍、希望能对读者有所帮助。
附:Samba的历史与名称的由来
能不能让Linux象Windows一样也有网络邻居的功能呢?在1991年Samba的软件作者Andrew Tridgell 也有这方面的困惑,他试图在一台Sun 工作站上完成DEC Pathworks功能的尝试,以完成他的其他研究工作。Pathworks是另一个基于SMB的服务器软件。那时Andrew Tridgell对SMB和Netblos一无所知,但通过分析DOS客户端和Pathworks在进行数据分享传送时所使用到的通讯协议信息,他完成了Samba的最初版本。此后随着越来越多人加入Samba的开发,Microsft也公开了SMB的文档,Samba已经演变成为一种稳定和可靠的产品,并且已经被移植到多种平台(AIX、HP-UX、BSD、Linux、DigitalUnix、SCO、VMS、OSF和Solaris)上。
   
最初Tridgwell申请了SMBServer(Server Message Block的简写)这个名字来做为他撰写的这个软件的商标,但是这个名称已经被一家公司进行了注册.那么能不能在字典里面找到相关的字词可以做为商标来注册呢?翻了老半天,寻找以字母“S"开头,包含有字母“m”和“b”的字母一个词。从搜索到的单词表中Tridgell选择了Samba这个名称,刚好含有SMB又是热情有劲的拉丁舞蹈的名称,那就用这个名字来做为商标好了!这就是我们今天所使用的SAMBA 的名称由来。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭