2012-10-11 3 views
4

OS X에서 launchd plist 파일과 함께 실행하고 싶은 bash 스크립트가 있습니다. 내가 가진 문제는 bash 스크립트에 sudo 명령이 포함되어 있다는 것입니다. 실행을 중지합니다.bash 스크립트에서 sudo 명령을 실행하고 launchd를 사용하여 실행합니다.

#!/bin/bash 
sudo /opt/local/bin/bindfs -u user1 /Library/WebServer/Documents/user1 /vhosts/user1/public_html 
sudo /opt/local/bin/bindfs -u user2 /Library/WebServer/Documents/user2 /vhosts/user2/public_html 

내 com.test.bindfs.plist 파일 (Lingon로 만든) 다음과 같습니다 : 그래서 예를 들어 내 bash는 스크립트는 다음과 같습니다 나는 있는지 확인했다

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>GroupName</key> 
    <string>admin</string> 
    <key>Label</key> 
    <string>com.jamespayne.bindfs</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/usr/bin/bindfs.sh</string> 
    </array> 
    <key>RunAtLoad</key> 
    <true/> 
</dict> 
</plist> 

스크립트는 시작 후 암호를 입력하여 실행하지만 시작시 실행되지 않습니다. launchd에의 PLIST가 실행되지만 다음과 같은 오류와 함께 제공 :

sudo는 : 어떤 청각 장애 선물을 더 askpass 프로그램은

누구가이 작업을 얻기 위해 또는 내가 왜 그 오류를 얻을 수 있습니다 방법을 알고 지정하지. 감사.

답변

1

sudo은 대화식 명령이므로 계속 진행하려면 사용자에게 암호를 입력해야합니다. sudo이 tty를 찾을 수 없다고 생각하면 오류가 발생하면서 종료됩니다.

원하는 명령은 대화 형이 아닌 su입니다. 유일한 예외는 루트로 실행해야합니다. 그러나 어쨌든 스크립트가 권한이있는 사용자에 의해 실행되는 경우에는 필요하지 않을 수도 있습니다.

왜 스크립트를 /usr/bin에 넣고 있습니까? 나쁜 생각; 대신 /usr/local/bin을 사용하십시오 (존재하는 경우 /usr/local/sbin).

+0

보안 팁을 보내 주셔서 감사합니다. 움직이는. – jpayne

4

속성 목록을 /Library/LaunchDaemons/으로 옮기고 스크립트에서 sudo 명령을 제거하면됩니다.

man launchd, man launchd.plistthis blog post을 참조하십시오. 당신은 당신이 할 수있는 sudo는/루트 권한을 가진 사용자 로그인 LaunchAgent를 실행하고자하는 구글에서 나온 것입니다 경우

+0

이것이 효과가 있습니다. 고맙습니다. – jpayne

+0

이것이 내가 끝내고 문제를 해결했지만, 원본 스크립트와 관련된 문제를 구체적으로 설명하고 설명하기 때문에 트로이안 호의 답변을 받아 들여야합니다. 나는 관련 대안이기 때문에 어쨌든 귀하의 답변에 투표했습니다. – jpayne

1

다음을 실행하면 모든 사용자 또는 ~/Library/LaunchAgents 실행하면

  • /Library/LaunchAgents에 PLIST를 넣어 단지 하나의 사용자에 대한
  • 첫 번째 ProgramArgumentssudo 수 있고, 당신이
  • 을 확대 할 launchctl을 허용하는 /etc/sudoers.d 파일에 NOPASSWORD 구성을 설정 실행 명령 수 나머지 대화 형 암호 프롬프트가없는 특정 명령.

자세한 단계별 연습을 보려면 this answer을 참조하십시오.

관련 문제