다음 이전 차례

5. 파일과 파일시스템 보안

시스템을 온라인으로 접속시키기 전에, 몇 분 동안이나마 준비와 계획을 하는 것은 여러분의 시스템과 데이타를 보호하는 것에 큰 도움을 준다.

5.1 umask 조정

umask 명령어는 시스템 파일이 만들어질 때의 허가권 기본값을 정하기 위해서 사용된다. umask에는 정하려는 파일 모드의 십진 전수 (Octal Complement)를 사용한다. 만약 허가권 기본값을 정하지 않은 상태에서 파일이 형성된 게 된다면, 사용자가 모르는 사이에 허가권을 가지면 안되는 누군가에게 읽기 쓰기 허가권을 주게 될 수가 있다. 일반적으로 umask 값은 022 027, 그리고 (제일 제한적인) 077 등이 있다. umask는 일반적으로 /etc/profile에서 조정되고, 시스템의 모든 사용자에게 적용된다. 문서 생성 기본값 (File creation mask)은 7.7.7.에서 원하는 수를 빼면 나온다. 다시 설명하면, 7.7.7.로 umask값을 정해 준 경우에는 새로 만들어지는 모든 문서는 (소유자를 포함한) 모든 사용자들에 게 읽기, 쓰기, 실행권을 주지 않게 된다. umask값이 666이라면, 새로 만들어지는 모든 문서는 111의 (허가권의) 기본값을 가지게 된다. umask값을 033으로 정해 준 예를 들겠다. [11. 십진 전수]

        # Set the user's default umask
        umask 033

특히 루트의 umask 값은 077로 정해서 읽기, 쓰기, 실행을 -- 루트가 직접 chmod를 써서 바꿔 주지 않는 한 -- 다른 사용자가 못하도록 만드는 것이 좋다. 하여간 위의 예인 033인 경우, 새로 만들어지는 디렉토리들은 -- 777에서 033을 뺀 -- 744 허가권을 가질 것이다. 루트의 mask 값은 077이 되므로, 다른 사용자가 --chmod를 써서 뚜렷이 명시하며 바꿔 주지 않는 한 -- 읽고 쓰고 실행할 수 없도록 만들어 주는 것이다 033 umask를 정해 놓은 후에 만들어지는 문서들은 644 허가권을 가지게 된다.

레드 햇을 쓴다면 -- 레드 햇의 사용자의 그룹 ID 구성 방법 (User Private Group rules)을 따른다는 가정 하에 -- umask002라도 좋다. 기본 구성은 한 그룹 당 한 사용자로 되어 있기 때문이다.

5.2 파일 허가권 (File Permissions)

시스템 관리를 할 권리가 없는 사용자나 그룹이 시스템 파일을 임의로 편집하는 일이 없도록 하는 것은 당연히 중요한 것이다.

유닉스는 파일과 파일에 대한 엑세스 관리를 owner, group, 그리고 other라는 세 가지 특성으로 구분한다. 언제나 정확히 하나의 소유자 (owner)가 존재하며, 그룹의 멤버 수는 일정하지 않으며, 나머지 사용자들은 other가 된다.

유닉스 허가권에 대한 간단한 설명:

소유권 (Ownership) - 어떤 사용자나 그룹이 노드와 상위 노드의 허가권에 대한 조정을 할 수 있는 권한을 말한다.

허가권 (permission) - 특정 종류의 엑세스가 가능하도록 정해 주거나 변경될 수 있는 비트다. 디렉토리에 대한 허가권은 파일에 대한 허가권과는 다른 의미를 가질 수가 있다.

읽기 허가권 (Read):

쓰기 허가권 (Write):

실행 허가권(Execute):

문서 성질의 보존 (Save Text Attribute): (디렉토리의 경우)

"스틱키 비트 (sticky bit)"는 디렉토리에 적용될 경우에는 다른 뜻을 가지게 된다. 디렉토리에 스틱키 비트가 붙을 때에는 사용자는 -- 설령 사용자가 디렉토리에 일반적인 쓰기 허가권이 있더라도 -- 소유권이 있거나 확실하게 쓰기 허가권이 허락된 파일 만 지울 수 있게 된다. 이것은 /tmp 따위의 -- 월드-라이타블이면서도 일반 사용자가 무조건 파일을 지우면 좋지 않을 -- 디렉토리 등을 위해 쓰여진다. 스틱키 비트는 긴 디렉토리 리스팅 (ls -l)에서 t로 표시된다.

SUID의 성질 (파일의 경우)

이것은 파일의 set-user-id 허가권을 정의할 때 사용된다. 소유자 허가권에 set-user-id 엑세스 모드가 붙으면 --그리고 파일이 실행 가능한 파일이라면-- 이 파일을 실행하는 프로세스는 프로세스를 만든 사용자가 사용할 수 있는 시스템 리소스를 쓸 수 있는 권한이 부여된다. 이것은 "버퍼 오버플로우 (buffer overflow: 이하 버퍼 범람)"을 사용하는 많은 침탈법의 재료로 쓰여진다.

