사용자 계정의 개념과 역할

사용자 계정의 개념

-리눅스는 다중 사용자 운영체제
-따라서 사용자는 사용자 계정이 있어야 리눅스를 사용할 수 있다.
-사용자 계정은 사용자명 또는 로그인 아이디라고 한다.
-사용자 계정은 유일한 식별값인 UID 를 가진다.

사용자 구분

사용자 계정 구분 설명 UID
일반 사용자 계정 - 일반 사용자 계정
- 자신의 홈 디렉터리 외에는 제한된 권한을 가짐
기본적으로 1000부터 시작
사용자 생성시 임의 지정 가능
root - 슈퍼유저 또는 관리자 계정
- 시스템 사용에 관한 모든 절대적인 권한을 가지고 있음
0
시스템 계정 - 특정 프로그램 실행을 위해 사용
- 보안 목적으로 사용함
- 로그인에 사용되는 계정은 시스템 계정이 될 수 없음
 

사용자 계정의 역할과 의미

-관리자 입장에서 사용자 계정 별로 접근 권한을 통제할 수 있음
-실행 명령도 계정별로 구분할 수 있다.

사용자 계정과 관련된 파일

파일 설명
/etc/login.defs 사용자 계정 생성시 필요한 설정의 기본값을 정의한 파일
/etc/default/useradd 사용자 계정 생성 명령어인 useradd의 실행 파일
/etc/passwd 사용자 계정에 관련된 정보를 가진 텍스트 파일
암호, UID, GID, 설명, 홈디렉토리, 기본셸 등의 정보를 가진다.
/etc/shadow 사용자 계정의 암호와 패스워드 에이징 정보를 가진 파일
패스워드 에이징 : 비밀번호 변경 기간 및 만료 관련
/etc/group 그룹 계정에 관련된 정보를 가진 텍스트 파일
그룹이름, 그룹비밀번호, GID, 구성원 리스트 등의 정보를 가진다.
/home/ 생성되는 사용자의 홈 디렉토리 경로
/etc/skel 사용자 홈 디렉터리가 생성될 때 기본으로 생성될 파일들의 원본을 가진 디렉터리

사용자 계정의 생성 절차

순서 생성 절차
1 useradd 명령어 실행
2 /etc/login.defs 파일과 /etc/default/useradd 파일을 읽어서 사용자 계정 생성 관련 기본값 확인
3 useradd 명령어의 옵션과 인수를 확인하고, 기본값을 대체할지 확인
4 /etc/passwd 파일과 /etc/shadow 파일에 신규 사용자 계정에 해당하는 항목 생성
5 /etc/group 파일에 새로운 그룹에 해당하는 항목을 추가하거나, 기존 그룸에 구성원 추가
6 /home 디렉터리에 사용자 계정의 홈 디렉터리인 /home/<username>을 생성
7 /etc/skel/ 디렉터리에 있는 파일을 사용자 계정의 홈 디렉터리에 복사

사용자 관련 명령어

명령어 설명
useradd 사용자 계정 생성
passwd 사용자 비밀번호 설정
usermod 사용자 계정 수정
userdel 사용자 계정 삭제
id 사용자 정보 확인
chage 사용자 비밀번호 만료 등 에이징 정보 관리
newgrp 임시 주 그룹 변경

1. 사용자 계정 생성 useradd

명령어 설명

사용자 계정을 만드는 관리자 명령

기본 사용법

1
useradd [options] username

옵션

