root権限を持つコマンドを実行する必要のあるソフトウェアを作成しています。Macアプリケーションでswiftを使用して管理権限を取得する
今私はパスワードを一度尋ねてパスワードを保存してから、と一緒に引数としてNSAppleScript
にパスワードを入力することでこれをやります。
これは明らかに、誰かが自分のパスワードにアクセスできるようになると、ユーザーにとっては本当に安全ではありません。
私は一週間のうちに良いところを探していて、解決策を見つけることができません。
SMJobBlessより高い特権でアプリケーションをインストールできるようです。
私はアプリの例に従っており、SMJobBlessUtilスクリプトからエラーが発生しています。
SMJobBlessUtil.py: tool designated requirement (identifier "com.domain.AppName.SampleService" and anchor apple generic and certificate leaf[subject.CN] = "Mac Developer: firstName lastName (XXXXXXXXXX)" and certificate 1[field.1.2.840.113635.100.6.2.1] /* exists */) doesn't match entry in 'SMPrivilegedExecutables' (anchor apple generic and identifier "com.domain.AppName.SampleService" and (certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.CN] = "Mac Developer: firstName lastName (XXXXXXXXXX)")
は明らかに、何かが間違っている:ここでは
はエラーです。ここでは、それぞれのプレースメントリストは、私はそれのように at this stackoverflow postや他の多くのを見てきました<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<dict/>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleGetInfoString</key>
<dict/>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Away</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0.99</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>9</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>LSUIElement</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2016 firstName lastName. All rights reserved.</string>
<key>NSMainStoryboardFile</key>
<string>Main</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>SMPrivilegedExecutables</key>
<dict>
<key>com.domain.AppName.SampleService</key>
<string>anchor apple generic and identifier "com.domain.AppName.SampleService" and (certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.CN] = "Mac Developer: firstName lastName (XXXXXXXXXX)"</string>
</dict>
</dict>
</plist>
サービス情報のplist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>com.domain.AppName.SampleService</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>SampleService</string>
<key>CFBundleVersion</key>
<string>6</string>
<key>SMAuthorizedClients</key>
<array>
<string>anchor apple generic and identifier "com.domain.AppName" and (certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = xxxxxxxxxx)</string>
</array>
</dict>
</plist>
アプリ情報plistのです。私が理解しているように、私は自分のplistsを正しくセットアップしました。私は間違って何をしていますか?
私は賞金を保持するつもりはありませんでした。 Redditのあなたの投稿の問題は、それが文字列だということです。私は本当に順列をランダムに見つけました。しかし、あなたは答えが十分です。私は元の質問から必要とされる段階的な変更を組み込むために質問を編集することをお勧めします。私は数日間このことに固執していましたが、リンゴはずっと長いストリングを持っていますが、不完全なアイデンティティラインがどれだけ十分であるかはまだ分かりません。 – Cripto
さて、私は愚か者を感じません。繰り返しますが、報酬は必要ではありませんでしたが、非常に感謝しています...私はあなたが求めた詳細と同様に全体的な根拠を説明しようと私の答えを更新しました。それがそれをカバーしなかったならば、躊躇しないでください。 –