을 사용하면 다음 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
). 이 경우에도 허용되는 명령 및 옵션을 정확하게 나열하고 가능한 한 사용자 입력을 대상 명령에 직접 전달하지 않아야합니다.