잠재적으로 파괴적인 명령줄 옵션으로부터 Linux 명령줄 응용 프로그램을 보호하는 가장 좋은 방법이 무엇인지 이해하는 데 도움을 줄 수 있는 사람이 있는지 궁금합니다.
매우 가상적인 시나리오를 제공하려면 비상 정전이 발생하기 전에 프로세서의 최대 열 설정을 설정하는 명령줄 프로그램을 상상해 보십시오. 또한 두 가지 주요 옵션이 있다고 가정해 보겠습니다. 그 중 하나는 --max-Temperature(섭씨)이며 30에서 50 사이의 정수로 설정할 수 있습니다. 시스템에 전기적/기계적 오류가 발생할 때까지 프로세서가 아무리 뜨거워도 소프트웨어를 통해 프로세서를 종료하지 못하도록 하는 재정의 플래그 --melt도 있습니다.
물론 --melt와 같은 옵션은 위험하며 최악의 경우 물리적 손상을 일으킬 수 있습니다. 그러나 이번에도 이러한 유형의 기능이 필요하다고 가정해 보겠습니다(이상하긴 하지만). 애플리케이션은 루트로 실행되어야 합니다. 하지만 혼란스럽거나 경험이 없는 사용자가 --melt 옵션을 실수로 트리거하지 않도록 하려면 어떻게 하시겠습니까?
물론 매우 일반적인 안티 패턴(IMO)은 --help 또는 매뉴얼 페이지가 그 존재를 드러내지 않도록 옵션을 숨기는 것이지만 이는 모호함을 통한 보안이며 이를 트리거하는 사용자에 의해 깨질 수 있습니다. 의도하지 않은 결과이지만 그것이 무엇을 의미하는지 알아낼 방법이 없습니다.
또 다른 가능성은 플래그를 명령줄 인수로 변경하여 사용자가 실제로 수행하려는 작업에 대해 --melt OVERRIDE 또는 다른 플래그를 전달하도록 요구하는 것입니다.
동일한 목표를 달성하기 위한 다른 메커니즘이 있습니까?
답변1
나는 당신이 유틸리티 프로그래머의 관점에서 이것을 보고 있다고 가정합니다. 단 하나의 정답이 있을 수 없을 정도로 범위가 넓지만, 몇 가지 사항이 떠오릅니다.
-f
대부분의 유틸리티 회사에는 대부분의 안전 검사를 무시하는 "필수" 표시( )만 있는 것 같습니다 . 반면에, 예를 dpkg
들어 더 세분화된 스위치가 있습니다.--force-things
물건여러 개의 서로 다른 키워드가 될 수 있습니다.
그리고 apt-get
"필요한" 패키지 제거와 같은 특정 상황에서 확인하기 위해 완전한 문장을 작성할 수 있습니다. 아래를 참조하세요. (필수 패키지는 패키지를 설치하는 데 필요한 패키지이기 때문에 이것이 단지 명령줄 옵션이라고 생각하지 않습니다. 따라서 잘못된 작업을 실행 취소하는 것은매우딱딱한. 또한 apt
패키지 종속성을 계산하기 전에는 전체 작업을 미리 알 수 없을 수도 있습니다. )
그런 다음 실제로 작업을 시작하기 전에 사용자가 몇 초 정도 기다리도록 하는 것이 유용하다고 생각합니다 cdrecord
. 그러면 숫자가 감소함에 따라 설정이 작동하는지 확인할 수 있습니다.
이것을 시도하면 다음과 같은 결과를 얻게 됩니다 apt-get remove bash
.
WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
bash
0 upgraded, 0 newly installed, 2 to remove and 2 not upgraded.
After this operation, 2,870 kB disk space will be freed.
You are about to do something potentially harmful.
To continue type in the phrase 'Yes, do as I say!'
?] ^C
어느 것을 선택할지는 프로그램 작성자에게 달려 있습니다. 작업이 얼마나 위험한지와 자신의 편집증 수준에 따라 결정을 내려야 합니다. (사용자에 대한 우려 때문인지, 혼돈에 대한 비난을 받을 것에 대한 두려움 때문인지.)
프로세서가 실제로 (중지하고) 불이 붙게 할 수 있는 것이 "위험" 축의 가장 높은 곳에 있을 수 있으며 "예, 내가 말한 대로 하세요"와 같은 처리 유형이 필요할 수 있습니다.
즉, 한 가지 알아야 할 것은 많은 실제 커널 수준 인터페이스가아니요어떤 방식으로든 보호하세요. 대신 아래 파일은 /sys
단순히 열고 내용을 변경하기 위해 작성하므로 파일 액세스 권한 외에는 문제가 발생하지 않습니다. (즉, 루트 사용자여야 합니다.)
이는 하드 드라이브 내용(우리가 알고 있어야 함)에도 적용되며, 2년 전 한 경우에는 마더보드 펌웨어의 구성 변수에도 적용됩니다. 잘못된 것을 사용하는 것이 가능한 것 같습니다 rm -rf
.
완전한 것은 아니고. 바라보다lwn.net 기사그리고시스템 문제 추적기.
따라서 어떤 보호를 구현하더라도 해당 특정 도구를 사용하여 수행된 작업만 보호됩니다.