局域网中linux和window共享文件方案——samba
注明:
曾经写过:局域网中如何为Ubuntu20.04和window10共享文件,本文可以视作为该篇的续篇。
本文主要内容为Samba软件的安装和配置,以及相关的磁盘操作。
注意:(硬盘的UUID会受格式化影响而改变,或者说硬盘的UUID就是格式化时所生成的,在不改变分区结构的情况下PARTUUID是会保持不变的)
在fstab中配置指定挂载时如果使用/dev/sda1这种形式会出现一定的问题的,如果挂载的磁盘为多块,重启的时候可能会出现挂载错误,比如把之前的/dev/sdb1识别为/dev/sda1,因此如果挂载多块磁盘的情况下最好使用UUID或者LABEL的方式进行挂载。
UUID查询命令:
sudo blkid
给出个人主机的一个演示:

这里个人建议使用PARTUUID,因为这样写会简单些,或者使用LABEL。
另一个查询UUID的命令:
ls -l /dev/disk/by-uuid/
演示:

-------------------------------------------------
参考:
https://www.disktool.cn/content-center/linux-hard-disk-partition-369.html
https://www.yingsoo.com/news/servers/67277.html
https://www.cnblogs.com/ranxf/p/14523367.html
https://blog.csdn.net/qq_50929489/article/details/127055286
https://blog.csdn.net/Mcy7ycM/article/details/124404425
https://www.linuxprobe.com/linux-fdisk-size.html
磁盘分区的创建:
1. 使用fdisk工具查看分区情况,删除分区,新建分区
1.1 查看整机的磁盘情况
sudo fdisk -l
成功查询到磁盘,这里假设得到结果: /dev/sda,/dev/sda1,/dev/sda2,/dev/sda3。
1.2 删除分区、新建分区
这里我们假设要删除分区 /dev/sda3 :
sudo fdisk /dev/sda
提示输入,这里输入d,然后输入需要删除的分区号。
新建分区:
sudo fdisk /dev/sda
提示输入,这里输入n,根据提示选择新建主分区或者扩展分区,然后输入需要新建分区的起始分区号和结束扇区号。
2. 使用mkfs对新建分区进行格式化
mkfs -t ext4 /dev/sda3
加入磁盘检测(-c),加上最小分区块(-b),加入Label的设置(-L)的例子:
sudo mkfs.ext4 /dev/sda3 -b 4096 -L win-linux -c
----------------------------------------------------------------
参考:
https://www.orcy.net.cn/2996.html
https://blog.csdn.net/weixin_47461537/article/details/126706277
https://blog.csdn.net/m0_46829545/article/details/128413662
https://ubuntu.dovov.com/10147/dmask%E5%92%8Cfmask%E6%8C%82%E8%BD%BD%E9%80%89%E9%A1%B9.html
https://blog.csdn.net/qq_42138566/article/details/110921234
fstab的编辑:
注意:
uid、gid、umask、fmask、dmask 只能对FAT或NTFS文件系统进行挂载权限设置,如果是其他文件系统则会进行文件系统错误的报错。
不同的文件系统(ntfs、ext4、fat32等),进行挂载时其参数名都是不同的。
给出一个ext4的例子(三种形式):
/dev/sda3 /home/devil/share ext4 defaults,nofail 0 0
LABEL=win-linux /home/devil/share ext4 defaults,nofail 0 0
PARTUUID=8296629c-03 /home/devil/share ext4 defaults,nofail 0 0
给出一个ntfs的例子:(挂载的文件系统为ntfs时文件权限系统是无效的,比如这里把用户及组设置为1000:1000后,所有用户在挂载空间下创建文件其uid及gid均为1000:1000,即使使用umask对新建文件设置默认权限,但是所有用户对挂载空间下的操作都是为1000:1000用户和组的,而且由umask指定的文件权限是不能修改的,也就是说ntfs系统挂载后只能起到显示作用,并没有实际的权限作用)。挂载的为ntfs的话,那么挂载空间下的文件权限是没有区分度的。
例子:
/dev/sda1 /home/devil/share2 ntfs defaults,nofail,uid=1000,gid=1000,umask=0077,utf-8 0 0
编写好后检查fstab中是否有语法错误:
sudo mount -a
重启后查看挂载的情况(查看磁盘挂载情况):
df -Th
========================================
在Ubuntu上安装samba:
sudo apt install samba samba-common-bin
配置:
修改文件:
sudo vim /etc/samba/smb.conf
在文件末尾添加内容:
[data]
comment = Pi HardWare Storage
path = /home/devil/share/devil_data
valid users = devil
guest ok = no
read only = no
create mask = 0700
directory mask = 0700
browseable = yes
public = yes
第一行的[data]是只samba的网络路径名,比如samba服务器地址为192.168.1.102,那么网络磁盘地址则为\\192.168.1.102\data 。
comment行为注释,说明,无实际意义。
path行指明samba服务器端的网络磁盘的实际物理路径。
guest ok设置是否允许匿名访客访问。
read only设置是否只读。
create mask设置通过samba访问时文件的权限上限。
directory mask设置通过samba访问时文件夹的权限上限。
browseable设置是否网络上可以发现该网络磁盘。
valid users 设置允许范围该网络磁盘路径的用户名,这里需要注意,这里的用户名和系统的用户名是一样的,也就是说samba中的用户名必须为系统passwd中真实存在的用户名,但是二者密码不必相同。
public 设置允许匿名用户访问。
valid users = @devil 是指允许的用户组。
其中,最需要注意的是valid users必须为系统中真实存在的用户名。
重启samba服务:
sudo service smbd restart
为samba创建用户:
samba的权限系统是和宿主机(搭建samba主机)保持一致的,因此samba中的用户名以及配置中的允许访问的用户名都必须和passwd中的用户名一致。
sudo smbpasswd -a username
samba服务器上配置完成后就可以在windows上配置网络磁盘了,根据前面的例子,这里的网络磁盘路径为:\\192.168.1.102\data
用户名为:devil,密码则为刚才设定的(sudo smbpasswd -a username)



