Thinking Out Loud

[Linux] 리눅스 사용자 생성 및 관리 본문

Linux/Linux Master

[Linux] 리눅스 사용자 생성 및 관리

주롱주롱 2022. 2. 18. 15:08

# 사용자 생성 명령어

useradd 명령어

= $ adduser

- 계정 생성 명령어

- 계정자의 홈 디렉터리 : /home/계정명

- 생성된 계정자 정보가 저장되는 파일 : /etc/passwd, /etc/shadow, /etc/group

- $ useradd [옵션] 계정명

   - $ useradd -s bash 계정명 : 기본 셸을 bash로 지정

   - $ useradd -d /USER1 계정명 : 홈 디렉터리를 USER1으로 지정

 

* /etc/passwd, /etc/shadow, /etc/group

/etc/passwd /etc/shadow /etc/group
- 사용자의 정보들이 담겨있는 파일
- 계정, 인증 관리
- 암호화된 패스워드는 /etc/shadow에 저장됨
- 사용자의 비밀번호 정보가 담겨있는 파일
- 암호화된 패스워드 설정 정책 기재
- 관리자 계정과 관리자 그룹만 이 파일을 읽을 수 있음
- 그룹의 정보가 담겨있는 파일
- 대부분의 리눅스에서는 사용자가 생성되면 그 사용자의 이름과 똑같은 이름의 그룹도 함께 생성
사용자 계정명 : 패스워드(x) : UID : GID : comment : 홈 디렉토리 : 실행프로그램(로그인 쉘) 사용자 계정명 : 암호화된 패스워드 : 마지막 변경 : 패스워드 최소 사용기간 : 패스워드 최대 사용기간 : 경고 : 비활성화 : 만료일 그룹명 : 패스워드(x) : GID : members
ex)
root : x : 0 : 0 : root : /root : /bin/bash
ex) 
root : x : 0 : 
audio : x : 29 : pulse
< 각 필드의 의미 (콜론(:)으로 구분) >
1. 사용자 계정명
2. 패스워드 - x : "사용자의 패스워드가 /etc/shadow에 암호화되어 저장되어 있다."
3. UID - 사용자의 user id. 관리자 계정(root)의 UID는 0
4. GID - 사용자의 그룹 id. 관리자 그룹(root)의 GID는 0
5. comment - 사용자와 관련한 기타 정보. 일반적으로 사용자의 이름. 보안상 사용 X
6. 홈 디렉토리
7. 실행프로그램(로그인 쉘)
 - 사용자가 로그인 시 사용할 쉘
 - 보통 사용자의 쉘 = bash (성능 우수)
 - 로그인이 불필요한 계정의 쉘 (사용자가 아닌 어플리케이션일 경우) = /usr/sbin/nologin, /bin/false, /sbin/nologin 등
< 각 필드의 의미 (콜론(:)으로 구분) >
1. 사용자 계정명
2. 암호화된 패스워드
3. 마지막 변경 - 1970년 1월 1일 기준으로 일수 표시
4. 패스워드 최소 사용기간 - 패스워드를 변경한 이후 최소 이 정도의 기간은 써야한다는 것을 의미. 이 일수가 지나기 전에 암호 변경 불가
5. 패스워드 최대 사용기간 - 마지막 패스워드 변경 이후 만료 일수. 패스워드를 변경하지 않으면 공격자가 패스워드를 깰 수도 있으므로 90일 권장
6. 경고 - 패드워드 만료 이전에 경고할 경고 일수
7. 비활성화 - 패스워드가 만료된 이후에 계정이 잠기기 전까지 비활성 일수(date). 해당 비활성 기간 동안에 패스워드를 변경해야 계정이 잠기지 않음
8. 만료일 - 계정 만료일. 1970년 1월 1일 기준으로 일수 표시
< 각 필드의 의미 (콜론(:)으로 구분) >
1. 그룹명
2. 패스워드 - x : "사용자의 패스워드가 /etc/gshadow에 암호화되어 저장되어 있다."
3. GID (그룹 ID) - 그룹명을 대신하는 정수형 숫자
4. members - 소속된 사용자 계정들

 

passwd 명령어

- 생성된 계정자의 패스워드를 입력 및 변경하는 명령어

- 생성된 계정자의 패스워드가 기록되는 파일 : /etc/shadow

- $ passwd [옵션] 계정명

   - $ passwd -S 계정명 : 계정 상태(Status) 표시 (P : 정상, NP : 패스워드 없음, LK : Lock or NP 상태)

   - $ passwd -d 계정명 : 계정의 패스워드 삭제 (delete)

   - $ passwd -l 계정명 : 계정을 lock 상태로 변경 (lock)

   - $ passwd -u 계정명 : 계정의 lock 상태 해제 (unlock)

 

