개인정보와 권한

passwd / chsh / chmod / chown chgrp / su

GNU/Linux 시스템의 보안 체계에 대해서는 상반된 두 가지 의견이 - 지금도 일반인들에게 들먹여지고 있다. 소스코드가 공개되어 있는데 어떻게 안전할 수 있느냐는 회의적인 시각과, 소스코드가 공개되어 있으므로 더 안심하고 쓸 수 있지 않느냐는 긍정적인 시각이 그것이다. 이 문제에 대한 기술적인 접근은 보안(security) 문제에 관심있는 이들의 몫이며, 일반 이용자들은 자신의 개인 정보와 데이터를 관리함에 있어 언제나 원칙에 충실해 주기만 하면 되겠다.

개인정보에 대한 명령어들
$ passwd - 패스워드 변경

자신의 로그인 패스워드를 변경하는 명령이다. 물론 현재의 패스워드를 먼저 확인하는 절차를 거쳐야 하며, 패스워드를 입력하는 동안 화면에는 아무것도 표시되지 않는다.

어떤 웹싸이트나 MS-Windows 등에서 이용하던 것보다는 더 성의있는(?) 패스워드를 가지고 있어야 할 것이다. 대부분의 GNU/Linux 시스템은 원칙에 매우 충실한 패스워드 정책을 고수하며, 따라서 "1234"나 "kikiki"와 같은 패스워드에 대해 분명한 경고 메시지를 보인다 - 너무 짧은 경우, 규칙적인 문자열, 사전에 있는 단어, 이전의 것과 크게 다르지 않은 경우 등; 숫자와 영문자(대소문자 구분) 이외에도 특수문자와 공백문자 등도 이용할 수 있음을 참고하자.

제대로 된 패스워드를 생각해 낸다는 것이 정말 머리 아프다면 시스템이 제안하는 패스워드 생성 명령인 mkpasswd를 이용할 수도 있다.[19]

$ chsh - 로그인 쉘 변경

