shutdown 명령을 제거하지만 재부팅을 유지하는 가장 좋은 방법


27

데이터 센터에 raspi 유형 장치가 있는데 최근 실수로 손가락이 뚱뚱 해져서 종료 명령을 화면의 잘못된 터미널에 붙여 넣었습니다. 옵션 을 유지 shutdown -r하면서 제거 하는 방법이 #poweroff #shutdown -P -H있습니까?

나는 shutdown -r 명령 을 지키고 싶다 . 시스템을 정지하거나 ip 테이블 규칙으로 잠그면 타이머를 켜는 것이 좋습니다. 예shutdown -r +10

답변:


39

시스템 기반 Linux 배포판을 사용해야합니다. 이 경우에, 당신은 할 수 있어야한다고 마스크 그 systemd 그것을 실행하는 것을 거부 있도록, 전원 끄기 목표 (전원 꺼짐). 예 :

systemctl mask poweroff.target

이로 인해 시스템을 재부팅하는 것 외에는 시스템을 종료 할 수 없습니다. 아무 일도 일어나지 않는 것을보십시오 :

데비안 9 애니메이션 데모

이 경우이 VM의 가상 전원 스위치는 더 이상 시스템을 종료하지 않습니다. 그러나 여전히 완벽하게 재부팅됩니다.

물론 변경을 취소하려면 대상을 마스크 해제하면됩니다. 그런 다음 시스템을 종료 할 수 있습니다.

systemctl unmask poweroff.target

2
모든 서비스 / 대상 / 장치를 설명과 함께 나열하는 systemd 명령이 있습니까 (가능한 경우)? 나는 최근에 이것을 읽기 시작했고 가능성을 탐구하고 싶습니다.
hjpotter92

1
@ hjpotter92 systemctl인수없이 실행하십시오 . 모든 활성 장치, 상태 및 설명이 나열됩니다. 추가 --all하고 활성화되지 않은 장치도 나열합니다.
Michael Hampton

2
@ hjpotter92 살펴보십시오 man systemd.special.
TooTea

16

이를 달성하는 몇 가지 방법이 있습니다. 하나는 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로 에스컬레이션하는 것이 가장 좋습니다.


1
sudo의 기본 구성은 첫 번째 호출 후 얼마 동안 자격 증명을 캐시하게 한다는 점을 제외하면 훌륭 합니다. root사용자 세션에 필요한 명령을 반복해서 실행할 때 편리 합니다. 이러한 세션에서 (또는 실제로 root쉘이 실행중인 경우) 명령을 처리 shutdown하고 검사를 생략 할 수 있습니다.
우주 Ossifrage

입력 해 주셔서 감사합니다. 그러나이 경우 sudo로 실행할 때 비밀번호를 묻지 않도록 구성 shutdown -r하고 있으므로 실행 하는 경우 자격 증명이 입력되지 않으므로 캐시되지 않습니다. 위의 예제를 살펴보십시오. 실행 한 다음에 a 를 입력하면 비밀번호를 묻는 메시지가 표시됩니다. sudo shutdown -r ...sudo shutdown -H
John Doe

3
실제로, 그것은 이해됩니다. 그러나 마지막 명령이 접두사 이고 작업 sudo이 아닌 시나리오를 고려하십시오 NOPASSWD. 예를 들어 설정 파일을 루트로 편집하는 호출. 이 경우 암호가 캐시되고 후속 호출 sudo shutdown -H이 수행됩니다. sudo이를 피하려면 비밀번호 캐싱을 비활성화해야합니다.
우주 Ossifrage

2
이 경우 암호 캐싱을 비활성화하면 +1이됩니다. 제안으로 내 의견을 편집했습니다. 감사!
John Doe

2
실제로 실제로는 마음에 들지 않습니다. 정확히 sudo 암호 프롬프트에 의존하여 사용자가하지 말아야 할 일을하지 말라고 사용자에게 상기시키기 때문입니다. 그러나 암호 프롬프트는 실제로이 목적을 제공하지 않습니다. sudo암호를 입력하고 계속 진행 하기 위해 일반적으로 요청 됩니다. sudo를 사용하는 대체 접근 방법 은 여기 를 참조 하십시오 (아주 좋지는 않지만 훨씬 더 좋습니다).
Michael Hampton

10

molly-guard 라는 도구가 있습니다.이 도구에는 종료 또는 재부팅하려는 시스템의 호스트 이름을 명시해야합니다.

데비안을 사용하지 않는 경우 프로그램이 다소 원시적이라는 점을 감안하여 소스에서 컴파일하는 것은 쉽지 않습니다.


9

이미 별명을 설정 사고 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."'

2
shutdown -r비활성화 하는 동안 어떻게 유지 shutdown -P -H합니까?
MSalters

3

종료 실행 파일을 실수로 호출 할 수없는 이름으로 바꿉니다.

그런 다음 별칭 shutdown(whatever) -r


1
실행 파일 이름을 바꾸는 방법을 설명해 주시겠습니까? 향후 패키지 업그레이드를 중단 할 수 있습니까?
AL

2
@AL 향후 패키지 업그레이드를 중단 할 수 있습니까? 그렇습니다. 또한 이미 설치된 것들을 망칠 수도 있습니다. 일반적으로 OS 설치의 일부를 망쳐 놓는 것은 매우 나쁜 생각입니다.
Andrew Henle

1
동의하다. 에 별칭 shutdown을 지정하면 충분 합니다 /sbin/shutdown -r. 이름을 바꿀 필요는 없습니다. 별칭 확장은 절대 경로를 나타내므로 재귀 별칭 확장이 적용되지 않습니다.
MSalters

한 가지 경고- '아무것도 불가능하지 않다'는 생각이들 것입니다. – 거의 불가능합니다.
JosephDoggie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.