14장. 보안 셸 스크립트 작성
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
안전한 셸 스크립트 작성?! 소스 코드를 읽을 수 있는데 어떻게 셸 스크립트가 안전할 수 있을까요?
구현 세부 사항을 숨기는 데 의존하는 모든 시스템은 보안을 모호하게 사용하려는 것이며, 이는 전혀 보안이 아닙니다. 소스 코드가 영업 비밀로 엄격하게 보호되고 있지만 해당 소스 코드를 본 적이 없는 사람들이 작성한 익스플로잇에 끊임없이 취약한 주요 소프트웨어 제조업체에 물어보세요. 완전히 공개되어 있지만 매우 안전한 OpenSSH 및 OpenBSD의 코드와 대조해 보세요.
일부 형태의 보안은 유용한 추가 보안 계층이 될 수 있지만, 모호성에 의한 보안은 결코 오래 지속되지 않습니다. 예를 들어, 비표준 포트 번호에서 수신하도록 데몬을 할당하면 소위 스크립트 키드들이 접근하지 못하도록 차단할 수 있습니다. 하지만 조만간 누군가가 숨긴 것을 발견할 수 있기 때문에 모호성에 의한 보안이 유일한 보안 계층이 되어서는 안 됩니다.
브루스 슈나이더의 말처럼 보안은 프로세스입니다. 보안은 제품이나 물건, 기술이 아니며 결코 완성되지 않습니다. 기술, 네트워크, 공격 및 방어가 발전함에 따라 보안 프로세스도 발전해야 합니다. 그렇다면 보안 셸 스크립트를 작성한다는 것은 무엇을 의미할까요?
보안 셸 스크립트는 해야 할 일만 안정적으로 수행합니다. 루트 액세스 권한을 얻기 위해 악용되지 않으며, 실수로 rm -rf /, 비밀번호와 같은 정보를 유출하지 않습니다. 견고하지만 우아하게 실패할 것입니다. 사용자의 부주의한 실수를 허용하고 모든 사용자 입력을 살균합니다. 가능한 한 간단하고 명확하고 읽기 쉬운 코드와 문서로만 구성되어 각 줄의 의도가 모호하지 않도록 합니다.
잘 설계되고 견고한 프로그램과 비슷하지 않나요? 보안은 처음부터 좋은 디자인 프로세스의 일부가 되어야 하며, 마지막에 덧붙여서는 안 됩니다. 이 장에서는 가장 일반적인 보안 취약점과 질문을 강조하고 이를 해결하는 방법을 보여드립니다.
수년에 걸쳐 보안에 관한 많은 책이 출간되었습니다. 관심이 있으시다면 실용적인 UNIX 및 인터넷 보안, 3판(Gene Spafford 외, O'Reilly)이 좋은 출발점이 될 것입니다. Nelson H. F. Beebe와 Arnold Robbins(O'Reilly)가 쓴 클래식 셸 스크립팅의 15장도 훌륭한 자료입니다. "안전한 Unix 코드 작성을 위한 실험실 엔지니어의 체크리스트"와 같은 좋은 온라인 참고 자료도 많이 있습니다.
예제 14-1의 목록은 가장 보편적인 보안 셸 프로그래밍 기법을 모아 놓은 것으로, 필요할 때 빠르게 참조하거나 스크립트 템플릿에 복사할 수 있도록 한 곳에 정리해 놓았습니다. 각 기법에 대한 전체 레시피를 읽고 이해하시기 바랍니다.
예 14-1. ch14/security_template
#!/usr/bin/env bash# cookbook filename: security_template ...