我的本地 Mac 上有一项服务,它提供了一个命令行实用程序,可以从终端使用它(该服务是 FileMaker Server,实用程序是fmsadmin
,但我认为这些事实并不相关)。安装服务器程序时,它会创建一个fmserver
用户供其操作,并且所有内容fmsadmin
似乎都在该用户下。服务器或实用程序创建的文件都归fmsadmin
该wheel
组所有,但我不知道他们为什么有该组,因为它们fmserver
似乎不是该组的成员。
我尝试编写的脚本将使用该fmsadmin
工具将所提供的文件之一备份到临时文件夹。我的工作就这么多。但后来我想将文件移动到当前登录用户控制的不同位置。
还有一个问题 22.fmsadmin
无法写入我想要文件所在的位置,并且我的帐户无法将文件移动到我想要的位置,因为它没有移动文件的权限。我可以在 Finder 中手动执行此操作,但只能输入我的帐户密码。
目前,我的(Python)脚本已将fmsadmin
文件备份到/tmp/
.备份虽然是单个文件,但实际上会创建一个文件夹结构,复制 FileMaker 用于托管文件的文件夹结构。因此备份命令会导致文件位于/tmp/Databases/Subfolder/database.fmp12
.以下是ls
每个结果的结果:
drwxrwxr-x 3 fmserver wheel 96 Nov 17 16:01 Databases/
drwxrwxr-x 3 fmserver wheel 96 Nov 17 16:01 Subfolder/
-rw-rw-r-- 1 fmserver wheel 954368 Nov 17 16:10 database.fmp12
我想将文件移动database.fmp12
到/Users/chuck/project-name/
drwxr-xr-x 8 chuck staff 256 Nov 17 16:09 project-name/
如何在(Python)脚本中自动执行此操作?目前,当我尝试将文件移动到我想要的位置或尝试将备份保存到我想要的位置时,我遇到了权限错误。我的目标不仅仅是在我的系统上解决这个问题,而是让脚本在另一个用户的系统上工作。
答案1
您可以做一些事情。最简单的事情可能就是添加chuck
到wheel
组中。有什么理由行不通吗?
或者,您可以尝试将所有者更改/tmp/Databases/
为该staff
组,然后设置该目录上的 setgid 位, IE:
sudo chown :staff '/tmp/Databases/'
sudo chmod g+s '/tmp/Databases/'
那么在该目录中创建的所有新文件都应归staff
.在任何一种情况下,您可能都希望确保用户fmserver
拥有正确的 umask,尽管根据您发布的内容,它看起来确实如此。查看这篇文章:
看起来你可以用来launchctl
在 OS X 上设置 umask:
launchctl config fmserver umask 002
还有使用访问控制列表的更高级选项。有关更多信息,请参阅以下 AskDifferent 帖子:
答案2
经过多方帮助后伊加尔,我找到了解决办法。我想要的最终结果是将用户写入的文件fmserver
放置在特定位置。fmserver
无法写入该文件夹,也chuck
无法将其从临时文件夹中移出。然而,这两个用户都是该组的成员staff
,因此编辑目标文件夹的权限chmod g+w project-folder
就是答案。