局域网中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

说明:
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具有最高的文件权限。

 

posted on 2023-02-18 10:22  Angry_Panda  阅读(517)  评论(0编辑  收藏  举报

导航