Samba

一、认识samba

来自官网首页翻译:

Samba是用于Linux和Unix的标准Windows互操作性程序套件。
Samba是根据GNU通用公共许可授权的免费软件,Samba项目是软件自由保护协会的成员。

自1992年以来,Samba为所有使用SMB/CIFS协议的客户端提供了安全、稳定和快速的文件和打印服务,如所有版本的DOS和Windows、OS/2、Linux和许多其他版本。

Samba是一个重要的组件,将Linux/Unix服务器和桌面无缝集成到Active Directory环境中的。它既可以作为域控制器,也可以作为常规域成员。

1. Samba协议基础

在NetBIOS 出现之后,Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统,这个系统基于NetBIOS设定了一套文件共享协议, Microsoft称之为SMB(Server Message Block)协议。这个协议被Microsoft用于它们Lan Manager和Windows NT服务器系统中,实现不同计算机之间共享打印机、串行口和通讯抽象(如命名管道、邮件插槽等)。

随着 Internet的流行,Microsoft希望将这个协议扩展到Internet上去,成为Inter net上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的SMB协议进行整理,重新命名为 CIFS(Common Internet File System),并打算将它与NetBIOS相脱离,试图使它成为Internet上的一个标准协议。

CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议(见最后的名词解释)现在是局域网上用于服务器文件访问和打印的协议。象SMB协议一样,CIFS在高层运行,而不象TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。

二、samba安装

1. samba rpm安装

CentOS7安装配置Samba服务
参考URL: https://blog.51cto.com/hld1992/2296358
1, CentOS7上直接使用yum安装samba, samba-client即可。

# yum install samba samba-client

2,安装完成后,检查下结果

# rpm -qa samba-client samba

samba-client-4.7.1-9.el7_5.x86_64
samba-4.7.1-9.el7_5.x86_64

2. samba编译安装

官方参考: https://wiki.samba.org/index.php/Build_Samba_from_Source

2.1 samba编译步骤
  1. 在编译安装samba之前我们需要,安装sambe相关依赖的软件
    https://wiki.samba.org/index.php/Package_Dependencies_Required_to_Build_Samba
    以下是构建和安装Samba所需的独立于操作系统的库和程序列表
    在这里插入图片描述
    强制的依赖如上图所示:
    python:有一些工具是python写的,并且 构建系统Waf也是python写的(即你要编译samba必须转python)

使用源码自带脚本 install_with_python.sh 安装pyhon,该脚本会自动配置所需要的相关环境变量。

samba.org::ftp/tridge/python/Python-2.6.5.tar
如果服务环境没有外网,直接访问如下网址,在samba官网下载脚本下载的对应python
https://www.samba.org/ftp/tridge/

注意,经过测试发现可以不用单独安装这里的python,这里的python安装目的是 一些samba作为 ad dc时才会用到,我们在./configure 时可以加参数 --disable-python --without-ad-dc

因此这里的强制依赖不用非常关注- -!

  1. 获取源代码包并进行解压
    我们将源代码包放在目录/home/samba下
tar -zxvf samba-4.10.6.tar.gz 
  1. 配置configure
    进入目录
cd /home/samba/samba-4.10.6/

然后执行下面的命令进行配置。

 ./configure

总结: samba有很多依赖,有一些依赖对应的功能我们用不上,在./configure 排除掉即可。
如下,测试通过的命令,我排除了好多功能如: ad-dc、LDAP、ads活动目录、PAM等

./configure --disable-python --without-ad-dc --without-json --without-libarchive --without-acl-support --without-ldap --without-ads --without-pam
samba常用./configure参数整理

在配置命令之前,我们可以通过命令,来查看配置命令的一些选项。

# ./configure –-help

