Operating System/Linux2007/06/16 11:26

Kevin Fenzi (kevin@tummy.com)
Dave Wreski (dave@nic.com)
v1.1.0 2000년 3월 8일
장범수 bschang@kldp.org
2000년 5월 9일

-----------------------------------------------------------------------------------
이 문서는 Linux System 관리자가 상대하게 되는 보안 이슈에 대한 일반적 개론을 밝힌다. 일반적인 보안 철학 등과 Linux System을 침입자로부터 보호할 방법 등의 특정 보기를 몇 가지 적어 놓았다. 보안에 관계된 자료들과 Program을 구할 수 있는 곳도 적어 놓았다. 개선 사항, 건설적인 비평, 첨가 사안, 그리고 수정안 등을 감사한 마음으로 수용하겠다. 여러분의 의견은 두 저자 모두에게 "Security HOWTO"를 Mail의 제목에 써서 보내 주기 바란다
-----------------------------------------------------------------------------------

4. 지역 보안

다음으로 주목해야 할 것은 지역 사용자(Local User)들의 공격에 대한 보안이다. 필자가 방금 지역 사용자들이라고 말했다는데 주목하기 바란다.

지역 사용자의 사용권을 얻는 것이야말로 System에 침입하고자 하는 사람들이 가장 먼저 시도하는 것 가운데 하나다. 지역 사용자들에 대한 보안이 느슨하면, 침입자가 -- 여러 가지 Bug들과 System이 제공하는 Service 허점을 이용해서 -- 그들이 도둑질한 일반 사용자 계정의 사용권을 관리자 (root) 사용권으로 "Upgrade" 해낼 수 있다. 그러므로 지역 사용자들에 대한 보안을 철저히 하면 침입자들이 뛰어넘어야 할 또 하나의 장애물을 만들어 주게 되는 셈이다.

설령 가짜 사용자가 아니라 해도 (특히 진짜 사용자인 경우에도) 지역 사용자들은 여러분의 System을 쑥밭으로 만들 수 있다. 여러분과 안면이 없거나 연락 방법을 모르는 사람에게 계정을 주는 것은 매우 좋지 않은 생각이다.

4.1 새로운 계정 만들기

사용자에게 계정을 줄 때에는 작업을 위한 최소한의 권한만을 부여하도록 해야 한다. 열 살 난 아들에게 계정을 준다면, Word Processor와 그림 Program Access 정도를 주어야 하며, 그의 것이 아닌 Data를 지울 수 없도록 권한을 제한해야 한다.

다른 사람들에게 적절한 Access 권한을 제공하려 할 때, 염두에 두면 좋을 경험적인 법칙들이 있다.

- 사용자들에게 필요로 하는 최소의 권한만을 준다.
- 사용자들이 언제/어디서 Log-In하는지 혹은 Log-In해야 하는지 알아야 한다.
- 폐쇄되었거나 사용이 되지 않고 있는 계정은 지운다.

개개인의 사용자는 Network 전반의 모든 Computer에 대해서 동일한 User ID를 유지하면서 사용하도록 하는 것이 좋다. 일지 기록을 분석할 때와 개인 계정 관리를 할 때 편하기 때문이다.

그룹 유저아이디 GUID를 만드는 것은 철저하게 금지되어야 한다. 사용자의 개인 계정만 사용하게 한다면 사용자의 사용 책임 인과가 분명하게 되지만, 그룹 계정을 쓴 경우에는 책임 인과의 분명성을 구성하기가 불가능하다.

여러 달이나 여러 해 이상 사용되지 않고 있는 지역 사용자 계정은 종종 침입의 도구로 사용된다. 아무도 사용하고 있지 않기 때문에 이런 계정들은 최상의 공격 도구가 된다. [37. 휴면 계정]

4.2 root 보안

Computer에서 가장 추구되는 계정은 root (Superuser) 계정이다. 이 계정은 Computer 전체에 대한 권한이 있으며, Network에 있는 다른 Computer에도 권한을 가질 수 있도록 만들어져 있기도 하다. root 계정을 사용할 때에는 가능한 짧은 시간 안에 특별한 작업만을 하기 위한 경우에만 써야 하며, 관리자 여러분 자신도 평상시에는 일반 사용자용 계정을 써서 사용하는 것이 좋다는 것을 명심해야 한다. root로 Log-In해서 저지르는 실수가 아무리 작은 것이라고 할 지라도 이 것은 큰 문제를 일으키게 된다. root 권한을 갖는 시간이 짧으면 짧을수록 안전한 것이다. 항상 root로 작업을 하는 것은 매우, 정말로, 진짜로 나쁜 생각이다.

root로 작업하다가 자신의 Computer를 뒤죽박죽으로 만드는 것을 피하기 위한 몇 가지 비결이 있다.