옵션 full name 설명
-c –comment 계정에 대한 설명을 설정하는 옵션
useradd -c "설명" <username>과 같이 사용
-d –home-dir 사용자 계정의 홈 디렉터리 경로를 설정한다.
useradd -d <path> <username>과 같이 사용
이 옵션을 사용하지 않으면 기본 홈 디렉터리 경로인 /home/<username>로 지정된다.
-D –defaults 계정을 생성할 때 사용되는 기본 설정을 보여준다.
홈 디렉터리, 주 그룹, 만료일, 기본 셸 등의 정보가 해당.
-D [options] –defaults 계정을 생성할 때 사용되는 기본 설정을 변경한다.
-b : 홈 디렉터리의 위치 변경
-e : 만료 날짜를 변경
-g : 주 그룹을 변경
-s : 기본 셸을 변경
-e –expiredate 계정의 만료일을 설정하는 옵션
useradd -e YYYY-MM-DD <username>과 같이 사용한다.
옵션 미사용시 /etc/default/useradd 파일에 설정된 EXPIRE 값이 적용된다.
보통 기본값은 무기한(빈 문자열)이다.
-g –gid 계정이 속할 주 그룹을 지정하는 옵션
useradd -g <gid or groupname> <username>과 같이 사용한다.
/etc/group 파일에 이미 존재하는(등록된) 그룹만 지정할 수 있다.
이 옵션을 사용하지 않으면 기본적으로 사용자 계정의 이름 및 uid와 같은 그룹 이름-gid 로 생성된다.
-G –groups 계정이 속하는 부 그룹 1개 이상을 지정할 수 있다.
useradd -G <group1>,<group2>,... <username>과 같이 사용한다.
그룹 여러 개를 지정할 때에는 위처럼 콤마를 이용한다.
-s –shell 사용자의 기본 셸을 설정한다.
useradd -s <path/to/shell> <username>과 같이 사용한다.
-u –uid 사용자의 uid를 수동으로 설정한다.
useradd -u 9876 <username> 과 같이 사용한다.
이 옵션을 사용하지 않으면, 기본적으로 다음으로 사용할 수 있는 UID가 자동으로 지정된다.

예시

1
2
3
4
## comment
useradd -c "the first test user" tfu
cat /etc/passwd | grep tfu
>> tfu:x:1001:1001:the first test user:/home/tfu:/bin/bash
1
2
3
4
## home-dir
useradd -d /data/dirus diruser
ls -l /data
>> drwx------.  2 diruser diruser  62 Nov 26 00:25 dirus
1
2
3
4
5
6
7
8
9
## default
useradd -D
>> GROUP=100
>> HOME=/home
>> INACTIVE=-1
>> EXPIRE=
>> SHELL=/bin/bash
>> SKEL=/etc/skel
>> CREATE_MAIL_SPOOL=yes
1
2
3
4
5
6
7
8
9
## default [options]
useradd -D -s /bin/sh
useradd -D
>> GROUP=100
>> HOME=/home
>> INACTIVE=-1
>> EXPIRE=
>> SHELL=/bin/sh # 변경됨
>> SKEL=/etc/skel
1
2
3
4
5
## expiredate
useradd -e 2024-11-27 oneDayLeft
cat /etc/shadow | grep one*
>> oneDayLeft:!!:20052:0:99999:7::20054:  # 20054
# 1970년 1월 1일로부터 20054일 뒤인 2024-11-27이 expire date로 설정됨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## group

# (1) 기존 사용자 그룹 확인
cat /etc/group | grep one*
>> oneDayLeft:x:1001:    # oneDayLeft 그룹은 1001 gid

# (2) 신규 생성 사용자 그룹 지정 (gid)
useradd -g 1001 1001_user
cat /etc/passwd | grep 1001*
>> 1001_user:x:1002:1001::/home/1001_user:/bin/bash

# (3) 신규 생성 사용자 그룹 지정 (그룹이름)
useradd -g oneDayLeft odl_user
cat /etc/passwd | grep odl*
odl_user:x:1003:1001::/home/odl_user:/bin/bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## groups

# 첫 번째 그룹 생성
useradd firstgroupuser
cat /etc/passwd | grep first*
>> firstgroupuser:x:1004:1004::/home/firstgroupuser:/bin/bash

# 두 번째 그룹 생성  
useradd secondgroupuser
cat /etc/passwd | grep second*
>> secondgroupuser:x:1005:1005::/home/secondgroupuser:/bin/bash

