Piszę regularnie skompilowaną aplikację, która musi utworzyć specjalny plik i zapisać w nim magiczne ciasteczko. Nie mogę zapisać pliku bezpośrednio z aplikacji, model bezpieczeństwa systemu wymaga ode mnie uruchomienia narzędzia pomocniczego o podwyższonych uprawnieniach. Mogę podać dowolną liczbę argumentów do narzędzia pomocnika. Teraz chciałbym wybrać bardzo proste polecenie systemowe, które posłuży jako narzędzie pomocnicze i utworzy plik dla mnie. Coś takiego:
/bin/sh -c "/bin/echo -n 'magic' > /some/where/file"
Simple touch
nie tnie go, ponieważ muszę zapisać plik cookie w pliku, prosty echo
bez opakowania powłoki nie działa, ponieważ wymaga przekierowania, aby zapisać plik. Nie czuję się dobrze wzywając powłokę z uprawnieniami roota, aby wykonać tak trywialne zadanie. Czy jest jakieś naprawdę proste, ograniczone polecenie systemowe, które mógłbym wywołać, aby napisać plik dla mnie?
tee
. Dzięki!
/bin/sh -c 'echo magic > /path/to/magic/file'
nie działa? Byłby to plik wykonywalny i dwa argumenty. Będziesz musiał zbudować ostatni argument jako ciąg znaków (z sprintf lub odpowiednikiem). Czy istnieje powód, dla którego to nie działałoby dla Ciebie? Z twojego pytania wynika, że doCommandAsRoot () nie pobiera danych wejściowych do strumienia do polecenia, prawda? W przeciwnym razie możesz zastąpić ostatni argument'cat > /path/to/magic/file'
i przekazać dane zamiast budować ciąg.