以不同用户身份写入 Samba 共享?

以不同用户身份写入 Samba 共享?

我的 NAS 驱动器装载器上有一个 Samba 共享,如下所示:

mount -t smbfs -o username=backup,password=backups_password //sharebox/SVNBackup /mnt/SVNBackup

然后我尝试运行:

sudo svnadmin dump /usr/local/svn/repos/testrepo > /mnt/SVNBackup/test1.svn

但我得到:

bash:/mnt/SVNBackup/test1.svn:权限被拒绝

备份位置设置为仅接受来自用户“备份”(本地系统上不存在)的访问

我该如何解决这个问题?谢谢

答案1

sudo command > outputfile并没有像你想象的那样。具体来说,输出文件是用你的权限,而不是 sudo 用户(在本例中为 root)的权限。这就是为什么当您成为 root 并运行命令时它会起作用的原因 - 因为重定向确实以 root 身份运行,而 root 可以写入 /mnt/SVNBackup 。sudo 这样做是必要且明智的。

找到以 root 身份运行整个命令的方法;将其放入 root 的 cron 中,或者编写一行 shell 脚本并调用使用 sudo,或者找到另一个适合你的修复方法。在有限(且有点愚蠢)的情况下,

sudo svnadmin dump /usr/local/svn/repos/testrepo | sudo tee /mnt/SVNBackup/test1.svn

应该产生输出两个都在标准输出上在文件中/mnt/SVNBackup/test1.svn。虽然这看起来很奇怪,但如果你真的不想要输出,最简单的方法可能是

sudo svnadmin dump /usr/local/svn/repos/testrepo | sudo tee /mnt/SVNBackup/test1.svn > /dev/null

如果原始 svnadmin 命令在 STDERR 上生成了内容,并且你也希望将其显示在日志文件中,请尝试

sudo svnadmin dump /usr/local/svn/repos/testrepo 2>&1 | sudo tee /mnt/SVNBackup/test1.svn > /dev/null

请注意,这2>&1是一个 bash 公式,如果您的 shell 是 csh 变体,或者是其他不同的东西,那么您将需要找到合适的东西。

相关内容