다음 이전 차례

2. 개요

이 문서에서는 리눅스 시스템의 보안을 위해서 쓰는 몇 가지 절차와 자주 쓰이는 소프트웨어들을 설명하겠다. 시작에 앞서서 기본 개념을 논의하고 보안에 대한 기본적 토대를 만드는 것이 중요할 것이다.

2.1 왜 보안이 필요한가?

항시 변화하는 글로벌 데이타 커뮤니케이션의 세계에서, 그리고 값 싼 인터넷 연결이 가능한 현재에서, 또한 빠르게 움직이는 소프트웨어 개발에 있어서, 보안은 갈수록 중요한 문제로 떠오르고 있다. 컴퓨터라는 것이 개발 초기부터 보안을 염두를 두고 만든 것은 아니었기에, 보안은 근래에 와서야 기본적 필요조건으로 등장하게 되었다. 나쁜 보기를 들자면, 인터넷 상에서 한 데이타가 A 지점에서 B 지점으로 흐르는 중간의 여러 다른 지점에서, 다른 사용자들이 데이타를 가로채거나 심지어 변경해 버릴 수 있는 기회를 갖게 된다. 심지어 여러분의 시스템에 있는 다른 사용자들이 여러분의 데이타를 -- 여러분이 의도하지 않은 다른 어떤 것으로 -- 악의로서 변경할 수도 있을 것이다. "크래커"라고도 불리는 침입자들에 의해서 여러분의 시스템이 무단 사용될 수도 있으며, 이들은 뛰어난 지식을 악용함으로서 여러분인 척 신분을 위장하거나, 정보를 훔치거나, 또는 여러분이 여러분 시스템을 사용하고자 함을 거부할 수 있다. 만약 아직도 "핵커"와 "크랙커"의 차이점이 무엇인가 모른다면 http://www.tuxedo.org/~esr/faqs/hacker-howto.html에서 에릭 레이몬드(Eric Raymond)가 쓴 "핵커가 되는 법"을 보기 바란다. [2 핵커 하우투 한글판]

2.2 얼마나 안전한 것이 안전한 것인가?

우선 마음에 새겨 두어야 할 것은 어떠한 시스템도 "완벽하게 안전"할 수 없다는 것이다. 여러분이 할 수 있는 최선의 방법은 여러분의 시스템에 침입하는 일을 가능한 어렵게 만드는 것뿐이다. 평균의 가정용 리눅스 사용자로서는 크랙커에 대비하기 위해서 그리 많은 것이 필요하지 않다. 하지만 (은행, 통신 회사 등의) 위치가 노출된 잘 알려져 있는 리눅스의 사용자들 은 보다 많은 작업을 해야 한다.

계산에 두어야 할 사항은 시스템의 보안을 강화하면 할수록 시스템을 쓰기에 불편하게 된다는 것이다. 여러분은 시스템을 사용해야 하는 사용자의 관점에서도 시스템을 봄으로서 보안성과 편의성에 대한 균형을 잡아야 할 것이다. 예로서, (보안의 입장을 고려해서) 여러분의 시스템에 모뎀으로 접속해 들어오는 사용자 모두에게 콜백 모뎀을 쓰도록 할 수도 있을 것이다. [3 콜백 모뎀]

비록 이 방법을 쓰면 보안을 보다 강화할 수는 있겠지만, 사용자의 입장에서는 로그인을 하기에 불편하게 만드는 것이 된다. 또는, 네트워크이나 인터넷에 아예 연결되지 않게 리눅스 시스템을 만들 수도 있겠지만, 이것은 유용성을 제한하게 되는 것일 것이다.

만약 중간 규모 이상의 대형 사이트라면, 어떤 수준의 보안이 필요하고 이것을 점검하기 위해서는 어떤 절차 감사 (auditing: 監査)가 필요한 것인가를 밝히는 보안 수칙을 준비하는 것이 좋다. 보안 수칙의 예제는 www.faqs.org/rfcs/rfc2196.html를 참고하면 될 것이다. 이 문서는 최근에 갱신되었으며, 여러분 회사의 보안 규칙을 성립함에 중요할 뼈대를 담고 있다. [4. 인터닉 문서] [[[delete this]]]

2.3 무엇을 보호할 것인가?

