sudo가 아닌 그룹이 Upstart 작업을 제어하도록 허용


11

시스템 시작시 실행되도록 Upstart 작업을 설정하려고하는데 다른 그룹의 구성원이 시작 / 중지 할 수도 있습니다 sudo. 이전 버전에서는 sudoers 파일 에 추가 하여이 작업을 수행하기 위해 update-rc.d저장된 스크립트를 사용 했지만 Upstart에서도 동등한 작업을 수행 할 수 없습니다./etc/init.d/%Group ALL = NOPASSWD: /etc/init.d/scriptname

%Group ALL = NOPASSWD: /sbin/initctl start jobnamesudoers 파일에 추가하려고 시도했지만 명령을 실행하려고 start jobname하면이 오류가 발생합니다.

start: Rejected send message, 1 matched rules; type="method_call", sender=":1.21" (uid=1000 pid=5148 comm="start jobname " interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

내가 알 수있는 한, 그것은 내 사용자 계정에 Upstart의 D-Bus 구성 파일에서 '시작'메시지를 보낼 권한이없는 방법에 대한 불만입니다. 그룹에서 특정 서비스에 액세스 할 수있는 권한을 부여하기 위해 파일을 편집하는 방법에 대한 정보를 실제로 찾을 수 없었습니다. 그러한 옵션이 있습니까? 구성 파일을 편집하지 않고 작업을 실행할 수 있도록 Sudoers 파일을 편집하는 방법이 있습니까? 이전 버전 만 사용하는 것이 더 좋습니까?

답변:


7

Upstart에 특정한 D-Bus 구성이 유지되는 위치를 찾는 것으로 시작할 수 있습니다. destination="com.ubuntu.Upstart"오류 메시지에서 해당 스 니펫을 보시겠습니까? 이제 D-Bus 구성 파일이있는 폴더에 grep하십시오.

vhost07:~ $ grep -r "com.ubuntu.Upstart" /etc/dbus-1
/etc/dbus-1/system.d/Upstart.conf:    <allow own="com.ubuntu.Upstart" />
[...skipped...]

Upstart.conf파일에는 몇 가지 정책 예가 있습니다. 나는 당신이 그들로부터 정책의 형식을 알아 내려고 시도 할 수 있다고 생각합니다. 그런 다음 특정 사용자에게 필요한 조치 만 허용하십시오. 예를 들어 다음과 같습니다.

<policy user="pope_benedict">
  <allow send_destination="com.ubuntu.Upstart"
         send_interface="com.ubuntu.Upstart0_6.Job"
         send_member="Start"/>
</policy>

이를 통해 pope_benedict사용자는 해당 작업을 시작할 수 있습니다.

'허용'정책 속성 값은 원래 오류 메시지에 나열되어 있습니다.


1
아, 그리고이 후에 D-Bus를 다시 시작하는 것을 잊지 마십시오! :)
Iuliu Pascaru

나는 이것을 조금 당황 스럽게 생각
Mike Campbell

7

개인적으로 /etc/sudoers.d/jobname_myuser 파일에서 다음 줄을 사용하고 있습니다.

myuser ALL = (root) NOPASSWD: /sbin/start jobname, /sbin/stop jobname, /sbin/restart jobname, /sbin/status jobname

여기에 설명 된대로 : /server//a/390723/68608


2

이러한 옵션은 sudo에 존재하지 않습니다.

Sysv 스크립트와 Upstart 구성 파일의 차이점은 다음과 같습니다. Sysv 스크립트는 스크립트, 자체 실행 파일이며 일부 그룹이이를 실행하도록 sudo에 지시 할 수 있습니다. 반면, Upstart 구성 파일은 실행 파일이 아닌 구성 파일 일 뿐이므로 start(symlink to initctl) 의 실행은 sudo가 허용하는 것입니다. 여기서 당신의 문제는 사람들이 initctl당신을 initctl모든 것을 허용하도록 운영 한다는 것입니다.

단일 작업에만 관심이있는 경우 솔루션은 간단합니다. 스크립트를 확인, 말 /usr/bin/jobname.sh

#!/bin/sh
initctl $1 jobname

다음 chmod 755 /usr/bin/jobname.sh마지막으로 당신의 sudoers 파일이 실행 파일을 추가합니다 :

%Group ALL = NOPASSWD: /usr/bin/jobname.sh

이런 식으로 모든 사람 이이 특정 직업을 부르 jobname.sh start거나 jobname.sh stop통제 할 수 있습니다 . 당신은 할 수 있도록 몇 가지 검사를 추가 할 수 있습니다 startstop매개 변수 등