安装路径目录相关配置

 Installation prefix:
    By default, "waf install" will put the files in "/usr/local/bin", "/usr/local/lib" etc. An 
    other than "/usr/local" can be given using "--prefix", for example "--prefix=$HOME"

    --prefix=PREFIX
            installation prefix [default: '/usr/local/samba']
    --destdir=DESTDIR
            installation root [default: '']
    --exec-prefix=EXEC_PREFIX
            installation prefix for binaries [PREFIX]

  Installation directories:
    --bindir=BINDIR
            user commands [EXEC_PREFIX/bin]
    --sbindir=SBINDIR
            system binaries [EXEC_PREFIX/sbin]
    --libexecdir=LIBEXECDIR
            program-specific binaries [EXEC_PREFIX/libexec]
    --sysconfdir=SYSCONFDIR
            host-specific configuration [PREFIX/etc]
    --sharedstatedir=SHAREDSTATEDIR
            architecture-independent variable data [PREFIX/com]
    --localstatedir=LOCALSTATEDIR
            variable data [PREFIX/var]
    --libdir=LIBDIR
            object code libraries [EXEC_PREFIX/lib64]
    --includedir=INCLUDEDIR
            header files [PREFIX/include]
    --oldincludedir=OLDINCLUDEDIR
            header files for non-GCC compilers [/usr/include]
    --datarootdir=DATAROOTDIR
            architecture-independent data root [PREFIX/share]
    --datadir=DATADIR
            architecture-independent data [DATAROOTDIR]
    --infodir=INFODIR
            GNU "info" documentation [DATAROOTDIR/info]
    --localedir=LOCALEDIR
            locale-dependent data [DATAROOTDIR/locale]
    --mandir=MANDIR
            manual pages [DATAROOTDIR/man]
    --docdir=DOCDIR
            documentation root [DATAROOTDIR/doc/PACKAGE]
    --htmldir=HTMLDIR
            HTML documentation [DOCDIR]
    --dvidir=DVIDIR
            DVI documentation [DOCDIR]
    --pdfdir=PDFDIR
            PDF documentation [DOCDIR]
    --psdir=PSDIR
            PostScript documentation [DOCDIR]


库处理相关选项:

library handling options:
    --bundled-libraries=BUNDLED_LIBS
            comma separated list of bundled libraries. May include !LIBNAME to disable bundling
            'ALL' [auto]
    --private-libraries=PRIVATE_LIBS
            comma separated list of normally public libraries to build instead as private libra
            to disable making a library private. Can be 'NONE' or 'ALL' [auto]
    --private-library-extension=PRIVATE_EXTENSION
            name extension for private libraries [samba4]
    --private-extension-exception=PRIVATE_EXTENSION_EXCEPTION
            comma separated list of libraries to not apply extension to []
    --builtin-libraries=BUILTIN_LIBRARIES
            command separated list of libraries to build directly into binaries [NONE]
    --minimum-library-version=MINIMUM_LIBRARY_VERSION
            list of minimum system library versions (LIBNAME1:version,LIBNAME2:version)
    --disable-rpath
            Disable use of rpath for build binaries
    --disable-rpath-install
            Disable use of rpath for library path in installed files
    --disable-rpath-private-install
            Disable use of rpath for private library path in installed files
    --nonshared-binary=NONSHARED_BINARIES
            Disable use of shared libs for the listed binaries
    --disable-symbol-versions
            Disable use of the --version-script linker option

问题?:能否将某个程序 如smbclient依赖的so打包到 smbclient二进制文件里面,这样就不用,copy这个命令的时候,还考虑copy对应的so文件了?
–builtin-libraries选项是否是该功能??todo

2.2 编译过程问题总结

官网:
https://wiki.samba.org/index.php/Build_Samba_from_Source
官网对编译samba参考比较详细,可以完全参考

  1. 执行./configure --help报错Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
    ModuleNotFoundError: No module named ‘encodings’
./configure --help
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007ffff7fe2740 (most recent call first):

问题分析:
查看configure 脚本文件,发现它通过调python的waf构建,其中python使用环境变量 P Y T H O N 。我这里没有配置环境变量 PYTHON。 我这里没有配置环境变量 PYTHON。我这里没有配置环境变量PYTHON,因此 我写死python路径 为如下图标红:
在这里插入图片描述
测试通过,不再报刚才的错。
但是在执行./configure 到最后还是报这个错,后来发现是执行自己电脑上还有一个python3成新,执行python3报错,因此判断程序还有其他地方使用了 python环境变量,因此注意不要在configure中写死python位置修改系统环境变量 $PYTHON 为你正确的python路径即可。

注意: 测试发现有一个脚本:install_with_python.sh 查看这个脚本内容,发现它可以帮你自动安装samba需要的python,并设置环境变量$PYTHON、LD_LIBRARY_PATH等。

