在 sftp 上禁止 -p

dmo*_*ati 3 ssh sftp timestamp

我们有一个服务器充当(外部)用户的“保管箱”,可以通过 sftp/ssh 向我们上传数据。我们需要处理这些文件(gpg 解密、解压缩等)。过去,我们只是简单地处理每个用户主目录中的每个文件,而不管我们是否已经处理过它。结果证明这很浪费。我更新(重写)我们的处理脚本以依赖如下机制:

FILESTOPROCESS=$(find -H /home/$CUST -type f -newer /home/$CUST/marker-file)
Run Code Online (Sandbox Code Playgroud)

这与 a 相结合,touch /home/$CUST/marker-file效果很好,我们的工作量大大减少了。

大约一天前,我们的 SSH 服务器出现配置问题,暂时禁止用户向我们上传文件。当脚本再次运行时,它忽略了用户最初未能上传的文件,但随后通过带有“-p”选项的 sftp/ssh 上传,以保留时间戳。这将文件的 c/a/mtimes 设置为比标记文件早一天左右,因此它随后被忽略。

我想禁止用户使用“-p”上传,以便使用当前时间戳创建文件。

我可以在 sshd_config 中执行此操作吗?

Den*_*ker 6

不,您不能在配置中执行此操作。通过sftp-server.c查看,我发现禁用此功能的唯一方法是以sftp-server只读模式运行,如果您想允许上传,这是非常无用的:)

如果您不介意维护自己的 openssh 包,则可以在编译之前删除对utimes/ futimesin的调用sftp-server.c。或者,您可以使用LD_PRELOAD带有这些函数的 noop 实现的库。