在MacOS X上创建用于运行守护程序的用户?

And*_*e M 8 macos daemon user-accounts server

从命令行在MacOS X上创建用户的正确方法是什么,该命令行仅用于运行服务器应用程序?例如,Apache httpd已经有'_www'用户,但对于新应用程序,我希望它使用自己的帐户.

And*_*e M 12

没有"adduser"命令.Mac方法是使用dscl命令,它是"目录服务命令行实用程序".目录服务与LDAP概念类似,但它是一种不同的解决方案.

下面的示例将使用"mydaemon"作为预期帐户,但通常您将使用与守护程序应用程序名称匹配的值.

所有守护程序用户都以下划线为前缀,例如_www.

列出现有条目的属性:

   sudo dscl . -read /Users/_www
Run Code Online (Sandbox Code Playgroud)

在创建用户之前,创建一个组,选择一个未使用的组ID(这里我们选择300):

   sudo dscl . -create /Groups/_mydaemon
   sudo dscl . -create /Groups/_mydaemon PrimaryGroupID 300
Run Code Online (Sandbox Code Playgroud)

完成后,我们创建一个新用户(我们使用与我们为该组所做的相同的id,不会使用shell:

   sudo dscl . -create /Users/_mydaemon UniqueID 300
   sudo dscl . -create /Users/_mydaemon PrimaryGroupID 300
   sudo dscl . -create /Users/_mydaemon UserShell /usr/bin/false
Run Code Online (Sandbox Code Playgroud)

以上内容基于阅读各种信息来源并自行验证过程.我发现有用的一个参考是:

http://minecraft.gamepedia.com/Tutorials/Create_a_Mac_OS_X_startup_daemon

注意,还有dscl的GUI版本(基于MacOS X 10.10的位置):

/ System/Library/CoreServices/Applications/Directory\Utility.app/

  • [@sphinges](/sf/users/119701221/)建议的命令是错误的.组ID不一定按升序列出,所以最后一个,但不一定是最高的返回```dscacheutil -q group | grep gid | awk'{print $ 2}'| sort -n | tail -n 1```应该可以更好地工作,虽然我更喜欢看到最后15个左右,因为260以上它们往往相当稀疏```dscacheutil -q group | grep gid | awk'{print $ 2}'| sort -n | 尾巴-n 15``` (3认同)
  • 我从@Scott 的建议中发现了一些重复项。另外,我喜欢查看与 id 对应的名称。这会生成一条包含该信息的漂亮行:`dscacheutil -q group | awk 'BEGIN { ORS="" } /name/ { print $2 " " } /gid/ { print $2 "\n" }' | 排序-unk 2`。传递给“tail”以剪辑到最后一行。 (2认同)