Samba对复制文件的权限

我将Samba运行在运行Debian Squeeze的插件计算机上,我试图将其configuration为基于Web的文件服务器。

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

Lighttpd以www-data运行,Samba以root身份运行,用户通过名为admin的用户帐户使用Samba进行身份validation。

问题是,当用户通过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 

一切都很好,因为用户有完整的文件权限,即使没有其他人做 – 这不是问题。 但是现在,用户决定要把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如果我试图通过networking浏览器打开foo.pdf


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

在SF和其他网站上阅读类似的问题表明,一个潜在的解决scheme可能在于create mode/maskforce create mode/mask – 但不清楚这只适用于新文件,还是复制文件 – 因为它不为我工作!

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

我的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权限。

…有任何想法吗?

客户端可能会显式设置文件ACL,从而在创build文件时覆盖由Sambaselect的权限。 您可以尝试使用force security mode来强制设置某些位。 以下应强制世界读取权限:

 force security mode = 004 

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

  • 为要通过networking服务器访问的文件创build单独的目录,例如/ 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 

您可以使用getfacl /var/www/shared列出acl条目。 default:将为在该目录内创build的项目设置权限。