Samba:移动共享内的文件需要对目标目录具有读取权限

Samba:移动共享内的文件需要对目标目录具有读取权限

我偶然发现了一些奇怪的事情。Samba 似乎需要读取权限如果我想在目标文件夹的文件系统上移动向其中添加文件(而不是复制)。这适用于 Samba 版本(已测试 2 个版本)和底层文件系统(本地文件系统,带有 ext4、nfs 挂载)。

有没有什么办法可以摆脱这个限制?

测试用例:

以 root 身份创建目录结构

su - root
mkdir -p /tmp/samba_test/write_only
chmod 777 /tmp/samba_test
chmod 773 /tmp/samba_test/write_only

验证目录结构

find /tmp/samba_test -exec ls -ald {} \;
drwxrwxrwx 3 root root 4096 Dez  9 12:44 /tmp/samba_test
drwxrwx-wx 2 root root 4096 Dez  9 12:17 /tmp/samba_test/write_only

以非特权用户身份创建文件(以其他用户身份访问)

touch /tmp/samba_test/file
find /tmp/samba_test -exec ls -ald {} \;
drwxrwxrwx 3 root root 4096 Dez  9 13:47 /tmp/samba_test
drwxrwx-wx 2 root root 4096 Dez  9 12:17 /tmp/samba_test/write_only
find: ‘/tmp/samba_test/write_only’: Keine Berechtigung
-rw-rw-r-- 1 www-data www-data 0 Dez  9 13:47 /tmp/samba_test/file

将文件移动到只写状态

mv /tmp/samba_test/file /tmp/samba_test/write_only
 find /tmp/samba_test -exec ls -ald {} \;
drwxrwxrwx 3 root root 4096 Dez  9 13:49 /tmp/samba_test
drwxrwx-wx 2 root root 4096 Dez  9 13:49 /tmp/samba_test/write_only
find: ‘/tmp/samba_test/write_only’: Keine Berechtigung

以 root 身份检查该文件是否存在

find /tmp/samba_test -exec ls -ald {} \;
drwxrwxrwx 3 root root 4096 Dez  9 13:49 /tmp/samba_test
drwxrwx-wx 2 root root 4096 Dez  9 13:49 /tmp/samba_test/write_only
-rw-rw-r-- 1 www-data www-data 0 Dez  9 13:47 /tmp/samba_test/write_only/file

这就是 Linux(文件系统 ext4?)的处理方式。写入权限足以将文件移动到仅可写但不可读的目录中。

现在让我们从 Samba(版本 4.7.6-Ubuntu,Ubuntu 18.04)执行相同操作!

这是 samba 配置:

grep -vE "^([[:blank:]]*[#;]|$)" /etc/samba/smb.conf
[global]
   workgroup = <Our_Active_Directory>
   netbios name = <Our_Server_Hostname>
   security = ADS
   realm = <Our_Kerberos_Realm>
   encrypt passwords = yes
        server string = %h server (Samba, Ubuntu)
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   server role = standalone server
   passdb backend = tdbsam
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   map to guest = bad user
   usershare allow guests = yes
[samba_test]
        comment = Test
        path = /tmp/samba_test

现在在 Windows 资源管理器中访问共享,在共享中创建 file2 并尝试移动将其设置为 write_only。您将收到一条错误消息,提示您需要执行此任务的权限(对 file2 进行更改),这些权限应由 授予。即使chmod 777 /tmp/samba_test/file2不更改这一点。

复制 file2 确实有效(例如,在 Windows 资源管理器中按住 CRTL 进行复制)!(您可以在 Linux 计算机上验证它是否存在)

如果我使用 Powershell (Move-Item/Copy-Item) 执行此操作,则行为相同。

如果您确实chmod o+r /tmp/samba_test/write_only移动文件,则有效。

也许有一个标志可以改变 Samba 的行为?

我已经使用协议版本 SMB1、SMB2、SMB3_11 和 Samba 版本 4.7.6/3.6.23 进行了测试

还在家里用我的树莓派在不同的环境中测试了它。SMB3_11,Samba 4.9.5。这是一个独立的 Samba 服务器,用作我的佳能打印机的网络目标。

相关内容