linux – 如何允许多人通过sftp更改文件的mtime -timestamp?

前端之家收集整理的这篇文章主要介绍了linux – 如何允许多人通过sftp更改文件的mtime -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

Winscp会因为上传文件’example.jpg’成功而抱怨,但在设置权限和/或时间戳时发生错误.如果问题仍然存在,请启用“忽略权限错误”.警告很容易被忽略,但如果我想让我的用户通过在文件上传后编辑它们来“保留”时间戳呢?

已经有a similar question了,但已经没有答案了:(.

解决方法

出于某种神秘的原因,Unix / Linux系统尽可能强地保护mtime.只有所有者[*]才能满足您的需求.即使使用ACL(man setfacl),也无法控制它.

我能想到的一个解决方法是使用具有dos filemode选项的Samba.它完全符合您的要求(虽然名称不是很明显).当然,我远没有推荐samba超过sftp;桑巴是一场行政噩梦.

事实上,如果我是你,我会去寻找一个非常非常丑陋的黑客.编写一个脚本,扫描sftp-log文件中的set … modtime行,并为每个这样的行立即尝试运行touch –mtime.显然,脚本需要以root身份运行,因此请确保代码注入是安全的(例如文件名和包含’或’或;或$字符的日期).

[*]实际上,用户也拥有CAP_FOWNER(例如root),但这是系统范围的功能,因此不适用于您的情况.

猜你在找的Linux相关文章