Linux文件共享服务器Samba的概念和配置详解

2013-01-08 7,851次浏览 发表评论

在Linux(Unix)主机之间可以使用NFS服务实现文件共享。而且是现实来也十分方便,在Windows主机之间使用Windows文件共享同样可以实现包括网络文件在内的系统资源的共享。如果想在linux和Windows主机之间进行文件的共享,使用samba服务器是比较理想的解决方案。

linux与Windows之间文件共享方式

在构建linux主机和Windows主机的混合应用系统中,linux主机用过使用samba服务器和客户机与Windows主机实现共享文件互相访问。主要有以下三种应用方式:

  • linux主机运行samba服务器,Windows主机作为客户端。
  • linux主机运行samba服务器,在linux主机中使用samba客户端程序对samba服务器进行测试,并访问服务器中的共享资源。
  • Windows主机提供文件共享服务。linux主机中使用samba客户端程序访问Windows共享文件。

通过以上三种文件共享的使用方式可以看出,linux主机与Windows主机之间进行文件共享的互访主要涉及到samba服务器、samba客户端、和Windows服务器3个角色,其中Windows服务器既可以提供文件共享服务也可以作为客户机访问其他服务器中的共享文件,Windows与linux主机之间共享文件互访关系图:

samba服务器

samba服务器的基本原理

samba服务器在linux系统上实现了SMB/CIFS协议,即可以在linux系统中为Windows主机提供网络文件共享服务。samba服务器中包括两个服务程序:

  1. smbd服务程序为客户机提供了服务器中共享资源(目录和文件等)的访问。
  2. nmbd服务程序提供了netbios主机名称解析,为Windows网络中或者工作组内的主机进行主机名称的解析。

samba服务器需要smbd和nmbd两个服务程序同时运行。

samba服务器的安装

所需软件包:

  • samba-common软件包:提供了samba服务器和客户机都必须使用的公共文件。
  • samba-client软件包:提供了samba客户机所有的文件。
  • samba软件包:提供了samba服务器所有的文件。

安装Samba

yum -y install samba samba-client samba-common

建立samba用户

useradd www
smbpasswd -a www
New SMB password:  输入密码
Retype new SMB password:  再次输入

关于smbpasswd命令选项:

  • -h显示smbpasswd的命令格式帮助
  • -a添加指定的用户帐号
  • -d禁用指定的用户帐号
  • -e启用指定的用户帐号
  • -x删除指定的用户帐号
  • 没有添加任何选项时候将改变用户密码。

建立共享目录

samba服务器主配文件是smb.conf,位于/etc/sabma/smb.conf。下面是建立一个共享目录wwwroot的示例配置:

[global]

    workgroup = SAMBA
    server string = Samba Server Version %v
    security = user

    passdb backend = tdbsam

    printing = cups
    printcap name = cups
    load printers = yes
    cups options = raw

    load printers = no
    printing = bsd
    printcap name = /dev/null
    disable spoolss = yes
 
    follow symlinks = no
    wide links = no

    # read/write 参数
    aio read size = 16384
    aio write size = 16384
    aio write behind = true
    write cache size = 2097152
    max xmit = 65536
    large readwrite = yes
 
    # Use sendfile for reading files efficiently
    use sendfile = yes
    min receivefile size = 16384
    getwd cache = true

[homes]
    comment = Home Directories
    browseable = no
    writable = yes

[printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = no
    guest ok = no
    writable = no
    printable = yes

#Add wwwroot
[wwwroot]
    comment = Web Directories
    path = /data/wwwroot
    public = no
    writable = yes
    browseable = yes

更详细的smb.conf配置文件的中文解释请参考《Linux Samba服务主配文件smb.conf中文详解

优化/etc/sysctl.conf,添加如下参数:

net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.ipv4.tcp_rmem = 8192 4194304 8388608
net.ipv4.tcp_wmem = 4096 2097152 8388608

~~~
sysctl -p   #生效

启动samba服务器

service smb start
  • start启动
  • status状态
  • stop停止
  • restart重启

CentOS 7:

systemctl start smb
systemctl stop smb
systemctl status smb
systemctl restart smb
systemctl enable smb     #开机启动
systemctl disable smb    #关闭开机启动

smbstatus命令

smbstatus命令用于显示主机中samba服务器的链接状态,包括链接服务器的客户端IP地址、主机名、登录用户名、锁定的文件等,通过smbstatus命令可以了解samba服务器的运行状态。

smbstatus

iptables防火墙设置:

iptables -A INPUT -p tcp --dport 445 -j ACCEPT

samba客户端使用

samba服务器的客户端软件包samba-client中包括了samba客户端管理命令,通过这些命令可以查看和访问samba服务器或Windows服务器中的文件共享,软件包中的很多命令中,我们只需要使用几条就可以应用samba客户端了。

Linux命令行客户端

下面介绍几条samba客户端常用命令:

smbclient命令是以命令行方式访问samba服务器,类似于telnetftp命令,使用-L选项可以列出指定服务器中共享资源。

smbclient -L 192.168.1.110 -U www

Password:  输入密码

使用smbclient命令登录samba服务器:

smbclient //192.168.1.110/wwwroot -U www
          
Password:  输入密码

#可以使用help命令查看客户端支持的命令:
smb: >help
?              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    
!  

Linux下挂载samba共享

yum -y install cifs-utils
mount.cifs -o username="www",password="123456" //192.168.1.110/wwwroot /data/wwwroot/

设置开机自动挂载

/etc/fstab文件添加:

//192.168.1.110/wwwroot /data/wwwroot cifs defaults,username=www,password=123456 0 0

Windows客户端

在Windows上访问samba服务器很简单,按Windows徽标键+R打开“运行”窗口:

smb1

smb2

映射Windows网络驱动器

这样做的目的主要是为了跨平台开发搭建开发环境,将 samba 共享的 Linux 目录,映射成 Windows 的一个驱动器盘符:

smb3

smb4

评论

随便说点,聊聊天~