# 멀티그룹 유저 생성
useradd -G 1004,1005 multigroupuser
cat /etc/passwd | grep multi*
>> multigroupuser:x:1006:1006::/home/multigroupuser:/bin/bash
cat /etc/group | grep *multi*
>> firstgroupuser:x:1004:multigroupuser
>> secondgroupuser:x:1005:multigroupuser
>> multigroupuser:x:1006:
1
2
3
4
## shell
useradd -s /bin/sh shuser
cat /etc/passwd | grep shuser
>> shuser:x:1007:1007::/home/shuser:/bin/sh
1
2
3
4
## user-group
useradd -u 9876 custom_uid
cat /etc/passwd | grep custom*
>> custom_uid:x:9876:9876::/home/custom_uid:/bin/bash

2. 사용자 비밀번호 설정 passwd

명령어 설명

-사용자 계정의 비밀번호를 설정하는 명령어이다.
-passwd 명령어로 사용자 계정의 비밀번호를 만들어야만 계정 사용이 가능하다.

기본 사용법

1
passwd username

위 명령어를 실행하면 대화식으로 사용자 계정의 비밀번호를 받는다.
(확인까지 총 2회)

3. 사용자 계정 수정 usermod

명령어 설명

사용자 계정의 정보를 수정하는 관리자 명령

기본 사용법

1
usermod [options] username

-대부분의 옵션이 useradd 명령과 유사하다.

옵션

옵션 full name 설명
-d –home-dir 사용자 계정의 홈 디렉터리 경로를 수정한다.
usermod -d <path> <username>과 같이 사용
-m –move-home -d와 함께 사용되며, 기존 홈 디렉터리의 내용을 새 디렉터리로 복사함
-l –login 사용자 계정의 이름을 변경
-u –uid 사용자의 uid를 수동으로 설정한다.
usermod -u 9876 <username> 과 같이 사용한다.
-L –lock 사용자 계정을 잠근다.
/etc/shadow 파일에 해싱된 비밀번호 앞에 !를 붙인다.
usermod -L <username>과 같이 사용한다.
-U –unlock 사용자 계정을 잠금 해제한다.
/etc/shadow 파일에 붙었던 !를 뗀다.
usermod -U <username>과 같이 사용한다.

예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
## home dir

# 기존 정보 확인
cat /etc/passwd | grep tu_01
>> tu_01:x:1001:1002::/home/tu_01:/bin/bash
ls -l /home
>> drwx------. 2 tu_01    tu_01      62 Nov 26 00:54 tu_01
>> drwx------. 2 tu_02    tu_02      62 Nov 26 00:54 tu_02

# home dir 변경
usermod -d /data/ttt tu_01
cat /etc/passwd | grep tu_01
>> tu_01:x:1001:1002::/data/ttt:/bin/bash
ls -l /home
>> drwx------. 2 tu_01    tu_01      62 Nov 26 00:54 tu_01
>> drwx------. 2 tu_02    tu_02      62 Nov 26 00:54 tu_02
ls -l /data
>> 없음

# home dir 변경 및 디렉터리 복사
usermod -d /data/ttt -m tu_01
ls -l /home
>> drwx------. 2 tu_01    tu_01      62 Nov 26 00:54 tu_01
>> drwx------. 2 tu_02    tu_02      62 Nov 26 00:54 tu_02
ls -l /data
>> drwx------.  2 tu_01 tu_01  62 Nov 26 00:54 ttt
1
2
3
4
5
6
## login name
usermod -l ttt tu_01
cat /etc/passwd | grep ttt
>> ttt:x:1001:1002::/data/ttt:/bin/bash
ls -l /data
>> drwx------.  2 ttt  tu_01  62 Nov 26 00:54 ttt
1
2
3
4
## user id
usermod -u 5555 ttt
cat /etc/passwd | grep ttt
>> ttt:x:5555:1002::/data/ttt:/bin/bash # uid 변경됨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## LOCK

# 사용자의 비밀번호 확인
cat /etc/shadow | grep tu_02
>> tu_02:abcdefg...:20052:0:99999:7:::

# LOCK
usermod -L tu_02
cat /etc/shadow | grep tu_02
>> tu_02:!abcdefg...:20052:0:99999:7::: # 비밀번호 앞에 느낌표가 붙음

# UNLOCK
usermod -U tu_02
cat /etc/shadow | grep tu_02
>> tu_02:abcdefg...:20052:0:99999:7::: # 비밀번호 앞에 느낌표가 사라짐

