jou*_*ous 8 linux filesystems sftp timestamp
我有一个多个用户可以访问的目录。他们更改、上传和删除目录中的文件。他们都属于同一个用户组。该目录中的文件具有 660 的访问权限。
问题是如果用户不是该文件的所有者,则用户无法设置文件的修改时间。
例如,用户 AAA 上传了一个文件“EXAMPLE.jpg”,用户 BBB 下载了它,修改了它并再次上传。文件的“上次修改”时间戳将是 BBB 上传它的时间,而不是真正上次修改的时间。我尝试将文件的权限设置为 777,但没有帮助。
问题在 sftp-logs 中显示为:
Dec 5 16:37:08 servername sftp-server[695]: open "/shared_directory/EXAMPLE.jpg" flags WRITE,CREATE,TRUNCATE mode 0666
Dec 5 16:37:08 servername sftp-server[695]: close "/shared_directory/EXAMPLE.jpg" bytes read 0 written 42765
Dec 5 16:37:08 servername sftp-server[695]: set "/shared_directory/EXAMPLE.jpg" modtime 20111205-15:53:31
Dec 5 16:37:08 servername sftp-server[695]: sent status Permission denied
Run Code Online (Sandbox Code Playgroud)
Winscp 会抱怨这种情况Upload of file 'example.jpg' was successful, but error occurred while setting the permissions and/or timestamp. If the problem persists, turn on 'ignore permission errors'。警告很容易被忽略,但是如果我想让我的用户在文件上传后通过编辑它们来“保留”时间戳怎么办?
已经有一个类似的问题,但没有得到答复:(。
出于某种神秘的原因,Unix/Linux 系统尽可能地保护 mtime。只有所有者[*] 可以执行您的要求。您无法控制它,即使使用 ACL (man setfacl)。
我能想到的一种解决方法是使用有dos filemode选项的Samba 。它完全符合您的要求(尽管名称不是很明显)。当然,我远非推荐 samba 而不是 sftp;桑巴舞是行政上的噩梦。
事实上,如果我是你,我会去做一个非常非常丑陋的黑客。编写一个脚本来扫描 sftp-log 文件的set ... modtime行,并且对于每个这样的行立即尝试运行touch --mtime. 显然,脚本需要以 root 身份运行,因此请确保它不受代码注入(例如包含 ' 或 " 或 ; 或 $ 字符的文件名和日期)的影响。
[*] 实际上,用户也拥有 CAP_FOWNER(例如 root),但这是系统范围的能力,因此不适用于您的情况。
用户可以删除然后上传更改的文件。通过这种方式,他们将更改所有权,并且能够更新文件的时间戳。
文件夹权限应该类似于drwxrwsr-x,文件权限应该类似于-rw-rw-r--。用户应与文件夹和文件位于同一组中。
另请参阅:如何在 Ubuntu 9.10 上为编辑 /var/www 中的多个站点的多个用户设置权限结构?
| 归档时间: |
|
| 查看次数: |
4953 次 |
| 最近记录: |