사용자 정보

1. /etc/passwd 파일

- 시스템 관리자가 사용자 계정을 만들 때마다 해당 사용자와 관련된 정보를 /etc/passwd 파일에 저장함

- 시스템을 이용하는데 필요한 기본 정보들이 담겨 있음

- /etc/passwd 파일의 각 라인은 개별 사용자에 대한 정보로 이루어져 있음

- 구분자 ':'를 이용하여 7개의 필드로 구분


1) /etc/passwd 파일의 형식

2) 예시

① root: 사용자 계정, 로그인 이름

② x: 사용자의 패스워드 

③ 0: 사용자 ID로 특정 사용자를 나타내는 숫자로 된 ID(UID)

④ 0: 기본 그룹 ID로 사용자가 소속된 그룹을 나타내는 숫자로 된 ID(GID)

⑤ root: 사용자 관련 기타 정보(코멘트, 참고사항)

⑥ /root: 로그인에 성공한 후에 사용자가 위치할 홈 디렉토리 명

⑦ /bin/bash: 명령어를 처리하는 쉘의 종류를 지정

* 참고: /sbin/nologin, /bin/false

쉘의 종류를 나타내는 필드에 /sbin/nologin 또는 /bin/false가 기입되어 있다면, 그 계정은 시스템에서 사용하는 로그인이 필요없는 계정임을 나타낸다. 대부분 UID 100이하, 6000이상은 일반적으로 시스템에서 사용하는 로그인이 필요없는 계정이다. 

시스템에서 사용하는 로그인이 필요없는 사용자 계정을 생성하려면 useradd -s 옵션을 사용하여 로그인 쉘을 /sbin/nologin 또는 /bin/false로 지정하여 새로운 사용자 계정을 생성한다.

예) useradd -s /sbin/nologin testuser


2. /etc/passwd 파일 변경을 통한 해킹 방법, 대응책

1) 방법 1 - 해킹 시 주로 ③번 UID, ④번 GID를 0으로 변경

- 시스템이 UID, GID 기준으로 권한을 부여하기 때문에 계정이름이 root가 아니더라도 UID, GID가 0이면 root가 됨

(윈도우 계열 운영체제에서 시스템의 관리자 계정, 일반 계정을 구분하는 식별자인 윈도우의 보안 식별자(Security Identifier, SID) 500번이 관리자인 것과 같은 개념,

보안 식별자에 대한 자세한 내용은 http://ko.wikipedia.org/wiki/보안_식별자 참조)

2) 방법 2 - ⑦번 쉘 부분을 변경하여 사용자들이 로그인 시 악성 쉘이 실행되게 하는 방법

3) 대응책

- 주기적으로 /etc/passwd 파일의 변경 여부를 확인해서 취약점을 제거해야 함


3. 사용자 확인

- id 명령: 접속 중인 사용자를 확인하는 명령어, 사용자의 UID, GID를 출력

1) id 명령어 도움말

2) id 명령어 실행 결과 예시


4. 패스워드 변경

- passwd 명령: 사용하던 패스워드 변경, 패스워드가 없는 사용자 계정에 패스워드 부여

- passwd 명령 실행

a. 일반 사용자: 자신의 패스워드만 변경 가능

b. 슈퍼유저(root)는 자신을 포함하여 시스템에 등록된 모든 사용자들의 패스워드 변경 가능


1) passwd 명령어 도움말

2) passwd 명령어 실행 예시


5. 패스워드 암호화

- /etc/shadow 파일에 각 사용자 계정에 대한 패스워드가 암호화 되어 있음

1) /etc/shadow 파일의 형식


2) 예시

① root: 사용자 계정, 사용자 계정을 인덱스로 하여 /etc/passwd파일과 사용자 정보를 서로 연계

②$6$ACsZJcs/$sPdN/48UyxLi..ZoiYLKSItHe7OLDp1tHT9doOciy4UtOyJY8guf2xFFhsM1gOvSovmaILQ602.bJqIlHVnmh/: 암호화된 패스워드, 복호화가 불가능, 사용자가 입력한 패스워드를 암호화 하여 필드 값과 비교