SGID의 성질 (파일의 경우)

그룹 허가권에 붙은 경우에는 이 비트가 "set-group-id"를 관리하게 된다. 이것은 그룹이 영향을 받는다는 점을 제외한다면 SUID와 같은 역할을 하는 것이다. 영향을 받으려면 역시 파일은 실행 가능하도록 정의되어야 한다.

SGID 어트리뷰트 (디렉토리의 경우)

만약 SGID를 디렉토리에 사용하면 ("chmod g+s 디렉토리"를 씀), 그 디렉토리 안의 파일들은 디렉토리 소유 그룹의 값을 기본 그룹 값으로 가지게 된다.

여러분 - 파일의 소유자 (owner)

그룹 - 여러분이 가입되어 있는 그룹 (group)

나머지 모든 이 - 파일의 소유자나 파일을 소유한 그룹에 속하지 않은 나머지 사용자 (other)

파일의 보기:

    -rw-r--r--  1 kevin  users         114 Aug 28  1997 .zlogin
        1번 비트  (-) 디렉토리인가?     (아니다)
        2번 비트  (r) 소유자에 읽기권?  (있다.  케빈이 읽을 수 있다)
        3번 비트  (w) 소유자가 쓰기권? (있다.  케빈이 읽을 수 있다)
        4번 비트  (-) 소유자에 실행권?  (없다)
        5번 비트  (r) 그룹에 읽기권?    (있다.  users라는 그룹)
        6번 비트  (-)  그룹에 쓰기권?   (없다)
        7번 비트  (-) 그룹에 실행권?    (없다)
        8번 비트  (r) 모든 이에 읽기권? (있다. 모든 이가 읽을 수 있다)
        9번 비트  (-) 모든 이 쓰기권?   (없다)
        10번 비트 (-) 모든 이에 실행권? (없다)

아래에는 필요한 만큼만의 최소한의 허가권을 부여한 보기를 적어 놓았다. 더 큰 허가권을 주는 것이 가능하지만, 설명된 작업 용도에 알맞은 최소 한도로 예를 설정해 놓은 것임을 밝혀 둔다.

        -r--------  소유자의 읽기 허가권이 파일에 있다.
        --w-------  소유자가 파일을 변경하거나 지울 수 있다.
        ---x------  소유자가 파일 (풀그림)을 실행할 수 있지만, 읽기권도 있어야
                    실행되는 쉘 스크립트는 실행하지 못한다.
        ---s------  실세의 사용자 ID를 가진 개인이라면 실행할 수 있다.
                    (setuid 참조)
        -------s--  실세의 사용자 ID를 가진 그룹이라면 실행할 수 있다.
                    (setgid 참조)
        -rw------T  "최근 바뀐 시간 (last modified time)" 정보가 갱신되지 않는다.
                    스왑 파일 등에 사용된다.
        ---t------  상관없음 (전에는 스틱키 비트였음)

디렉토리의 보기:

        drwxr-xr-x  3 kevin  users         512 Sep 19 13:47 .public_html/
        1번 비트  (d) 디렉토리인가?   (그렇다.  많은 파일을 가지고 있다)
        2번 비트  (r) 소유자의 읽기권?  (있다. 케빈)
        3번 비트  (w) 소유자의 쓰기권? (있다. 케빈)
        4번 비트  (x) 소유자의 실행권? (있다. 케빈)
        5번 비트  (r) 그룹의 읽기권?  (있다. users 그룹)
        6번 비트  (-) 그룹의 쓰기권?  (없다)
        7번 비트  (x) 그룹의 실행권?  (있다. users 그룹)
        8번 비트  (r) 다른 이의 읽기권? (있다. 아무나 읽을 수 있다)
        9번 비트  (-) 다른 이의 쓰기권? (없다)
        10번 비트 (x) 다른 이의 실행권? (있다. 아무나 실행할 수 있다)

아래는 최소의 허가권을 준 사용 보기이다. 여기에 설명되어 있는 것 보다 허가권을 더 주는 것은 가능하지만, 아래에 설명하는 정도는 최소 한도로 필요하다.

        dr--------  내용은 보여질 수 있지만, 파일 어트리뷰트는 읽을 수 없게 된다.
        d--x------  디렉토리는 실행 패스 (path)에 넣어져서 사용될 수 있다.
        dr-x------  파일 어트리뷰트는 이제 소유자에 의해서 읽혀질 수 있다.
        d-wx------  디렉토리 현 위치에 있지 않아도 파일은 만들어지고 
                    지워질 수 있다.
        d------x-t  쓰기 엑세스를 가진 다른 사용자들이 파일을 함부로 지우는 것을
                    막는다. /tmp 디렉토리에 사용된다.
        d---s--s--  아무런 작용을 하지 않는다.  (SUID와 SGID 참조)