어떤 위험에 대비해야 할 것인가, 어떤 위험부담을 감수하거나 감수하지 않을 것인가, 그렇다면 결과적으로 시스템이 얼마나 취약하게 되는 것인가 등을 미리 생각해 놓는 것이 좋을 것이다. 무엇을 보호하는가, 왜 보호하는가, 이 보호 대상의 가치는 얼마나 되는가, 그리고 데이타와 자산에 대해서 누가 책임을 질 것인가를 분석하자.

2.4 보안 수칙의 완성

사용자들이 쉽게 이해하고 따를 수 있는 간단하고 일반적인 수칙을 만들도록 해야 한다. 수칙은 관리자 여러분이 수호하는 데이타를 보호하는 동시에, 사용자의 프라이버시도 지키도록 만들어져야 한다. 숙고해야 할 것들은 누가 시스템에 엑세스를 가질 것인가 (친구들이 내 계정을 써도 될 것인가?), 누가 시스템에 소프트웨어를 설치하도록 허락될 것인가, 누가 어떤 데이타를 소유할 것인가 등과, 재해 시의 복구 대책, 시스템의 적절한 사용 등이다.

일반적으로 이용되고 있는 보안 수칙은 다음의 문장으로 시작된다:

허락되어 있지 않은 사항은 금지 사항으로 간주할 것.

이것은 시스템 관리자 여러분이 허락하지 않은 시스템 서비스를 일반 사용자가 사용을 하면 안된다는 뜻이다. 이 수칙은 관리자 여러분의 일반 계정에조차도 적용이 되도록 해야 할 것이다. "도대체 이것의 허가권은 귀찮구먼. 그냥 루트로 들어가서 해 버리지 뭐" 하는 따위는, 너무도 당연히 알려져 있는 침탈법에 사용됨은 물론이고 아직 발견조차 되지 않은 침탈법에로 까지 발전 사용될 보안 개구멍을 열어 놓는 것과 다름없는 것이다.

rfc1244는 네트워크 보안 수칙을 만드 는 방법을 설명해 주고 있다.

rfc1281은 보안 수칙의 예제를 각 단 계의 자세한 설명과 함께 설명해 주고 있다.

마지막으로, ftp://coast.cs.purdue.edu/pub/doc/policy에 있는 COAST 아카이브를 가보면, 실제 사용되고 있는 보안 수칙이 어떻게 만들어져 있는 볼 수 있다.

2.5 사이트 보안의 방법

이 문서는 -- 기계, 데이타, 사용자, 네트워크, 심지어는 여러분의 명성 등, 여러분이 열심히 일하면서 만들어 모은 -- "자산" 보호의 여러 방법에 대해서 논의한다. 만약에 일반 사용자의 데이타를 침입자가 지워 버렸다면 여러분의 명성은 어떻게 될까? 여러분 웹 사이트의 내용이 바꿔져 버렸다면? 여러분 회사가 추진하고 있는 다음 분기의 프로젝트를 침입자가 밝혀 버린다면? 네트워크를 설치할 때는, 단 한 대의 컴퓨터를 더하기 전에도 미리 생각해 두어야 하 는 여러 문제가 있기 마련이다.

여러분이 겨우 하나의 다이알업 PPP 계정을 가지고 있거나 작은 사이트 하나 만을 가지고 있다고 해서, 침입자가 여러분 시스템에 흥미를 안 가질 이유는 없다. 크고 이름 있는 사이트들만이 침입 대상이라고 생각하면 안된다. 많은 침입자들은 "크기에 상관없이 가능한 많은 사이트를 침입한다"는 목적만으로 침탈을 시행한다. 덧붙여서, 여러분 사이트의 보안 개구멍 (Security hole) 을 사용해서 여러분이 연결되어 있는 다른 사이트로 우회적인 엑세스를 할 수도 있는 것이다.

침입자들은 시간이 남아도는 사람들이며, 설령 여러분이 시스템을 구석에 꽁꽁 감추어 놓는다 해도, 모든 가능한 방법을 시도해 보는 방법 등으로 우회 침탈해서 여러분의 시스템에 들어올 수 있다. 침입자가 여러분의 시스템에 흥미를 가질 이유는 많다. 이에 대해서는 뒤에 좀 더 설명을 하겠다.

호스트 보안

