参考:

https://blog.csdn.net/m0_63624418/article/details/127856957

本文为局域网中linux和window共享文件方案——samba后续篇。

===================================================

之前已经介绍了linux安装samba服务器端以及windows客户端的使用,本篇讲的是linux客户端的安装及使用。

本文开始前回顾下之前介绍的权限问题。

1. 物理机上挂载移动硬盘

物理机上挂载硬盘,挂载后的硬盘上文件的权限与文件系统以及挂载参数有关,如果挂载的是ntfs文件系统那么只能设置可读、可写权限,并不能细化到具体的用户(个人观点是ntfs文件系统本身就不支持ext4这种linux文件系统的文件权限设置),如果挂载的是ext4文件系统,那么就和正常的文件权限系统一样(只不过在挂载的ext4文件系统下root用户可以不受文件权限限制)。

2. windows客户端如果使用用户名+密码形式登录,那么windows用户见到的samba网络磁盘上的文件权限与物理机上的权限基本保持一直(虽然windows系统上无法显示文件权限,但是该权限依然有效,如果windows客户端写一个只读文件也会无法保存的),唯一的例外是受服务器/etc/samba/smb.conf上设置的文件和文件夹的权限上限影响,因为windows客户端所能看到的权限是不会超过服务器上/etc/samba/smb.conf上配置的权限上限的。举个例子:如果服务器上xxx.py文件的权限是0755,但是smb.conf上的文件权限上限是0740,那么windows上这个文件权限也就是0740,如果windows上登录samba的用户为devil,而这个xxx.py文件的属主用户david与devil不是一个组,那么windows上用户是无法读这个文件的;而如果smb.conf上的文件权限上限是0777,那么windows上samba访问这个文件权限也就是0755,此时windows用户就可以读这个文件。

3. (提前告知答案)linux客户端访问samba共享的磁盘文件(挂载cifs的方式),其文件权限与windows客户端类似,不过除了受服务器物理机上文件权限影响和smb.conf配置文件上的权限上限影响,同时也受挂载时的配置参数影响。

安装linux上的samba客户端:

sudo  apt install smbclient

sudo  apt install cifs-utils

安装成功后测试:

sudo smbclient -L //192.168.1.102/data -U devil

注意这里只是测试,出现下面的信息是正常的,不需要care:

Reconnecting with SMB1 for workgroup listing.
smbXcli_negprot_smb1_done: No compatible protocol selected by server.
protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
Failed to connect with SMB1 -- no workgroup available

在linux客户机上利用samba客户端进行网络磁盘挂载:

例子:

sudo mount -t cifs //192.168.1.102/data /home/devil/creat -o username=devil -o password=123qwe -o uid=devil -o gid=devil -o file_mode=0777 -o dir_mode=0777

服务器端磁盘文件权限:

客户端执行命令(

sudo mount -t cifs //192.168.1.102/data /home/devil/creat -o username=devil -o password=123qwe -o uid=devil -o gid=devil -o file_mode=0777 -o dir_mode=0777

)挂载后的文件权限:

可以看到在客户端samba挂载后文件权限显示的和客户端挂载时的参数设置一致,但是实际上这两个txt文件都是不能读写的(因为服务器物理机上没有开权限)。

我们可以在客户端samba挂载后对文件进行操作:

从这里可以看出,linux的samba客户端所显示的权限是其挂载时的参数设置,但是其实际权限是物理机上的权限被smb.conf和客户端挂载参数所限制后的参数,也就是说实际权限是不能超过smb.conf中的上限和挂载参数的上限的。

linux的samba客户端的文件权限受:服务器端本身的权限,smb.conf的权限上限,挂载时的权限参数,这三者的影响。这三者中有一个设置不满足读写,那么最终的结果就是无法读写的。

-------------------------------------------------------------

服务器端sudo vim /etc/samba/smb.conf文件中的

create mask = 
directory mask =

