때때로(보통 오랜 기간에 걸쳐) Linux 시스템을 완전히 엉망으로 만드는 명령을 실행하는 데 어려움을 겪게 됩니다.
최근에 실수로 루트 파티션을 다시 마운트한 다음(방금 포맷한 새 USB 드라이브인 줄 알고) 재귀적으로 해당 파티션을 나 자신에게 삭제했습니다(다시 나에게 USB 드라이브에 대한 사용자 액세스 권한을 부여하려고 시도함). 내가 한 일(진행 중)을 깨닫고 이를 중단했지만 피해가 발생했습니다. 많은 핵심 프로그램은 더 이상 루트의 소유가 아니므로 시스템은 본질적으로 좀비 상태에 있습니다. 일부 사용자 기능(ssh, rsync)은 계속 작동하지만 관리 수준 기능은 완전히 잠겨 있습니다. 설치, 제거, 화면 세션에 다시 연결, 재부팅 등을 할 수 없습니다.
이 기계가 내 거실에 나와 함께 있었다면 "수정"(다시 설치)하는 것이 훨씬 쉬울 것입니다. 그러나 그것은 진실이 아니다. 이건 내 동생 집에 있었어. 그는 내가 그를 수리/재설치하는 것을 좋아하지 않으며 나는 그 점을 이해합니다. 그래서 나는 내가 입힌 피해를 복구하는 데 며칠을 보낼 것입니다(그리고 관리적 혼란에 더 잘 견딜 수 있는 무언가를 설치하기를 바랍니다).
나는 질문을 하기 위해 이 모든 말을 합니다. 관리자의 허술함을 방지하기 위해 설치를 강화하는 권장 방법은 무엇입니까?
고려되지 않거나 고려 후 빨리 포기되는 것들:
- 관리자가 어리석은 명령을 실행하지 못하도록 강화하는 것: 좋은 생각이지만, 인간으로서 나중에 나쁜 생각이라는 것을 깨닫는 일을 가끔 하기 때문에 효과가 없습니다. 내가 하고 싶은 것은 앞서 나가는 것입니다. 그래서 내가 어리석은 일을 했을 때 기계가 안 된다고 하면 "아 젠장! 그건 정말 나빴을 수도 있었어(TM)! 다시는 그런 짓은 하지 말자"는 걸 깨닫게 됩니다.
내가 고려한 것들:
- 루트 파티션을 읽기 전용으로 마운트: 루트 파티션을 변경으로부터 보호합니다. 이는 부분적으로 쓸 수 있을 것으로 예상되었지만 실제로는 그렇지 않은 경우 부정적인 결과를 초래할 수 있습니다. 또한 읽기-쓰기 모드에서 파티션이 다른 곳에 마운트되는 것을 방지하는 것도 반드시 가능한 것은 아닙니다.
- 상단에 연합과 같은 쓰기 가능 레이어가 있는 일종의 압축된 읽기 전용 루트 이미지를 사용하면 루트에 실제로 변경 사항이 적용되지 않고 재부팅하면 오류가 해결됩니다. 변경 사항이 필요하지 않으면 괜찮습니다. /좋아요로 설정하면 됩니다. 루트, 아마도 /etc는 다른 곳의 영구 파일에서 다시 로드/채워질 수 있습니다.
- 정기적(아마도 매일) 스냅샷과 함께 btrfs를 사용하면 문제가 발생하면 복구가 더 쉽습니다. 직접적인 사용자 개입이 필요하기 때문에 여전히 최적이 아닐 수 있으며 복구 롤 죄송 변경 사항을 통해 다른 사람을 안내할 수 있는지 모르겠습니다.
- 보다 일반적인 배포판보다는 안정성/예측 가능성/보안을 염두에 두고 설계된 보다 "실시간"/"내장형" Linux/BSD 배포판을 사용하십시오.
현재 상태로는 아마도 옵션 4를 사용하여 지금까지 사용해 온 전체 데비안 설치보다 더 제한된 시스템을 설치할 것입니다. 그러나 파일 서버와 토렌트 클라이언트로서 잘 작동해야 하며 원격 시스템으로서 나 자신으로부터 시스템을 보호하는 것은 꽤 큰 자산입니다.
답변1
엄연한 사실은 아무것도 당신 자신의 어리석음으로부터 당신을 보호할 수 없다는 것입니다. DWIM(Do What I Mean) 인터페이스가 없습니다. 컴퓨터는 의도적인 것과 우연한 것을 구별할 수 없습니다. 잘못된 명령 위에 아무리 많은 추상화를 쌓아도 모든 것이 망가질 것입니다.
간단한 대답은속도를 늦추고 하고 있는 일에 주의를 기울이십시오..
답변2
가상 머신에서 설치를 실행합니다. 알려진 양호한 상태의 스냅샷을 찍습니다. 위험한 일을 하기 전에 스냅샷을 찍어보세요. 호스트 환경에서는 거의 아무것도 수행하지 않습니다. 엉망이라면 호스트 환경에 접속해서 스냅샷을 복원해보세요.
답변3
발에 총을 쏘는 것을 막을 수 있는 것은 없습니다. 루트 파티션이 USB 스틱이라고 "생각"합니다. 중요한 머신을 일회용 가상 머신으로 쉽게 착각할 수도 있습니다. (이것은 우리 모두에게 일어난다)
중요한 것은 컴퓨터가 제공하는 서비스를 중복되게 만드는 것입니다.
이 경우 두 개의 별도 파티션에 두 Linux 버전을 모두 설치할 수 있습니다. 동생에게 다른 일을 시작하라고 말할 수 있습니다. (그냥 생각)
가장 중요한 것은 백업을 갖고 복구 전략을 개발하는 것입니다.
이 경우, 귀하는 동생의 컴퓨터에 대한 책임을 맡았기 때문에 가능한 한 많은 데이터를 지속적으로 백업하고 여러 복사본을 보관해야 합니다.
또한 형제에게 USB Linux 드라이브를 제공하여 부팅하고 SSH 서버와 비밀번호를 설정할 수도 있습니다. 컴퓨터를 USB에서 부팅하도록 설정합니다. 그런 다음 긴급 상황이 발생하면 USB 스틱을 삽입하고 컴퓨터를 다시 시작하라고 요청하세요.
답변4
루트 사용자로 작업을 수행하지 마십시오. 일반 계정으로 루트 작업을 허용하도록 sudo를 설정하지만 비밀번호가 필요합니다. 이를 통해 실제로 수행 중인 작업을 확인할 수 있는 마지막 기회를 얻을 수 있습니다.
그러나 루트로 실행하는 경우 대화형 사용을 강제하는 일반 명령에 대한 별칭을 설정하십시오. 예를 들어 삭제하기 전에 메시지가 표시됩니다 alias rm="rm -i"
. 정말로 원한다면 rm
이를 명시적으로(의식적인 결정으로) 무시할 수 있습니다 .-f
rm *
rm -f *
USB의 FS가 무엇인지 말하지 않았습니다. 일반적으로 VFAT입니다. 각 파일이 특정 사용자의 소유인 것처럼 보이도록 하는 옵션을 사용하여 이러한 파일을 설치할 수 있습니다. 그러면 실제로 실행할 필요가 없으므로 chown -r ...
오류 가능성이 제거됩니다.
높은 권한으로 실행 중임을 알리려면 루트 셸 프롬프트를 빨간색으로 설정하세요.
일반적으로 이로 인해 비밀번호 프롬프트 및 기타 장애물과 같은 일부 작업을 루트로 수행하기가 어려워집니다.
이제 문제를 수정한 후 다른 유사한 시스템에 액세스하여 이를 사용하여 find
SUID/SGID 프로그램을 표시할 수 있습니다. 그런 다음 명령을 사용하여 손상된 디스크가 이 디스크와 일치하도록 만듭니다 chmod
.