因此强烈通过此脚本,或参考此脚本安装python,因为有些环境变量需要配置。

  1. Checking for header Python.h : Distutils not installed? Broken python installation? Get python-config now!
    官方对这个报错有说明:
    如果不用Samba as an AD DC. 可以
    ./configure --disable-python --without-ad-dc

官方原文如下:
If full python development headers are not installed you may see
Checking for header Python.h : Distutils not installed? Broken python installation? Get python-config now!
The configuration failed
Here you have three choices:
• Add the following build settings to ‘./configure’:
–disable-python --without-ad-dc
This does mean that you will not be able to provision Samba as an AD DC.
• (for Samba 4.10) build with python2 with
PYTHON=python2 ./configure
PYTHON=python2 make -j
• install the Python 3.x development package for your system (eg python3-devel, python36-devel or python3-dev)

三、samba服务端配置

1. smb.conf配置

进入samba配置目录

cd /etc/samba/

备份smb.conf

mv smb.conf smb.conf.origin

新建smb.conf

vim smb.conf
[global]
        workgroup = WORKGROUP
        server string = she Samba Server %v
        netbios name = sheSamba
        security = user
        map to guest = Bad User
        passdb backend = tdbsam

[FileShare]
        comment = share some files
        path = /smb/fileshare
        public = yes
        writeable = yes
        create mask = 0644
        directory mask = 0755

[WebDev]
        comment = project development directory
        path = /smb/webdev
        valid users = root
        write list = root
        printable = no
        create mask = 0644
        directory mask = 0755

注释:
workgroup 项应与 Windows 主机保持一致,这里是WORKGROUP
security、map to guest项设置为允许匿名用户访问

再下面有两个section,实际为两个目录,section名就是目录名(映射到Windows上可以看见)。

第一个目录名是FileShare,匿名、公开、可写

第二个目录吗是WebDev,限定root用户访问

默认文件属性644/755(不然的话,Windows上在这个目录下新建的文件会有“可执行”属性)

2. 创建系统用户(smb使用系统用户)

上面案例,我们配置了root用户,root用户默认就存在,所以这里不需要淡出创建root用户了。
如果我们配置了其他不存在的系统用户,我们就需要利用命令添加相应用户。

这里:
1、为root设置smb密码:smbpasswd -a root

3. 启动Samba服务,设置开机启动

systemctl start smb
systemctl enable smb

4. 测试配置是否正确

  1. 可以使用testparm测试samba配置是否正确
    如下显示,加载 service file OK 即可。
[root@xxx samba]# testparm 
Load smb config files from /etc/samba/smb.conf
Processing section "[EtcDir]"
Processing section "[LogDir]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

  1. 使用 smbclient命令查看samba服务情况
    root用户的话,不用密码可直接查看samba服务器情况
[root@xxx samba]# smbclient -L localhost 
Enter WORKGROUP\root's password: 
Anonymous login successful

	Sharename       Type      Comment
	---------       ----      -------
	EtcDir          Disk      project etc directory
	LogDir          Disk      project log directory
	IPC$            IPC       IPC Service (She Samba Server 4.8.3)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful

	Server               Comment
	---------            -------

	Workgroup            Master
	---------            -------
[root@xxx samba]# 

  1. 查看samba服务端口
# netstat -tnlp | grep smbd

四、samba服务常用配置

Samba配置文件常用参数详解
参考URL: https://blog.51cto.com/yuanbin/115761

1. 配置账号密码访问samba

出于安全问题,需要为samba配置密码:

$ smbpasswd -a

按提示输入想使用的密码即可

另外 /etc/samba/smb.conf 的 [global] 段必须有:

security = user

如此这般,局域网的人访问你的电脑都需要以上命令设置的用户名和密码。

如果想不要密码,可设为:
security = share

遇到问题:
1)在linux下配置smb服务,windows映射过程中,始终都被要求输入用户名和密码,即使是[public]定义的共享目录也一样!而[public]配置无误,guest ok = yes, public = yes,

解决办法:

解决这个问题需要修改smb.conf文件,在[global]节中加入map to guest = bad user,这个配置的意思是将所有samba系统主机所不能正确识别的用户都映射成guest用户,这样其他主机访问linux服务器smb共享的public目录时就不再需要用户名和密码了。

