무서운 터미널 명령을 어떻게 비활성화합니까?
물리적 서버에 액세스하지 않고 SSH를 사용하여 원격 우분투 서버에 액세스했습니다. shutdownUbuntu OS에서 실행되는 NoSQL 서버에 ' '를 입력하고 있다고 생각 했지만 실제로 Ubuntu 서버를 종료하도록 지시했습니다. 그런 다음 서버 관리자에게 물리적 서버를 시작할 수 있도록 내가 한 일을 알려야했습니다. 당황 스러웠어요!
이 문제가 다시 발생하지 않도록하려면 어떻게해야합니까?
무서운 터미널 명령을 어떻게 비활성화합니까?
물리적 서버에 액세스하지 않고 SSH를 사용하여 원격 우분투 서버에 액세스했습니다. shutdownUbuntu OS에서 실행되는 NoSQL 서버에 ' '를 입력하고 있다고 생각 했지만 실제로 Ubuntu 서버를 종료하도록 지시했습니다. 그런 다음 서버 관리자에게 물리적 서버를 시작할 수 있도록 내가 한 일을 알려야했습니다. 당황 스러웠어요!
이 문제가 다시 발생하지 않도록하려면 어떻게해야합니까?
답변:
표준 답변은 "루트로 로그인하지 마십시오"입니다. 루트로 실행되는 모든 명령은 무섭습니다. 이것이 옵션이 아닌 경우 일부 .bashrc무서운 명령을 비활성화하여 명령을 비활성화 할 수 있습니다. 예를 들면 다음과 같습니다.
for scary in shutdown halt reboot rm
do
alias $scary="echo If you really want to do that, type: `which $scary`"
done
그런 다음 shutdown을 입력하면 다음 메시지가 표시됩니다.
If you really want to do that, type: /sbin/shutdown
( 확인 당신이 .bashrc먼저로드 당신이 시도하기 전에 프로덕션 서버에서)
현재 ssh세션을 종료하고 다시 로그인하거나 . ~/.bashrc.bashrc를로드 / 실행해야합니다. 아마도 rm서버가 .bashrc로그인이나 이와 유사한 것에서 자동로드 를 비활성화하지 않도록 인수없이 실행 해보 십시오 .
주로 중지 및 종료와 관련된 경우 molly-guard 설치를 고려 하면 시스템을 종료하기 전에 호스트 이름을 입력 할 수 있습니다. 명령 행에서 전체 OS를 정기적으로 종료하지만 올바른 OS를 종료하려는 경우 더 유용합니다.
로그 아웃 또는 종료와 같이 덜 무서운 명령으로이를 테스트 할 수도 있습니다.
source.모든 쉘 에서 별명 이며 모든 쉘에서 지원되는 것은 아닙니다.
~/.bash_profile소스 .bashrc가 .bashrc있으므로 차이가 없습니다. 별명을 대신 ~/.profile또는 에 추가하는 것이 훨씬 좋습니다 ~/.bash_profile.
sudo이유가 있으므로 사용하십시오. 명령 (이 경우 대화식 CLI)이 완료되면 루트 셸이 아닌 사용자 수준 셸로 다시 덤프됩니다. 루트 쉘에 있어야 할 합당한 이유는 거의 없습니다. (이것이 이미 답변이 아니라는 것에 놀랐습니다 ...)
데이 사용하는 도련님하지 않는 것이 말했다 sudo에 대한 모든 것을 . 하고있는 일을 이해하고 왜 루트 권한이 필요하지 않은지 이해하십시오.
또한 루트 / 사용자 셸에 대한 프롬프트를 차별화 할 수 있습니다. 또한 " 다른 CLI "가 아니라 쉘 프롬프트로 돌아 왔음을보다 명확하게합니다 . 광산은 매우 화려하고 많은 유용한 정보 (예 : 호스트 이름)를 가지고있어 명령이 실행될 호스트를 매우 간단하게 알 수 있으며 역사를 되돌아보고 프롬프트를 쉽게 찾을 수 있습니다-루트 shell은 기본 프롬프트를 사용합니다.
이것은 "에 사용하는 것이 더 적합 당신의 "계정,하지만 당신은 당신이 암호 / 계정을 공유되지 않으며, 완전히 의식하지 않고 루트 쉘에 앉아되지 않습니다, 심각 sysadminning / 보안을 복용하는 경우.
사람들이 계속해서 말했듯이 " 안전한 환경을 만들기위한 명령 앨리어싱은 나쁜 생각 "입니다. 안전하지 않은 곳에 'scary'명령을 입력하여 안전한 환경에서 편안하게 사용할 수 있습니다. 그러다가 언젠가는 직업을 바꾸거나 새 기계에 로그인 한 다음 " 아무리 붐을 일으켰습니다 .
sudo shutdown없을까요? 그가 잘못된 시스템에서 실행하면 여전히 재앙이 될 것입니다.
sudo는 쉘 명령이며 데이터베이스와 관련이 없습니다.
sudo shutdown가정 sudo하기 때문에을 입력하지 않았을 것 입니다. 루트 쉘에 있지 않다면 그 문제를 완전히 해결했을 것이고 아주 좋은 생각이었습니다. 중요한 명령을 실행하기 전에 프롬프트를주의 깊게 살펴보십시오.
패키지 'molly-guard'(적어도 데비안 파생 시스템에서는)는 종료, 정지, 전원 끄기 및 재부팅 주위에 래퍼를 설치합니다. 터미널이 원격 터미널임을 감지하면 호스트 이름을 입력하라는 메시지가 표시됩니다. 일치하지 않으면 명령이 취소됩니다.
rm -rf /어떻습니까?
set -u은 글을 쓸 때와 같은 경우에 도움이 될 수 있습니다 rm -rf /$SOME_VARIABLE_WHICH_I_THOUGHT_EXISTS_BUT_DOESNT.
--no-preserve-root는 우연히 타이핑하지 않는 것이 필요합니다 .
나는 많은 것을 좋아한다고 대답했지만, 다른 사람이 읽고 있고 더 간단한 대답을 원한다면 여기에 내 것이 있습니다.
.bashrc 파일을 찾아 마지막 줄로 넣으십시오.
alias shutdown=notforuse
그런 다음 shutdown을 입력하면 다음과 같은 결과가 나타납니다. ~bash: notforuse is not a command
이것은 어리석은 것일 수도 있지만 간단하고 작동합니다. 그러나이 작업을 수행하는 더 좋은 방법으로 답변을 주셔서 감사합니다!
rm사람들을 트롤 하기 위해 이것을 사용 alias rm='echo "You can't use rm!" #'
notforuse경로에 유효한 명령이 있으면 혼란 스럽습니다 .
~/.SaveMyReputation하고 현재의 마지막 줄을 추가 .bashrc로 라인 [ -f ~/.SaveMyReputation ] && source ~/,SaveMyReputation. 결국 echo "#Scaring command protected shell, comment the last line of .bashrc and log again to have a full working shell"해당 파일 안에 여분의 줄을 추가 할 수 있습니다 . 적어도 다른 머신에서이 별명 파일을 가져올 수 있습니다 .bash_aliases(하지만이 "더 이상 사용되지 않는" 경우 다른 이름을 사용하는 것이 좋습니다).
alias shutdown=shutdown-disabled-by-an-alias. (이는 @DavidRicherby가 지적한 세 번째로 작은 문제 만 해결합니다.) 다음 사람 이 별명 을보고 notforuse is not a command실행 type -a shutdown하고 찾은 다음 sudo \shutdown별명 확장을 사용하지 않으려면 입력 하는 데 2 초 밖에 걸리지 않습니다. ( sudo별명이 있다고 가정하면 sudo='sudo '첫 번째 인수에서 별명이 확장됩니다).
대한 shutdown( reboot, halt관련) : 내가 정말 확신 (그리고 어쨌든 아무것도하지 않는) 경우 나 한테 물어와 사본을 가지고있다. 그런 스크립트를에 저장 /usr/local/sbin합니다. 데비안에서는 우선 순위가 우선합니다 /sbin(PATH의 첫 번째 디렉토리입니다).
시스템 스크립트는 전체 경로를 사용하므로 이러한 해킹 은 로컬 컴퓨터 대신 원격 서버를 중지하지 못하게 하지만 ( Awesome WM 의 나쁜 동작 ) 다른 간접 효과는 없으며 실제로 필요할 때 / sbin / shutdown으로 사용할 수 있습니다 .
shutdown이 없는 중요한 시스템 에 입력하여 찾을 수 없습니다 .
Sudoers 파일은 * 'sudo를 사용할 수 있습니다'*보다 더 세밀한 수준의 세분성을 허용합니다. 특히 명령 별명을 사용하여 특정 사용자 또는 그룹이 제한하는 명령 그룹의 화이트리스트를 작성할 수 있습니다. ssh 액세스로 제한되고 암호가없는 sudo를 허용하는 원격 서버로 작업했습니다 (암호로 보호되는 ssh 키가 필요했습니다). 이를 수행하는 데에는 몇 가지 이유가 있지만, 위험이 있으므로 명령 별칭을 사용하여 필요하지 않은 작업에 대한 권한을 부여하지 않고 수행해야 할 작업 (서버 다시 시작 등)에 무제한으로 액세스 할 수있었습니다.
'이 명령을 실행할 수 없습니다'라는 구문도 있습니다 . 이 문제는 해결 될 수 있으므로 실제 보안 수단으로 사용해서는 안되지만 설명 된 시나리오에서는 작동합니다.
Man sudoers는이 모든 것을 설정하는 방법에 대한 좋은 예를 가지고 있습니다.
물론 이것은 sudo를 사용해야하지만 아무 말도하지 않아야합니다.
새로운 우분투 어리 석음의 희생양이되었을 수도 있습니다.
우분투는 일반적으로 고전적인 shutdown명령을 가지고 있었으며 필수 시간 인수가 필요합니다.
shutdown일반 사용자로 입력 해도 Ubuntu 12에서 발생하는 상황은 다음과 같습니다 .
$ shutdown
shutdown: time expected
Try `shutdown --help' for more information.
그때
$ shutdown +100
shutdown: need to be root.
자, 여기 우분투 16.10이 있습니다. 나는 뿌리가 아니다 :
$ date ; /sbin/shutdown
Fri Jun 23 16:00:16 PDT 2017
Shutdown scheduled for Fri 2017-06-23 16:01:16 PDT, use 'shutdown -c' to cancel.
인수가 없으면 60 초 후에 종료 일정이 설정되며, 루트 권한이 아니더라도 관리자 권한으로 만든 계정 일뿐입니다.
정식 비난.
/sbin/shutdown systemd-sysv기본적 으로 패키지에 의해 제공 되므로 우분투 어리 석음이 아니며 어리 석음이며 systemd우분투에서 온 것이 아니라 데비안에서 온 것 systemd입니다. 비난 할 때, 당신이 싫어하는 것이 아니라 올바른 존재를 비난하십시오.
종료를 위해 molly-guard가 있습니다. 설치 만하면되고 ssh를 통해 종료하려고하면 호스트 이름을 입력하라는 메시지가 나타납니다.
파일을 삭제하려면 LD_PRELOAD라이브러리 를 통해 휴지통을 에뮬레이트하는 libtrash와 같은 솔루션이 있습니다.
그리고 아마도 프로그램으로 어떤 파일을 변경 / 삭제 / ...하는지 테스트 할 수 있습니다 . 무언가를 테스트 할 때 꽤 멋지다.
maybe문제는 의도적으로 설계된 것 같습니다. 일부 syscall을 no-ops로 스텁하면이 syscall에 의존하는 사소한 프로그램이 중단됩니다.
원격 쉘에있을 때 "return"키를 입력하려고 할 때마다 "return"키에 손가락을 대고 5 초 동안 멈추고 보내려는 명령을 다시 읽으십시오. 괜찮습니까? 확실합니까?
이것은 가혹한 것처럼 보이지만 다른 한편으로는 원격 쉘에 많은 시간을 소비해서는 안됩니다. 유지 관리 작업을 자동화하여 원격 서버에 로그인 할 필요가 거의없는 모든 방법을 찾아야합니다.
shutdown하고 5 초 동안 멈췄다가 명령을 다시 읽었습니다. 그런 다음 Enter 키를 누르면 명령이 방금 실행되었습니다. 그래서 무서운 명령을 비활성화하지는 않았습니다. 나는이 손가락으로 움직이는 것을 시도 할 것입니다. 아마도 거리가 너무 작거나 컸습니다.
rm보다 더 나쁜 부작용을 갖는 것과 관련하여 길게 논의되었습니다shutdown. 결론 : 무작위 명령을 루트로 계속 실행하면 나쁜 일이 발생하는 것을 막을 수있는 방법이 없습니다.