长话短说:还有什么(除了read only = no
smb.conf 中的文件所有权/)可以阻止 samba 允许对共享进行写访问?共享名如何影响权限?
所以我有 Ubuntu Server 16.04 LTS(samba 版本是 4.3.9+dfsg-0ubuntu0.16.04.2),USB 设备安装在 /mnt/storage 上。输出mount
是
/dev/sdb1 on /mnt/storage type ext4 (rw,relatime,errors=remount-ro,data=ordered)
目录中的所有文件/mnt/storage
均由用户拥有并可写htpc
:
htpc@htpc:~$ ls -l /mnt/
insgesamt 16
drwxrwxr-x 13 htpc htpc 4096 Sep 8 23:26 storage
htpc@htpc:~$ ls -l /mnt/storage/
insgesamt 108
drwxr-xr-x 21 htpc htpc 4096 Mär 16 20:55 somedirectory
-rw-r--r-- 1 htpc htpc 3870 Sep 11 09:02 somefile.txt
drwxr-xr-x 24 htpc htpc 4096 Apr 10 00:25 ...
这是我的 smb.conf 共享(所有其他设置均保留默认值):
[Media]
path = /mnt/storage
comment = HTPC Media server
valid users = htpc
read only = no
browseable = yes
我创建了一个 samba 用户sudo smbpasswd -a htpc
。
该共享可以使用 Windows 10 访问,但我没有写入权限(不允许创建、删除和修改文件)。奇怪的是当我共享任何其他目录时我没有这个问题(例如,创建一个普通目录/opt/testshare
并以与上面相同的方式共享该目录)。
编辑
这太奇怪了。 问题不在于 USB 设备,而在于共享名“Media”。
无论出于何种原因,该共享都是只读的当我将其命名为“媒体”时。我发现这个线程和这个线程有类似的问题,但他们得出的结论是,共享和目录不能具有相同的名称。我首先认为这是一个客户端问题(Windows 会记住以前安装的旧 uid),但我的手机(ES 文件资源管理器)也有同样的问题,我以前从未使用过它连接到我的服务器。即使当我使用smbclient
连接并尝试创建目录时,我也会收到以下错误:
smb: \> mkdir test
NT_STATUS_MEDIA_WRITE_PROTECTED making remote directory \test
我将日志级别增加到 10 并发现:
[2016/09/17 09:15:35.902089, 10, pid=24086, effective(0, 0), real(0, 0), class=passdb] ../source3/passdb/pdb_get_set.c:495(pdb_set_user_sid)
pdb_set_user_sid: setting user sid S-1-5-21-30211493-2420603996-3020390900-1003
[2016/09/17 09:15:35.902143, 10, pid=24086, effective(0, 0), real(0, 0), class=passdb] ../source3/passdb/pdb_compat.c:73(pdb_set_user_sid_from_rid)
pdb_set_user_sid_from_rid:
setting user sid S-1-5-21-30211493-2420603996-3020390900-1003 from rid 1003
[2016/09/17 09:15:35.902216, 10, pid=24086, effective(0, 0), real(0, 0), class=passdb] ../source3/passdb/pdb_get_set.c:557(pdb_set_group_sid)
pdb_set_group_sid: setting group sid S-1-5-21-30211493-2420603996-3020390900-513
[2016/09/17 09:15:35.902291, 4, pid=24086, effective(0, 0), real(0, 0)] ../source3/smbd/sec_ctx.c:439(pop_sec_ctx)
pop_sec_ctx (0, 0) - sec_ctx_stack_ndx = 0
[2016/09/17 09:15:35.902351, 10, pid=24086, effective(0, 0), real(0, 0)] ../source3/smbd/share_access.c:237(user_ok_token)
user_ok_token: share Media is ok for unix user htpc
[2016/09/17 09:15:35.902405, 10, pid=24086, effective(0, 0), real(0, 0)] ../source3/smbd/share_access.c:284(is_share_read_only_for_token)
is_share_read_only_for_user: share Media is read-write for unix user htpc
[2016/09/17 09:15:35.902508, 10, pid=24086, effective(0, 0), real(0, 0)] ../libcli/security/access_check.c:337(se_file_access_check)
se_file_access_check: MAX desired = 0x2000000 mapped to 0x80120089
[2016/09/17 09:15:35.902558, 5, pid=24086, effective(0, 0), real(0, 0)] ../source3/smbd/uid.c:163(check_user_share_access)
falling back to read-only access-evaluation due to security descriptor