W zależności od przypadku zastosowania, może być szczęśliwy tylko zastępując inicjalizacji authorizationRef
w STPrivilegedTask -launch
coś jak ...
// create authorization reference
static AuthorizationRef authorizationRef = NULL;
@synchronized(self) {
if (!authorizationRef) {
err = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef);
if (err != errAuthorizationSuccess) { return err; }
}
}
... a następnie usunięcie AuthorizationFree
:
// free the auth ref
AuthorizationFree(authorizationRef, kAuthorizationFlagDefaults);
Umożliwia to uruchamianie zadań bez pytania o hasło dla five minutes.
Jeśli potrzebujesz większej kontroli, utwórz Command Line Tool
w Xcode
, która wykona żądane polecenia, używając normalnych połączeń NSTask
.
Po uruchomieniu narzędzia za pomocą STPrivilegedTask
lub AuthorizationExecuteWithPrivileges
, polecenia NSTask
zostanie uruchomiony z uprawnieniami administratora (euid = 0
).
SMJobBless to sposób na uruchomienie narzędzia do przodu - zwłaszcza jeśli trzeba regularnie przeprowadzać uprzywilejowane operacje, nie pytając o hasło.
To jest much harder, aby to zrobić poprawnie przy użyciu AuthorizationExecuteWithPrivileges
.
Uwagi na SMJobBless
SMJobBless
monituje o hasło & instaluje pomocnika.
Gdy rozmawiasz z pomocnikiem, nie pojawi się monit o podanie hasła.
Apple's own example na tym jest dość zawiłe, ale są tam other examples.
Niektóre strony sugerują, że tylko twoja aplikacja może rozmawiać ze swoim pomocnikiem. Apple nigdzie tego nie mówi. Po zainstalowaniu pomocnika jestem całkiem pewna, anyone can talk to it.
Prawdopodobnie mógłbyś wymusić wymóg podpisywania kodu (PROPERTY LISTS
sekcja this document) sam, ale nie mogłem znaleźć żadnych przykładów, które to robią.
Kilka lat temu użyłem AuthorizationExecuteWithPrivileges
do zainstalowania demona launchd
, ale muszę jeszcze zaplątać się w SMJobBless
.
Dzięki stary. możesz mi trochę pomóc: "Jeśli potrzebujesz większej kontroli, utwórz w Xcode narzędzie wiersza poleceń, które wykona żądane polecenia, używając normalnych połączeń NSTask.". dowolna próbka z pojedynczą lub wieloma liniami poleceń –
@ManiKhalil Cóż, jakie rodzaje poleceń uruchamiasz? –
Chcę uruchomić niektóre komendy bin/sh. aby uzyskać dostęp do auth poziomu root i zapisać niektóre pliki w katalogu głównym i załadować go stamtąd, gdy tylko uruchomi się aplikacja. –