복잡한 명령을 써야 할 때는 우선 파괴적이지 않은 방식을 사용하라. 와일드 카드를 쓰는 명령의 경우에 특히 주의해야 한다. 예를 들어 "rm foo*.bak"을 실행하기 전에 먼저 "ls foo*.bak"을 써서 여러분이 지우려고 생각하는 File들만을 지우게 되는지 확인해야 한다. 파괴적인 명령 대신 에코를 쓰는 것도 때로는 좋은 방법이다.

사용자들이 rm 명령어를 쓰면 Computer가 문서 삭제 여부를 재확인 질문하도록, 여러분이 alias를 꾸며 주도록 하자. [9. Alias]

특정한 작업을 하기 위해서만 root가 되도록 하라. 어떤 일을 하는 방법을 알고 싶다면, root 자격으로 수행돼야만 하는 작업이 무엇인지 확신될 때까지 일반 사용자용 계정으로 돌아가도록 하라.

root용의 command path는 매우 중요하다. PATH 환경 변수 (PATH environment variable)이라고도 하는 Command Path에는 Shell이 Program들을 찾아보는 Directory들이 적혀 있다. root용의 Command Path를 가능한 짧게 줄이도록 하고, "현재의 Directory"을 뜻하는 "." 는 PATH에 절대로 포함하지 않도록 해야 한다. 덧붙여서, 이 Path에는 쓰기가 허락된 Directory (writable directory)을 포함되면 안 된다. 공격자가 이 Directory의 Binary 이진 File 을 변경하거나 새로운 이진 File을 집어넣을 수도 있고 여러분이 이것을 실행한 경우에는 공격자가 root 권한을 침탈하게 되기 때문이다. [10. PATH]

root의 권한을 가지고 Computer를 사용할 때에는 (r-Utility라고도 불리는) rlogin / rsh / rexec 종류의 도구들을 사용하면 안 된다. 이것들은 다수의 "공격과 침탈" 방법의 도구 대상이며, root가 쓰기에는 절대적으로 위험한 도구들이다. 절대로 root용 .rhosts File을 만들지 말아야 한다.

/etc/security 문서에는 root가 접속할 수 있는 Terminal들이 적혀 있다. (Redhat Linux에는) 지역 가상 Console (local virtual consoles: vtys) 만이 기본값으로 적혀져 있다. 다른 것들을 적지 않도록 조심해야 한다. 필요하다면 원격 Console에서 일반 사용자 계정으로 접속한 후에 (가능하다면 [ssh]나 다른 암호화된 Channel을 사용해서) su을 실행 해 들어올 수 있으므로, root로 직접 접속할 필요는 전혀 없다.

root로서 작업을 할 때에는 언제나 느긋하고 신중하게 행동하라. 여러분이 root의 자격으로 가지고 하는 행동과 작업은 많은 것들에게 영향을 준다. 충분히 생각한 후에 자판을 두드려라!

(믿을 만한) 누군가에게 Superuser 자격으로 접속할 권한을 허용해 주어야 할 절대 명확한 경우가 있을 때 도움이 되는 몇 가지 있다. sudo는 사용자가 자신의 Path Word를 써서 root 권한으로 몇 가지 제한된 명령을 내릴 수 있도록 해준다. 예컨대 Linux System의 어떤 사용자가 sudo을 이용해서 -- root로서의 별다른 특권을 갖는 일없이 -- CD-ROM이나 Diskette을 Unmount하거나 Mount하는 것이 가능하도록 할 수가 있다. sudo를 쓰면 -- 누가 어떤 명령을, 무엇을 하기 위해 사용했는지 추적할 수 있는 -- sudo 사용 시도와 성공에 대한 기록 등이 (일지 문서에) 적히게 된다. 그렇기 때문에 root 접근권한을 여러 사람들이 가지는 System에서는 변경 사항을 추적할 수 있으므로 sudo을 쓰도록 하는 것이 좋다.

비록 sudo가 특정 사용자에게 특정 작업을 할 수 있는 제한된 특권을 주지만, 이 또한 몇 가지 단점이 있다. 그렇기 때문에 이것은 -- Server를 Restart하거나 새 사용자를 등록하는 등의 -- 극히 제한된 작업을 하는 것에만 사용 되도록 구성되어야 한다. 예를 들면 침입자가 Shell Escape 기회를 주는 Program들을 통해서 sudo을 사용함으로써 root 권한을 침탈할 수가 있다. 대부분의 에디터가 이러한 종류의 Program들에 포함된다. 또한, /bin/cat 등의 보잘것없는 Program을 써서도 -- File을 겹쳐 쓰는 방법으로 -- root를 침탈할 수 있다. sudo는 책임성을 밝히는 수단 정도로 생각하도록 하고, root 사용자를 보호하는 역할로는 기대하지 않도록 하자.

Creative Commons License
Posted by BLUEDAY™