我偶然发现了一些奇怪的事情。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 服务器,用作我的佳能打印机的网络目标。