강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

4. 지역보안

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

4. 지역 보안

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

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

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

4.1 새로운 계정 만들기

사용자에게 계정을 줄 때에는 작업을 위한 최소한의 권한만을 부여하도록 해야 한다. 열 살 난 아들에게 계정을 준다면, 워드 프로세서와 그림 풀그림 엑세스 정도를 주어야 하며, 그의 것이 아닌 데이타를 지울 수 없도록 권한을 제한해야 한다.

4.2 루트 보안

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

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

  • 복잡한 명령을 써야 할 때는 우선 파괴적이지 않은 방식을 사용하라. 와일드 카드를 쓰는 명령의 경우에 특히 주의해야 한다. 예를 들어 "rm foo*.bak"을 실행하기 전에 먼저 "ls foo*.bak"을 써서 여러분이 지우려고 생각하는 파일들만을 지우게 되는지 확인해야 한다. 파괴적인 명령 대신 에코를 쓰는 것도 때로는 좋은 방법이다.
  • 사용자들이 rm 명령어를 쓰면 컴퓨터가 문서 삭제 여부를 재확인 질문하도록, 여러분이 에일리어스 (alias)를 꾸며 주도록 하자. [9. Alias]
  • 특정한 작업을 하기 위해서만 루트가 되도록 하라. 어떤 일을 하는 방법을 알고 싶다면, 루트 자격으로 수행돼야만 하는 작업이 무엇인지 확신될 때까지 일반 사용자용 계정으로 돌아가도록 하라.
  • 루트용의 코맨드 패스 (command path:)는 매우 중요하다. PATH 환경 변수 (PATH environment variable)이라고도 하는 코맨드 패스에는 쉘이 풀그림들을 찾아보는 디렉토리들이 적혀 있다. 루트용의 코맨드 패스를 가능한 짧게 줄이도록 하고, "현재의 디렉토리"를 뜻하는 "." 는 PATH에 절대로 포함하지 않도록 해야 한다. 덧붙여서, 이 패스에는 쓰기가 허락된 디렉토리 (writable directory)를 포함되면 안된다. 공격자가 이 디렉토리의 바이너리 이진 파일 을 변경하거나 새로운 이진 파일을 집어넣을 수도 있고 여러분이 이 것을 실행한 경우에는 공격자가 루트 권한을 침탈하게 되기 때문이다. [10. PATH]
  • 루트의 권한을 가지고 컴퓨터를 사용할 때에는 (r-유틸리티라고도 불리는) rlogin / rsh / rexec 종류의 도구들을 사용하면 안된다. 이것들은 다수의 "공격과 침탈" 방법의 도구 대상이며, 루트가 쓰기에는 절대적으로 위험한 도구들이다. 절대로 루트용 .rhosts 파일을 만들지 말아야 한다.
  • /etc/security 문서에는 루트가 접속할 수 있는 터미널들이 적혀 있다. (레드 햇 리눅스에는) 지역 가상 콘솔 (local virtual consoles: vtys) 만이 기본값으로 적혀져 있다. 다른 것들을 적지 않도록 조심해야 한다. 필요하다면 원격 콘솔에서 일반 사용자 계정으로 접속한 후에 (가능하다면 [ssh]나 다른 암호화된 채널을 사용해서) su를 실행 해 들어올 수 있으므로, 루트로 직접 접속할 필요는 전혀 없다.
  • 루트로서 작업을 할 때에는 언제나 느긋하고 신중하게 행동하라. 여러분이 루트의 자격으로 가지고 하는 행동과 작업은 많은 것들에게 영향을 준다. 충분히 생각한 후에 자판을 두드려라!

(믿을 만한) 누군가에게 수퍼유저 자격으로 접속할 권한을 허용해 주어야 할 절대 명확한 경우가 있을 때 도움이 되는 몇 가지 있다. sudo는 사용자가 자신의 패스워드를 써서 루트 권한으로 몇 가지 제한된 명령을 내릴 수 있도록 해준다. 예컨대 리눅스 시스템의 어떤 사용자가 sudo를 이용해서 -- 루트로서의 별다른 특권을 갖는 일없이 -- 시디롬이나 디스켓을 언마운트하거나 마운트하는 것이 가능하도록 할 수가 있다. sudo를 쓰면 -- 누가 어떤 명령을, 무엇을 하기 위해 사용했는지 추적할 수 있는 -- sudo 사용 시도와 성공에 대한 기록 등이 ( 일지 문서에) 적히게 된다. 그렇기 때문에 루트 접근권을 여러 사람들이 가지는 시스템에서는 변경 사항을 추적할 수 있으므로 sudo를 쓰도록 하는 것이 좋다.

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

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,074 명
  • 현재 강좌수 :  35,995 개
  • 현재 접속자 :  514 명