总结: security = share 安全等级,share没有用户名和密码保护,Windows用户直接打开路径就可以访问Samba服务器。
security=share在新版中已经被废弃了
把security = share
改为
security = user
map to guest = Bad User

demo:测试通过,通过root/root登录 可以创建文件

[global]
        workgroup = WORKGROUP
        server string = She Samba Server %v
        netbios name = SheSamba
        security = user
        map to guest = Bad User
        passdb backend = tdbsam

[Share]
        comment = project log directory
        path = /home/share
        valid users = root
        write list = root
        create mask = 0644
        directory mask = 0755

2. 修改samba服务监听的端口号

组成Samba运行的有两个服务,一个是SMB,另一个是NMB;SMB是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口。而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137和138 UDP端口。

smbd运行在TCP的139、445端口,nmbd则运行在UDP的137、138端口(运行samba服务后可以用如:netstat -anp | grep smbd、netstat -anp |grep nmbd来查看它开放的端口号),如果不运行nmbd进程则客户端只能通过IP地址来访问samba服务器了!

1、停掉服务器上面的smbd服务
2、启动的时候后面加上接口

./sbin/smbd -p 4450

Samba服务所使用的端口和协议

Samba 服务使用的端口和协议(是一组TCP UDP协议的组合,主要使用CIFS协议)
https://www.cnblogs.com/findumars/p/6009345.html

关于端口一些网上信息:
教材上面说还要采用137、138、139等端口,这种说法也是成立的,这是由于将samba作了WINS服务 器的原因,即UDP138、UDP139是进行NETBIOS解析的;如果不进行NETBIOS解析的话,445端口够用了。

samba 服务可以改端口,但是 windows 不认其他端口,Windows 不让指定端口。所以window访问其他samba不能指定端口。

3. Samba编码设置

在[global]下添加
如果locale是zh_CN.UTF-8,做如下设置:
  display charset = UTF-8
  unix charset = UTF-8
  dos charset = UTF-8
如果locale是zh_CN.GBK或zh_CN.gb2312,做如下设置:
  display charset = cp936
  unix charset = cp936
  dos charset = cp936

  • display charset = UTF-8
    输出信息到 stdout,stderr (也就是在samba服务器上)時所用的编码。這邊應該是指輸出訊息,通常設定成與底下的unix charset選項相同。
  • dos charset = UTF-8
    DOS客户端连接到samba服务器,所使用的编码。测试结果不管是Unix或windows都使用這個编码設定,在设定该samba服务給中文Windows使用时,应该使用该参数。不过,经过测试最新版本(Version 4.10.6)测试,samba linux服务器没有配置任何编码

Linux系統所使用的編碼方式。Samba必須要知道本地的編碼方式,才能正確的轉換要送給客戶端的訊息,這個選項在一般情況下,samba服务应该与其所在的Linux 系統编码相同,也就是 locale設定的編碼方式。

4. Samba以 root 权限共享目录

在 Samba 中以 root 权限共享目录需要进行一些特殊的配置。请注意,以 root 权限共享目录可能存在安全风险,请谨慎操作。

[ShareName]
    path = /path/to/share
    read only = no
    force user = root
    force group = root

主要添加配置:
read only = no
force user = root
force group = root

亲测通过!

五、samba文件共享访问

1. Windows访问linux samba服务

1)在Windwos资源管理器访问(我的电脑)
访问路径里填上: \${Samba服务器的IP} ,然后回车,可以看见共享的目录。

2)映射网络驱动器
共享目录上右键映射即可。

1.1 同样的配置在一个linux上可以正常创建目录文件以及在另一个linux上却看不到文件,并且无创建目录文件权限?

问题分析:
相同的smb配置以及smb应用程序,说明是linux环境问题,优先排查防火墙问题。

解决方法:
1)临时关闭selinux
关闭selinux 编辑/etc/selinux/config

setenforce 0 #临时关闭selinux

2) 永久关闭selinux

编辑/etc/sysconfig/selinux文档
将SELINUX=enforcing改为SELINUX=disabled
或者直接执行命令:
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
然后,重启服务器即可

2. Windows断开与Samba服务器的连接方法

开始 -> 运行 -> cmd,执行net use * /del,然后根据提示按Y是取消远程连接,N是放弃。执行net use 可以查看所有的远程连接。

