답변:
initctl --version
을 위해 현재 버전의 시작 버전을 찾으십시오.
프리 노드에서 #upstart 채널을 물어 보면 공식적으로 다음과 같은 문제가 발생합니다.
Upstart의 향후 릴리스는이를 기본적으로 지원하지만 현재로서는 다음과 같은 것을 사용할 수 있습니다.
exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]
su
것을 의미합니다 . expect fork
expect daemon
exec su -s /bin/sh -c 'HOME=/foo/bar exec "$0" "$@" &>/var/log/foobar.log' username -- /path/to/command [parameters...]
start-stop-daemon은 어떻습니까?
exec start-stop-daemon --start --chuid daemonuser --exec /bin/server_cmd
에서 갑자기 출세 한 요리 책 :
데비안 및 우분투 시스템에 권장되는 방법은 도우미 유틸리티를 사용하는 것
start-stop-daemon
입니다. […]start-stop-daemon
는 PAM ( "Pluggable Authentication Module") 제한을 시작 프로세스에 적용하지 않습니다.
참고 : start-stop-daemon
RHEL에서는 지원되지 않습니다.
여러 가지 의미론, 특히 그룹 멤버쉽과 관련된 의미가 다른 여러 가지 방법이 있습니다.
setuidgid
지정한 그룹에 넣습니다.
setuidgid
는 해당 그룹 에만 사용자를 배치 하므로 회원 인 다른 그룹에 속하는 파일에 액세스 할 수 없습니다.setuidgid
데몬 툴즈 - 앙코르에서 와 setuidgid
요기 도구 세트에서 둘 모두가 -s
(일명 --supplementary
의 모두 해당 그룹에 투입하고, 또한 넣을 것) 옵션을 추가 그룹 사용자가 지정하는 사용자를.사용 newgrp
이되고 나면 덜 권한이있는 사용자는 그룹 셋에 하나의 그룹을 추가 할뿐만 아니라, 스크립트 내에서 사용하기가 까다로운하고, 새로운 서브 쉘을 생성합니다.
start-stop-daemon
그룹 멤버십을 유지하고 setuid / setgid 이상의 기능을 수행합니다.
chpst -u username:group1:group2:group3... commandname
어떤 그룹 멤버쉽을 채택할지 정확히 지정할 수 있지만 ( 우분투에서는 ) runit
패키지 와 함께 제공 됩니다 upstart
.
su -c commandname username
는 사용자 이름의 모든 그룹 멤버쉽을 선택합니다 sudo -u username commandname
. 따라서 가장 놀라운 방법 일 것입니다.
setuidgid
패키지에서 사용하십시오 daemontools
.
Amazon EC2의 Ubuntu 10.10 인스턴스에서이 start-stop-daemon
명령을 사용하는 것이 좋습니다 .
나는 또한 다른 스타트 업 스탠자 들과 싸웠다 . virtualenv
실행 된 프로그램에 특정 매개 변수가 있는 파이썬 응용 프로그램을 호출하고 있습니다.
다음은 나를 위해 일한 것입니다.
script
export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/
exec start-stop-daemon --start --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 &
end script
는 PYTHONPATH
에 소스에서 설치 한 일부 패키지를 얻는 것입니다 파이썬 이 신출내기 작업이 실행될 때 모듈 경로. chdir
스탠자는 작동하지 않는 것처럼 보였으 므로 모든 것을 절대 경로 로 수행해야했습니다.
CentOS 6을 사용하고 있었고, 권장되는 핵 (Upstart 0.6.5의 경우)이 작동하지 않으며 관련된 포크 수 (4는 생각)가 'expect fork '또는'예상 데몬 '.
나는 결국 막했다
chown user:group executable
chmod +s executable
(즉 setuid 비트를 설정하고 소유권을 변경하십시오).
가장 안전한 방법은 아니지만 내부 R & D 프로젝트의 경우에는 문제가되지 않습니다.
chmod 1700
에 적어도 하나 이상의 작업을 수행했다면 "충분히 안전"한 것으로 간주됩니다. :)chmod u+sx,go-x
+s
달성하려는 목표에 따라 세 번째 가능성이 있습니다. 해당 파일 / 장치의 액세스 제어 를 풀 수 있습니다 . 이를 통해 권한이없는 사용자는 일반적으로 허용되지 않는 항목을 마운트하거나 액세스 할 수 있습니다. 그 과정에서 왕국에 열쇠를주지 말아야합니다.
sudo 비밀번호 캐시의 제한 시간을 변경할 수도 있습니다 . 그러나 귀하의 컴퓨터가 물리적으로 안전하지 않으면 권장하지 않습니다 (예를 들어, 통행인이 sudo 액세스를 시도 할 가능성이 없다고 생각합니다).
권한이 작업을 수행 할 수있는 매우 몇 가지 방법이 있다는 것을 그들이 수행하는 것이 좋은 이유가 없이 필요한 로깅. 느슨한 제한은 시스템의 보안 위험이 될 수 있으며 로깅이 부족하면 손상되었을 때 어떤 일이 발생했는지 알 수있는 방법이 없습니다.
로그 파일 의 크기 가 문제가되면 문제가있을 수 있습니다. Sudo는 정상적인 조건에서 사용 당 하나의 라인 만 생성합니다.
CentOS 6, upstart 0.6.5에서 다음은 저에게 효과적입니다.
script
exec su user_name << EOF
exec /path/to/command [parameters...]
EOF
end script
또는 :
script
exec su user_name << EOF
..... what you want to do ....
EOF
end script
사용시
exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]
에 의해 작업 프로세스를 중지 할 수 없습니다 initclt stop
. 그 이유는 다음과 같습니다.
1. the job forked and the main process is not tracked.
2. the main process changed its process group,because of `su -c`