当启动代理运行我的.plist文件时,为什么会出现“文件的可疑所有权”错误?


54

我有一个配置为运行.plist文件的启动代理,例如:/Library/LaunchAgent/foo.plist。在此.plist内,它设置为在LoginWindow和期间运行Aqua

当我尝试启动计算机并进入登录屏幕时,此plist应该运行,但会出现以下错误(在控制台中):

launchctl:记录中的可疑所有权(跳过):/Library/LaunchAgents/foo.plist

当我尝试登录非管理员帐户时,会给出完全相同的错误消息。当我尝试使用管理员帐户登录时,它可以正常工作。

老实说,我对Mac OS X的特权和权限了解不多。

要创建文件,我emacs使用sudoadmin帐户(例如,su由于其他帐户没有sudo特权而使用命令)在中打开了文件,然后将其保存。

我需要使用哪个帐户来创建文件以便所有用户都能使用?
我需要使用sudo命令吗?
我是否需要更改文件权限(例如使用chmod)?
有没有简单的方法来获取现有文件并更改其所有权,而不必重新创建该文件?
有人可以解释为什么会发生此错误吗?


ls -l为/Library/LaunchAgent/foo.plist提供了什么
user151019 2010年

1
@Mark:它提供以下内容:-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
有意义的2010年

也可以强制加载(-F)。
kenorb 2015年

Answers:


51

如果plist由root拥有,并且可由root以外的用户写,则这是一个安全问题。

您可以使用来将所有者更改为root sudo chown root <filename>,并使用sudo chmod 644 <filename>(将4进行读取访问,将2进行写访问,将1进行执行访问,加起来更改为权限。第一个数字用于所有者,第二个数字用于组,第三个数字用于组)。大家。)


这可行。我只是对为什么必须将所有者更改为root感到困惑。root是用于LaunchAgents的用户吗?
有意义的

1
是的,我想是这样。
Michiel de Mare 2010年

1
我知道这是一篇较旧的文章,但这是一个很好的答案!我更改了/system/library/launchdaemons/com.apple.mdnsresponder的权限,以尝试苹果推荐的修复程序,但随后尝试加载该修复程序时,我会遇到上述错误。如上所述,更改所有者和权限是恢复我的Internet连接的唯一方法。谢谢!

现在面对同样的问题并解决了。我认为文件的所有者会大量调用launchctl。我以普通用户身份创建了文件,并使用执行sudo。因此,错误。因为root不是文件的所有者,所以sudo不需要。我没有跑了sudo,但效果很好。
Bibhas

14

launchctl(1)联机帮助页对子load命令的描述中:

请注意,每个用户的配置文件(LaunchAgents)必须由加载它们的用户拥有。所有系统范围的守护程序(LaunchDaemons)必须由root拥有。配置文件不能为组或世界可写的。出于安全原因,这些限制是适当的,因为允许对已启动的配置文件进行写操作就可以指定要启动的可执行文件。

launchctl有几个“可疑……”消息。所述的launchd为10.6.7(例如)码在其三个这样的消息launchctl.c(见函数path_goodness_check)。

  1. Dubious permissions on file (skipping): <pathname>
  2. Dubious ownership on file (skipping): <pathname>
  3. Dubious path. Not a regular file or directory (skipping): <pathname>

为了避免出现这些消息,路径名必须是(#3)常规文件或目录1(或指向该文件的目录的符号链接),该文件或目录必须是(#1)由root或调用用户拥有,而(#2)则不是“ group”或“ other”可写的(即chmod go-w)。

1 没有命名管道,块/字符特殊设备节点,本地域套接字等。


您的文件可能归管理员用户所有,因为您说您以该用户身份登录时未收到消息(在这种情况下,路径名归调用用户所有)。
要使路径名对其他用户有效,它应该归root拥有。

要安排此操作,请执行以下操作:

sudo chown root /Library/LaunchAgent/foo.plist

1

感谢您的回答(将所有者更改为root),这就是我所需要的。

为了使它不仅仅是一个“我也是”的帖子……我是通过一个令人费解的路径到达这里的:我收到一个Launchdaemon的“此API只能由在Aqua会话中运行的进程使用的API”错误。寻找答案后,我得到了苹果关于守护程序和代理程序的技术说明该说明解释了如何解决“ Aqua session”错误,但那给我带来了“可疑所有权”问题。这就是我到达这里的方式,我的最后一个问题得到解决。

也许将所有这些内容添加到此讨论中将导致某些搜索引擎将该页面链接到一个先驱性问题,从而节省一些未来的冒险家时间。


注意,这应该是评论而不是答案。
studgeek

1
我会发表评论,但我的声誉不高。(难道不是可以低声望回答但没有评论吗?)
Matt Strange

-2

对于用户拥有的〜/ Library / LaunchAgent中的文件,而不是root拥有的文件,请不要更改sudo,如果要这样做,则必须更改所有权,因为您是从root用户加载文件的


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.