C:\Users\intha>net use
会记录新的网络连接。


状态       本地        远程                      网络

-------------------------------------------------------------------------------
OK           Z:        \\11.11.111.100\LogDir    Microsoft Windows Network
OK                     \\11.11.111.100\IPC$      Microsoft Windows Network
命令成功完成。

当然,除了命令,你可以图形化操作,取消映射即可。

3. Linux访问Samba服务(linux 访问windows共享文件夹的方法)

3.1 方式1:使用mount命令挂载远端目录到本地目录

#mount -t cifs //IP地址/共享名称 挂载点 -o username=用户名,password=密码,其他选项

mkdir /mnt/soft
mount -t cifs -o username=Administrator,password=xxxxxx //11.11.111.111/share /mnt/soft
3.2 方式2:使用samba的smbclient 访问windows的共享文件夹

$ sudo apt-get install smbclient

安装好后,就可以访问共享的文件了。

$ smbclient --user=share //192.168.66.198/share
Enter share’s password: (输入密码回车)
smb: >

此时进入了smb的命令操作空间,可以使用help来查看命令的使用。

smb: > help

…省略若干命令…
exit get getfacl geteas hardlink
help history iosize lcd link
…省略若干命令…

也可以使用help查看单个命令的使用方式

smb: > help get

HELP get:
[local name] get a file

3.3 使用过程遇到问题
1) Linux下mount命令出现Host is down的解决方法

当使用Linux中的mount命令挂载一个Windows的共享目录的时候有时会出现:
failed: Host is down

出现Host is down的错误在挂载Windows 8,8.1,10的时候会经常出现,这时候其实不是命令本身的原因,

这个问题主要在于版本上面,所以在mount cifs的时候显式指定一下挂载的cifs是最新的版本即可
如下命令 添加 ,vers=2.0后不再报错

mount -t cifs -o username=xxxxx,password=xxx,vers=2.0 //11.12.112.100/share /mnt/soft
2)清除Windows访问局域网Samba共享密码缓存

在windows 中访问Samba共享时,如果输入了密码,其后一段时间均不用输入用户名及密码即可访问,这是windows密码缓存造成的,使用net use * /del 删除远程连接

使用如下命令清除

net use * /del

六、smbclient命令使用详解

smbclient命令属于samba套件,它提供一种命令行使用交互式方式访问samba服务器的共享资源。

1. 列出某个IP地址所提供的共享文件夹

smbclient -L 198.168.0.1 -U username%password

2. 像FTP客户端一样使用smbclient

smbclient //192.168.0.1/tmp -U username%password

执行smbclient命令成功后,进入smbclient环境,出现提示符: smb:\》

这里有许多命令和ftp命令相似,如cd 、lcd、get、megt、put、mput等。

3. 直接一次性使用smbclient命令

使用-c选项可以一次性使用smbclient命令

	smbclient -c “ls” //192.168.0.1/tmp -U username%password

创建一个共享文件夹

  smbclient -c “mkdir share1” //192.168.0.1/tmp -U username%password

4. 指定访问samba服务的端口

加参数-p 即可

smbclient //11.12.111.111/dir/ -p 445 -U administrator

关于139、445端口测试如下:

  • linux上 启动samba服务它会同时监听 139和445
    使用smbclient测试 -p 139可以连通正常使用,-p 445 可以连通正常使用
  • win7、win10 启动文件夹共享,它也会监听 139和445
    使用smbclient测试 -p 139连接报错,-p 445 可以连通正常使用
    连接139报错如下:
    Connection to 11.12.111.111 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)

总结:smbclient 默认使用445端口,建议使用445端口。

139端口和445端口的区别

139端口和445端口的区别
参考URL: https://www.cnblogs.com/xunbu7/p/3509621.html
windows的139端口和445端口的区别
參考URL: https://blog.youkuaiyun.com/alone_map/article/details/51849460

  • 139和445端口的使用背景
    SMB(Server Message Block)协议在NT/2000中用来作文件共享,在Win-NT中,SMB运行于NBT(NetBIOS over TCP/IP)上,使用137,139(UDP),139(TCP)端口。

在win2000级以上版本中,SMB可以直接运行在tcp/ip上,而没有额外的NBT层,使用TCP 445端口。

  • 两个端口的使用情况

