所以我有一个Windows SFTP服务器(SFTPSERVER),它接收文件(杜)。
然后我需要将这些文件推送到我的组织中其他地方的Linux服务器(ADauthentication到我的域)。
所以,我有点失望。
rsync -vzO --remove-source-files -e "ssh -i /cygdrive/c/cygwin/home/transferuser/privatekey.pri" /cygdrive/d/SFTPPATH/SFTPUSER/* [email protected]:/path/to/files
问题是我然后在transferuser拥有的Linux服务器上获取文件。 它们需要由目标服务器上的processuser和processgroup所有。 由于这些文件不规律地到达,需要在完成上传时被复制,所以目标服务器的cronjob对我来说是不可行的。 我已经尝试了脚本的chown,但用户推送文件(transferuser)似乎没有相关的权限。 鉴于我不想在目标服务器上给这个帐户sudo权限,我在这里有什么select?
在你的/etc/sudoers文件中,你可以授予一个非常具体的命令的权限。 在我的sudoers中,我有以下几点:
%student ALL = /bin/chgrp faculty *, /bin/chmod 2770 *
对于你想要的,这可能太笼统了。 你可能想要更类似于:
transferuser ALL = /bin/chown processuser:processgroup /path/to/files/*
你不是单方面的,只允许用户发布一个非常特定的命令。
您还可以为processuser提供这些权限,并在接收方处理的任何脚本中embedded命令。
这是一个完全不同的方法,不涉及sudo。 您可以在接收机器上每分钟运行一次cron作业,以检查新文件并根据需要显示它们。
在root的crontab中:
* * * * * find /path/to/files/ -user transferuser -exec chown processuser:processgroup {} \;
这将find目前由transferuser所拥有的任何文件,并将其chown ,并将忽略任何已经修复的文件。 由于find已经是recursion的,所以你不必担心子目录,它们将被处理。 唯一的问题是每分钟一次是否足够。