누군가를 위해 더러운 리눅스 해킹을해야만했기 때문에 루트가 아닌 사용자 인 동안 cupsenable printername
쉘 명령으로 프린터를 시작할 수있었습니다. 나는 그들이 cupsenable
문법의 전체를 루트로서 사용할 수 있기를 원하지 않았기 때문에, 나는 방금 argv[1]
에 입력을 위생 처리하고 system("cupsenable sanitizedprintername")
을 호출하는 C 래퍼를 썼다.system()으로 관리 프로그램을 호출하는 setuid-root C 프로그램에서 setuid (0)가 필요한 이유는 무엇입니까?
나는 setuid 루트 프로그램을 만들었지 만, 심지어 cupsenable
은 "permission denied"로 실패했습니다. 그런 다음 system()
전에 setuid(0)
전화를 걸었습니다.
사용자가 프린터를 제어 할 수있는 더 나은 방법이 있다는 문제는 무시하십시오. 아마 더 좋은 방법이있을 것입니다. 내가 흥미를 느낀 이유는 chmod u+s
대 setuid(0)
대 system()
의 복잡한 점입니다. 왜 그렇게 행동 했나요? man system
에서
우와. 글쎄, 내가 더러 웠다고 했어. 내가 한 일은 system()에 의해 산란 된 bash 프로세스를 설득하여 실제로, 정말로, 솔직히 뿌리를 내리고, 하나님 께 맹세 한 것 같습니다. 일부 리팩토링이 순서대로있는 것 같습니다. – JCCyC