你想知道为何没有 /media/happy目录的写权限,我们从 Linux 文件系统权限 、 ACL 额外权限控制 、Samba 权限约束三个核心层面逐一分析,同时给出解决方案:
一、核心原因分析
1. 首先:Linux 传统 UGO 权限不足(最基础原因)
从你提供的 ll命令输出可以看到 happy目录的权限信息:

drwxr-xr-x+ 2 root smbuser 4.0K Jan 14 19:17 happy/
拆解这个权限字符串 drwxr-xr-x:
d:表示这是一个目录- 第 1 组
rwx:文件所有者(owner) 权限,所有者是root,拥有读、写、进入目录的完整权限 - 第 2 组
r-x:所属组(group) 权限,所属组是smbuser,仅拥有「读」和「进入目录」权限,缺少「写」权限(w) - 第 3 组
r-x:其他用户(other) 权限,所有非root、非smbuser组的用户,同样只有「读」和「进入目录」权限,无「写」权限
而你当前登录的用户是 happy(从命令行提示符 happy@hp-e-840g3可知),happy既不是该目录的所有者(root),也仅可能是 smbuser组的成员(或其他用户),因此从传统 UGO 权限来看,天然没有写权限。
2. 其次:权限位后的 +号表示启用了 ACL(额外权限限制)
你注意到权限字符串末尾有个 +号(drwxr-xr-x+),这在 Linux(尤其是 Ubuntu)中表示该目录启用了 ACL(Access Control List,访问控制列表) ,它是超出传统 UGO 权限的额外权限控制机制,可能会进一步限制(或补充)你的写权限,且 ACL 权限优先级高于传统 UGO 权限。
也就是说,即使你后续调整了 UGO 权限,若 ACL 中明确禁止 happy用户的写权限,你依然无法写入。
3. 补充:Samba 权限无法突破 Linux 底层文件系统权限(关键认知)
你配置了 smb.conf共享,但需要明确一个核心原则: Samba 共享权限(上层)无法突破 Linux 文件系统的底层权限 。
你的 Samba 配置中虽然设置了 writable = yes、force user = smbuser,但这只是 Samba 服务层面的权限配置,最终能否写入,依然取决于 Linux 底层对 smbuser(或 happy)用户的目录权限 —— 底层 Linux 权限不允许写,上层 Samba 配置再宽松也无效。
二、解决方案(分步操作,按需选择)
步骤 1:先查看 ACL 权限,确认额外限制(必做)
使用 getfacl命令查看 happy目录的详细 ACL 规则,明确是否有额外权限约束:
getfacl /media/happy
输出结果中会包含 user:happy:、group:smbuser:等条目,若显示 user:happy:r-x(无 w),则 ACL 进一步限制了写权限。
步骤 2:修改 Linux 传统 UGO 权限(获取基础写权限)
提供两种常用方式,二选一即可:
方式 A:修改目录所属用户为 happy(让 happy成为所有者,获得完整权限)
# 需sudo提权,修改目录所有者为happy,所属组保留smbuser(不影响Samba配置)
sudo chown happy:smbuser /media/happy
修改后,happy作为目录所有者,拥有 rwx权限,包含写权限。
方式 B:给所属组添加写权限(适合保留 root作为所有者的场景)
# 需sudo提权,给所属组(smbuser)添加写权限
sudo chmod g+w /media/happy
然后确保 happy用户属于 smbuser组(否则无法享受组权限):
# 将happy添加到smbuser组(-a表示追加,不删除现有其他组)
sudo usermod -aG smbuser happy
注意:
usermod添加组后,需要 重新登录happy用户 (或退出当前终端重新连接),组权限变更才能生效。
步骤 3:调整 ACL 权限(若步骤 1 发现 ACL 有额外限制)
场景 1:给 happy用户添加 ACL 写权限(推荐)
sudo setfacl -m u:happy:rwx /media/happy
u:happy:rwx:指定给happy用户分配读、写、进入目录的 ACL 权限- 若需要递归给目录内所有文件 / 子目录添加权限,添加
-R参数:sudo setfacl -R -m u:happy:rwx /media/happy
场景 2:清除所有 ACL 规则(简化权限,仅保留传统 UGO 权限)
sudo setfacl -b /media/happy
-b:清除该目录的所有 ACL 规则,权限回归到传统 UGO 控制
步骤 4:Samba 服务补充配置(若需要远程 SMB 访问写入)
确保
smbuser已设置 Samba 密码(否则无法通过 Samba 认证):重启 Samba 服务,使配置生效:
sudo systemctl restart smbd nmbd
给所属组 smbuser 添加写权限(推荐,保留 root 为所有者)
# 给happy目录的所属组添加写权限(g+w)
chmod g+w /media/happy
三、总结
- 核心无写权限的原因是 Linux 传统 UGO 权限中,
happy用户(或其所属组)缺少写权限 ,且可能存在 ACL 额外限制。 - Samba 权限无法突破 Linux 底层权限,底层权限是 “权限天花板”。
- 解决关键是:要么让
happy成为目录所有者,要么给happy所属组添加写权限,同时处理可能的 ACL 规则。 - 权限修改后,需重新登录(组权限)或重启 Samba(远程访问)才能完全生效。