sudoers NOPASSWD 태그가 작동하지 않는 것 같습니다

sudoers NOPASSWD 태그가 작동하지 않는 것 같습니다

내가 찾은 스크립트를 적용하고 있습니다.여기내 목적을 위해.

기본적으로 스크립트는 일부 조건을 확인한 다음 sudo를 사용하여 두 명령 중 하나를 실행합니다. 이 명령은 사용자로 실행됩니다 cas.

스크립트는 대화형으로 실행되지 않으므로 스크립트 내의 sudo 명령이 비밀번호 프롬프트 없이 실행되는지 확인하고 싶습니다. 그래서 sudoers 파일에 다음 줄을 추가했습니다.

ALL     ALL = NOPASSWD: /usr/bin/systemctl mask sleep.target suspend.target
ALL     ALL = NOPASSWD: /usr/bin/systemctl unmask sleep.target suspend.target

sudoers 파일의 작동 방식을 제가 이해한 바에 따르면 이는 모든 사용자가 비밀번호 프롬프트 /usr/bin/systemctl mask sleep.target suspend.target없이 명령을 실행할 수 있음을 의미합니다./usr/bin/systemctl unmask sleep.target suspend.target

대신 비밀번호 프롬프트가 계속 나타납니다.

cas-desktop :: ~ » sudo /usr/bin/systemctl 마스크 sleep.target suspens.target
[sudo] cas 비밀번호:
sudo: 비밀번호 필요

나는 또한 sudo 없이 시도했습니다.

cas-desktop :: ~ » /usr/bin/systemctl 마스크 sleep.target suspens.target
==== org.freedesktop.systemd1.manage-unit-files에 인증 ====
시스템 서비스 또는 장치 관리에는 ID가 필요합니다. 문서 확인 .
인증방법 : Cas(cas)
비밀번호 :

이 작업을 수행하려면 어떻게 해야 할지 모르겠습니다. 아이디어가 있으면 알려주시기 바랍니다.

답변1

실행하여 사용자에게 허용되는 다른 명령줄이 정의되어 있는지 sudo -l확인하세요 . sudo이 표시됩니다모두기본 구성 및 포함된 /etc/sudoers.d/*파일(있는 경우)에서 적용 가능한 sudoers 구성 라인입니다.

다음을 주문하는 것이 중요합니다:마지막귀하의 명령과 일치하는 라인이 존중됩니다. 라인이 (ALL : ALL) ALL표시되지 않은 NOPASSWD:일반 라인 인 경우~ 할 것이다비밀번호를 묻는 메시지가 표시됩니다. 이 경우 NOPASSWD:표시된 줄을 파일의 나중 위치로 이동하세요 sudoers.

sudoers 파일의 마지막 줄이 이면 @includedir /etc/sudoers.dsudo 구성 줄을 로 이동하는 것이 좋습니다 /etc/sudoers.d/. 해당 디렉터리에 있는 파일 이름은 다음 문자를 ~포함합니다 ..무시됩니다.


또는 없이 이를 허용하려면 다음과 같은 규칙 파일을 sudo작성해야 합니다 .polkit/etc/polkit-1/rules.d/01-local-sleep-suspend.rules

// -*- mode: js2 -*-
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
         (action.lookup("unit") == "sleep.target" ||
          action.lookup("unit") == "suspend.target") &&
        subject.user == "cas") {
            return polkit.Result.YES;
    }
});

관련 정보