(보통 /etc 안에 있는) 시스템 설정 파일 (system configuration files)들은 640 (-rw-r-----) 모드이면서 동시에 루트 소유로 되어 있다. [12] 이것은 여러분 사이트의 보안 필요에 따라서 바꾸면 된다. 시스템 파일은 절대로 다른 어떤 그룹이나 누구라도 쓸 수 있도록 하면 안된다. /etc/shadow를 포함한 시스템 파일의 일부는 루트만이 읽기 허가권을 가져야 하고, /etc 안의 디렉토리들은 다른 이들이 읽지 못하도록 해야 한다.

SUID 쉘 스크립트:

SUID 쉘 스크립트는 심각한 보안 위험 요소이며, 그런 이유 때문에 커널이 받아들이지 않도록 되어 있다. 여러분이 얼마나 쉘 스크립트가 안전하다고 생각을 하던 간에, 이것은 크랙커에게 루 트 쉘을 주는 침탈 도구가 될 수 있다.

5.3 완결성의 검사

트립와이어 (Tripwire), 에이드 Aide, 오사이리스 (Osiris) 등의 완결성 (Integrity) 유지용 검사 도구를 사용하는 것은 지역 사용자가 펼치는 (그리고 네트워크를 통해서 들어오는) 공격을 탐지해 내는 매우 좋은 방법이다. 트립와이어, 에이드, 오사이리스 등은 중요한 이진 파일들과 설정 파일들의 첵섬 (checksum) 값을 검출해서 이전에 만들어 놓은 데이타베이스와 비교한다. 파일에 변화가 있으면 표시가 날 것이다. 이러한 풀그림을 쓰는 경우에는 플로피에 설치하고 쓰기 방지 탭을 사용해서 쓰는 것이 좋다. 이렇게 해 놓으면 침입자는 이러한 검사 풀그림에 손을 대거나 데이타베이스를 바꾸지 못하게 된다. 일단 한 번 설치했으면, 일상적인 보안 관리 임무의 일부분으로서 관례적, 주기적으로 실행하는 것이 좋다.

트립와이어 등의 검사 풀그림을 매일 밤 플로피에서 돌리고 아침에 메일로 결과를 받도록 다음과 같이 크론탭을 설정할 수 있다.

        # set mailto
        MAILTO=kevin
        # run Tripwire
        15 05 * * * root /usr/local/adm/tcheck/tripwire
이와 같이 하면 매일 아침 5:15am에 리포트를 보내 줄 것이다.

이러한 검사기는 여러분이 직접 침입자를 눈치채기 훨씬 전에 미리 자동으로 알려주는 귀중한 존재가 될 수 있다. 하지만 일반적 시스템 안에서는 많은 파일이 항시 바뀌므로 변한 것이 여러분의 일 때문인가, 아니면 크랙커의 행동인가를 파악하는 것에 신중을 기하도록 한다.

오픈 소스 버전으로 만들어진 트립와이어 (Tripwire)http://www.tripwire.org에서 무료로 구할 수 있다. 매뉴얼과 고객 지원은 따로 구입해야 한다.

에이드(Aide)http://www.cs.tut.fi/~rammer/aide.html를 참조할 것.

오사이리스 (Osiris)http://www.shmoo.com/osiris/를 참조할 것. 1086:

5.4 트로이의 목마

트로이의 목마는 호머의 일리어드에 나오는 전설적인 책략에서 비롯된 이름이다. 그럴듯해 보이는 어떤 풀그림이나 이진 파일을 업로드해 놓고, 다른 사람들이 그것을 다운 받아서 루트로서 돌리도록 한다. 그런 뒤에 사용자가 신경을 주지 않는 틈을 타서 시스템에 깨고 들어오는 것이다. 방금 받은 이진 파일이 관리자가 애초에 기대했던 어떤 일을 한다고 생각하는 사이에 --정말로 그런 척 하기도 한다-- 한편으로는 보안을 깨고 들어오는 것이다.

여러분의 컴퓨터에 무슨 풀그림을 설치하였는지는 잘 살피도록 해야 한다. 레드 햇은 RPM 파일의 MD5 첵섬과 PGP 시그니춰를 제공하므로, 설치하고 있는 풀그림이 진짜인지 확인할 수 있다. 다른 배포본도 비슷한 방법을 쓴다. 소스도 있거나 잘 알려진 것이 아닌 한, 루트의 권한으로 어떤 이진 파일도 실행되어서는 안 된다! 일반 대중이 정밀한 조사를 할 수 있도록 소스를 공개할 크랙커는 없다시피 하므로.

귀찮을 수도 있지만, 풀그림의 소스를 정품 배포 장소에서 가져왔는지 확인하도록 하라. 풀그림이 루트에서 실행될 상황이라면 여러분이나 믿을 만한 누군가가 소스를 훑어보고 확인하도록 해야 한다.


다음 이전 차례