通过Rsync将文件从Windows主机复制到Linux主机,然后设置权限

通过Rsync将文件从Windows主机复制到Linux主机,然后设置权限

所以我有一个 Windows SFTP 服务器(SFTPSERVER),它接收文件(呃)。

然后,我需要将这些文件推送到我组织其他地方的 Linux 服务器(通过 AD 验证到我的域)。

我已经把这一点记下来了。

rsync -vzO --remove-source-files -e "ssh -i /cygdrive/c/cygwin/home/transferuser/privatekey.pri" /cygdrive/d/SFTPPATH/SFTPUSER/* [email protected]:/path/to/files

问题是我随后在 Linux 服务器上获取了 transferuser 拥有的文件。它们需要由目标服务器上的 processuser 和 processgroup 拥有。由于这些文件不定期到达,并且需要在上传完成后进行复制,因此来自目标服务器的 cronjob 对我来说不可行。我尝试编写 chown 脚本,但推送文件的用户(transferuser)似乎没有相关权限。鉴于我不想在目标服务器上授予此帐户 sudo 权限,我在这里有什么选择?

答案1

在您的/etc/sudoers文件中,您可以为非常具体的命令授予权限。在我的 sudoers 中,我有以下内容:

%student ALL = /bin/chgrp faculty *, /bin/chmod 2770 *

这可能太笼统了,不符合你的要求。你可能更想要类似这样的内容:

transferuser ALL = /bin/chown processuser:processgroup /path/to/files/*

您并没有给予全权委托——用户只被允许发出一类非常特定的命令。

您还可以授予 processuser 这些权限,并将命令嵌入到接收端执行处理的任何脚本中。

这是一个完全不同的方法,不涉及 sudo。您可以在接收机器上每分钟运行一次 cron 作业来检查新文件并根据需要对其进行 chown。

在root的crontab中:

* * * * * find /path/to/files/ -user transferuser -exec chown processuser:processgroup {} \;

transferuser这将查找当前由它们拥有的任何文件chown,并忽略任何已修复的文件。由于find已经是递归的,因此您不必担心子目录,它们将被处理。唯一的问题是每分钟一次是否足够。

相关内容