그래서,
나는 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
메모: runlevel6
는 reboot
, 및 와 runlevel0
동일합니다 .shutdown
halt
이 작업을 취소하려면 다음 명령을 다시 실행할 수 있습니다 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
메모:원하는 대로 스크립트를 호출하세요.