设置是我们有一个运行 Debian Squeeze 的 VPS,并且我设置了一个共享目录供我们共享文件。到目前为止,我已遵循本指南:
http://www.cyberciti.biz/faq/linux-setup-shared-directory/
我还将 umask 正确设置为 002(请参阅该指南的注释),因此我们现在可以直接在服务器上创建文件和目录,并且我们都对它们具有读/写权限。
唯一的问题是我们的许多文件是在本地计算机(都运行 Ubuntu 10.10)上创建的,然后转储到服务器上。这导致只有文件/目录的创建者具有写入权限,而我为共享此文件夹而设置的组的其他成员仅具有读取权限。
我的下一个想法是更改本地计算机上的默认 umask,但必须这样做似乎有点极端,而且我不知道这是否存在安全风险。
有人可以告诉我是否有更好的解决方案来实现我想要实现的目标,或者这是否真的是要走的路?
提前谢谢了
答案1
我会使用不同的方法并通过共享文件访问控制列表在目录上。
首先确保目录所在的文件系统上启用了访问控制列表(确保第四列中/etc/fstab
包含相应的条目)。acl
还要确保您安装了 acl 实用程序(在 Debian 上,安装该acl
软件包)。然后为两个用户提供对该目录的可继承的写入权限。
setfacl -m user:other_user:rwx /path/to/directory
setfacl -d -m user:other_user:rwx /path/to/directory
如果有两个以上的用户,请为每个用户重复此命令(ACL 对于创建目录的用户是隐式的);或者将用户放入一个组中(就像您已经做的那样),然后-m group:group_name:rwx
在命令中使用setfacl
。
答案2
抱歉我在评论中太厚重了。 sftp 服务器由 root 运行,您可以获取 root 的 umask。您应该能够通过编辑/etc/ssh/sshd_config
文件并更改行来解决此问题
Subsystem sftp /usr/lib/openssh/sftp-server
到
Subsystem sftp /bin/sh -c `umask 0002; /usr/libexec/openssh/sftp-server`
答案3
除了伊恩的答案(应该有效)之外(但要注意智能引号,请参阅下面的警告),在顶部/etc/init.d/ssh
您会发现:
### BEGIN INIT INFO
# Provides: sshd
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: OpenBSD Secure Shell server
### END INIT INFO
...
umask 022
您可以在此处更改该值。
警告:
许多 S/FTP 客户端会尝试将新上传的文件的权限设置为与本地系统上的权限相匹配,因此请检查是否发生了这种情况。如果是,您通常可以在用于上传的客户端的设置中禁用此选项。
编辑:
作为另一个建议,在创建这样的设置时,我总是充分利用组所有权的粘性位(即,我将所有目录权限设置为 2775),以便新创建的文件和目录继承正确的组所有权。