dd가 활성 디스크에 쓰기에 대해 보호되지 않는 이유는 무엇입니까?

dd가 활성 디스크에 쓰기에 대해 보호되지 않는 이유는 무엇입니까?

나는 dd를 많이 사용한다. 예를 들어 sdb(USB 디스크) 대신 sda(컴퓨터 디스크)에 쓰고 컴퓨터에 있는 모든 것을 삭제하는 등 언젠가는 실수를 저지를지 모른다는 끊임없는 두려움 속에 살고 있습니다.

나는 dd가 고급 사용자 도구라는 것을 알고 있지만 잘못된 키를 눌러 기본적으로 전체 컴퓨터를 망칠 수 있다는 것은 나에게 이해가 되지 않습니다.

dd가 명령을 받는 디스크에 쓰는 것을 방지하는 보안 조치가 없는 이유는 무엇입니까? 누군가 고의로 어떻게 이런 일을 할 것인지 잘 모르겠습니다.

제가 직접 시도한 것은 아니며, 단지 이에 대해 읽었을 뿐이므로 모든 내용이 틀릴 수도 있습니다.

답변1

나는 dd가 고급 사용자 도구라는 것을 알고 있지만 잘못된 키를 눌러 기본적으로 전체 컴퓨터를 망칠 수 있다는 것은 나에게 이해가 되지 않습니다.

토목 건축에 사용되는 전동 공구의 종류와 작은 일 하나를 잘못하면 무엇을 망칠 수 있는지 생각해 보십시오. 이러한 일을 더 쉽게 예방할 수 있을까요? 그럴 수도 있겠지만, 균형을 맞추는 것은 사고를 더 쉽게 예방할 수 있게 만드는 정도가 도구의 유용성을 떨어뜨리거나 더 어색하게 만드는 정도입니다.

자동차를 운전하는 것은 잠재적으로 훨씬 더 끔찍한 결과를 초래할 수 있는 유사한 비유이지만, 인간은 항상 이것을 관리합니다(사실 너무 많이). 물론 천천히 하면 더 안전하겠지만, 집단적으로 우리는 어떤 위험을 감수할 가치가 있는지 결정했습니다. 마찬가지로, 컴퓨터가 존재하지 않는다면 더 안전할 것이지만 dd, 그 유용성이 위험보다 더 크다고 여겨지기 때문에 컴퓨터는 존재합니다.

dd가 명령을 받는 디스크에 쓰는 것을 방지하는 보안 조치가 없는 이유는 무엇입니까?

실제로는 기본적으로 장치 파일(예: /dev/sda1)에 쓰기 위해서는 수퍼유저 권한이 필요하기 때문입니다. 따라서 root또는 를 통해 작업하지 않는 한 sudo실제로 을 사용하는 버튼 하나로 전체 컴퓨터를 망칠 수는 없습니다 dd.

우리는슈퍼유저 권한으로 명령을 실행하는 데 주의해야 할 사항이 있는 이유는 무엇입니까? 이러한 경고는 매우 널리 퍼져 있으며 이를 보지 않고 *nix 시스템을 작동하게 되는 것은 어려울 것이라고 생각합니다.안전모 영역표지판.

공사 구역에 있어야 할 이유가 없다면 떠나십시오. 그럴 경우 적절한 안전 예방조치를 취하세요. 세상은 위험한 곳일 수 있으며 어떤 곳은 다른 곳보다 더 위험할 수 있습니다. 생각 없이 행동하지 마세요. 나쁜 일이 일어나지 않도록 보장하는 어느 정도의 안전은 생각을 귀찮게 할 필요가 없다는 것을 의미하며, 이는 또한 많은 일을 할 수 없다는 것을 의미합니다. 때로는 그것이 바람직할 때도 있지만 그렇지 않을 때도 있습니다.

답변2

dd 명령이 대상에 마운트된 파일 시스템이 포함되어 있는지 먼저 확인한 다음 확인 메시지를 표시하거나 특수 플래그를 요구하지 않는 이유를 묻는 것이 합리적입니다. 한 가지 간단한 대답은 dd를 이런 방식으로 사용할 수 있을 것으로 예상되고 대화형 입력을 처리하도록 설계되지 않은 모든 스크립트를 손상시킬 수 있다는 것입니다. 예를 들어, 동일한 장치의 파티션이 마운트되는 동안 원시 장치의 파티션 테이블을 수정하는 것이 합리적일 수 있습니다. 첫 번째 섹터만 수정하도록 주의하면 됩니다.

세상에는 엄청난 수의 Linux 시스템이 있으며 사람들이 어떤 종류의 미친 설정을 생각해 냈는지 아는 것은 불가능합니다. 따라서 dd의 관리자는 알 수 없는 수의 환경에 문제를 일으킬 수 있는 이전 버전과 호환되지 않는 변경을 수행할 가능성이 거의 없습니다.

답변3

"옵션이나 확인 메시지와 같은 작은 단계를 추가"하려면 질문에 대한 설명에서 제안한 대로 래퍼 스크립트를 사용하면 됩니다.

즉, dd의 다소 어려운 명령줄 인수를 직접 처리하는 대신 원하는 옵션 구문을 사용하여 관심 있는 dd 인수를 취하는 bash(또는 Python 등)에서 스크립트를 생성하세요. 더 편안합니다. 스크립트는 인수가 적절한지 확인하고 인수(및 최종 dd 명령줄)를 인쇄하므로 모든 것이 올바른지 확인할 수 있습니다. 그런 다음 스크립트는 "계속하시겠습니까? [y/N]"이라고 묻습니다. 따라서 y스크립트가 구성된 dd 명령줄을 실제로 실행하도록 하려면 입력해야 합니다 .

따라서 스크립트가 /dev/sda 또는 해당 파티션에 기록하는 것을 절대 원하지 않으면 그렇게 하는 것을 불가능하게 만들 수 있습니다. 의도한 입력 및 출력 장치를 실제로 선택했는지 확인하는 데 도움이 되도록 스크립트는 blkid 명령을 사용하여 해당 장치에 대한 UUID 및 디스크 레이블을 가져올 수 있습니다. 등.

관련 정보