모든 사용자에 대해 종료 명령을 비활성화합니다. 근본 결과?


11

shutdown우분투 서버 설치에서 모든 사용자, 심지어 루트조차도 명령 을 비활성화하고 싶습니다 .

내가하고 싶은 이유는 내가이 기계와 동시에 많은 생산 기계에 SSH를 넣을 때 이런 식으로 기계를 끄는 습관을 들이지 않기 위해서입니다. 명령을 잘못된 창에 입력하여 실수로 다른 컴퓨터 중 하나를 종료하려고합니다.

종료를 비활성화하려는 서버는 Windows 데스크톱의 VirtualBox 내에서만 실행되며 로컬 테스트에만 사용하므로 명령 줄에서 종료 할 수없는 경우 문제가되지 않습니다.

VirtualBox 이미지에서 다른 암호를 사용하여 이미 문제를 약간 완화했지만 분명히 sudo프로덕션 시스템 중 하나의 '창' 내에 있으면 실수로 종료 할 수 있습니다.

내 질문은 :

  1. 종료 명령을 어떻게 비활성화합니까?
  2. shutdown 명령을 비활성화하면 알아야 할 결과가 있습니까? 가장 구체적 으로는 물리적 시스템의 전원 버튼을 누르는 것과 동일한 ACPI 종료 지원을 비활성화 합니까? 다른 일반적인 응용 프로그램에 영향을 줄 수 있습니까?

자세한 내용은이 VirtualBox 이미지를 사용하여 셸 스크립트를 시도하고 Tomcat 및 Java를 실행하는 데 사용됩니다.


2
제 생각에는 인적 오류를 방지하기 위해 시스템의 핵심 동작을 변경하는 것은 나쁜 생각입니다. 해결하는 것보다 장기적으로 더 많은 문제가 발생할 수 있습니다. 모든 시스템에 대해 다른 사용자 비밀번호를 유지하면 sudo가 필요하므로 위험을 최소화 할 수 있습니다. 특정 시스템 변경에 의존하지 않는 좋은 습관을 개발해야하며, 훨씬 더 자주 사용되는 rm / cp / chmod로 인해 훨씬 ​​더 심각한 재난이 자주 발생하며 이러한 기능을 비활성화하지 않을 것입니다.
João Pinto

나는 그것에 동의하지만 분명히 일을하는 올바른 방법이지만, 위험하지 않고 일을 시도 할 수 있도록 데스크탑에있는 비공식 우분투 이미지가있는 작은 작은 상황을 피하는 것입니다. 의 고용주 기계를 청소 :)
Rich

답변:


3

일반적으로 명령을로 실행 sudo shutdown하지 않고 으로 실행하면 sudo /sbin/shutdown"종료"에 대한 전역 쉘 별명을 설정하여 대신 메시지를 터미널에 표시 할 수 있습니다. 실제 실행 파일은 다른 모든 목적을 위해 여전히 존재합니다.


습관을 방해하려는 경우 가장 좋은 방법으로 들립니다.
ændrük

2
그러나 쉘 별명 ( alias shutdown=sl) 을 설정하는 확실한 방법 은 sudo의 인수에 영향을 미치지 않습니다. zsh에서는 인수와 일치하는 별칭을 정의 할 수 있지만 bash에는 없다고 생각합니다. sudo첫 번째 인수가 인 경우 작업을 거부하는 쉘 스크립트의 별명 을 지정할 수 shutdown있습니다.
poolie

2
즉, 실제로 작동하지 않습니다.
poolie

14

이 문제에 대한 훨씬 더 좋은 접근 방법은 종료 를 실행 하지 않도록 스스로를 훈련시키기보다는 종료 하지 않으려 는 상자에 molly-guard 프로그램 을 설치하는 것입니다.

molly-guard는 실수로 시스템을 종료하거나 재부팅하지 못하게합니다. 기존 명령 전에 중지, 재부팅, 종료 및 전원 끄기와 같은 몇 가지 검사를 수행하여이를 수행합니다.

일반적인 구성은 시스템의 호스트 이름을 입력하여 실제로 올바른 호스트 이름인지 확인하는 것입니다.

맨 페이지에/etc/molly-guard/run.d 설명 된대로 스크립트 파일에 예상되는 이름을 따라야 하는 새 스크립트를 추가 할 수 있습니다 .run-parts

정말로 비활성화하고 싶다면 shutdown(이것은 기괴한 아이디어입니다)

chmod 0 /sbin/shutdown

그런 다음 사용해야 할 경우 chmod를 0755로 다시 변경하십시오.


