사용자가 비밀번호없이 systemctl / systemd 서비스를 실행할 수 있도록합니다


25

기본 사용자 ubuntu가 암호를 묻지 않고 특정 서비스를 실행할 수 있기를 원합니다 .

구체적으로 systemctl restart unicorn_my_app.service.

다음 지침에 따라 새로 작성된 그룹에 사용자를 추가 하십시오 .ubuntuLimitedAdmins

$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu

다음 텍스트를 포함하는 디렉토리 에 limitedadmins(를 사용하여 sudo vim) 새 파일을 작성했습니다 /etc/sudoers.d.

%LimitedAdmins ALL=NOPASSWD: /etc/init.d/unicorn_ofn_america restart, /etc/init.d/unicorn_ofn_america start

나는 또한 시도했다 :

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl/unicorn_ofn_america restart, /bin/systemctl/unicorn_ofn_america start

(그리고 /bin/systemd)

의 내용은 (또는 ) /etc/sudoers/으로 확인 된 기본값입니다 .sudo visudosudo cat /etc/sudoers

    #
    # This file MUST be edited with the 'visudo' command as root.
    #
    # Please consider adding local content in /etc/sudoers.d/ instead of
    # directly modifying this file.
    #
    # See the man page for details on how to write a sudoers file.
    #
    Defaults    env_reset
    Defaults    mail_badpass
    Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

    # Host alias specification

    # User alias specification

    # Cmnd alias specification

    # User privilege specification
    root    ALL=(ALL:ALL) ALL

    # Members of the admin group may gain root privileges
    %admin ALL=(ALL) ALL

    # Allow members of group sudo to execute any command
    %sudo   ALL=(ALL:ALL) ALL

    # See sudoers(5) for more information on "#include" directives:

    #includedir /etc/sudoers.d

해시 로그인 #includedir은 주석이 아니라 #include 지시문 구문의 일부입니다 .

그러나 실행 후 여전히 비밀번호 프롬프트가 있습니다. systemctl restart unicorn_my_app.service

서비스는 init.d디렉토리에 있습니다.

$ ls -l /etc/init.d | grep unicorn
-rwxr--r-- 1 ubuntu ubuntu 1874 Oct 29 06:47 unicorn_my_app

755앱에서 chmodding 을 시도 했지만 ubuntu어쨌든 소유하고 있기 때문에 그것이 차이를 가져야한다고 생각하지 마십시오 .

아무런 차이없이 시스템을 재부팅하려고 시도했습니다. 재시작 / 재로드와 같은 단계가 누락 되었습니까?) 뭔가 잘못 구성 했습니까?

또한 명령이 편집 전용 인 것 같아서 vim새 파일을 만들 때 사용했음을 언급해야합니다 ./etc/sudoers.dvisudo/etc/sudoers


답변:


38

sudoers 파일은 상당히 유연하며 복잡합니다. 여기서 원하는 것은 /bin/systemctl특정 매개 변수 를 사용하여 명령에 대한 액세스를 허용하는 것입니다 .

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl restart unicorn_my_app.service

기본적으로 입력 한 정확한 명령 줄을 사용하고 안전을 위해 경로 이름을 하드 코딩 한 후 sudoers 파일 (또는 /etc/sudoers.d)에 넣습니다 . 그리고 sudo에 관한 한 'start'와 'restart'는 완전히 다릅니다. 하나를 허용하면 다른 사람에게 액세스 권한이 부여되지 않습니다.


1
작동하지 않는 것 같습니다. 파일 /bin/systemctl restart unicorn_my_app.service에서 직접 복사 /etc/sudoers.d/limitedadmins하여 CLI에서 실행할 수 있으며 비밀번호를 묻는 메시지가 표시됩니다. 사용자 ubuntu가 tp를 어딘가에 지정해야 합니까, 아니면 ALL모든 도메인의 모든 사용자에게 열려 있습니까?
MikeiLL

5
당신은 실행 sudo /bin/systemctl restart unicorn_my_app.service하고 암호없이 실행해야합니다. (PsiOps의 답변이 이것과 분리 된 경우에 의견으로 게시)
rosuav

1
@rosuav 우리가 직접 같은 그것을 실행할 수 있도록 어떤 방법이 systemctl restart myapp.service사용하지 않고는 sudo.
kabirbaidhya

실제로는 아니지만 명령을 스크립트에 넣고 (sudo 접두사로 완성) 해당 스크립트를 $ PATH에 넣을 수 있습니다. 또는 쉘 별명으로 만드십시오.
rosuav

3
주의 : 다른 배포판 systemctl 에는 /usr/bin:-(.
guettli
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.