리디렉션하지 않고 파일에 쓰시겠습니까?

리디렉션하지 않고 파일에 쓰시겠습니까?

저는 일반적으로 컴파일된 애플리케이션을 작성 중이며 특수 파일을 생성하고 그 안에 매직 쿠키를 작성해야 합니다. 응용 프로그램에서 직접 파일에 쓸 수 없습니다. 시스템 보안 모델에서는 이 작업을 수행하려면 높은 권한으로 도우미 도구를 실행해야 합니다. 도우미 도구에 원하는 만큼의 매개변수를 제공할 수 있습니다. 이제 도우미 도구로 몇 가지 매우 간단한 시스템 명령을 선택하고 파일을 생성하고 싶습니다. 이 같은:

/bin/sh -c "/bin/echo -n 'magic' > /some/where/file"

파일에 기록하려면 쿠키가 필요하기 때문에 Simple은 touch잘리지 않습니다. echo파일을 쓰려면 리디렉션이 필요하기 때문에 Shell Wrapper가 없는 Simple은 작동하지 않습니다. 저는 이러한 사소한 작업을 완료하기 위해 루트 권한을 사용하여 셸을 호출하는 데 익숙하지 않습니다. 파일을 작성하는 매우 간단하고 제한된 시스템 명령이 있습니까?

답변1

출력 리디렉션도 없고 파이프도 없지만 "이 문자열"은 다음과 같습니다.

dd of=/some/where/file <<<'magic'

답변2

이건 어때:

echo -n 'magic' | sudo tee /some/where/file > /dev/null

물론 리디렉션도 있지만 tee만 쉘이 아닌 루트로 실행되고 있습니다. 에도 적용됩니다 dd of=....

답변3

또 다른 고려 사항은 다른 사용자가 관찰할 수 있기 때문에 매직 쿠키의 값을 명령줄에 입력하고 싶지 않다는 것입니다. 프로그램이 임시적이라도(명령줄 문자열을 0으로 만드는 프로그램 포함) 공격의 기회가 있습니다. 따라서 이론적으로는 다음과 같습니다.

writestringtofile 'magic' /some/where/file

위험한 접근 방식입니다. 따라서 @stribika의 제안에 동의합니다. 값을 임시 파일에 쓰고 해당 위치에 복사합니다. 임시 파일( mkstemp())을 생성하려면 안전한 기능을 사용하여 경쟁 조건이 발생하지 않도록 하세요 .

답변4

이제 필요한 작업을 정확하게 수행하는 간단한 프로그램이 있습니다.

https://github.com/rewallf/write_stdin_to_file

관련 정보