mac安全命令在守护进程运行时是否需要写权限?

时间:2014-10-20 21:08:17

标签: macos tomcat keychain launchd

我的任务是将Tomcat / Jenkins安装从已弃用的(现在已在Yosemite中删除)SystemStarter框架移至launchd。它作为一个" build"发布并运行良好。用户,除了一件事。我们构建过程的一部分涉及调用" security"命令操纵钥匙串。这失败如下:

security: cert import failed: write permissions error
security: problem decoding

如果我进入构建机器并从命令提示符启动Tomcat,通过bin / startup.sh,那么对security的调用不会抱怨。它只会在我通过launchd启动Tomcat时抱怨。我的plist看起来像这样:

<plist version="1.0">
<dict>
    <key>Label</key>
    <string>org.apache.tomcat</string>
    <key>UserName</key>
    <string>builduser</string>
    <key>WorkingDirectory</key>
    <string>/Users/builduser</string>
    <key>Program</key>
    <string>/Users/builduser/bin/tomcat.sh</string>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <true/>
    </dict>
    <key>EnvironmentVariables</key>
    <dict>
        <key>CATALINA_HOME</key>
        <string>/Users/builduser/Tomcat</string>
        <key>CATALINA_OPTS</key>
        <string>-Djava.awt.headless=true</string>
        <key>JAVA_OPTS</key>
        <string>-Xmx1024m -XX:MaxPermSize=512m</string>
    </dict>
</dict>
</plist>

plist位于/​​ Library / LaunchDaemons中,而tomcat.sh只是一个启动tomcat的包装器,然后等待进程死亡。

3 个答案:

答案 0 :(得分:3)

我自己也遇到过类似问题 - 我正在使用

解码.mobileprovision文件

cmd -D -i <path_to_file>

一切都在本地和SSH上运行,但是从Python应用程序执行的是security: cert import failed: write permissions error

我发现this walkaround似乎是同一个问题,他们最终创建了临时keychain并在security命令中使用它:

cmd -D -k <specific_keychain> -i <path_to_file>

我不能100%确定这是否是这个问题的正确解决方案,但它确实运作良好。

答案 1 :(得分:0)

我也遇到过这个问题,经过进一步的检查,我在机器上使用的钥匙串与通过ssh运行的钥匙串以及我的应用程序之间似乎有一个混合。

在尝试之前,请运行var fso, objet; fso = new ActiveXObject("Scripting.FileSystemObject"); function createNewFile(){ objet = fso.CreateTextFile("C:/monfichier.txt", true); fso=null; } 并检查您所期望的钥匙串是否正在使用。如果不是,您可以在Dariusz的答案中使用-k标志传递正确的一个。它也可能是钥匙串腐败问题,因此您可以尝试重置或修复钥匙串。

请记住security default-keychain~/Library/Keychains

答案 2 :(得分:0)

如果您的钥匙串具有配置管理功能(ansible / chef / etc) 另一个解决方案是重置钥匙串/删除“损坏的”钥匙串并使用新的钥匙串。