시스템을 재부팅/종료할 때 항상 sudo 비밀번호를 묻습니다.

시스템을 재부팅/종료할 때 항상 sudo 비밀번호를 묻습니다.

그래서,

나는 manjaro에서 사용자가 한 명뿐이라면 reboot없이 입력한다는 것을 알았습니다.sudo, 실패하고 sudo 비밀번호를 묻는 반면 우분투 서버에서는 이것을 입력하면 sudo 비밀번호를 묻지 않고 시스템을 성공적으로 재부팅합니다. 내 질문은 내가 입력할 때 그렇게 만들 수 있는 방법입니다.재부팅/종료/중지, 우분투는 현재 로그인한 사용자가 단 한 명이라도 항상 sudo 비밀번호를 묻습니다. 이것이 polkit과 관련이 있을까요? 그렇다면 어떻게 변경할 수 있습니까?

제가 이것을 묻는 이유는 제 서버에 물리적으로 접근할 수 있는 모든 사람이 재부팅할 수 없도록 하고 싶기 때문입니다(물론 전원 케이블을 뽑지 않는 한).

감사합니다

답변1

제가 이 작업을 수행한 방법 중 하나는 다음과 같습니다.systemd대상을 마스킹, 누가 명령을 입력했는지에 관계없이 특정 작업이 수행되지 않도록 합니다. 예를 들어, 시스템이 종료되는 것을 방지하려면 다음을 수행할 수 있습니다.

sudo systemctl mask poweroff.target

sudo shutdown이제 또는를 통해 시스템을 종료하려는 시도 sudo systemctl shutdown는 자동으로 실패합니다. 중지하고 재부팅하는 경우에도 동일한 작업을 수행할 수 있습니다.

sudo systemctl mask runlevel0.target
sudo systemctl mask halt.target
sudo systemctl mask runlevel6.target
sudo systemctl mask reboot.target

메모: runlevel6reboot, 및 와 runlevel0동일합니다 .shutdownhalt

이 작업을 취소하려면 다음 명령을 다시 실행할 수 있습니다 unmask. 단, 다음을 사용하세요.

sudo systemctl unmask runlevel0.target
sudo systemctl unmask shutdown.target
sudo systemctl unmask halt.target
sudo systemctl unmask runlevel6.target
sudo systemctl unmask reboot.target

이를 염두에 두고 이제 실행 가능한 스크립트를 작성할 수 있습니다.오직액세스 권한이 있는 사람의 경우 sudo:

#!/bin/bash

## Determine the operation to run (mask | unmask)
op=mask

if [[ $1 = unmask ]]
then
        op=unmask
fi

## Set the targets we want to mask
declare -a arr=("runlevel0" "runlevel6" "shutdown" "reboot" "halt")

## Run the commands
for i in "${arr[@]}"
do
        cmd=$( sudo systemctl $op $i.target )
        echo "$i :: $op"
done

경고:이 코드는 작동하지만 꽤 까다롭습니다. 프로덕션 상자에서 실행하기 전에 VM이나 "안전한" 곳에서 온전한지 확인하십시오.

이제 이 스크립트를 실행하여 부팅 후 대상을 마스크하고 다음과 같이 종료/재부팅할 수 있습니다.

sudo ~./setTargetMask.sh unmask
sudo shutdown now

메모:원하는 대로 스크립트를 호출하세요.

관련 정보