对windows客户端、linux客户端其实都是起到一种mask的作用,在服务器物理文件权限基础上进一步做限制,而服务器端sudo vim /etc/samba/smb.conf文件中的

read only =

优先级高于creat mask和directory mask,也就是说如果read only = yes ,那么无论create mask和directory mask如何设置,最终的samba共享网络文件都是不可写的。

比如对samba服务器端修改:

重启samba服务器:sudo service smbd restart

再次在linux的samba客户端上操作,新建文件,发现无法创建,因为该空间已变成只读:

发现此时即使在linux客户端上显示权限满足条件,但是实际操作依旧会报错,因为linux客户端显示的权限是其挂载时的参数所设置的,但是最终权限还要受smb.conf和服务器物理机的权限通过。

------------------------------------------------

总结:

samba的权限设置十分的复杂,共受三者影响(物理机上的文件权限,服务器中smb.conf的上限设置,挂载时的权限参数),服务器端挂载不同的文件系统(ntfs还是ext4),不同的smb.conf设置,linux客户端挂载参数的不同,其最终权限都是不同的,samba服务的文件权限对于多人协同的情况其实支持度并不是很好的(设置过于复杂)。

因此samba服务器端配置共享时,最好是依据单用户的情况进行配置,比如:

/home/devil/share/devil_data路径就是配置给devil用户的,devil用户具有全部的rwx权限;

/home/devil/share/john_data路径就是配置给john用户的,john用户具有全部的rwx权限;

/home/devil/share/john_data路径就是配置给smith用户的,smith用户具有全部的rwx权限;

/home/devil/share/public_read_data路径就是配置给所有用户的,devil、john、smith用户具有只读权限。

/home/devil/share/public_write_data路径就是配置给所有用户的,devil、john、smith用户具有读写权限。

或许这样的samba配置才是比较靠谱的。

升级一下的设置:

/home/devil/share/data路径配置给devil、john、smith用户,但是data权限属主为root,然后再在/home/devil/share/data路径下面创建devil_data文件夹给devil用户并使其成为属主具有全部的rwx权限;在/home/john/share/data路径下面创建john_data文件夹给john用户并使其成为属主具有全部的rwx权限;在/home/devil/share/data路径下面创建smith_data文件夹给smith用户并使其成为属主具有全部的rwx权限。

然后在/etc/samba/smb.conf文件中配置

create mask = 0777
directory mask = 0777

在linux挂载时,使用参数-o file_mode=0777 -o dir_mode=0777,
这样就把samba网络文件权限全部给到物理机上进行管理,不过这样做的最大问题就是无法在客户端上看到文件的真实权限,不过这一点也不重要,因为不管如何设置在samba客户端上都是难以看到真实的文件权限和真实属主的。

还有一点,如果搞这么复杂的samba配置有些晕头而不太放心,最简单的方式就是配置完成后分别用windows客户端和linux客户端多试验几次,看看达到的文件权限是否满足自己的需求。而且把smb.conf和客户端挂载权限给满也是一种比较好操作的简易方法。

=================================================