4. 사용자 계정 삭제 userdel

명령어 설명

-사용자 계정을 삭제하는 관리자 명령이다.
-/etc/passwd 파일에서 삭제하는 사용자 계정에 해당하는 라인을 삭제한다.

기본 사용법

1
userdel [options] username

옵션

옵션 full name 설명
-f –force 로그인 중이거나 다른 사용자가 사용 중이어도 삭제한다.
-r –remove 홈 디렉터리와 파일 및 메일 스풀을 삭제
같은 이름의 그룹도 삭제한다.

예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
## remove

# ttt user : tu_01 그룹 소속, 홈디렉터리는 /data/ttt
cat /etc/passwd | grep ttt
>> ttt:x:5555:1002::/data/ttt:/bin/bash
cat /etc/group | grep ttt
>> 출력 없음
cat /etc/group | grep tu_01
>> tu_01:x:1002:

# userdel -r
userdel -r ttt

# 삭제 후 확인
cat /etc/passwd | grep ttt
>> 출력 없음
cat /etc/group | grep tu_01
>> tu_01:x:1002:   # 사용자명과 그룹명이 달라 생존함
ls -l /data
>> 출력 없음         # 홈디렉터리는 삭제됨

# 남은 그룹 삭제
groupdel tu_01
cat /etc/group | grep tu_01
>> 출력 없음

사용자 계정 삭제시 고려사항

(1) 홈 디렉터리도 삭제할 것인가.
(2) 계정을 삭제하지 말고 잠금 할 것이가.
(3) 삭제될 계정이 소유하는 파일이 있는가.

-파일이 남은 경우, 삭제된 유저의 uid와 동일한 uid를 가지는 신규 사용자가 해당 파일에 대한 권한을 가지는 권한 오류 발생할 수 있음.

1
2
3
4
5
6
7
8
# 삭제될 계정이 소유하는 파일 확인
find / -user <username> -ls

# uid로 파일 찾기
find / -uid UID -ls

# 소유자가 없는 파일 찾기
find / -nouser -ls

5. 사용자 정보 확인 id

명령어 설명

사용자의 uid와 gid 등을 확인한다.

기본 사용법

1
id username

예시

1
2
3
4
5
id tu_01
>> uid=1001(tu_01) gid=1002(tu_01) groups=1002(tu_01)

id tu_02
>> uid=1002(tu_02) gid=1003(tu_02) groups=1003(tu_02)

6. 사용자의 비밀번호 만료 정보 변경 chage

명령어 설명

사용자의 비밀번호 만료에 관한 정보를 변경하는 관리자 명령

기본 사용법

1
chage [options] username

옵션

옵션 full name 설명
-l –list 계정의 패스워드 에이징 정보 확인
-I –inactive 비밀번호 만료 후 비활성화 되기 전까지의 날짜 수 지정
chage -I <days> <username과 같이 사용
-m –mindays 비밀번호 변경 사이 최소 일수 지정
chage -m <days> <username>과 같이 사용
-M –maxdays 비밀번호 변경 사이 최대 일수 지정
chage -M <days> <username>과 같이 사용
-d –lastday 마지막으로 비밀번호를 변경한 날짜 지정
chage -d <date> <username>과 같이 사용
-E –expiredate 계정의 만료 날짜 지정
chage -E <date> <username>과 같이 사용
E -1은 만료일을 사용하지 않는 옵션

7. 일시적으로 주그룹을 변경하기 newgrp

명령어 설명

-일시적으로 자신의 주 그룹을 변경하는 명령어
-기본적으로 자신이 속해 있는 그룹(부그룹) 중에서 지정할 수 있음.
-다른 그룹의 비밀번호를 알고 있는 경우, 다른 그룹도 지정할 수 있음.
-단순히 newgrp 명령어만 실행하면 원래 주그룹으로 되돌아감.

기본 사용법

1
2
3
4
5
# 자신의 부그룹 혹은 비밀번호를 알고 있는 그룹 중 하나를 일시적으로 주그룹으로 변경
newgrp <group>

# 원래 주그룹으로 되돌아감
newgrp

Reference

UNIX시스템 - 김희천,김진욱 저