可以在“网络连接/属性/TCPIP协议/属性/高级/WINS中设置启用或者禁用NBT(NetBIOS over TCP/IP)。
当计算机同时支持NTB和TCP/IP两种协议的时候,就面临着选择139或者445端口了。下面的情况确定会话使用的端口:
1、如果客户端启用了NBT,那么连接的时候将同时访问139和445端口,如果从445端口得到回应,那么客户端将发送RST到139端口,终止这个端口的连接,接着就从445端口进行SMB的会话了;如果没有从445端口而是从139得到回应,那么就从139端口进行会话;如果没有得到任何回应,那么SMB会话失败。
2、如果客户端禁用了NBT,他就将只从445端口进行连接。
3、如果服务器端启用NBT,那么就同时监听UDP 137、138端口和TCP139,445端口。如果禁用NBT,那么就只监听445端口了。

总结一下:**139端口是在NBT协议基础上的,关闭NBT协议139就废了。而445端口是在TCP/IP协议基础上,现在网络中应该很少有不使用TCP/IP协议的了。**最后如果主机两种协议同时支持的话(比如windowsxp以后的操作系统)那么共享访问时候的端口使用优先级为:445>139,所以现在UNC路径访问ip地址都是使用445端口,而访问主机名形式是使用139端口(现在基本不用了)。

关闭139端口的方法:“网络连接/属性/TCPIP协议/属性/高级/WINS中设置启用或者禁用NBT(NetBIOS over TCP/IP)
关闭445端口的方法:防火墙阻塞445端口或者禁用server服务都可以。

七、参考

Samba使用大全(绝对经典)
参考URL: https://blog.youkuaiyun.com/future_ai/article/details/81631116
利用SMB jcifs实现对windows中的共享文件夹的操作
参考URL: https://www.cnblogs.com/aigeileshei/p/9101695.html
[推荐-翻译-全面]Samba
参考URL: https://blog.youkuaiyun.com/QTM_Gitee/article/details/84060845#951_smbclient_2186
SMB2 Protocol – 简介(应用层协议主要用于在计算机间共享文件、打印机、串口等)
参考URL: https://www.cnblogs.com/findumars/p/6009350.html
Samba配置文件常用参数详解
参考URL: https://blog.51cto.com/yuanbin/115761

