호스트 이름을 변경하기 위해 hostnamectl에서 비밀번호를 요구하지 않는 이유는 무엇입니까?

호스트 이름을 변경하기 위해 hostnamectl에서 비밀번호를 요구하지 않는 이유는 무엇입니까?

systemd를 사용하여 호스트 이름을 변경하는 새로운 방법은 다음과 같습니다.

hostnamectl set-hostname NEWNAME

그러나 관리자 권한이 있는 사용자로 로그인하면(어느 그룹이 포함되는지 확실하지 않음) 비밀번호가 필요하지 않습니다. 관리자가 아닌 사용자의 경우 권한이 있는 사용자 중 한 명에게 비밀번호를 입력하라는 대화 상자가 나타납니다.

"shutdown -h now"는 관리자가 아닌 사용자에게도 작동한다고 생각합니다.

systemd와 관련된 새로운 명령인 것 같아요.

명령을 제출하는 사용자에게 명령을 실행할 권한이 있는지 어떻게 확인합니까? 비밀번호를 묻거나 sudo를 요구하게 하려면 어떻게 해야 하나요?

답변1

관련 유틸리티 내에서 systemd권한 있는 액세스가 필요할 수 있는 작업은 PolicyKit을 통해 라우팅됩니다. pkactionPolicyKit에서 처리할 수 있는 모든 작업 목록을 보려면 인수 없이 실행하세요 . 특정 작업에 대한 현재 정책을 보려면 를 사용하세요 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작업을 "심문 과정이 계속 실행되는 한 결과를 기억한다"는 의미로 재해석했습니다.

관련 정보