GNU/Linux 시스템의 기본 쉘은 bash(배쉬, Bourne Again SHell)지만 누구든지 원한다면 다른 종류의 쉘로 전환할 수 있다. 시스템에 어떤 쉘이 설치되어 있는지 알아보기 위해 ls /bin/*sh 명령을 해 보자. 대부분 시스템에는 bash 뿐만 아니라 ksh(Korn SHell), zsh(Z Shell), 그리고 tcsh(enhanced C SHell) 등이 설치되어 있을 것이다.

$ chsh
Changing shell for jedi.
Password:                               # 로그인 쉘 변경에는 인증 절차가 필요
New shell [/bin/bash]: /bin/tcsh
Shell changed.

그러나 아무 변화가 없다 - 아직 새로 로그인 하지 않았으므로. 현재 시스템에 곧바로 다시 로그인해서 무엇이 변했는지 확인해 보자.

$ login                            # 현재 시스템에 다시 로그인
login: jedi
Password:

User account has expired        # 이전 로그인 계정이 종료, 즉 새로 로그인 됨!
[jedi@cpu ~]$ echo $SHELL       # 환경변수 SHELL을 출력
/bin/tcsh

포스가 강한 사람이라면 이 보기에서 나타난 프롬프트가 예전에 분석했던 Bash 쉘의 그것과 비슷하면서도 어딘가 달라졌음을 눈치챌 수 있을 것이다. 무엇이 변했을까? 어쨌든 다시 GNU의 기본 쉘인 Bash로 돌아가려면 chsh 명령을 또 실행시키면 된다.

ls -l(또는 간단히 ll) 명령을 실행했을 때 나오는 부담스러운(?) 결과에 대해, 여기에서 마무리해 버리자. 아래와 같은 결과에서, 아직 설명하지 않은 부분은 바로 처음의 10글자와 두 열에 걸친 jedi, 그리고 r2d2 및 robot이다.

$ ls -l
-rw-rw-r--    2 jedi  jedi     43  3월 21  2002 readme.txt
-rw-rw-r--    2 jedi  jedi     43  3월 21  2002 readyou.txt
drwxr-xr-x    3 jedi  jedi   4096  6월 15  2002 Documents
lrwxrwxrwx    1 jedi  jedi     10  8월 20 12:18 doc -> Documents/
$ ll /home
drwx------   13 jedi  jedi   4096  1월 26  2002 jedi
drwxr-xr-x   22 r2d2  robot  4096  9월 20  2001 r2d2
(...생략)

'-rw-rw-r--' 표현은 파일의 종류(1), 그리고 이용자(3), 그룹(3), 기타(3)의 접근권한을 이렇게 10개의 문자로(괄호 속은 각 문자의 갯수) 처리하기 위함이다. 먼저 첫 번째 문자는 파일의 종류를 나타낸다고 했는데, 바로 위의 보기에서 주요한 세 가지 형태를 다 소개하고 있다. - 문자는 일반 파일, d는 디렉토리, 그리고 l은 링크 파일을 의미한다.

다음 9개의 숫자는 3개씩 묶어서 왼쪽부터 각각 이용자(user), 그룹(group), 그리고 그룹과도 무관한 여타 계정 이용자(other)를 의미한다. 이렇게 묶인 3개의 문자들도 각각 순서에 따라 읽기(read), 쓰기(write), 그리고 실행(execute) 권한을 보여준다. 몇 가지 예를 보며 해석을 해 보자. 편의상 10개의 문자를 네 부분으로 분리했다.

- rw- rw- ---

파일이다 / 사용자는 읽고 쓸 수 있다 / 사용자와 같은 그룹에 속한 사람도 읽고 쓸 수 있다 / 그 외엔 읽지도 쓰지도 실행하지도 못한다.

d rwx rwx r-x

디렉토리다 / 사용자는 읽고 쓰고(새 파일) 실행(들어가기)할 수 있다 / 그룹도 읽고 쓰고 실행할 수 있다 / 나머지는 읽고 실행만 할 수 있다.

디렉토리에 대해 쓰기 권한이란 그 디렉토리 내부에 새 파일이나 디렉토리를 생성할 수 있는 것이다. 그리고 실행 권한은 그 디렉토리에 들어갈 수 있는 권한을 말한다.

d rwx r-- r--

디렉토리다 / 사용자는 모든 접근을 할 수 있다 / 그룹과 나머지는 읽기만 할 수 있다.

디렉토리를 읽기만 할 수 있다는 것은, 예를들어 ls dir/ 명령은 할 수 있지만 cd dir/는 안된다는 말이다.

위의 보기에서 jedi jedi, 또는 r2d2 robot 이라고 되어 있는 부분은 그 파일(디렉토리)의 사용자와 그룹을 차례대로 보여주는 것이다. 시스템의 관리자가 따로 그룹을 지정해 주지 않으면 대개 jedi 이용자는 jedi 그룹에 (홀로) 속하게 된다. r2d2 이용자는 보다시피 robot 그룹에 속해 있다.

파일의 접근권 및 이용자 변경에 대한 명령어들
$ chmod [permission] [name] - 접근권한 변경

이 명령은 자신의 파일과 디렉토리들에 대해 다른 이용자들이 어떻게 해 볼 수 있는(읽고/쓰고/실행) 권한을 변경하게 해 준다. 접근권한(퍼미션, permissions)을 명시하기 위해 다음의 두 가지 방식이 있다..

  1. 숫자를 이용 (새로운 퍼미션 지정) - $ chmod 700 something

    소유자/그룹/기타 이 세 대상에 대해 읽기(4, 22), 쓰기(2, 21), 그리고 실행(1, 20) 권한을 더해서 소유자/그룹/기타의 차례로 이루어진 세 자리 숫자를 만든다. 예를들어 777은 7(4+2+1)7(4+2+1)7(4+2+1)이므로 모든 이용자가 모든 접근권한을 가지고 있음을 의미한다. 755는 7(4+2+1)5(4+0+1)5(4+0+1), 따라서 소유자가 읽고/쓰고/실행할 수 있지만 다른 이용자들은 읽고/실행만 할 수 있는 퍼미션이다. 위에 보인 보기 700도 소유자에게 모든 권한을 주지만 다른 이용자들에겐 아무런 권한을 주지 않는 것이다.

  2. 문자를 이용 (현재 퍼미션 변경) - $ chmod a+rx something

    현재의 퍼미션에 [적용대상]+[권한] 또는 [적용대상]-[권한], 즉 적용대상이 가진 권한을 더하거나 빼는 방식이다. 소유자/그룹/기타를 각각 u g o로, 그리고 읽고/쓰고/실행하는 권한은 각각 r w x로 나타낸다. 또한 '모두'를 나타내기 위해 a를 이용한다. 예를들어 a-w는 모두에게서 쓰기 권한을 제거하고, g+rx는 그룹에 속한 이용자들에게 읽기 및 실행 권한을 준다는 의미다.

아래의 보기는 자신의 홈디렉토리에의 접근권한을 시스템에서의 기본값에서 변경하는 과정이다. 기본값을 그대로 두면 다른 이용자들은 자신의 홈디렉토리에 무엇이 있는지 볼 수도 없고 들어올 수도 없을 것이다.

$ ls -l /home/ |grep jedi
drwx------  17 jedi  jedi    4096  3월  1  2002 jedi/
$ chmod 755 /home/jedi          # chmod go+rx /home/jedi 명령과 같다!
$ !-2                           # ls -l /home/ |grep jedi 명령을 다시 실행

이 명령의 주요 옵션은 디렉토리의 소유권을 통째로(하위 디렉토리와, 포함된 모든 파일들까지) 변경하기 위한 -R이 있다. 예를들어 chmod -R 777 dir/이라고 하면 디렉토리 자체를 포함, dir/ 아래에 있는 모든 파일과 디렉토리들의 소유권을 바꾼다(그런데 777이 뭘까? :-). 기타 자세한 이야기는 man chmod 명령으로 알아보길 바란다.

$ chown [owner:group] [name] - 소유주 변경

chownchgrp 명령은 자신의 파일과 디렉토리의 소유권 자체를 변경한다. 일단 상대에게 넘겨준 소유권은 그(녀)가 직접 돌려주지 않으면 되찾을 수 없으므로 주의해서 이용하자. chown 명령에 적절한 옵션을 주면 파일[name]의 그룹 소유권도 함께 바꿀 수 있으므로 chgrp 명령을 따로 기억하지는 말자.

예를들어 chown -R yoda dir/ 명령은 dir/ 디렉토리와 그 아래의 모든 것을 yoda에게 바치는(?) 것이다. -R 옵션은 앞에서 다룬 chmod 명령에서와 같은 의미다. yoda가 속한 그룹도 함께 명시하려면 chown -R yoda:yoda dir/, 즉 owner:group을 함께 써준다.

만약 owner:라고 한다면 owner가 속한 그룹으로 알아서 바뀐다. 그러므로 가장 전형적인 이용법은 (대개 어떤 디렉토리나 파일을 넘겨줄 때 사용자와 그룹을 함께 변경시켜 주므로) chown -R owner: dir/ 정도가 된다. 다른 경우에 대해서는 매뉴얼 페이지를 참고하라.



[19] 하지만 이것으로 만든 패스워드를 기억하는 것은 이용자 자신의 몫이다! 제발 이용자 패스워드를 잊어버렸다며 관리자를 괴롭히지 말아 주길 X-(