su 명령어

- switch user

- 현재의 사용자 계정에서 로그아웃하지 않고 다른 사용자 계정으로 로그인하여 해당 사용자의 권한을 획득하는 명령어

- $ su [옵션] [사용자] [셸변수]

   - $ su - root : root의 환경변수를 적용하여 로그인

                   (적용하지 않으면 pwd의 결과가 여전히 전 계정자의 홈 디렉터리로 뜸. 즉, 위치가 변하지 않고 계정자만 바뀌는 상황이 됨)

   - $ su -s bash root : 지정된 셸(bash)로 로그인

   - $ su -c root : 셸을 실행하지 않고 주어진 명령어 수행

 

# 사용자 관련 파일

/etc/default/useradd

- 명령어 useradd로 사용자 계정을 추가할 때 사용되는 정보를 읽어오는 파일

- GROUP : 계정이 기본적으로 소속될 그룹의 GID
- HOME : 계정의 홈 디렉터리 위치
- INACTIVE : 계정의 패스워드 사용기간 만료 후 계정이 사용 불가능해지는 날 지정 (0: 바로 사용불가, -1: 이 기능을 사용 X)
- EXPIRE : 계정의 패스워드 만료일 지정 (없는 경우가 많음)
- SHELL : 계정의 기본 셸 지정
- SKEL : 계정 사용자의 홈 디렉터리에 복사될 초기 환경설정 파일들이 저장된 디렉터리 지정 (즉, 계정이 생성되면 /etc/skel 디렉터리에 있는 초기 환경설정 파일들이 홈 디렉터리로 복사됨)
- CREATE_MAIL_SPOOL : 계정의 메일 파일을 저장할지 여부 지정 (yes, no)

 

/etc/passwd

- 계정자의 정보를 가지고 있는 파일

- 리눅스에 로그인할 때 사용됨

(위의 표 참고)

 

/etc/shadow

- 계정자의 패스워드 정보가 암호화되어 있는 파일

- 암호화 패스워드 및 계정의 유효기간 등을 기록하고 있는 파일

(위의 표 참고)

- $ tail -l /etc/shadow

 

/etc/login.defs

- 사용자 계정 설정과 관련된 기본값을 정의한 파일

- 새로운 계정을 생성할 때 반드시 참조하는 파일

- MAIL_DIR, PASS_MAX_DAYS, PASS_MIN_DAYS, PASS_MIN_LEN, PASS_WARN_AGE, UID_MIN, UID_MAX, GID_MIN, GID_MAX, CREATE_HOME 등 포함

 

# 사용자 계정 관리

usermod 명령어

- 디렉터리 /home 에 위치한 사용자들의 정보를 변경하는 명령어

- 사용자의 홈 디렉터리 변경, 그룹 변경, 유효기간 등 변경

- $ usermod [옵션] 계정명

 

* usermod 옵션

옵션 설명 예시
-d - 사용자의 홈 디렉토리 변경
- 변경할 디렉토리는 미리 생성되어야함
- -m 과 같이 사용하면 사용하던 홈 디렉토리의 파일과 디렉토리도 같이 옮겨주므로 이 경우에는 디렉토리를 생성하지 않아도 됨
$ usermod -d /home/user1 user2
: user2의 새로운 홈디렉토리로 /home/user1 지정
-m - 사용자의 홈 디렉토리 변경 시 기존에 사용하던 파일 및 디렉토리를 옮겨주는 옵션. -d와 함께 쓰임  
-g - 사용자의 그룹 변경 $ usermod -g 1004 user1
: user1 계정의 GID 값을 1004로 변경
-s - 사용자의 셸 변경 $ usermod -s bash user2
: user2의 셸을 bash로 설정
-u - 사용자의 UID 값 변경 $ usermod -u 1004 user1
: user1 계정의 UID 값을 1004로 변경
-e - 계정만기일 변경
- YYYY-MM-DD 또는 MM/DD/YY 형태로 지정
$ usermod -e 2022-02-19 user1
: user1 계정에 만기일 변경
-f - 패스워드 만기일이 지난 후 패스워드에 Lock을 설정할 유예기간 지정 $ usermod -f 3 user1
: user1 계정의 유효일 3일로 설정
-c - 사용자의 간단한 정보를 입력 및 변경 $ usermod -c 주석 user1
: user1의 Comment를 '주석'으로 변경
-G - 추가로 다른 그룹에 속하게 할 때 $ usermod -G 1004 user2
: GID 1004를 갖는 그룹에 user2 계정 추가 (user2의 보조그룹으로 GID 1004 지정)
-a - -G 옵션과 같이 사용하는 옵션
- 기존의 2차 그룹 이외에 추가로 2차 그룹을 지정할 때 사용
 
