루트가 아닌 사용자가 시스템 서비스를 제어하도록 허용하려면 어떻게 해야 합니까?

루트가 아닌 사용자가 시스템 서비스를 제어하도록 허용하려면 어떻게 해야 합니까?

의 경우 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

이를 염두에 두고 systemd루트가 아닌 사용자가 서비스를 제어할 수 있도록 하는 가장 좋은 방법은 무엇입니까? 그럴 필요는 없습니다 sudoers. 파일 권한을 변경하는 것만으로도 충분할까요?

답변1

필요한 모든 명령을 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 

답변2

@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

답변3

액세스할 수 있는 명령으로 명령 별칭을 만듭니다. 그런 다음 그룹을 명령 별칭에 할당합니다.

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/ 파일 이름을 지정해야 합니다. 대부분의 새로운 배포판에서는 어쨌든 이 작업을 수행합니다. sudoer에 다음 두 줄을 입력하면 문제가 해결됩니다.

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

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

답변4

RHEL8에서:

httpd.service또 다른 옵션은 웹팀 홈 디렉터리에 파일을 두어 ~/.config/systemd/user스스로 시작/중지/활성화 등을 할 수 있도록 하는 것입니다.

systemctl --user enable httpd.service
systemctl --user start httpd.service

사용자에게 서비스 시작 권한이 있는 동안 위의 작업이 작동하는지 확인하십시오. 이는 개발 시스템에서 유용한 것으로 보이며 개발자가 devops/ops에서 사용 가능한 모든 구성으로 타이머와 파이프라인을 효율적으로 실행할 수 있습니다.

이것을 프로덕션으로 옮기고 내장된 httpd 작업을 사용하여 실제 서버 환경에서 전체 시작 시퀀스를 테스트하는 것도 유익한 것 같고 개발자는 "하지만 개발자에게 푸시하면 내 노트북에서는 작동합니다"라고 말하지 않고 무너졌습니다. 하지만 나는 단지 여기에서 생각하고 글을 쓰고 있을 뿐입니다.

시스템 사용자 문서가 광범위하지 않기 때문에 최고의 온라인 참조:

https://wiki.archlinux.org/title/systemd/User

관련 정보