http://www.linuxidc.com/Linux/2014-12/110459.htm Samba-4.1.14服务器安装和配置 http://www.2cto.com/os/201408/327930.html 【Linux笔记】sambav4.1.9源码安装及基本使用说明 http://blog.sina.com.cn/s/blog_627617bf0101s4ps.html samba4.1.6源代码部署及配置 (2014-04-04 09:41:00)转载 2016/6/14 15:23 由于ubuntu14.04.4麒麟版本使用: sudo apt-get install samba安装的samba是:V4.3.9 共享文件时ubuntu上的samba V4.3.9会出错(崩溃)。 所以直接使用源码安装来共享文件了(从win7来访问ubuntu14.04.4麒麟版本)。 标签: samba linux资源共享 smb 分类: Samba SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。 samba服务器搭建: 1.解压samba-4.1.6.tar.gz得到samba-4.1.6目录 tar -xvzf samba-4.1.6.tar.gz 2.进入samba-4.1.6目录,在该目录下输入: ./configure --prefix=/usr/local sudo ./configure --prefix=/usr/local/samba-4.1.6 make make install sudo make install 注意:4.x版本的samba的build system是基于python的,必须安装有python2.5版本以上。(python3.x系列的不行) 如果系统没有符合条件的python版本,可以运行samba-4.1.6目录下的install_with_python.sh,会自动帮你安装python。(./install_with_python.sh /usr/local) 3.创建一个文件夹,用来共享文件 mkdir -p /home/fzuir/share chmod 777 /home/fzuir/share 4.samba配置 将samba源码目录samba-4.1.6中的samba-4.1.6/examples/smb.conf.default复制到安装目录,一般是/usr/local/samba/etc/中 cp ~/samba-4.1.6/examples/smb.conf.default /usr/local/samba/etc/ 修改配置文件 sudo vim /usr/local/samba/smb.conf (1)修改samba服务器的安全模式,samba的安全模式有:(默认是user,不修改也可) share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。 user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。 server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。 domain:域安全级别,使用主域控制器(PDC)来完成认证。 修改方法:在配置文件中查找security=user,把前面的注释#去掉。 (2)添加文件共享定义信息 修改方法:在配置文件末尾添加如下内容: [Share] comment=Shared Folder path=/home/fzuir/share #public=yes(允许匿名访问) writable=yes(可写) #readonly=yes(只读) valid users=fzuir (可访问用户名,组可用 @组名) create mask=0700 directory mask=0700 available=yes browseable=yes [rootroot] comment=rootroot Shared Folder path=/ #public=yes writable=yes #readonly=yes valid users=rootroot create mask=0700 directory mask=0700 available=yes browseable=yes (3)修改编码 在[global]段内添加如下三行: display charset=UTF-8 unix charset=UTF-8 dos charset=cp936 5.添加samba用户 添加fzuir这个网络访问账户,fzuir用户如果已存在则不用。 sudo useradd fzuir 上面只是新增了fzuir这个用户,却没有赋予本机登录密码,所以只能从远程访问,不能从本机登录。而且samba的登录密码可以和本机登录密码不一样。 现在在samba中添加这个帐号 sudo /usr/local/samba/bin/smbpasswd -a fzuir sudo /usr/local/samba-4.1.6/bin/smbpasswd -a fzuir cm04@cm-System-Product-Name:/usr/local/samba-4.1.6/etc$ sudo /usr/local/samba-4.1.6/bin/smbpasswd -a rootroot Ignoring unknown parameter "display charset" New SMB password: Retype new SMB password: Added user rootroot. cm04@cm-System-Product-Name:/usr/local/samba-4.1.6/etc$ cm04@cm-System-Product-Name:/usr/local/samba-4.1.6/etc$ cm04@cm-System-Product-Name:/usr/local/samba-4.1.6/etc$ 6.测试并启动samba sudo /usr/local/samba/bin/testparm cm04@cm-System-Product-Name:/usr/local/samba-4.1.6/etc$ sudo /usr/local/samba-4.1.6/bin/testparm Load smb config files from /usr/local/samba-4.1.6/etc/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Unknown parameter encountered: "display charset" Ignoring unknown parameter "display charset" Processing section "[homes]" Processing section "[printers]" Processing section "[rootroot]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions [global] dos charset = cp936 workgroup = MYGROUP server string = Samba Server server role = standalone server log file = /usr/local/samba/var/log.%m max log size = 50 dns proxy = No idmap config * : backend = tdb [homes] comment = Home Directories read only = No browseable = No [printers] comment = All Printers path = /usr/spool/samba printable = Yes print ok = Yes browseable = No [rootroot] comment = rootroot Shared Folder path = / valid users = rootroot read only = No create mask = 0700 directory mask = 0700 cm04@cm-System-Product-Name:/usr/local/samba-4.1.6/etc$ 重启samba: sudo /usr/local/samba/sbin/smbd restart sudo /usr/local/samba/sbin/nmbd restart sudo /usr/local/samba-4.1.6/sbin/smbd restart sudo /usr/local/samba-4.1.6/sbin/nmbd restart 7.在不同的系统之间访问samba (1)windows下:在文件管理器地址栏中输入\\samba服务器IP 即可以查看共享文件夹或者打印机。 \\192.168.0.8 (2)linux下: 方法1:使用smbclient 客户机以同样方式安装samba ①列出某个IP地址所提供的共享文件夹 sudo /usr/local/samba/bin/smbclient -L 192.168.0.1 -U username%password ②使用smbclient获取共享文件 sudo /usr/local/samba/bin/smbclient //192.168.0.1/Share -U username%password 执行成功后进入smbclient环境,出现命令提示符:smb:\> 这里可使用的命令有: ?:列出所有可用命令 cd:进入共享文件目录 del:删除某个文档 lcd:变换本机目录 ls:查看目前所在目录 dir:同ls get:下载单个文件 mget:下载多个文件 mput:上传多个文件 put:上传单个文件 rm:删除文件夹 exit:离开 方法2:使用mount进行挂载 可以使用mount挂载远程共享文件夹: sudo mount -o username=fzuir,password=123456 //192.168.0.1/Share /mnt/tmp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值