1/11/2007

[Linux] General System Security(Linux Server Security)

1. permission



- 퍼미션은 허가를 나타낸다. 이 허가권에는 세 가지 형태가 있다. 소유자에 대한 퍼미션과 그룹에 대한 퍼미션, 그리고 그 외 사용자들에 대한 퍼미션이다.

- 퍼미션은 ls -l 명령 실행으로 확인할 수 있다.

# ls -l /etc
-rw------- 1 root root 1204 Jan 31 18:13 passwd
drwxr-xr-x 3 root root 1024 Feb 1 01:27 pcmcia
-rw-r--r-- 1 root root 842 Mar 12 2002 profile
drwxr-xr-x 2 root root 1024 Feb 1 2005 profile.d
lrwxrwxrwx 1 root root 7 Feb 1 01:26 rc -> rc.d/rc

- 가장 첫 번째 비트는 파일 타입을 나타낸다. 파일 타입은 다음과 같이 몇 가지가 있다.

- : file
d : directory
l : link file
c : character device
b : block device

- 그 다음 세 개의 비트는 소유자에 대한 퍼미션을 나타내고 그 다음 세 개의 비트는 그룹에 대한 퍼미션, 마지막 세 개의 비트는 그 외 사용자들에 대한 퍼미션을 나타낸다.

- r은 읽기 권한, w는 쓰기 권한, x는 실행 권한을 뜻하는데 이 퍼미션에 따라서 파일을 읽거나 쓰거나 수정하거나 혹은 디렉토리로 접근하거나 파일을 실행하거나 하게 된다.

- 퍼미션 뒤로는 파일의 소유자와 그룹이 표시가 된다.

# chmod g+w [filename] <~ 그룹에게 쓰기 권한 부여
# chmod o+r [filename] <~ 소유자와 그룹을 제외한 다른 모든 사용자에게 읽기 권한 부여
# chmod go-x [filename] <~ 그룹과 그 외 모든 사용자에게서 실행 권한을 없애는 설정
# chmod a+rw [filename] <~ 모든 사용자에게 읽고 쓸 수 있는 권한을 부여

- 퍼미션은 문자뿐만 아니라 숫자로도 나타낼 수 있다.

r : 4(2의2승)
w : 2(2의1승)
x : 1(2의0승)

- 문자로 퍼미션을 조정하였을 경우에는 특정 권한을 더하거나 뺄 때 사용하였지만 숫자로 나타내는 경우에는 특정 권한을 바로 부여할 수가 있다.

# chmod 644 [filename] <~ 소유자는 읽고 쓰기가 가능하며 그룹과 그 외 사용자들은 읽기만 가능
# chmod 755 [filename] <~ 소유자는 읽고 쓰고 실행이 가능하며 그룹과 그 외 사용자들은 읽고 쓰기만 가능
# chmod 600 [filename] <~ 오로지 소유자만이 읽고 쓰기가 가능
# chmod 640 [filename] <~ 소유자는 읽고 쓰기가 가능하며 그룹은 읽기만 가능하고 그 외 사용자들은 어떠한 권한도 없음

- 보통 others에 속하는 일반 사용자가 접근해서는 안 되는 파일의 퍼미션을 조정하여 보안설정을 할 수가 있다.

1.1 Special Permission - setuid, setgid, sticky bits

- 일반적인 퍼미션을 세 개의 숫자로 나타내었다면 특별한 퍼미션은 네 개의 숫자로 나타내어 진다.

- setuid는 파일이 실행될 때만 실행한 사용자에게 소유자의 권한을 부여하는 퍼미션을 말한다. setgid도 비슷한 의미를 가지고 있다. 단지 소유자이냐 그룹이냐의 차이점만 있을 뿐이다.

# ls -al /usr/bin/passwd
-r-s--x--x 1 root root 16336 Feb 14 2003 /usr/bin/passwd

- 숫자로 나타내자면 4511이다. 4는 s 비트를 의미하고 5는 r-x 를, 1은 --x를 의미한다.
위의 passwd라는 명령은 누구든지 실행이 가능하고 실행되는 동안에는 누구든지 root의 권한을 갖게 되는 것이다. 공격자들이 가장 많은 공격을 가하는 프로그램이 바로 이 setuid 비트가 설정된 프로그램이다.

setuid bit : 4(2의2승)
setgid bit : 2(2의1승)
sticky bit : 1(2의0승)

- sticky bit의 가장 대표적인 예는 /tmp 디렉토리이다. 이 디렉토리에서는 누구든지 파일을 생성하고 삭제하고 수정할 수 있지만 삭제하고 수정하는 권한은 소유자만이 가능하다. 물론 root는 누가 생성하였든지 삭제하고 수정할 수가 있다.

# ls -ld /tmp
drwxrwxrwt 3 root root 1024 Jan 31 20:09 tmp


2. umask



- umask는 파일이 생성될 때 부여되는 권한이기 때문에 아주 중요한 역할을 하게 된다. 파일을 생성하는 매번 퍼미션을 조정할 수 없기 때문에 최소 생성시 가장 일반적인 권한을 주기 위해서 umask를 사용한다.

- umask를 지정하는 명령은 다음과 같다.

# umask [number]
or
# umask [u|g|o]=[r|w|x]


3. 표준 보안 퍼미션



- 표준 보안 퍼미션 설정은 시스템 설치 후 필수적으로 적용해야 하는 사항 중 하나이다. 대부분의 파일들은 우리에게 익숙한 파일들이지만 퍼미션은 신경 쓰지 않은 채 지나치기 쉬운 파일들이다.

- 이렇게 퍼미션을 조정해야 하는 파일들은 크게 네 부분으로 나뉘는데 일반적인 설정 파일들이 있고 컴파일 도구들, 시스템 도구들, 네트워크 관련 도구들이 있다. 여기에는 보안상 일반사용자들에게 내부 텍스트 내용이 공개되어서는 안 되는 파일들도 있고 일반 사용자들이 실행하지 말아야 하는 파일들도 속해있다.






- 만약 특정 사용자들, 즉 특정 그룹에 대해서만 권한을 허용해주고자 할 수도 있다. 물론 관리자가 잘 판단하여 정책을 세워야 할 것이다.