Linux系统配置 Samba客户端的更多相关文章

  1. linux之SAMBA共享目录服务端架设

    samba 共享目录 1.SAMBA服务概述 协议 监听端口137 架构   samba:Linux系统的一种文件共享程序服务 通常在主机文件共享的应用场景中,由于文件系统的差异化,Windows和L ...

  2. Linux下samba的安装与配置

    背景          在window7下面虚拟了一个CentOS6.3,为了学习命令行就没有装图形包,所以我的CentOS是黑屏的那种,呵呵,当然了,VMWare提供 的增强功能我就不能用了(或许能 ...

  3. Linux中samba服务器的搭建

    使用的vmware12虚拟机安装的centos6.8和物理机上的windows10,实现在windows10 上访问CentOs上的samba服务. 一.先查看系统中是否安装有samba服务相关的软件 ...

  4. Linux之Samba部署

    1.Samba介绍 Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件,由服务器及客户端程序构成,SMB(Server Messages Block,信息服务块)是一种 ...

  5. 利用Linux的Samba服务模拟NT域

    利用Linux的Samba服务模拟NT域 Samba是一个与Windows NT具有相同协议的软件包.我们可以利用Samba服务来模拟 Windows NT域,使用户从Windows计算机上直接使用一 ...

  6. Linux服务-samba

    目录 1. samba简介 2. samba访问 Linux服务-samba 1. samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. 在 ...

  7. Linux 配置samba服务实现与Windows文件共享

    目录: 1.samba服务介绍 2. 安装samba服务和客户端 3.samba配置文件详解 4.配置实例 5.客户端挂载与测试 6.samba排错 1.Samba服务介绍     Samba 最先在 ...

  8. Linux系统配置VSFTP软件详解

    Linux系统配置VSFTP软件详解 出处 http://www.sudu.cn/service/detail.php?id=11656 vsftpd.conf 是vsftpd的配置文件,用来控制vs ...

  9. linux下Samba服务配置

    SMB是基于客户机/服务器型的协议,因而一台Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端,例如,一台在Linux 下已经架设好的Samba服务器,windows客户端就可 ...

  10. linux系统内SAMBA共享问题

    最近将项目迁移到了公司服务器上,以后客户端调试和服务端开发都要去链接这台服务器,但是开发就需要调试,也需要log信息,同一局域网内,如何链接服务器并随时查看服务器上的log信息呢? 今天搞了一下,把步 ...

随机推荐

  1. javascript高级编程笔记第五章

    chapter 5 5.5 Function类型 未完待续 函数实际上是对象,每个函数都是Function类型的实例,因此与其他引用类型一样具有属性和方法 因此函数名实际上就是函数对象的指针,不会与某 ...

  2. Java8 - sum求和,将 List 集合转为 Map,key去重(groupingBy),sorted排序

    Java8 - sum求和,将 List 集合转为 Map,key去重(groupingBy),sorted排序 package com.example.core.mydemo.java8; publ ...

  3. Kotlin 变量详解:声明、赋值与最佳实践指南

    Kotlin 变量 变量是用于存储数据值的容器. 要创建一个变量,使用 var 或 val,然后使用等号(=)给它赋值: 语法 var 变量名 = 值 val 变量名 = 值 示例 var name ...

  4. C# .net core中如何将多张png图片合并成一个gif

    背景 我们有很多这样的序列帧: 我这边要把这些序列帧裁切最后合并成gif,以下是我裁切后的png文件: 我一开始选用的是 SixLabors.ImageSharp 这是裁切代码: using var ...

  5. CodeServer 不能粘贴

    CodeServer 在没有SSL证书时, 由一浏览器的限制, 默认是不能粘贴的. 在局域网中, 如果不考虑安全性的话, 可以考虑直接把加密关掉, 就能复制粘贴了. 配置文件如下: cert: Tru ...

  6. SERSYNC服务

    inotiry图片参考 sersync图片参考 inotify文字教程 该软件对系统有要求,内核2.6以上,并且有如下目录,后面会讲解三个文件用途 [root@jokerpro ~]# uname - ...

  7. php常用缓存逻辑

    代码 //行为限频 if (!function_exists('doSomethingLimit')) { function doSomethingLimit($key, $second, Closu ...

  8. Linux Shell 常用命令 - 02篇

    系列文章: Linux Shell 常用命令 - 01篇 8. shell 中各种括号的作用 参考 https://www.jb51.net/article/123081.htm https://ww ...

  9. application.properties数据库连接字符串

    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://loca ...

  10. Java socket 获取gps定位

    1.Java socket 获取gps定位的方法 在Java中使用Socket来直接获取GPS定位信息并不直接可行,因为GPS数据通常不是通过Socket通信来获取的.GPS数据通常由设备(如智能手机 ...