답변:
시스템 기반 Linux 배포판을 사용해야합니다. 이 경우에, 당신은 할 수 있어야한다고 마스크 그 systemd 그것을 실행하는 것을 거부 있도록, 전원 끄기 목표 (전원 꺼짐). 예 :
systemctl mask poweroff.target
이로 인해 시스템을 재부팅하는 것 외에는 시스템을 종료 할 수 없습니다. 아무 일도 일어나지 않는 것을보십시오 :
이 경우이 VM의 가상 전원 스위치는 더 이상 시스템을 종료하지 않습니다. 그러나 여전히 완벽하게 재부팅됩니다.
물론 변경을 취소하려면 대상을 마스크 해제하면됩니다. 그런 다음 시스템을 종료 할 수 있습니다.
systemctl unmask poweroff.target
systemctl
인수없이 실행하십시오 . 모든 활성 장치, 상태 및 설명이 나열됩니다. 추가 --all
하고 활성화되지 않은 장치도 나열합니다.
man systemd.special
.
이를 달성하는 몇 가지 방법이 있습니다. 하나는 sudo로 명령을 실행하고 암호를 입력해야하는 권한이없는 일반 계정으로 작업하는 것입니다. 그런 다음 visudo를 실행하여 다음을 / etc / sudoers에 추가 할 수 있습니다.
## user is allowed to execute reboot -r only
jdoe ALL=NOPASSWD: /sbin/shutdown -r *
또한 sudo 신임 캐싱을 사용하지 않으려면 다음을 추가하십시오.
Defaults timestamp_timeout=0
이렇게하면 sudo로 명령을 호출 한 경우 자격 증명 캐싱을 방지 할 수 있습니다.
예:
[root@ops ~]# su - jdoe
[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:
[jdoe@ops ~]$ sudo shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 18:51:13 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ sudo shutdown -H
[sudo] password for jdoe:
^[[A[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:
위의 예에서 실행시 비밀번호를 입력하지 않아도 sudo shutdown -r +10
되었지만 나머지 는 어떻게했는지 확인하십시오 . 명령 ( sudo shutdown -r +10
) 앞에 sudo를 입력 할 필요가 없도록하려면 .bash_profile 또는 .bashrc에 다음을 추가하십시오.
alias shutdown="sudo shutdown"
예:
[jdoe@ops ~]$ source ~/.bash_profile
[jdoe@ops ~]$ shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 19:03:14 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ shutdown -c
[sudo] password for jdoe:
권한이없는 계정으로 작업하고 필요한 경우 sudo로 에스컬레이션하는 것이 가장 좋습니다.
sudo
의 기본 구성은 첫 번째 호출 후 얼마 동안 자격 증명을 캐시하게 한다는 점을 제외하면 훌륭 합니다. root
사용자 세션에 필요한 명령을 반복해서 실행할 때 편리 합니다. 이러한 세션에서 (또는 실제로 root
쉘이 실행중인 경우) 명령을 처리 shutdown
하고 검사를 생략 할 수 있습니다.
shutdown -r
하고 있으므로 실행 하는 경우 자격 증명이 입력되지 않으므로 캐시되지 않습니다. 위의 예제를 살펴보십시오. 실행 한 다음에 a 를 입력하면 비밀번호를 묻는 메시지가 표시됩니다. sudo shutdown -r ...
sudo shutdown -H
sudo
이 아닌 시나리오를 고려하십시오 NOPASSWD
. 예를 들어 설정 파일을 루트로 편집하는 호출. 이 경우 암호가 캐시되고 후속 호출 sudo shutdown -H
이 수행됩니다. sudo
이를 피하려면 비밀번호 캐싱을 비활성화해야합니다.
sudo
암호를 입력하고 계속 진행 하기 위해 일반적으로 요청 됩니다. sudo를 사용하는 대체 접근 방법 은 여기 를 참조 하십시오 (아주 좋지는 않지만 훨씬 더 좋습니다).
molly-guard 라는 도구가 있습니다.이 도구에는 종료 또는 재부팅하려는 시스템의 호스트 이름을 명시해야합니다.
데비안을 사용하지 않는 경우 프로그램이 다소 원시적이라는 점을 감안하여 소스에서 컴파일하는 것은 쉽지 않습니다.
이미 별명을 설정 사고 RHEL 기반 배포를 방지하기 위해 rm
, cp
그리고 mv
루트 사용자가 수행 할 때 다소 더욱 파괴 될 수있다.
예를 들어 다음을 추가 할 수 있습니다.
#/root/.bashrc
alias poweroff='echo "poweroff: Command disabled - THINK before you type.
Use /usr/sbin/poweroff if you really want to drive to the DC to restore power."'
shutdown -r
비활성화 하는 동안 어떻게 유지 shutdown -P -H
합니까?
종료 실행 파일을 실수로 호출 할 수없는 이름으로 바꿉니다.
그런 다음 별칭 shutdown
을(whatever) -r
shutdown
을 지정하면 충분 합니다 /sbin/shutdown -r
. 이름을 바꿀 필요는 없습니다. 별칭 확장은 절대 경로를 나타내므로 재귀 별칭 확장이 적용되지 않습니다.