zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Linux系统配置 Samba客户端

Linux客户端 samba 系统配置
2023-09-11 14:19:19 时间

参考:

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和客户端挂载权限给满也是一种比较好操作的简易方法。

 

 

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