Linux에서 C를 사용하여 응용 프로그램을 작성하고 있습니다. 내 응용 프로그램에서는 일반 사용자 (비 루트 사용자)와 함께 시작 부분에서 몇 가지 작업을 수행해야하며 실행 중간에 루트 사용자와 함께 몇 가지 작업을 수행해야합니다.Linux에서 C를 사용하여 실행하는 동안 사용자를 전환하는 방법
그런데 일반 사용자의 구성을 수정할 수 없습니다. 그래서 sudoers에 일반 사용자를 추가 할 수 없습니다. OS 구성도 수정할 수 없습니다.
내 응용 프로그램이 실제로하는 일은 응용 프로그램을 실행하고 분석을 위해 출력을 얻는 것입니다.
일부 응용 프로그램은 root로 실행해야합니다. 다중 스레드를 사용하여 이러한 응용 프로그램의 출력을 병렬로 실행하고 분석 한 다음 각 응용 프로그램의 보고서를 보고서라는 단일 개체에 저장합니다. 서브 프로세스에서 execvp
을 사용하여 이러한 응용 프로그램을 호출합니다.
내 응용 프로그램의 주요 목적은 소프트웨어 테스팅을 자동화하는 것입니다. 그리고 대부분의 작업은 루트가 아닌 소프트웨어 소유자에서 실행해야합니다.
그래서, 문제는
- 는 어떻게 실행하는 동안 사용자를 전환 할 수있다?
- 어쨌든 이것을 1 개의 실행 파일 내에서 구현할 수 있습니까?
- POSIX API를 사용하는 것이 더 좋습니다.
- 일반 사용자로 내 응용 프로그램을 실행하고 응용 프로그램에 루트 암호를 제공하고 루트 암호를 사용하여 루트로 전환하십시오.
http://man7.org/linux/manage/man2/setuid.2.html – oakad
@oakad 고맙지 만 정상적인 사용자와 내 응용 프로그램을 시작한 다음 루트 암호를 사용하여 root로 전환 할 수 있습니까? –
아니요, 루트로 실행되는 별도의 도우미 프로세스를 생성 할 수 있지만 IPC를 통해 통신합니다. 이를 수행하는 한 가지 방법은 도우미에 setuid 비트를 설정하는 것입니다. 도우미를 가능한 한 최소화 시키십시오. 실제로 루트 액세스가 필요한 아주 기본적인 기능 만 제공하고 기본 앱은 나머지 작업을 수행하게하십시오. –