다시 말해서, 내 문제는 시스템이 그룹 구성원이 실행할 수있는 기능을 initctl거부한다는 것이 아니라 Upstart가 Upstart.conf의 Allow policy 항목을 명시 적으로 지정하지 않은 사용자 / 그룹이 보낸 신호를 거부한다는 것입니다. 그리고 구성 파일의 모든 작업 또는 없음 설정보다 세분성을 제공 할 수있는 방법이 없습니까?
Angle O'Saxon

sudoers를 변경하지 않아도 Initctl이 제대로 실행 중이며 루트가 아닌 사용자에게 특별히 허용하지 않으면 Upstart는 메시지를 거부합니다. 다른 두 가지 답변을 참조하십시오. com.ubuntu.Upstart0_6.<JOB>Upstart.conf에서 작업별로 ( 부분 참조 ) dbus 정책을 정의 할 수 있습니다 . 필요에 따라 dbus 정책을 작성하고 dbus를 다시 시작하는 대신 이러한 종류의 스크립트를 작성하는 것이 더 간단 할 수 있습니다. Dbus 정책은 분명히 "올바른"작업이지만 경우에 따라 간단한 스크립트가 문제가 적은 먼 길.
Tuminoid

이전과 동일한 오류 메시지 com.ubuntu.Upstart0_6.jobnamesend_interface생성 되도록 DBus 정책을 편집합니다 . 오류 출력에 신호 정보가 포함되어 있다고 생각하면 인터페이스 또는 대상이 신호가 참조하는 Upstart 서비스를 반영하지 않는 것 같습니다. 서비스 정보는 D-Bus 메소드 호출 메시지의 인수 일 뿐이며 Upstart에 대한 D-Bus 정책을 편집하여 인수 값을 기반으로 결정을 내릴 수 있는지 확실하지 않습니다.
Angle O'Saxon

당신이 제안하는 일종의 스크립트는 하나의 경고와 함께 나를 위해 잘 작동하고 있습니다 : 나는 그것을 시작해야 sudo jobname.sh start했기 때문에 Upstart는 요청이 사용자로부터 온 것으로 root보았습니다. 이것은 "올바른"방법 (따라서 처음에는 Sys-V 스크립트에서 멀어짐)이므로 D-Bus 정책 또는 다른 Upstart 구성 옵션을 통해이 작업을 수행하고 싶습니다. 작동하게 해이 답변을 수락하겠습니다.
Angle O'Saxon

1
나는 또한 인용 할 것이다 "$1". 당신과 함께 [ "$1" = "start" -o "$1" = "stop" ]테스트 나는 그것의 안전하지만, 인용 부호로 둘러싸이지 않은 생각 $1루트로 스크립트 실행의 확장은 단지 건강에 해로운 습관 (단어 분리가 의도적으로 요구하지 않는 한)입니다 ...
베니 Cherniavsky-Paskin

0

위에서 지적했듯이 dbus 데몬에는 특정 응용 프로그램에 특화된 구성 파일이 있습니다.

ls /etc/dbus-1/system.d/
avahi-dbus.conf
bluetooth.conf
...
Upstart.conf
wpa_supplicant.con

구성 파일은 또한 자원 제한, 보안 매개 변수 등을 설정합니다.

자세한 내용은 dbus-daemon-1 (1)-Linux 매뉴얼 페이지를 참조하십시오.

그룹 이 Upstart 작업을 시작 / 중지 할 수있게하려면 /etc/dbus-1/system.d/Upstart.conf에 다음 정책을 추가하십시오.

  <policy group="YourGroupName">
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Start" />
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Stop" />
  </policy>

기본 정책을 변경하기 전에 해당 정책의 보안 관련 사항을 고려해야합니다. YourGroupName의 구성원은 모든 Upstart 작업 을 시작 / 중지 할 수 있습니다 .


그러나 그들이 통제 할 수있는 직업을 제한 할 수있는 방법이 있습니까? 아니면 D-Bus가 메시지 내용에주의를 기울이지 않기 때문에 가능하지 않습니까?
Angle O'Saxon

Upstart.conf에 해당 정책을 추가 (그룹 이름을 실제 그룹 이름으로 대체)하고 D-Bus를 다시 start: You do not have permission to modify job: jobname시작한 후 서비스를 시작하려고 할 때 얻었습니다 .
Angle O'Saxon

확인. 이는 정책이 성공적으로 적용되었음을 의미합니다. yourjob.conf가 / etc / init에있는 것 같습니다. 사용자 작업은 ~ / .init에 있어야합니다. 유스 케이스에서 yourjob.conf를 ~ / .init에 배치하는 것이 그럴듯합니까?
Goran Miskovic

첫 번째 질문과 관련하여 : 정책은 액세스 할 수있는 인터페이스와 멤버를 정의합니다. 전송 / 전달할 수있는 컨텐츠 / 인수를 정의합니다. 현재 제한적인 정책이 다운 스트림으로 완화되었습니다. 사용자 작업을 시작할 수 없음을
Goran Miskovic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.