Linux系统配置 Samba客户端
参考:
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
还有一点,如果搞这么复杂的samba配置有些晕头而不太放心,最简单的方式就是配置完成后分别用windows客户端和linux客户端多试验几次,看看达到的文件权限是否满足自己的需求。而且把smb.conf和客户端挂载权限给满也是一种比较好操作的简易方法。
=================================================
相关文章
- 【Linux】linux常用基本命令
- Linux下性能监控、守护进程与计划任务管理
- linux下安装mysql并修改密码
- linux上用curl进行http接口测试
- linux 切换root账号_LINUX 创建用户及切换用户
- linux Command useradd、usermod、userdel
- litmus-rt linux Project的设计思路
- 中标麒麟linux 6上安装新浪微博客户端
- Linux最佳聊天软件:Skype 4.3轻体验
- 在 Linux 中为非 SSH 用户配置 SFTP 环境
- 如何在现有的 Linux 系统上添加新的磁盘
- 如何在Linux的命令行中使用Evernote
- 在 Linux 中安装最新的 Thunderbird 邮件客户端
- Livepatch —— 免重启给 Ubuntu Linux 内核打关键性安全补丁
- linux学习-Linux系统启动过程
- linux shadow文件*,Linux /etc/shadow文件详解
- linux日志服务器审计客户端history记录
- 用navicat访问linux数据库,成功实现Navicat访问Linux中安装的MySQL数据库
- linux Sersync 上配置客户端
- 记录一次实验室linux系统的GPU服务器死机故障的排查——Linux系统的Power States
- Linux基础:文件基础属性及如何更改文件属性、文件与目录管理、linux软硬链接的理解、linux用户和用户组管理
- Linux时间处理总结
- Linux学习笔记(25)linux批量管理
- Linux学习笔记(21)linux查看系统状态
- Linux学习笔记(14)linux在6.x和7.x系列的安装与基本使用区别
- Linux——编写一个简单的服务器、客户端(使用TCP)——服务器一直监听本机的xxxx号端口,如果收到连接请求,将接收请求并接收客户端发来的消息;客户端与服务器端建立连接并发送一条消息。
- 【Linux】好玩的linux命令