- $6: SHA512 ($1: MD5, $2: blowfish, $5: SHA256)

- $ACsZJcs/: salt값

- $sPdN/48UyxLi..ZoiYLKSItHe7OLDp1tHT9doOciy4UtOyJY8guf2xFFhsM1gOvSovmaILQ602.bJqIlHVnmh/

: salt값 + 사용자 입력 패스워드

③ 16550: 마지막으로 패스워드를 변경한 날 (1970년 1월 1일부터 며칠이 지났는지 그 일수로 표기)

④ 0: 최소 변경 일수(패스워드를 변경할 수 없는 기간의 일수 지정)

⑤ 99999: 최대 변경 일수(현재 사용중인 패스워드를 변경하지 않고 사용할 수 있는 기간의 일 수 지정)

⑥ 7: 경고일수(max 필드에 지정한 일수가 며칠 남지 않았음을 알리는 필드, 로그인 할 때마다 경고 메시지 출력)

⑦ (현재 값지정 안함): 최대 비활성 일수(시스템에 로그인을 자주하지 않는 사용자의 경우 사용자 계정을 비활성화 시켜서 로그인이 되지 않도록 하는 기능)

⑧ (현재 값 지정 안함): 사용자 계정이 만료되는 날(1970년 1월 1일 부터 며칠이 지났는지 그 일 수로 표기)

⑨ (현재 값 지정 안함): 사용 안함


3) ②번 암호화된 패스워드 값의 의미

- 암호화된 패스워드 값은 정상 암호, NP, *LK*, 공백 등이 올 수 있음

a. 정상암호: 시스템 관리자가 암호를 지정하거나 일반 사용자가 passwd명력어를 통해 설정

b. NP: no password를 의미함, 주로 애플리케이션을 사용하는 사용자들에게 해당 암호를 지정

c. *LK*: lock이 설정된 사용자, 일반 사용자를 생성하고 정상 암호를 설정해주지 않는 경우 lock이 걸림

d.공백: 시스템 관리자가 암호를 설정해서 사용자에게 알려주는 방식이 아니라 일반 사용자가 처음 로그인시 암호를 직접 설정해서 사용할 수 있도록 함


6. 사용자 관련 명령어

- 각 명령어 실행으로 /etc/passwd, /etc/shadow, /etc/group 파일의 내용이 변경됨

- useradd: 사용자 계정 추가

- usermod: 사용자 계정 변경

- userdel: 사용자 계정 삭제

- 각 명령어 도움말




그룹 정보

1. 그룹명과 그룹 ID

- 자원에 대한 접근 권한 및 보안 등의 관리를 위해 사용자와 사용자가 소속된 그룹에 대한 식별 필요

- 사용자와 그룹을 식별하는 식별자: 사용자 ID, 그룹 ID (유일한 정수값)


2. 기본 그룹과 보조 그룹

- 자원의 소유자가 소속된 그룹에 별도의 접근 권한을 지정할 수 있음

- 같은 그룹에 소속된 사용자는 자원에 대해 동일한 접근 권한을 갖음

- 사용자 계정은 하나의 기본 그룹(Primary Group), 복수의 보조 그룹(Secondary Group)에 소속될 수 있음

- 기본 그룹: 자원의 소유를 기술하기 위하여 사용, /etc/passwd 파일의 4번째 필드 값


3. /etc/group 파일

1) /etc/group 파일의 형식


2) /etc/group 파일 예시

① audio: 그룹명

② x: 사용 안함, 그룹의 암호화된 패스워드 (현재 미사용)

③ 29: 기본 그룹 ID(GID), 그룹명을 대신하는 정수형 숫자

④ pulse: 소속된 사용자 계정들


4. 그룹 관련 명령어

- groupadd: 그룹 만들기

- groupmod: 그룹 설정 내용 변경하기

- groupdel: 그룹 삭제하기

- 각 명령어 도움말