小米电视无法访问 SAMBA 4.15.13 共享文件

文章讲述了在升级Samba到4.15.13版本后,小米电视无法连接到NAS的故障。作者发现是由于新版本支持的SMB协议高于小米电视兼容的版本。通过修改Samba配置文件,将`serverminprotocol`设置为NT1,然后重启服务,成功解决了问题。

小米电视无法访问 SAMBA 4.15.13 共享文件

小米电视无法访问 SAMBA 4.15.13 共享文件

作者:高玉涵

时间:2023-4-8 21:00

环境:Linux version 5.19.0-35-generic (buildd@lcy02-amd64-020) (x86_64-linux-gnu-gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #36~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb 17 15:17:25 UTC 2

故障表现

家里自建的 NAS 采用的是 Ubuntu 系统,之前一直正常使用。因,许久没有更新,今天 upgradeSamba 自动升级版本至 Version 4.15.13 再次连接一直失败(图 1-1)。

在这里插入图片描述

分析研究

通过查找资料得知 Linux Samba 服务默认使用协议 > SMB2.0,小米电视(我的)只能使用版本较低的 SMB 1.0 协议。查看 smb.conf 配置文档找到配置项 server min protocol (图 1-2)。

在这里插入图片描述

于是在 [global] 下面添加对应配置(图 1-3)。

server min protocol = NT1

在这里插入图片描述

成功

最后,重启 samba 服务。小米电视即可正常访问。

sudo systemctl restart smbd.service

在这里插入图片描述

<think>我们正在配置Samba共享,要求针对特定文件夹设置不同用户的权限。具体需求如下:-文件夹:假设共享名为"shared_folder"-用户a和b:对该文件夹可写但不可删除(即不能删除其他用户的文件,但可以修改自己的文件)-用户c:只读权限在Samba中,实现"可写不可删"通常需要利用`vetofiles`或设置特殊权限,但更常见的是通过设置`createmask`、`directorymask`和`writable`来实现基础权限,同时结合文件系统权限来控制删除。然而,Samba本身不直接提供“不可删除”的权限设置。要实现用户不能删除其他用户的文件,但可以修改自己的文件,我们可以利用以下方法:1.设置文件系统权限为1770(即粘滞位stickybit),这样只有文件所有者和root可以删除文件。2.Samba配置中设置`writable=yes`允许写,同时设置`createmask=0750`(或类似)来确保文件创建时的权限包括粘滞位。但注意:粘滞位通常用于目录,它允许目录中的文件只能被文件所有者删除。具体步骤:-在Linux文件系统上,设置共享目录的权限为1770,所有者和组设置为同一个组(例如smbgroup),并将用户a,b,c都加入这个组。-在Samba配置中,设置该共享的权限,允许组写入,同时设置创建文件的掩码以保留粘滞位。配置示例:1.创建组和用户(假设已经存在,若不存在则创建):```bashgroupaddsmbgroupusermod-aGsmbgroupausermod-aGsmbgroupbusermod-aGsmbgroupc```2.设置共享目录(假设为/srv/samba/shared):```bashmkdir-p/srv/samba/sharedchownroot:smbgroup/srv/samba/sharedchmod1770/srv/samba/shared#设置粘滞位,组可读写,其他用户无权限```3.Samba配置(在smb.conf中):```ini[shared_folder]path=/srv/samba/sharedvalidusers=a,b,c#允许这三个用户访问writable=yes#可写createmask=0770#创建文件时权限为770,即所有者与组可读写执行,其他无权限directorymask=0770#创建目录时权限为770forcegroup=smbgroup#强制文件创建时属于smbgroup组```解释:-`forcegroup`:确保在该共享中创建的文件都属于`smbgroup`组,这样同组的用户a和b可以写入(因为目录的组是smbgroup,且有写权限)。-由于设置了粘滞位(1770),所以用户a和b可以创建文件和修改自己的文件,但只能删除自己创建的文件(不能删除其他用户的文件)。用户c由于只有读权限(注意:在目录的权限中,用户c属于smbgroup组,而组权限是rwx(因为1770中的770是rwxrwx---,而组权限是rwx),但实际上用户c在Samba配置中并没有写权限?这里需要澄清:在Samba中,我们通过`writable=yes`和`validusers`来控制写权限。但是,用户c我们不想让他写,怎么办?上述配置中,用户c也在`validusers`中,并且`writable=yes`会使得所有有效用户都具有写权限。因此,我们需要单独控制用户c的权限。修改配置:我们需要将用户c设置为只读,而a和b可写。我们可以使用`writelist`来指定可写的用户,同时设置`readonly=yes`(或者`writable=no`)来使默认只读,然后通过`writelist`覆盖。配置调整:```ini[shared_folder]path=/srv/samba/sharedvalidusers=a,b,creadonly=yes#默认只读writelist=a,b#指定用户a和b可写createmask=0770directorymask=0770forcegroup=smbgroup```这样,用户c只有读权限,用户a和b有读写权限。但是,由于文件系统粘滞位的存在,用户a和b不能删除其他用户创建的文件(只能删除自己创建的文件)。注意:删除文件需要目录的写权限和执行权限(因为要修改目录的内容)。在粘滞位目录下,用户即使有目录的写权限,也不能删除其他用户的文件。因此,上述配置满足:-a和b:可创建、修改和删除自己的文件,但不能删除其他用户的文件。-c:只能读。验证:-用户a创建文件file1,用户b可以读取和修改file1(因为同组,且有rw权限),但不能删除(因为粘滞位,只有所有者a可以删除)。-用户c只能读,不能写也不能删除。补充:如果希望用户a和b不能删除任何文件(包括自己的),那么我们需要更严格的设置。但根据需求,用户a和b可以删除自己的文件(通常情况),只是不能删除别人的。所以粘滞位方案是合适的。另外,如果希望用户a和b不能删除自己的文件(即完全禁止删除),那么我们需要设置文件系统权限为只读,但这会使得他们也无法修改文件。所以通常不这么做。因此,上述配置是满足要求的。完整示例配置:```ini[global]workgroup=WORKGROUPserverstring=SambaServer%vsecurity=userpassdbbackend=tdbsam[shared_folder]comment=SharedFolderwithspecificpermissionspath=/srv/samba/sharedvalidusers=a,b,creadonly=yeswritelist=a,bcreatemask=0770directorymask=0770forcegroup=smbgroup```请根据实际情况调整全局设置。参考文献:[^1]:Samba官方文档中关于共享权限的配置说明。[^2]:Linux文件权限和粘滞位的说明。§§相关问题§§1.如何创建Samba用户并设置密码?2.如何测试Samba配置是否正确?3.如何设置Samba共享访问控制列表(ACL)以更精细地控制权限?</think>### Samba 4.15.13 文件夹权限配置指南 以下是针对您需求的完整配置方案(基于Samba 4.15.13),实现: - 用户a、b:**可写但不可删除**其他用户的文件(可修改/覆盖自己的文件) - 用户c:**只读权限** - 共享文件夹:`/srv/samba/shared` #### 步骤1:创建Linux系统用户和组 ```bash # 创建用户组和用户 sudo groupadd smbgroup sudo useradd -G smbgroup a sudo useradd -G smbgroup b sudo useradd c # 设置Samba密码(需与系统密码分开) sudo smbpasswd -a a sudo smbpasswd -a b sudo smbpasswd -a c ``` #### 步骤2:配置文件系统权限 ```bash # 创建共享目录 sudo mkdir -p /srv/samba/shared # 设置目录所有权和权限(粘滞位防止删除) sudo chown root:smbgroup /srv/samba/shared sudo chmod 1770 /srv/samba/shared # 粘滞位(1) + 组读写(770) ``` #### 步骤3:Samba配置文件 (`smb.conf`) ```ini [global] workgroup = WORKGROUP security = user # 共享定义 [SharedFolder] path = /srv/samba/shared valid users = a, b, c read only = yes # 全局默认只读 write list = a, b # 允许a,b写入 create mask = 0660 # 文件权限 directory mask = 0770 # 目录权限 force create mode = 0660 # 强制文件权限 force directory mode = 0770 force group = smbgroup # 强制文件归属组 veto files = /*/ # 防止删除非空目录[^1] ``` #### 权限验证说明 | 用户 | 创建文件 | 修改文件 | 删除自己文件 | 删除他人文件 | |------|----------|----------|--------------|--------------| | a/b | ✅ | ✅ | ✅ | ❌ | | c | ❌ | ❌ | ❌ | ❌ | #### 关键配置解析 1. **粘滞位 (1770)** `chmod 1770`中的`1`表示目录设置粘滞位,确保用户只能删除**自己创建的文件**,不能删除他人文件[^2]。 2. **force group** 强制新创建的文件归属`smbgroup`组,使同组用户(a,b)可互相修改文件。 3. **veto files** 阻止删除包含文件的目录(需配合文件系统权限)。 4. **权限继承** `create mask=0660`确保新文件权限为`rw-rw----`,避免意外执行权限。 #### 应用配置 ```bash # 测试配置有效性 sudo testparm # 重启Samba服务 sudo systemctl restart smbd ``` #### 测试命令示例 ```bash # 用户a创建文件 smbclient //localhost/SharedFolder -U a -c 'put testfile.txt' # 用户b尝试删除(应失败) smbclient //localhost/SharedFolder -U b -c 'del testfile.txt' ``` > 提示:如需更精细控制(如禁止所有删除操作),可添加`delete veto files = yes`并设置`veto files = */*`[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值