注明:

曾经写过:局域网中如何为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

说明:
smbpasswd只有一个参数
-a 新建用户,使用的时候创建的samba用户必须在系统用户中存在。否则samba找不到系统用户则创建失败
-d 冻结用户,就是这个用户不能在登录了
-e 恢复用户,解冻用户,让冻结的用户可以在使用
-n 把用户的密码设置成空.
-x 删除用户,删除的是samba中的用户,而不是系统用户

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的更多相关文章

  1. 开发及应用中 Linux与Window 取舍

    Linux是开源的,而Windows不是.这个也是Linux与Windows之间最大的差异.一般来说,开源似乎收到了更多系统管理员的亲睐,而开源的软件似乎更受个人电脑用户的欢迎.两种类型之间有很多不同 ...

  2. linux centos7--linux和window共享文件(samba)

    这里以VMWARE与主控真机来做实现实现 由于SMB在centos中自带,所以,无需像网上说的样子,要这删除,那卸载,直接搜索是否存在SAMBA的安装文件 一 查询包是否存在 [root@localh ...

  3. Linux访问Window共享文件夹的配置步骤

    1. Window下创建用户XXX(作用:Linux mount时需要提供用户和密码) 2. Window下共享文件夹给XXX用户,并根据实际需要设置读取/写入权限 3. Linux下创建挂载的目录 ...

  4. (原创)Linux跟Window共享文件的两个简单方法

    第一中种方法: Linux中启动shell,输入如下命令: mount -t cifs -o username="my-pc-name",password="my-pas ...

  5. VMware中linux与window目录共享

    在虚拟机下来实如今windows下共享一个目录: (前提已安装完毕vmtools:http://blog.csdn.net/pipisorry/article/details/21318931) 打开 ...

  6. Samba实现Linux与Window文件的传输

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 ...

  7. Linux 和 Windows 之间共享文件之 samba

    导语 如果对windows有过实际操作技巧的人都会明白,在windows下的文件共享加上网络驱动器映射是多么方便的体验,甚至比ftp更加的简单,就像本地多了一块可与他人交流的硬盘一样. 问题 由于性能 ...

  8. VMware Workstation中linux(centos)与windows7共享文件夹

    引用网站有: http://www.jb51.net/LINUXjishu/161994.html http://www.cnblogs.com/xiehy/archive/2011/12/19/22 ...

  9. 主机和VMware中的Linux如实现共享文件夹

    当我在网上查了几小时的挂载文件夹方法后发现,VMware中的Linux的挂载和双系统的挂载不同 最终目的就是在/mnt目录下有个hgfs的文件夹 效果图: 首先打开VMware中的Linux系统 具体 ...

  10. JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构

    一.简介 JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构 二.依赖 <!-- https://mvnrepository.com/artifact/org.fus ...

随机推荐

  1. JavaScript:Function:函数(方法)对象

    <!DOCTYPE html><html>    <head>        <meta charset="utf-8">      ...

  2. MYSQL8-快速生成表结构(用于生成文档)

    各种工具都有,没有特别趁手的.不如自己用sql处理. SELECT column_name AS CODE, CASE WHEN column_comment IS NULL OR TRIM(colu ...

  3. CLR via C# 笔记 -- 计算限制的异步操作(27)

    1. 线程池基础. 创建和销毁线程是一个昂贵的操作,要耗费大量时间.太多的线程会浪费内存资源.由于操作系统必须调度可运行的线程并执行上下文切换,所以大多的线程还对性能不利.为了改善这个情况,CLR包含 ...

  4. 常见 i2c设备地址

    背景 朋友分享的一份i2c器件地址清单,我觉得还不错. reference:https://learn.adafruit.com/i2c-addresses/the-list Special case ...

  5. Mysql 日期查询今天、昨天、近7天、近30天、本月、上一月、本季

    今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...

  6. Solo 开发者周刊 (第8期):Claude公司再度上新产品,成交额将超73亿美元

    这里会整合 Solo 社区每周推广内容.产品模块或活动投稿,每周五发布.在这期周刊中,我们将深入探讨开源软件产品的开发旅程,分享来自一线独立开发者的经验和见解.本杂志开源,欢迎投稿. 好文推荐 Cla ...

  7. 5 pdf页码跳转失效

    PC端网页查看pdf时,输入非数字页码回车后,页码跳转功能失效

  8. let 和 const 是 JavaScript 中用于声明变量的关键字

    let 和 const 是 JavaScript 中用于声明变量的关键字. let 关键字用于声明可变(可重新赋值)的变量.通过使用 let 关键字声明的变量可以在其作用域内被重新赋值.例如: let ...

  9. Django 处理http请求之使用session

    Django 处理http请求之使用session by:授客 QQ:1033553122 欢迎加入全国软件测试交流群:7156436 测试环境 Win7 Django 1.11   Django提供 ...

  10. MySQL 递归查询实践总结

    MySQL复杂查询使用实例 By:授客 QQ:1033553122   表结构设计 SELECT id, `name`, parent_id FROM `tb_testcase_suite` 说明: ...