systemd를 사용하여 호스트 이름을 변경하는 새로운 방법은 다음과 같습니다.
hostnamectl set-hostname NEWNAME
그러나 관리자 권한이 있는 사용자로 로그인하면(어느 그룹이 포함되는지 확실하지 않음) 비밀번호가 필요하지 않습니다. 관리자가 아닌 사용자의 경우 권한이 있는 사용자 중 한 명에게 비밀번호를 입력하라는 대화 상자가 나타납니다.
"shutdown -h now"는 관리자가 아닌 사용자에게도 작동한다고 생각합니다.
systemd와 관련된 새로운 명령인 것 같아요.
명령을 제출하는 사용자에게 명령을 실행할 권한이 있는지 어떻게 확인합니까? 비밀번호를 묻거나 sudo를 요구하게 하려면 어떻게 해야 하나요?
답변1
관련 유틸리티 내에서 systemd
권한 있는 액세스가 필요할 수 있는 작업은 PolicyKit을 통해 라우팅됩니다. pkaction
PolicyKit에서 처리할 수 있는 모든 작업 목록을 보려면 인수 없이 실행하세요 . 특정 작업에 대한 현재 정책을 보려면 를 사용하세요 pkaction --verbose --action-id <action identifier
. 예를 들어 호스트 이름을 변경하려면 다음을 수행하세요.
# pkaction | grep host
org.freedesktop.hostname1.set-hostname
org.freedesktop.hostname1.set-machine-info
org.freedesktop.hostname1.set-static-hostname
# pkaction --verbose --action-id org.freedesktop.hostname1.set-hostname
org.freedesktop.hostname1.set-hostname:
description: Set host name
message: Authentication is required to set the local host name.
vendor: The systemd Project
vendor_url: http://www.freedesktop.org/wiki/Software/systemd
icon:
implicit any: auth_admin_keep
implicit inactive: auth_admin_keep
implicit active: auth_admin_keep
따라서 내 시스템의 현재 호스트 이름 변경 정책은 다음과 같습니다 auth_admin_keep
. 즉, 관리자 비밀번호가 필요합니다.~하지 않는 한사용자는 최근 유사한 검사를 성공적으로 통과했습니다( sudo
지속적인 비밀번호 요청을 피할 수 있는 것처럼).
관리자는 누구이며 누구의 비밀번호로 이러한 작업을 승인할 수 있습니까? 내 Debian 9 시스템에서는 디렉터리의 파일에 따라 결정됩니다 /etc/polkit-1/localauthority.conf.d/
. 기본적으로 루트와 sudo
사용자 그룹의 구성원만 자격이 있습니다.
이 정책이 마음에 들지 않으면 사용자 정의 PolicyKit 구성 파일을 작성하여 쉽게 변경할 수 있습니다.
PolicyKit은 관리하는 모든 작업에 대해 다음 "보안 수준"을 요구하도록 구성할 수 있습니다.
yes
- 사용자는 언제든지 질문 없이 이 작업을 수행할 수 있습니다.auth_self_keep
- 사용자가 최근에 비밀번호 확인이 필요한 작업을 수행하지 않은 경우 사용자의 비밀번호를 요청하여 실제로 본인인지 확인하세요. 이 수준의 여러 연속 작업이 몇 분 안에 수행되는 경우 첫 번째 작업 후 검사를 건너뛸 수 있습니다.auth_self
-항상 사용자에게 비밀번호 확인을 요청합니다.auth_admin_keep
- 관리 사용자의 비밀번호가 필요합니다. 와 마찬가지로auth_self_keep
비밀번호(및 선택적으로 admin 사용자 이름)를 한 번 입력한 후 사용자는 비밀번호를 더 이상 요청하지 않고도 짧은 시간 내에 해당 수준에서 여러 작업을 수행할 수 있습니다.auth_admin
- 비밀번호 확인은 항상 필수이며, 비밀번호 확인에 응답하는 사용자는 관리자 중 한 명이어야 합니다.no
- 추가 질문 없이 해당 조치는 거부됩니다.
결과를 유지하는 타이밍은 ..._keep
분명히 PolicyKit 업스트림 코드에 하드 코딩되어 있습니다.다음은 PolicyKit Git에 대한 링크입니다.
/* TODO: right now the time the temporary authorization is kept is hard-coded - we
* could make it a propery on the PolkitBackendInteractiveAuthority class (so
* the local authority could read it from a config file) or a vfunc
* (so the local authority could read it from an annotation on the action).
*/
expiration_seconds = 5 * 60;
런타임 시 이 값을 구성하거나 설정된 후 인증 타임스탬프를 확장하기 위한 조항이 없는 것 같습니다.
OpenSuSE는 이것을 확장하여 결과를 얻은 ...keep_session
것 같습니다 ...keep_always
.분명히 그들은 또한 이러한 ...keep
작업을 "심문 과정이 계속 실행되는 한 결과를 기억한다"는 의미로 재해석했습니다.