시작 : 일반 사용자가 내 사용자 지정 서비스를 중지하고 시작하도록 허용


16

upstart를 사용하여 부팅시 웹 서버 응용 프로그램을 시작했습니다. 이것은 시작 스크립트입니다.

# web app node upstart file at /etc/init/webapp.conf

description "web application"

start on started mongodb
stop on runlevel [06]

respawn
respawn limit 10 100

env NODE_ENV=production

pre-start script
    ulimit -n 2048
end script

exec start-stop-daemon --start -c mainuser --exec /usr/bin/make -- -C /home/mainuser/app start-prod

이것은 Ubuntu 서버 10.04 LTS에서 완벽하게 작동하며 매우 기쁩니다.

그러나 SSH를 사용하여 로그인 한 배포 쉘 스크립트가 있는데 mainuser(이는 sudoer가 아닙니다) 작업 디렉토리를 최신 배치 버전으로 업데이트합니다.

여기서 문제는 응용 프로그램이 새 소스 파일을로드 할 수 있도록 서비스를 다시 시작해야한다는 것입니다. 그러나 mainuser...

mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found

... 중지하려고 할 때. 나는 실행해야 sudo stop webapp하지만 sudoer가 아니기 때문에이 사용자는이 작업을 수행 할 수 없습니다. 보안상의 이유로 나는 그가 sudoer가되기를 원하지 않으며 sudo 비밀번호를 삽입하고 싶지 않습니다.

그래서 내가 어떻게 허용 할 mainuser실행 stop webapp하고 start webapp?


1
사용자를 sudoers에 추가하면 어떤 보안 문제가 걱정됩니까? 사용자에게 특정 명령 만 허용하고 더 이상 허용하지 않는 규칙을 작성할 수 있으며 nopasswd 옵션을 포함시켜 암호 프롬프트를 멀리 할 수도 있습니다. 특정 오류에 관해서는 시작 / 중지가 / sbin에 있기 때문에 보통 일반 사용자 경로의 일부가 아닙니다. 따라서 "/ sbin / stop"을 수행하거나 경로에 sbin을 추가 할 수 있습니다. 루트가 필요한 시작 / 중지 스크립트에 다른 항목이없는 한 작동 할 수 있습니다.
데릭 Pressnall

@DerekPressnall, 고마워하지만 실행 /sbin/stop webapp하면 stop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory. mainuser이 명령 만 실행하려면 어떻게해야 합니까?
Tom

오류는이 사용자에게 관리자 권한이 없기 때문에 발생합니다.
Tom

답변:


31

sudo는 매우 구성이 가능하므로이 사용자는 암호를 묻지 않고 제한된 명령 세트를 실행할 수 있습니다. 다음 줄은 /etc/sudoers원하는 것을 수행해야합니다.

mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp

1
정말 고마워요 이 모든 것을 실제로 배웠습니까 man sudoers? 파싱하기가 매우 어렵다는 것을 알았습니다.
Tom

1
아니요, 전에이 작업을 수행했습니다. 그것은 해독하기 가장 쉬운 맨 페이지가 아닙니다 :-)
mgorven

로 실패합니다 Unable to connect to system bus. 더보기 : sudo 이외 그룹이 Upstart 작업을 제어하도록 허용
ciastek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.