所以我有一个 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
已经是递归的,因此您不必担心子目录,它们将被处理。唯一的问题是每分钟一次是否足够。