复制文件的 Samba 权限

复制文件的 Samba 权限

我在运行 Debian Squeeze 的插头计算机上运行 Samba,我正在尝试将其配置为基于 Web 的文件服务器。

该机器运行 Lighttpd 作为 Web 服务器,运行 Samba 作为文件共享。用户可以使用 Samba 将文件从本地机器复制到使用 Samba 的插头计算机上,然后通过 Web 浏览器查看它们(我编写的脚本)。

Lighttpd 以 的身份运行www-data,Samba 以 的身份运行root,并且用户通过名为 的用户帐户与 Samba 进行身份验证admin

问题是,当用户副本通过 Samba 从他们的机器上下载文件。让我们以一个名为的文件为例foo.pdf:-


例子

foo.pdf存储在 LAN 上的单独 NAS 驱动器上,用户将其复制到运行 OS X 的本地计算机上。目前的权限如下:-

mac:Desktop jon$ ls -l | grep foo.pdf
-rwx------    1 jon  NETWORK\Domain Users     3516266 10 May 10:54 foo.pdf

一切都很好,因为用户拥有rwx该文件的全部权限,尽管其他人没有权限——这不是问题。但现在,用户决定要将文件foo.pdf从本地计算机复制到插头计算机上——事情开始出错了!

使用 Samba 复制文件后,权限现在如下:-

root@plug:/home/admin/content# ls -l | grep foo.pdf
-rwx------ 1 admin    admin    3516266 May 10 09:54 foo.pdf

问题是现在仅有的 admin拥有该文件的权限rwx。其他用户则没有任何权限。这意味着www-data(即 Web 服务器)对此文件没有任何权限。403 - Forbidden如果我尝试foo.pdf通过 Web 浏览器打开,结果将是。


我对 *nix 的了解相当有限,但我认为解决这个问题需要做的是 Samba 在复制文件时放宽这些权限,以允许其他用户读取该文件。

在 SF 和其他网站上阅读类似的问题表明,潜在的解决方案可能在于和create mode/mask-force create mode/mask但不清楚这是否仅适用于新文件,还是也适用于复制的文件 - 因为它对我来说不起作用!

作为测试,我强制使用了这些选项0777(显然对于生产环境来说不安全,但只是想测试一下)并发现它对复制文件的文件权限没有任何改变。

smb.conf的如下:-

[global]
        workgroup = WORKGROUP
        server string = %h server
        dns proxy = no
        log file = /var/log/samba/log.%m
        log level = 4
        max log size = 1000
        syslog = 0
        panic action = /usr/share/samba/panic-action %d
        encrypt passwords = true
        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$
        pam password change = yes
        create mask = 0777
        force create mode = 0777
        directory mask = 0777
        force directory mode = 0777

这似乎根本没有改变任何东西,因为文件-rwx------ 1 admin admin在复制后仍然具有权限。

...有任何想法吗?

答案1

客户端可能明确设置了文件 ACL,从而覆盖了 Samba 在创建文件时选择的权限。您可以尝试使用force security mode强制设置某些位。以下内容应强制全局读取权限:

force security mode = 004

答案2

如果你不想让管理员的主目录“世界可读”,你可以

  • 为您想要通过 Web 服务器访问的文件创建单独的目录,例如 /var/www/shared
  • 通过 samba 共享此目录
  • 使用 acl 授予适当的权限:

    setfacl -m user:www-data:rx,default:user:www-data:rx /var/www/shared
    setfacl -m group:users:rwx,default:group:users:rwx /var/www/shared

您可以列出带有 的 acl 条目getfacl /var/www/shareddefault:将为目录中创建的项目设置权限。

相关内容