
답변1
이것은 'sudo' 프롬프트가 아니라 'polkit' 프롬프트입니다. 이를 피하는 한 가지 방법 – 글로벌모두systemctl뿐만 아니라 소프트웨어는 즉시 작업을 거부하거나 즉시 허용하는 polkit 규칙을 작성하는 것입니다.
polkit.addRule(function(action, subject) {
if (subject.user !== "root") {
if (/^org\.freedesktop\.systemd1\./.test(action.id)) {
return polkit.Result.NO;
}
}
});
( subject.user
루트 우회 폴킷 검사에 의해 호출된 작업이 완전히 검사되므로 테스트는 생략될 수 있습니다.)
polkit 규칙은 /etc/polkit/rules.d/*.rules
일반적으로 다음과 같은 이름 으로 저장됩니다 80-custom.rules
(오름차순으로 처리됨). 자세한 내용은 다음을 참조하세요.폴킷(8).
(즉, sudo 구성에 비밀번호가 없는 경우 'sudo'를 사용하는 것과 polkit에서 즉시 작업을 허용하도록 만드는 것 사이에는 실질적인 보안 차이가 없습니다. 그 반대의 경우도 마찬가지입니다.필요하다비밀번호... 그럼 그냥 폴킷 대화 상자에 입력하면 되지 않나요? 비밀번호는 같습니다.)
답변2
옵션이 있습니다 --no-ask-password
. 별칭을 만드세요:
alias systemctl='systemctl --no-ask-password'
(Bash, Kubuntu에서 테스트).
답변3
systemctl에 sudo를 사용하지 마십시오.항상; 만약 너라면~이다유지 관리가 허용되면 폴킷을 올바르게 설정하세요.
이론적 해석: sudo
요청한 사용자(보통: root
)가 효과적으로 실행하는 프로그램을 만듭니다. 연결된 모든 툴킷을 포함합니다. 프로그램, 라이브러리 또는 ...sudo 구성에 버그가 있으면 취약해집니다. 의 경우 systemd
바이너리 systemctl
는제어 장치(일반적으로). 그것하지 않습니다권한이 있는 작업을 자체적으로 수행하지 않고 요청하기 때문에 (대부분의 사용 사례에서) 루트 권한이 필요합니다 init
. 실제 root
계정을 사용하는 것(직접 또는 을 통해 sudo
)은 전부 아니면 전무한 원자(폭탄) 솔루션인 반면,오직꼭 필요한 것은승인하다(아님: 인증)~에 맞서systemd
. systemd
이해 polkit
하기 때문에권한 부여, 사용인증됨root
너무 많은 권한이 부여되었습니다.
systemctl
(를 통하지 않고) 임의의 명령을 직접 호출할 수 있는 버그를 고려해보세요 systemd
. root
에서 권한을 부여 하면 sudo
EUID=0으로 모든 명령을 실행할 수 있습니다. 권한이 없는 사용자로 실행 하면 systemctl
이전에 액세스 권한을 얻은 계정으로만 해당 명령을 실행할 수 있습니다. 이는 몇 가지 기본 보안 규칙의 간단한 결과입니다.
- 필요한 권한 세트만 사용하십시오(전체 세트 == 아님
root
). - 이러한 권한은 필요한 코드에만 부여합니다(
systemd
에 권한을 부여하지 않고 승인systemctl
).
컴퓨터의 유일한 사용자인 경우 - 권한이 없는 계정을 사용하여 작업하는 경우 root
실행하는 프로그램이 불필요한 권한을 얻지 못하도록 제한하고 싶다고 가정합니다. 계정 이 명령을 내리기 systemctl
때문에 권한 을 부여하는 것은 너무나 불필요한 권한입니다.root
authorized
systemd
또한 polkit
다양한 작업(시작/중지/다시 로드/무엇이든) 및 다양한 서비스에 대해 다양한 액세스 기준을 가질 수 있습니다. 에 정확한 명령을 입력할 수 있지만 sudoers
polkit 솔루션은 그러한 명령의 특정 부분을 인식합니다.
결론sudo
: 권한이 낮은 방법을 사용할 수 있는 경우에는 사용하지 마세요 . sudo
최후의 수단 솔루션입니다.
비밀번호 프롬프트를 그래픽이 아닌 텍스트로 표시하려면DISPLAY 설정을 해제합니다. 예:인증 에이전트를 실행하는 그래픽 세션에서 터미널을 바인딩 해제합니다.