내 자신의 소프트웨어를 설치할 수있는 시스템을 충분히 제어 할 수 없기 때문에 좋은 생각이지만 슬프게도 불가능합니다. 슬프게도 나는 그들을 셧다운 할 수있는 충분한 통제력을 가지고 있습니다!
Rich

4
진심 이세요? 매우 이상합니다. 셧다운 만 실행하기 위해 sudo 액세스 권한이있는 경우 사람들에게 sudo를 변경하여 큰 프롬프트를 표시하거나 항상 암호를 요구하도록 설득 할 수 있습니다. 실수로 종료 할 위험이있는 경우 관리자는 molly-guard를 설치해야합니다.
poolie

1

shutdown 명령을 비활성화하려면 바이너리를 실행 파일로 만들지 마십시오. 즉, sudo chmod a-x /sbin/shutdown 종료에 대한 man 항목이 말 했으므로 다른 종료 방법에 영향을 줄 것이라고 생각하지 않습니다.

shutdown은 시스템을 적절한 런레벨로 가져 오기 위해 init 데몬에 요청을 보냅니다.

예를 들어 GNOME 메뉴에서 shutdown을 사용하여 시스템을 종료 할 수 있습니다. 또한 여전히 reboot 명령을 사용하여 명령 행에서 컴퓨터를 재부팅 할 수 있습니다


1

shutdown명령입니다 /sbin/shutdown. 다음을 수행하여 비활성화 할 수 있습니다.

sudo mv /sbin/shutdown /sbin/really-do-shutdown

그러나 이것은 시스템을 종료하는 일반적인 방법이 더 이상 작동하지 않음을 의미합니다. 이 답변에 대한 테스트 시스템에서 그놈을 종료하면 사용자가 로그 아웃하고 GDM으로 돌아갈 수 있습니다.

나중에 시스템을 종료하려면

sudo init 0

"비활성화"종료는 무엇이든 명령을 사용하는 모든 응용 프로그램에 영향을줍니다. 이후 init 0시스템을 종료하는 권장 방법이 아니다,이 모든 프로그램은 시스템 사용을 종료하려면 shutdown더 이상 작동하지 않습니다 그것을 위해를.

  • 응용 프로그램은 또한 누락 된 파일 또는 실행 파일이 아니기 때문에 예외 를 발생시켜 종료가 필요하지 않더라도 충돌을 일으킬 수 있습니다. 이것은 바이너리 바이너리, 이상적으로 실행 가능한 파일 (쉘 스크립트가 아닌 작동하지 않음)을 그 자리로 이동하여 해결할 수있는 엣지 케이스입니다. 예를 들면 다음과 같습니다.

    sudo cp /bin/ps /sbin/shutdown
    

    이것은 원본을 안전하게 이동 한 후에 입니다.

João Pinto의 의견에 요약 된 이유 때문에 , 이 모든 것은 매우 해킹 적 입니다. 그러나 나는 당신이 그것을하지 못하게합니다. :-)

/ sbin / shutdown을 백업 할뿐만 아니라 문제가 발생할 경우를 대비 하여 복구 계획을 세우 십시오. 예를 들어 접근 할 수없는 서버에서는이 작업을 수행하지 마십시오. 그리고 시스템이 (- 내가 테스트 한 -하지만 물론 부팅 전혀 부팅을하지 않는 가정, 사전에 복구 계획을 테스트 하십시오 안전 측면에있을).


0

다른 솔루션을 사용해야한다고 생각합니다. 서버에는 ssh를 통해 종료 및 초기화 0을 비활성화하는 ssh 정책이 있거나 Windows와 같은 콘솔에 "why"및 특수한 "shutdown password"를 입력하는 특수 대화 상자가 있어야합니다 . 이를 위해 서버 사용시 전원 버튼을 암호로 보호해야합니다.

현재는 푸시 버튼 대신 "물리적 키 스위치 = 4 유로"를 사용합니다.


0

shutdown명령 을 비활성화하고 싶습니다 .

cp / sbin / shutdown / sbin / shutdown-backup

rm / sbin / shutdown

누군가가이 명령을 강제로 사용하려고하면

이제 아무도 shutdown 명령을 사용할 수 없습니다.

메시지 명령을 찾을 수 없다는 메시지가 표시됩니다.

vim /etc/bash.bashrc

bash.bashrc의 마지막에 줄을 추가하십시오

alias shutdown = "echo '이 명령을 사용할 수 없습니다' '

다시 원한다면 (활성화). 그냥 다시 복사

cp / sbin / shutdown-backup / sbin / shutdown

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.