이번 글에서는 Linux 계정 관리에 대하여 배우겠습니다.
보안 엔지니어에게는 가장 중요한 부분임에 틀림이 없습니다. 계정을 누구에게 얼마나 어떻게 주느냐에 따라 시스템의 보안체계가 영향을 받기 때문입니다. 일단 계정은 관리자와 일반사용자 두가지로 분류됩니다.
그리고 계정을 등록하기전, 최소권한의 원칙에 의해 그룹, 즉 '권한을 할당받는 대상을 가장 먼저 분류 및 생성하고 그 아래에 계정을 등록하여야 한다.'라는 것에 따라 보안 엔지니어는 어느 그룹에게 어떤 권한을 주며 그 그룹내에서도 누구에게 어떤 권한을 주는지를 먼저 정하고 나서 그룹생성을 시작해야 합니다.
일단 작업을 하기전에 그룹이나 사용자에 대한 정보를 보는 명령어에 대해 배우겠습니다.
먼저 사용자 등록 정보를 보는 방법에 대해 배우자면, 'cat /etc/passwd'로 접속하면 볼수있습니다. 앞의 명령어를 입력하게 되면 '계정명:암호:UID:GID:주석:홈디렉토리:쉘'의 순서 및 내용으로 구성됩니다. 여기서 중요한것은 UID, GID, 홈디렉토리, 쉘입니다.
UID는 사용자등록번호라고 하며, 숫자로 이루어져 있는데 그 값에 따라 계정의 용도가 달라집니다. 1000 이하의 계정은 daemon(dummy)계정 혹은 관리용계정이고 1000 초과의 계정이 사용할 수 있는 사용자 계정입니다.
GID는 계정이 포함된 그룹의 이름입니다. 하지만 복수의 그룹에 포함되어 있는 경우 마스터그룹에 이름이 출력됩니다.
홈디렉토리는 계정의 기본 디렉토리를 의미하는데 Default값은 '/root/home/계정명'입니다.
쉘은 Background에서 명령어를 인식하고 그 명령어를 실행하는 부분입니다. 쉽게 생각하면 쉘을 통해서 커널에게 할 일을 준다고 생각하면 됩니다.
다음은 사용자 패스워드 및 암호정책 정보를 보는 방법입니다.
'cat /etc/shadow'로 접속하면 확인가능합니다. 물론 관리자 계정에서만 확인 가능하며 사용자 계정에서는 본인계정의 정보만 확인가능하고 다른 계정을 확인하려하면 접근이 거부됩니다.
구성은 '계정:암호:최종변경일:암호변경까지남은날:암호유효기간:암호만료까지경고기간:암호만료뒤계정폐쇠까지기간:계정의만료일:예비'이며, 여기서 중요한 정보는 계정과 암호 입니다.
이 정보에서 중요한 점은 관리자가 암호를 확인하려고 하면 암호란은 해시코드로 출력됩니다. 왜냐하면 관리자가 사용자의 암호를 아는것 자체가 보안에 가장 위험한 것이기 때문입니다. 여기서 해시코드는 MD5알고리즘을 이용하여 변환되는 값인데 단점은 알고리즘이다보니 같은 문자는 같은 해시코드로 출력이 되어 유추가 가능하다는 점 입니다.
그룹등록정보는 'cat /etc/group'으로 확인가능하며 구성은 '그룹명:암호:GID:소속 계정'으로 구성되어있습니다. 여기서 소속 계정은 그룹안에 소속되어있는 계정들을 적으면 되는데 만약 다른 그룹명의 소속 계정란에 계정이 중복으로 적혀있다면 그것은 계정이 여러 그룹에 등록되어 있다는 것입니다. 하지만 마스터그룹은 하나만 가지게 되어있기에 passwd로 확인시 그룹에 하나밖에 출력이 안되는 것 입니다.
이제부터 본격적인 그룹 관리를 해보겠습니다.
먼저 그룹을 등록하는 명령어는 'groupadd'로 'groupadd -옵션 그룹번호 그룹명'으로 작성합니다. 옵션은 -g, -r, -o가 있는데 -o는 절대 사용하면 안됩니다. -g는 1001이상의 중복되지 않는 번호를 사용하는데 번호를 적지 않는다면 자동으로 부여됩니다. -r은 1000 이하의 번호를 부여받게 되는데 위에서도 언급했듯이 daemon(dummy)나 관리 목적으로 사용하려고 만드는 것입니다. 그리고 그룹번호는 적는것이 기본입니다. 앞서 언급했듯이 적지 않아도 자동적으로 중복되지 않게 번호를 부여하기는 하지만 관리자가 계획적으로 그룹번호를 부여하고 관리하는것이 주 업무중 하나이기 때문에 적어주어야 합니다.
그룹을 삭제하는 명령어는 'groupdel'이며 'groupdel 그룹명'으로 작성합니다.
계정 관리는 useradd와 userdel을 사용해서 합니다.
useradd는 이전버전에서는 adduser로 사용했었는데 최근버전에서 변경되었습니다. 이는 useradd명령어가 규격이 없고 만들어진 환경에 따라 다를수있다는 것을 의미합니다.
'useradd -옵션 계정명'으로 작성합니다. 옵션은 -u, -g, -d, -G, -D, -s가 있습니다.
-u : uid지정
-g : gid나 그룹명지정 (default : 계정명)
-d : 홈디렉토리 지정 (default : /home/[계정명])
-G : 보조 그룹 지정
-D : 기본 설정 확인 및 변경
-s : 쉘 지정(로그인이 필요 없는 관리용 계정은 /sbin/nologin으로 설정한다.)
의 기능을 가집니다.
반드시 입력해야 하는것은 -u, -g이며 -s는 관리용계정에는 /sbin/nologin을 적어줍니다.
계정삭제의 경우 userdel을 사용하는데 'userdel -옵션 계정명'으로 작성합니다. 옵션은 -r만 존재하는데 사용하면 계정에 귀속된 홈디렉토리와 mailbox등 계정과 연관된 디렉토리들을 모두 삭제합니다. 이 기능을 사용하지 않고 'userdel 계정명'만 사용해도 계정자체가 지워지기는 하지만 연관된 디렉토리들이 남아 쓸모없는 디렉토리가 되어 버립니다.
useradd명령어에서 -r이라는 옵션이 있는데 이 옵션은 999이하의 UID를 자동으로 할당해줍니다. 즉, 관리상 필요한 계정을 만들때 사용하며, 당연히 shell은 /sbin/nologin으로 정해지며, 홈디렉토리가 생성되지 않습니다.
패스워드관리 명령어는 passwd인데 'passwd 계정명'으로 작성합니다. 일반 사용자는 본인의 계정만 변경이 가능하며 관리자 계정은 모든 계정에 접근은 가능하지만 해시코드로 나오는것처럼 관리자는 일반 사용자의 패스워드는 알수없으므로 바로 새 패스워드를 입력하라는 메시지가 출력됩니다.