여러 보안 영역 중에서 관리자가 가장 집중적인 관심을 쏟는 부분은 아마도 호스트 보안이 아닐까 한다. 여러분이 소유한 시스템이 안전하도록 철저한 관리를 하는 것과 네트워크의 다른 사람들도 같은 정도로 보안에 만전을 다하기를 바라는 것에서부터 시작을 해야 할 것이다. 좋은 패스워드를 고르는 것, 여러분 호스트의 지역 네트워크 서비스에 대한 보안화 작업을 하는 것, 계정 사용일지를 잘 관리해서 만드는 것, 그리고 보안 개구멍이 있다고 알려진 풀그림을 갱신 교체하는 것 등이 지역 보안 관리자 (local security administrator) 임무의 일부이다. 비록 이런 것들이 철저하게 필요한 일이기는 하지만, 네트워크에 붙여지는 컴퓨터 숫자가 불어나기 시작하면 이러한 작업들은 보안 관리자의 기세가 꺾일 정도의 많은 일이 되기도 한다.

네트워크 보안

지역 호스트 보안처럼 네트워크 보안도 중요하다. 한 네트워크에 수 백 내지 수천의 컴퓨터가 붙어 있는 상황에서, 하나 하나의 모든 시스템이 전부 보안화 작업이 되어 있다고 믿어서는 안 될 것이다. 정식 사용자만이 네트워크를 쓰도록 만들고, 방화벽을 만들고, 강력한 암호 기법을 쓰고, 네트워크 상에 관리자 없는 주인 없는 기계 (rogue machine)따위의 안전관리가 안 되어 있는 기계가 없도록 하는 것 등이 모두 네트워크 관리자의 임무인 것이다. [5. 주인 없는 기계]

이 문서는 여러분의 사이트에 대해서 보안화 작업을 실행하는 테크닉을 논의할 것이며, 여러분이 보호하려고 하는 것을 침입자가 엑세스를 못하도록 하는 방지법 등을 보여주려 한다.

은둔 보안 방식 (Security through obscurity)

"구석에 숨는 식의 보안"은 반드시 논의되어야 하는 보안법의 하나이다. 한 예를 들자면, "보안 침탈법이 있다고 알려져 있는 서비스의 포트를 비정규적인 포트로 이동해 놓으면 공격자가 당연히 이 것을 모를 것이므로 당연히 침탈해 들어오지 못할 것"이라는 따위의 생각이다. 이러한 속없는 보안법을 공격자가 어렵잖게 간파해 낼 것임을 믿어 의심치 말라. 이러한 "혼자만 알면서 쓰는 은둔 보안법"은 보안화 방법이 절대 아니다. 단지 여러분이 작은 사이트를 가지고 있다 해서, 혹은 잘 알려져 있지 않다고 해서 여러분이 가지고 있는 것에 침입자가 흥미 를 가지지 않을 것이라는 생각은 금물이다. 무엇을 보호하는 것인가는 다음 항목들에서 다루겠다.

2.6 이 문서의 구성

이 문서는 항목으로 구분해 놓았다. 각 항목은 여러 주제의 보안 이슈를 각각 다룬다. 첫째인 물리적 보안 항목은 기계에 직접 손을 대는 것을 막는 방법을 다룬다. 둘째인 지역 보안은 어떻게 시스템을 지역 사용자로부터 보호할 것인가를 다룬다. 셋째인 파일과 파일시스템 보안은 어떻게 파일시스템을 구성하고 파일의 허가권을 설정해 줄 것인가를 다룬다. 패스워드 보안과 암호화는 암호화 기법을 사용해서 어떻게 여러분의 컴퓨터와 네트워크를 보호할 것인가를 다룬다. 커널 보안은 여러분이 어떤 커널 옵션은 설치해야 하고, 어떤 옵션은 알아두어야 하는가를 논하겠다. 네트워크 보안은 여러분의 리눅스 시스템을 네트워크 공격으로부터 어떻게 보호할 것인가를 다룬다. 온라인 전의 보안 준비는 시스템을 웹에 연결하기 전에 무엇을 준비해야 하는가를 다룬다. 그 다음은 시스템 침입이 목격되고 있는 상황이거나 지난 침입이 발견된 후에는 무엇을 할 것인가를 다룬다. 보안 관련 자료에서는 근본적인 보안 자료들을 열거하겠다. 마지막으로는 FAQ, 그리고 결론을 적겠다.

이 문서를 읽는 중에 염두에 둘 두 가지는:


다음 이전 차례