사용자 정보 파일, UID
- 사용자 번호, 사용자 판별 번호
- UID가 같은 사용자는 사용자 이름이 다르더라도 리눅스 시스템은 같은 사용자로 인식
- UID를 중복 할당하는 경우, 보안상 문제를 초래할 수 있으므로 사용 시 주의가 필요
그룹 정보 파일, GID
- 그룹은 공통의 목적을 가진 사용자들이 모인 집합으로서 파일의 권한을 공유할 때 사용
- GID 의 고유번호의 판별 번호
- 그룹에는 기본 그룹과 보조 그룹으로 나눠짐
- 기본 그룹과 보조그룹은 사용자별로 설정할 수 있음
기본 그룹
- 모든 사용자는 최소 하나의 그룹에 소속되어야 하는데 이 그룹을 기본 그룹이라고 함
- 사용자가 파일을 생성하는 경우 사용자의 기본 그룹이 파일의 사용자 그룹으로 지정
보조 그룹
- 사용자가 소속되는 또 다른 그룹.
- 보조 그룹도 기본 그룹과 마찬가지로 파일의 권한 중 파일의 사용자 권한을 사용할 수 있음
- 모든 사용자가 보조그룹에 소속되어야 하는 것은 아님
- 사용자는 보조 그룹을 소유하지 않거나 1개 이상을 소유할 수 있음
사용자와 그룹 파일
- /etc/passwd
- /etc/shadow
- /etc/group
- /etc/gshadow
위 4개의 파일에 사용자와 그룹의 정보를 저장하고 있음
파일 |
설명 |
/etc/passwd |
시스템에 등록된 사용자 정보 |
/etc/shadow |
시스템에 등록된 사용자의 패스워드와 패스워드에 대한 설정 |
/etc/group |
시스템에 등록된 그룹 정보 |
/etc/gshadow |
시스템에 등록된 그룹의 패스워드와 패스퉈드에 대한 설정 |
/etc/passwd
- 시스템에 등록된 사용자 정보를 저장
- 편집기를 사용하여 이 파일에 있는 사용자의 정보를 직접 수정할 수도 있지만 지정된 형식에 맞지 않는 정보를 입력할 경우 시스템에 문제를 발생시킬 수 있음
- 따라서, 사용자 정보를 수정할 때는 파일을 직접 수정하지 않고 명령어를 사용할 것을 권장
/etc/passwd 파일은 총 7개의 필드로 사용자의 정보를 저장하고 있고 각 필드는 콜론(:)으로 구분
기본 구조는 다음과 같음.
USER : x : UID : GID : GECOS : HOME : SHELL
필드 |
설명 |
USER |
사용자의 이름을 나타냄. 사용자의 이름은 시스템에서 유일해야 하며 사용자로 로그인 할 때 사용 |
x(place holder) |
사용자의 패스워드를 저장하는 필드. 현재 이 필드는 사용되지 않으며, 현재 패스워드에 대한 정보는 /etc/shadow 파일에 해시 패스워드 형태로 저장 |
UID |
시스템에서 사용자를 식별하는 번호. 0번은 root, 1000번 미만은 시스템 사용자 계정으로 예약되어 있고 일반 사용자는 1000번부터 부여 |
GID |
시스템에서 그룹을 식별하는 번호. 사용자와 마찬가지로 0번은 root 그룹이며 1000번 미만은 시스템 그룹으로 예약되어 있고 1000번 이상부터는 일반 그룹에게 부여 |
GECOS |
General Electric Comprehensive Operating 형식의 주석 필드. 사용자의 계정에 대한 주석을 기재할 수 있음 |
HOME |
사용자의 홈 디렉토리를 절대경로로 나타냄 |
SHELL |
사용자가 기본으로 사용할 쉘을 나타냄 |
[root@centos7 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash #1
bin:x:1:1:bin:/bin:/sbin/nologin #2
daemon:x:2:2:daemon:/sbin:/sbin/nologin #3
adm:x:3:4:adm:/var/adm:/sbin/nologin #4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin #5
...
nobody:x:99:99:Nobody:/:/sbin/nologin #6
...
ntp:x:38:38::/etc/ntp:/sbin/nologin #7
...
gdm:x:42:42::/var/lib/gdm:/sbin/nologin #8
사용자명 |
UID |
설명 |
#1 |
0 |
시스템의 관리자 계정, 시스템을 관리하기 위한 특권(Privilege)을 가지고 있기 때문에 파일에 대한 권한(Permission)의 제약을 거의 받지않음 |
#2 |
1 |
시스템에 구동중인 바이너리 파일을 관리하기 위한 계정 |
#3 |
2 |
백그라운드 프로세스에 대한 작업을 제어하기 위한 시스템 계정 |
#4 |
3 |
시스템 관리를 위한 계정으로 시스템 로깅 같은 특정 시스템 파일을 관리 |
#5 |
4 |
로컬 프린트를 위한 데몬 계정 |
#6 |
99 |
익명 연결 계정, 웹 서비스와 같이 누구나 연결이 가능해야 하는 서비스가 있는 경우 필요한 계정 |
#7 |
38 |
컴퓨터 시간을 동기화 시켜주기 위하여 만들어진 Network Time Protocol 계정 |
#8 |
42 |
그래픽 화면 관리 계정 |
/etc/shadow
- /etc/shadow 파일은 사용자의 패스워드를 해시패스워드 형태로 저장하고 패스워드에 대한 속성을 저장한 파일
- 리눅스 시스템 초기에는 /etc/passwd 파일의 두 번째 필드에 패스워드가 암호화되어 저장되었음
- 하지만 이 파일은 누구나 접근할 수 있고 복호화하기 쉬운 암호화 알고리즘을 사용하였으므로 시스템의 패스워드가 유출될 가능성이 매우 높았음
- 반면 /etc/shadow 파일은 관리자 이외의 사용자에 대한 접근이 차단됌.
- 더 강력한 해시 알고리즘을 통해 패스워드 해시를 생성하기 때문에 복호화 불가능
- 또한 해시 패스워드를 저장하면서 패스워드에 대한 속성이 추가
/etc/shadow 파일은 총 9개의 필드로 구성되어 있고, 각 필드는 콜론(:)으로 구분
기본 구조는 다음과 같음
USER : HASH : LASTCHANGE : MIN : MAX : WARNING : INACTIVE : EXPIRE : BLANK
필드 |
설명 |
USER |
사용자의 이름을 나타냄. |
HASH |
해시 알고리즘을 사용하여 생성된 패스워드가 저장됌. $로 구분하면 다시 3개로 나뉨. 첫 번째 필드는 해시 알고리즘 유형. 두 번째 필드는 해시 알고리즘과 함께 사용할 salt, 세 번째는 해시 패스워드가 저장. 공백이라면 passwd 설정이 되지 않은 상태 |
LASTCHANCE |
마지막으로 패스워드를 변경한 날짜를 의미. 이 숫자는 1970년 1월 1일 기준으로 D+Day |
MIN |
패스워드 변경 후 최소 사용 기간 |
MAX |
패스워드 변경 후 최대 사용 기간, 해당 기간이 지나기 전에 패스워드를 갱신해야 함 |
WARNING |
만료일이 되기 전 사용자에게 경고 메시지를 출력할지 설정. MAX=90, WARNING=5 라면, 사용한 지 85일되는 날 경고 메시지 출력 |
INACTIVE |
패스워드가 만료되고 INACTIVE에 지정된 숫자 안에 패스워드를 변경하지 않으면 사용자 계정이 잠금 상태로 변경 |
EXPIRE |
사용자 계정의 만료일을 지정. 만료일이 되면 해당 사용자는 잠금 상태가 되어 로그인할 수 없음. 이 필드의 값도 LASTCHANCE 값과 같이 계산하여 날짜를 알 수 있음 |
BLANK |
예약된 필드로 아직 사용하지 않음 |
[root@centos7 ~]# cat /etc/shadow
root:$6$ujkQsPM8$qxvbXQcIwCUSsG4zjV4RV/MfSrb1rlTrsrGO7yQZf3R5mgJHj1Wrfe1WSAm7peMdAW9R8GUOMBMDRHm5Ez.t71:18760:0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
...
user:$6$Sy2sjFEcMKRe64Em$q/p28z0tdlcuYi6fQs8Cu73ZREsIYwErQTEiqbYsmlZGVsvIREvc5/CAxQcdD.3jHSZ/PU8SvsfaOMpLbGF.K1::0:99999:7:::
kim:!!:18757:0:99999:7:::
lee:!!:18757:0:99999:7:::
park:!!:18757:0:99999:7:::
/etc/shadow 파일의 패스워드 설정과 관련된 각 필드 값을 변경하기 위해 chage 명령을 사용. 뒤에서 다룰 예정
/etc/group
- 그룹에 대한 정보를 저장
- 대부분의 리눅스에서는 사용자가 생성되면 그 사용자의 이름과 똑같은 이름의 그룹도 함께 생성
- 생성된 사용자의 기본 그룹은 함께 생성된 그룹으로 지정
- /etc/group 에서는 그룹의 GID와 그룹의 구성원을 확인 할 수 있음
- 그룹의 정보를 저장하고 있지만, 각 그룹별로 해당 그룹을 기본 그룹으로 지정하고 있는 사용자의 정보를 확인할 수 없음.
- 기본 그룹의 정보는 /etc/passwd 파일에 저장
- 사용자의 기본 그룹 정보를 확인하고 싶은 경우에는 id 명령을 사용
- id 명령은 사용자의 이름 및 UID 정보, 기본 그룹과 보조그룹의 이름 및 GID 정보 출력
[root@centos7 ~]# id user
uid=1000(user) gid=1000(user) groups=1000(user),10(wheel),1003(alluser)
/etc/group 파일은 총 4개의 필드로 구성, (:) 콜론으로 구분.
기본 구성은 다음과 같음.
GROUP : x : GID : MEMBER
필드 |
설명 |
GROUP |
그룹의 이름을 나타냄. 시스템 내에서 그룹이름은 유일해야 함 |
x |
그룹의 패스워드를 저장하는 필드였지만 현재는 /etc/gshadow 파일에 저장 |
GID |
그룹의 GID를 나타냄 |
MEMBER |
이 그룹을 보조 그룹으로 지정하고 있는 사용자 목록 |
[root@centos7 ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:user
...
/etc/gshadow
- 그룹에 로그인할 때 사용할 해시 패스워드를 저장한 파일로 /etc/shadow 파일과 비슷한 역할을 담당
- 하지만, 요즘 그룹의 해시 패스워드는 거의 사용하지 않음.
/etc/gshadow 파일은 다음과 같이 4개의 필드로 이루어져 있음.
GROUP : PASSWORD : ADMIN : MEMBER
필드 |
설명 |
GROUP |
그룹의 이름을 나타냄. |
PASSWORD |
그룹의 암호화된 패스워드. |
ADMIN |
해당 그룹의 관리자를 나타냄. |
MEMBER |
해당 그룹의 멤버를 나타냄. |
[root@centos7 ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
...