这里需要注意的是,无论是linux还是windows,只要通过samba访问这个网络磁盘,其文件权限都是和samba中的用户名在samba主机系统中一致的。
也就是说,即使是windows端通过samba访问这个磁盘,对非devil用户属主的文件(权限假设为700),也是无法访问和编辑的,例子:
samba主机上的一个文件xxx:

在windows上也是无法使用devil用户来通过samba对其进行编辑的:

PS:
使用挂载磁盘进行samba共享,需要注意的有两点,第一,挂载磁盘的文件系统和挂载时的权限,这里经过分析后选择使用ext4文件系统;第二,samba配置时对访问路径的权限设置(create mask、directory mask、read only)。
========================================
注意:
如果使用ntfs格式的磁盘分区进行挂载,并且挂载时没有进行权限设置(umask等的设置),那么任何用户均可以对挂载空间(ntfs格式)进行任何读写操作,并且所有创建的文件其创建用户均显示为root。
如果挂载的是ntfs文件系统,那么不管如何设置挂载权限,所有用户对挂载文件均具有所有者权限(所有用户均可视为挂载文件的所有者),任何用户对挂载文件的操作都会按照fstab中指定的uid和gid来进行权限操作,可以认为使用ntfs挂载时文件的权限系统是无效的。
如果挂载的是ext4文件系统,那么不管如何设置挂载权限(ext4文件系统挂载时只能在挂载后手动改权限),root用户对挂载文件均具有所有权限(root用户均可视为挂载文件的所有者),但是除了root用户外所有用户均遵守正常的权限规则,因此如果使用挂载那么最安全的文件系统就是使用ext4。挂载ext4文件系统后,只有root具有user所有的权限,但是user是不具备root的权限的,所有挂载ext4的文件系统,root具有最高的文件权限。
局域网中linux和window共享文件方案——samba的更多相关文章
- 开发及应用中 Linux与Window 取舍
Linux是开源的,而Windows不是.这个也是Linux与Windows之间最大的差异.一般来说,开源似乎收到了更多系统管理员的亲睐,而开源的软件似乎更受个人电脑用户的欢迎.两种类型之间有很多不同 ...
- linux centos7--linux和window共享文件(samba)
这里以VMWARE与主控真机来做实现实现 由于SMB在centos中自带,所以,无需像网上说的样子,要这删除,那卸载,直接搜索是否存在SAMBA的安装文件 一 查询包是否存在 [root@localh ...
- Linux访问Window共享文件夹的配置步骤
1. Window下创建用户XXX(作用:Linux mount时需要提供用户和密码) 2. Window下共享文件夹给XXX用户,并根据实际需要设置读取/写入权限 3. Linux下创建挂载的目录 ...
- (原创)Linux跟Window共享文件的两个简单方法
第一中种方法: Linux中启动shell,输入如下命令: mount -t cifs -o username="my-pc-name",password="my-pas ...
- VMware中linux与window目录共享
在虚拟机下来实如今windows下共享一个目录: (前提已安装完毕vmtools:http://blog.csdn.net/pipisorry/article/details/21318931) 打开 ...
- Samba实现Linux与Window文件的传输
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 ...
- Linux 和 Windows 之间共享文件之 samba
导语 如果对windows有过实际操作技巧的人都会明白,在windows下的文件共享加上网络驱动器映射是多么方便的体验,甚至比ftp更加的简单,就像本地多了一块可与他人交流的硬盘一样. 问题 由于性能 ...
- VMware Workstation中linux(centos)与windows7共享文件夹
引用网站有: http://www.jb51.net/LINUXjishu/161994.html http://www.cnblogs.com/xiehy/archive/2011/12/19/22 ...
- 主机和VMware中的Linux如实现共享文件夹
当我在网上查了几小时的挂载文件夹方法后发现,VMware中的Linux的挂载和双系统的挂载不同 最终目的就是在/mnt目录下有个hgfs的文件夹 效果图: 首先打开VMware中的Linux系统 具体 ...
- JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构
一.简介 JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构 二.依赖 <!-- https://mvnrepository.com/artifact/org.fus ...
随机推荐
- JavaScript:Function:函数(方法)对象
<!DOCTYPE html><html> <head> <meta charset="utf-8"> ...
- MYSQL8-快速生成表结构(用于生成文档)
各种工具都有,没有特别趁手的.不如自己用sql处理. SELECT column_name AS CODE, CASE WHEN column_comment IS NULL OR TRIM(colu ...
- CLR via C# 笔记 -- 计算限制的异步操作(27)
1. 线程池基础. 创建和销毁线程是一个昂贵的操作,要耗费大量时间.太多的线程会浪费内存资源.由于操作系统必须调度可运行的线程并执行上下文切换,所以大多的线程还对性能不利.为了改善这个情况,CLR包含 ...
- 常见 i2c设备地址
背景 朋友分享的一份i2c器件地址清单,我觉得还不错. reference:https://learn.adafruit.com/i2c-addresses/the-list Special case ...
- Mysql 日期查询今天、昨天、近7天、近30天、本月、上一月、本季
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...
- Solo 开发者周刊 (第8期):Claude公司再度上新产品,成交额将超73亿美元
这里会整合 Solo 社区每周推广内容.产品模块或活动投稿,每周五发布.在这期周刊中,我们将深入探讨开源软件产品的开发旅程,分享来自一线独立开发者的经验和见解.本杂志开源,欢迎投稿. 好文推荐 Cla ...
- 5 pdf页码跳转失效
PC端网页查看pdf时,输入非数字页码回车后,页码跳转功能失效
- let 和 const 是 JavaScript 中用于声明变量的关键字
let 和 const 是 JavaScript 中用于声明变量的关键字. let 关键字用于声明可变(可重新赋值)的变量.通过使用 let 关键字声明的变量可以在其作用域内被重新赋值.例如: let ...
- Django 处理http请求之使用session
Django 处理http请求之使用session by:授客 QQ:1033553122 欢迎加入全国软件测试交流群:7156436 测试环境 Win7 Django 1.11 Django提供 ...
- MySQL 递归查询实践总结
MySQL复杂查询使用实例 By:授客 QQ:1033553122 表结构设计 SELECT id, `name`, parent_id FROM `tb_testcase_suite` 说明: ...