프로세스를 시작하고 중지하는 간단한 init.d 스크립트가 있습니다. 나는 init.d 루트를 호출하지만 그것이 제어하는 프로세스가 특정 사용자로 실행되기를 원합니다.
온라인에서 가장 일반적인 조언은 다음과 같습니다.
su myuser -c "my_process args"
그러나 이는 두 번째 프로세스 공간, 새 셸 등을 생성하며 다소 우아하지 않습니다.
나는 쉘을 대체하기 때문에 사용하는 것을 선호 exec()
하지만 사용자를 인수로 요구하지 않습니다. 이 setuid()
경우 먼저 사용해야합니까? GID를 설정하는 것은 어떻습니까? 주의가 필요한 문제가 있나요?
또는 init.d를 다른 사용자로 실행하는 배포판별 솔루션이 있습니까? 내 환경은 Centos 6.4입니다.
답변1
배포판에 따라 다르지만 RHEL 기반 배포판은 파생된 Bash 함수를 사용하며, /etc/rc.d/init.d/functions
이 함수 자체는 명령을 둘러싼 래퍼 daemon
일 뿐입니다 . runuser
소스 파일에서 볼 수 있듯이 su
PAM을 거치지 않고(아마도 어떤 경우에는 닭고기와 달걀 문제를 피하기 위해) 대부분의 경우와 기능적으로 동일합니다.
이것이 실제로 귀하의 이의에 대한 답변은 아니지만 이것이 바로 서비스의 역할입니다. 당신이 원하는 깔끔함과 전체적인 논리적 일관성은 다음과 같은 것에 대한 동기의 일부입니다.systemd
답변2
su someuser -c ...
필요한 것은 사용 뿐입니다. 우선, setuid()
쉘 코드에서 사용할 수 없는 시스템 호출이 있습니다. 필요 이상으로 이것을 더 어렵게 만들지 마십시오.