루트 대신 사용자로 rc.local에서 스크립트 실행


26

서버를 시작할 때마다 스크립트를 실행하고 싶습니다. 문제는 스크립트를 실행하려면 특정 사용자가 필요하다는 것입니다. 루트로 루트로 시도하면 특정 패키지 (예 : 루비)를 찾을 수 없습니다.

xxx user01로 변경하려고합니다.

sudo su user01
/etc/init.d/script start

그러나 이것은 작동하지 않습니다.


init 스크립트를 게시 하시겠습니까?
quanta

로그가 있습니까?
Dom

왜 단순히 surc 스크립트에서 사용하지 않습니까?
Mat

답변:


30

sudo su user01스크립트에서 실행 한다고해서 다음 명령이 결과 쉘로 전송되는 것은 아닙니다. 실제로 이것은 새로운 쉘이 user01로 생성되어 종료되지 않음을 의미합니다!

두가지:

  • -c 'command...'처럼 인수를 su 에 전달하여 다른 사용자로 명령을 실행할 수 있습니다 su user01 -c '/etc/init.d/script start'.
  • rc.local에서 /etc/init.d를 사용하는 서비스를 시작하는 것은 올바른 일이 아닙니다. 당신은 같은 배포 도구를 사용하여 시작시 서비스를 활성화 사용할 chkconfig또는 update-rc.d. 또한 /etc/init.d에서로 시작해서는 안되는 작업을 원하지 않습니다 root. 작업 자체는 다른 사용자 계정으로 자유롭게 포크 할 수 있지만 루트가 호출해야합니다.


4

다음과 같이 sudo를 통해 명령을 실행할 수 있습니다.

sudo -H -u user01 /etc/init.d/script start

-H는 HOME 환경 변수를 사용자 환경 변수로 설정합니다.

-u는 실행할 사용자 이름을 지정합니다.


0

sudoers에서 requiretty (사용자가 로그인해야 함) 때문에 sudo로 해당 스크립트를 실행할 수 없습니다. 다소 위험 할 수있는 비활성화를 원할 수 있습니다.

또한 runsuid라는 다소 오래된 도구가 있습니다. http://freecode.com/projects/runsuid

HTH

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.