我在 Ubuntu Server 12.04 上运行。我有一个名为 Music 的文件夹,我希望默认文件夹权限为 775,默认文件权限为 664。
我将音乐文件夹的默认权限设置为 775。
我还配置了 ACL 以使用这些默认权限:
# file: Music
# owner: kris
# group: kris
# flags: ss-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x
我还在 .profile 中将我的用户帐户 kris 的默认 umask 更改为 002。
现在,新文件/文件夹在写入 Samba 共享时不应该使用这些权限吗?据我所知,ACL 应该可以与 Samba 配合使用。
目前,如果我使用我的 Mac 写入该文件夹,文件夹将获得 755 而文件将获得 644。我的 Mac 上有另一个名为 GoodSync 的应用程序,它可以将我的 Mac 上的本地目录同步到网络 samba 共享,但那些权限更糟糕。使用该程序文件被写入为 700。
因此看起来 Samba 允许主机/程序确定文件夹/文件权限。
无论主机尝试在服务器上写入什么,我都需要进行哪些更改来强制我想要的权限?
答案1
桑巴/乌玛斯克
运行 Ubuntu 14.04,samba 版本 4.1.6-Ubuntu。我之前运行的是 Fedora 16/samba3,一切正常。使用 Ubuntu/samba4,我无法让 Samba 在目录上设置组写入位。
smb.conf 参数(用于测试)包括:
create mask = 700 # The file AND mask
force create mode = 775 # The file OR mask
directory mask = 700 # Directory AND mask
force directory mode = 777 # Directory OR mask
从 Windows 7 客户端,我可以使用 mode=775 创建文件,但创建的目录始终具有模式 755。
问题出在我用来访问共享目录的个人登录名中默认的“UMASK 022”。已编辑/etc/login.defs并将“UMASK 022”更改为“乌玛斯克 002“。重新启动后,现在从 Windows 7 客户端创建的目录的模式为 775。我不认为这与我之前的设置(Fedora/Samba3)的行为相同。
有趣的是,smb.conf 参数“inherit permissions = yes”有点奏效。此参数取代了以前的参数。父目录的模式为 2777,创建的子目录的模式为 766(未设置执行位),文件的模式为 755(未设置组/来宾写入位)。
应该记录 Samba/UMASK 交互和相互依赖关系。
答案2
终于弄清楚了这一点。
您需要修改 /etc/samba/smb.conf 文件。对于我的音乐共享,我添加了以下选项:
create mask = 664
force create mode = 664
security mask = 664
force security mode = 664
directory mask = 2775
force directory mode = 2775
directory security mask = 2775
force directory security mode = 2775
我不确定其中哪一个真正解决了这个问题,但现在通过 Samba 共享时它正在写入正确的权限。我认为是使用了“强制”命令,因为 Mac 可能试图在共享上强制自己的权限(现在 Ubuntu 正在强制自己的权限而不是接受我的 Mac 的权限)。希望这对某人有帮助!
答案3
以下条目对我有用:
force security mode = 664
force directory security mode = 775
答案4
一个简单的说明。查找“遵守 pam 限制”参数。默认情况下,它是 OFF 或 NO 或 FALSE,但应该明确将其打开,umask 才会生效!我花了大约一个星期的时间,试图弄清楚为什么我的文件以 744 权限创建,而不管强制创建模式是 666 还是 777......问题在于这个参数打开了,我不记得为什么这样做了。关闭它解决了 rw-vs-ro 问题