-p - /etc/shadow의 2번째 필드인 암호화된 패스워드 값을 변경할 때 사용
- 이 옵션을 사용할 때는 암호화된 값으로 값을 지정해야함
 
-l - 사용자의 아이디 변경 $ usermod -l user3 user2
: user2의 계정명(아이디)을 user3으로 변경
-L - 사용자의 패스워드에 LOCK을 걸어 로그인을 막음  
-U - 사용자의 패스워드에 걸린 LOCK을 품  

 

userdel 명령어

- 기존 계정 정보를 삭제하는 명령어

- 사용자의 홈 디렉토리 변경, 그룹 변경, 유효기간 등 변경

- 옵션 없이 userdel 을 사용하면 /etc/passwd, /etc/shadow, /etc/group 에서 해당 계정자의 정보가 삭제됨

- $ userdel [옵션] 계정명

   - $ userdel -r 계정명 : 계정의 메일 파일과 홈 디렉터리 내용 모두 삭제

   - $ userdel -f 계정명 : 삭제 중에 나는 에러를 무시하고 강제로 삭제

 

chage 명령어

- 패스워드의 만료 정보를 변경하는 명령어

- 시스템에게 로그인한 사용자가 패스워드를 변경해야 하는지 알려줌

- 시스템 관리 명령어 → root 권한을 가진 사용자만 사용 가능

- $ chage [옵션] 계정명

 

* chage 옵션

옵션 설명 문법 예시
-l
(소문자 L)
- 지정한 계정의 패스워드 만기 정보를 보여줌 $ chage -l 계정명 $ sudo chage -l user2
-d - 패스워드의 마지막 변경일 수정
  (Last password change)
$ chage -d 날짜 계정명 $ sudo chage -d '2022-02-18' user2
-E - 지정한 계정의 만기일 지정
  (계정의 패스워드 만기일이 아닌 계정 자체의 만기일)
  (Account expires)
$ chage -E 만기일 계정명 $ sudo chage -E '2022-02-19' user2
-m - 지정한 계정의 패스워드 변경일로부터 최소 며칠이 경과해야 다른 패스워드로 변경할 수 있는지 지정
  (Minimum number of days between password change)
$ chage -m 날짜수 계정명 $ sudo chage -m 5 user2
-M - 지정한 계정의 패스워드를 변경 없이 사용할 수 있는 최대 일수 지정
  (Maximum number of days between password change)
$ chage -M 날짜수 계정명 $ sudo chage -M 180 user2
-I
(대문자 i)
- 패스워드 만료 시, 비활성화 상태로 전환되기까지의 유예기간 지정
  (Password inactive)
$ chage -I 날짜수 계정명 $ sudo chage -I user2 
-W - 패스워드 만료 며칠 전부터 사용자에게 경고 메시지를 보낼지 설정
  (Number of days of warning before password expires)
$ chage -W 날짜수 계정명 $ sudo chage -W 10 user2

 

# 그룹 관련 파일

/etc/group

- 사용자 그룹에 대해 정의되어 있는 파일

- 모든 계정은 한 개 이상의 그룹에 포함되어 있다.

(위의 표 참고)

- $ vi /etc/group

 

/etc/gshadow

- 그룹의 암호를 MD5 로 하여 저장하며, 그룹의 소유주, 구성원 설정이 가능

- $ cat /etc/gshadow | grep user2

→ user2:!:: (그룹명 : 그룹암호(!=부여x, *=부여o) : 그룹소유주 : 그룹구성원(콤마로 구분)

- $ cat /etc/gshadow | grep root

→ root:*::

 

# 그룹 관리

groupadd 명령어

- 새로운 그룹을 생성하는 명령어

- $ groupadd [옵션] 그룹명

- ex) $ groupadd -d 1004 user3

       : GID 1004인 user3 그룹 생성

 

groupdel 명령어

- 기존의 그룹을 삭제하는 명령어

- 그룹 안에 소속되어 있는 계정명이 있을 경우 해당 그룹은 삭제되지 않는다.

 

groupmod 명령어

- 그룹의 설정을 변경하는 명령어

- $ groupmod [옵션] 그룹명

- ex) $ groupmod -g 1004 testgroup

       : testgroup의 GID를 1004로 변경

- ex) $ groupmod -n testGroup testgroup

       : testgroup → testGroup 으로 그룹명 변경

 


참고 : 

https://reakwon.tistory.com/137

https://nearhome.tistory.com/49

https://work-01.tistory.com/204

https://tragramming.tistory.com/87