我有以下设置:
- Ubuntu 14.4 服务器在前端区域提供 SFTP 服务。
- 外部客户端能够上传文件。
- 后端进程(在另一台服务器上)跟踪上传的文件,触发一些后端任务并根据任务的结果修改文件。
SFTP 用户对其上传的文件拥有所有权。 SFTP用户和后端进程是同一组的成员。当 umask 为 0007 时,后端进程可以访问和修改这些文件。
然而,一些用户上传文件600'左右权限,使得后端进程无法处理这些文件。
有很多方法可以限制权限(umask、acl),但我找不到一种方法来自动授予组对权限限制过多的上传文件的访问权限。
有没有办法自动将600或640权限上传的文件转换为660?
答案1
这是常见的常青树sftp
。从超级用户:
背景
这是sftp
文件共享的一个长期存在的问题。这是因为生成的权限是基于用户端文件的原始权限的,而 umask( -u
) 参数并不是强制这样的权限,而只是剥离不需要的权限。这意味着只有当用户尝试在具有权限的情况下上传文件时0777
,才会应用该文件并将其剥离到0775
.否则就保持原样。例如,如果用户在其文件系统上存储了具有权限的文件0700
,则上传后该文件也会显示为0700
.
解决方案
最近,我们通过应用补丁在 Fedora 中解决了这个问题,该补丁强制新上传文件的确切权限,这是基于此的:
https://bugzilla.mindrot.org/show_bug.cgi?id=1844
几个月后它将在 CentOS 上可用,不确定 debian 是否可用。
解决方法
cron
除了一些定期运行脚本(来自),修复错误的权限之外,没有其他优雅的解决方案。这可能是 bash 中的一些俏皮话,但我想你可以想到一些。如果您有兴趣,我可以详细说明这一点。
德班?
对于基于 debian 的系统,可能有一种解决方法bindfs
:基本上它将一个目录安装到另一个目录中,您可以强制所有权限按照您喜欢的方式运行。
答案2
好吧,我终于用上了iwatch。
/etc/default/iwatch:
START_DAEMON=true
CONFIG_FILE=/etc/iwatch/iwatch.xml
/etc/iwatch/iwatch.xml:
<?xml version="1.0" ?>
<!DOCTYPE config SYSTEM "/etc/iwatch/iwatch.dtd" >
<config>
<guard email="" name=""/>
<watchlist>
<title>Fix SFTP rights of uploaded files -- grant group access</title>
<contactpoint email="" name=""/>
<path type="recursive" alert="off" exec="chmod g+rw %f" events="close_write">/home/sftpusers</path>
</watchlist>
</config>
其中 /home/sftpusers 是 sftp 用户拥有其主目录的位置。
这样,每次 sftp 用户上传文件(触发 close_write)时,它都会立即得到 chmod g+rw 处理。
这很好地解决了我的问题。