Pracuję nad aplikacją, która musi używać dd (robię to za pomocą skryptu powłoki w pakiecie aplikacji, który zbiera parametry z samej aplikacji, wykonuje pewne kontrole, a następnie uruchamia dd).NSTask, narzędzia linii poleceń i root
Aby wykonać tę operację, muszę wywołać dd z rootem, a ja już sprawdziłem kilka rozwiązań na StackOverflow. Najprostszy w implementacji wydawał mi się ten jeden problem: mój NSTask wykonuje pewne złożone operacje odczytu/zapisu (nieobecne w STPrivilegedTask) i nie musi być wszystkie uprzywilejowane.
Więc napisałem małe narzędzie pomocnicze wc, które wywołuje mój skrypt z poprawnymi parametrami z mojej aplikacji. Rozwiązaniem, o którym myślałem, jest użycie STPrivilegedTask do SUID po uruchomieniu mojego małego pomocnika, więc mogę uruchomić go (a więc mój skrypt i dd) z rootem, a wkrótce po udanym uruchomieniu ustawię narzędzie pomocnicze na non SUID (i robię to samo, jeśli jakikolwiek błąd na wyjściu z aplikacji, uruchomieniu aplikacji itp., aby był bezpieczniejszy).
Zaimplementowałem go i działa całkiem nieźle, może nie jest idealny, ale myślę, że bycie w tym pakiecie i praca z narzędziem pomocnika w SUID-ie tylko na potrzeby wystrzału są wystarczająco bezpieczne.
Jakieś myśli?
Dzięki!
Hi JSMP starałem system sandbox jak kiedyś w przeszłości, ale to nie to co muszę, wystarczy aby wykonać zadanie jako root (także dla innych poleceń, których potrzebuję, takich jak mount i umount itp.). Ktoś z jakąś sugestią dotyczącą mojego tymczasowego rozwiązania SUID helperTool? Możliwe dziury i alternatywy? – opoloko
Dodałem do tego, że zaimplementowałem w helperTool również kod, który zmienia się z suited na niestosowny na końcu własnego procesu. W ten sposób uzyskuje się SUID z aplikacji, uruchamia skrypt z poprawnymi parametrami i sprawia, że nie jest SUID tuż po automatycznym. Wydaje się, że został dodany krok bezpieczeństwa. – opoloko
Cześć opoloko, widzę, że chcesz tylko zachować bezpieczny plik. Z mojego punktu widzenia nadal jest tak, że użytkownik może zabić aplikację pozostawiając ją z SUID, zanim ją wyłączy. – jsmp