루트가 아닌 사용자가 system.d 서비스를 제어 할 수 있도록하려면 어떻게해야합니까? 가능합니다. sudo service

을 사용하면 다음 sysvinit과 같은 sudoers항목으로 충분합니다.

%webteam cms051=/sbin/service httpd *

이를 통해 다음과 같은 명령이 가능합니다.

  • sudo service httpd status
  • sudo service httpd restart

이제 systemd서비스 이름이 최종 인수입니다. 즉, 서비스 재시작은 다음과 같이 수행됩니다.

systemctl restart httpd.service

당연히 나는 명령을 systemctl * httpd.service작동 하는 것으로 정의 했지만 systemctl restart puppet.service httpd.service원하는 효과가 아닌 것을 허용 한다고 생각했습니다 .

이를 고려할 때 루트가 아닌 사용자가 system.d서비스 를 제어 할 수있는 가장 좋은 방법은 무엇입니까? 반드시 그럴 필요는 없습니다 sudoers. 아마도 파일 권한 변경으로 충분할 수 있습니까?



답변

필요한 모든 명령을 sudoers별도로 추가하십시오 .

%webteam cms051=/usr/bin/systemctl restart httpd.service
%webteam cms051=/usr/bin/systemctl stop httpd.service
%webteam cms051=/usr/bin/systemctl start httpd.service
%webteam cms051=/usr/bin/systemctl status httpd.service

답변

@jofel의 대답은 작업 설정을 얻는 데 필요한 것입니다. 이 질문에 다른 사람을 위해 이것을 배치. capistrano로컬 컴퓨터에서 배포 한 후 Ruby 애플리케이션을 다시 시작 하는 방법이 필요했습니다 . 즉, systemd서비스 를 다시 시작하기 위해 비밀번호없이 액세스해야 합니다. 이것이 내가 가진 것이며 훌륭하게 작동합니다!

참고 : 내 사용자 및 그룹은 deployer
여기에서 사용자 정의 파일에 코드 입력 이라고 합니다 : /etc/sudoers.d/deployer
코드 :

%deployer ALL= NOPASSWD: /bin/systemctl start my_app
%deployer ALL= NOPASSWD: /bin/systemctl stop my_app
%deployer ALL= NOPASSWD: /bin/systemctl restart my_app

답변

액세스하려는 명령으로 명령 별명을 작성하십시오. 그런 다음 그룹을 해당 명령 별명에 지정하십시오.

Cmnd_Alias APACHE-SVC = /usr/bin/systemctl stop httpd, /usr/bin/systemctl start httpd, /usr/bin/systemctl restart httpd

%webteam ALL=APACHE-SVC

sudoers 파일을 직접 편집하지 않고 /etc/sudoers.d/filename에 편집 내용을 배치하는 것이 좋습니다. sudoers에서 .d / filename을 가리켜 야합니다. 대부분의 새로운 배포판은 그렇게합니다. sudoers 에이 두 줄을 배치하면 트릭을 수행해야합니다.

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

참고 : 포함 된 앞의 #은 주석이 아닙니다. 남아 있어야합니다.


답변

조펠이 제안한 대로 항목을 분류하는 것이 가장 안전 합니다.

누군가 명령 기능의 제한된 하위 집합을 사용하도록하려면 sudoers 줄에서 와일드 카드를 신뢰하지 않습니다. 언어가 쉘 글로브보다 표현력이 뛰어나더라도 추적해야 할 코너 케이스가 너무 많습니다.

service httpd *“행은 비교적 안전합니다. (이를 검증하십시오 )에는 특별히 민감한 것을 수행하지 않는 service유용한 플래그 ( --status-all) 가 하나만 있으므로 (이 또한 검증하십시오) /etc/init.d/httpd는 허용하려는 명령 행 만 허용합니다.

조합이 너무 많아서 나열하기가 어색한 경우, 수행중인 작업에 의문을 제기해야합니다. 그러나 그들에게 명령을 실행하는 신중하게 작성된 도우미 스크립트에 대한 액세스 권한을 부여 할 수 있습니다 (와 유사 /etc/init.d/http). 이 경우에도 허용되는 명령 및 옵션을 정확하게 나열하고 가능한 한 사용자 입력을 대상 명령에 직접 전달하지 않아야합니다.