RHCSA 준비/01. 사용자 및 그룹 관리

1.2 사용자 및 그룹 관리 (useradd, usermod, userdel, groupadd, groupmod, groupdel, /etc/skel, /etc/login.defs)

Jaden Park 2021. 5. 19. 16:56

사용자 생성

useradd [option] user-name
  • 사용자가 생성되면 /etc/passwd 파일과 /etc/shadow 파일 가장 마지막에 사용자 정보가 추가됌.
[root@centos7 ~]# useradd king
[root@centos7 ~]# tail -1 /etc/passwd
king:x:20004:20004::/home//king:/bin/bash
[root@centos7 ~]# tail -1 /etc/shadow
king:!!:18765:0:99999:7::18992:
  • 사용자 생성된 후 /etc/shadow 파일에서 생성된 사용자의 해시 패스워드 필드가 "!!" 인 것을 확인할 수 있음.
    • 새로 생성된 사용자는 패스워드가 설정되지 않기 때문
  • 따라서, 이 사용자로 로그인하기 위해선 패스워드를 지정해야 함.
[root@centos7 ~]# passwd king
Changing password for user king.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@centos7 ~]# tail -1 /etc/shadow
king:$6$zJ2jCrvT$8JavZmnxZccg9f9J188e6qr8q07g4lAWMdnznrCD2YQcznOaJ1bX.Azg/Xul7YemYqjbA.eSW6S1YTbl1TJEw0:18765:0:99999:7::18992:

passwd 명령을 사용해서 사용자 "king"의 패스워드를 설정
패스워드를 설정한 후 /etc/shadow 파일의 해시 패스워드 필드에서 사용자의 패스워드가 변경된 것을 확인할 수 있음.

대부분의 리눅스에서는 사용자를 생성하면 기본 그룹과 사용자의 홈 디렉토리 그리고 기본 쉘 등이 자동으로 지정
이와 같은 기본 설정을 확인하려면 useradd 명령의 "-D" 옵션을 사용

[root@centos7 ~]# useradd -D
GROUP=100
HOME=/home/
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

이 때 출력되는 값은 /etc/default/useradd 파일에 명시되어 있음.
해당 파일의 내용은 다음과 같음.

[root@centos7 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home/
INACTIVE=-1
EXPIRE=2021-12-31
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

사용자 생성 시 기본 값을 변경하려면 기본 설정을 의미하는 "-D" 옵션과 함께 별도의 옵션을 다시 사용해야 함.

useradd -D [option] [argument]

 

 

 

옵션 설명
-b 디렉토리 사용자 생성 시 기본 홈 디렉토리를 설정
-e 만기일 사용자 생성 시 /etc/shadow 파일의 EXPIRE 필드 값을 지정(사용자 계정 만료일)
-f 기간 사용자 생성 시 /etc/shadow 파일의 INACTIVE 필드 값을 지정(패스워드 만료 후 유예기간)
-g GID 사용자 생성 시 기본 그룹의 GID를 지정
-s 쉘 사용자의 기본 쉘을 지정

기본 홈 디렉토리 정보를 변경하면 이후 생성되는 모든 사용자의 홈 디렉토리는 지정된 디렉토리를 기준으로 생성.
홈 디렉토리 설정을 변경하기 위하여 아래와 같이 실행.

[root@centos7 ~]# mkdir /home/guest
[root@centos7 ~]# useradd -D -b /home/guest
[root@centos7 ~]# useradd -D
GROUP=100
HOME=/home/guest
INACTIVE=-1
EXPIRE=2021-12-31
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@centos7 ~]# useradd slave
[root@centos7 ~]# tail -1 /etc/passwd
slave:x:20005:20005::/home/guest/slave:/bin/bash

 

기본 옵션

옵션 설명
-b 디렉토리 사용자 생성 시 기본 홈 디렉토리를 설정
-e 만기일 사용자 생성 시 /etc/shadow 파일의 EXPIRE 필드 값을 지정(사용자 계정 만료일)
-f 기간 사용자 생성 시 /etc/shadow 파일의 INACTIVE 필드 값을 지정(패스워드 만료 후 유예기간)
-g GID 사용자 생성 시 기본 그룹의 GID를 지정
-s 쉘 사용자의 기본 쉘을 지정
-u UID 사용자의 UID를 지정
-U 사용자를 생성할 때 사용자와 같은 이름의 그룹을 생성
-g GID 사용자의 기본 그룹을 지정
-G GID 사용자의 보조 그룹을 지정
-m 사용자의 홈 디렉토리가 존재하지 않는 경우 생성해줌, /etc/login.defs 파일의 CREATE_HOME 항목에 yes로 설정되어 있지 않고, 이 옵션을 사용하지 않을 경우 홈 디렉토리를 생성하지 않음, 둘 중 하나라도 만족할 경우 홈 디렉토리를 생성
-c 주석 사용자에 대한 GECOS(주석,설명)를 지정
-o 사용자를 생성할 때 UID의 중복을 허용
-r UID가 199부터 999인 시스템 계정을 만들 때 사용
-p 패스워드 사용자를 생성할 때 패스워드를 지정, 현재는 사용하지 않는 옵션

 

 

다음은 사용자 환경설정을 테스트하기 위한 사용자 정보

속성
사용자 이름 general
UID 2021
기본 기룹 10(wheel)
홈 디렉토리 /home/guest/general
기본 쉘 /bin/sh

 

[root@centos7 ~]# useradd -u 2021 -g 10 -m -d /home/guest/general -s /bin/sh general
[root@centos7 ~]# tail -1 /etc/passwd
general:x:2021:10::/home/guest/general:/bin/sh

사용자 정보 수정

usermod [option] user-name

사용자의 정보 중 보조그룹을 수정할 때에는 주의해야 할 점이 있음.
'-G' 옵션은 사용자의 보조그룹을 변경하는 옵션.
만약 사용자의 보조 그룹을 2개 이상 지정하려면 '-a'옵션과 함께 사용해야 함.

그렇지 않으면 기존에 등록했던 보조 그룹이 제거됌.
id 명령에서 groups 항목을 확인하면 사용자가 속한 모든 그룹을 확인할 수 있음.

[root@centos7 ~]# id slave
uid=20005(slave) gid=20005(slave) groups=20005(slave)
[root@centos7 ~]# usermod -G wheel slave
[root@centos7 ~]# id slave
uid=20005(slave) gid=20005(slave) groups=20005(slave),10(wheel)
[root@centos7 ~]# usermod -G king slave
[root@centos7 ~]# id slave
uid=20005(slave) gid=20005(slave) groups=20005(slave),20004(king)
[root@centos7 ~]# usermod -aG wheel slave
[root@centos7 ~]# id slave
uid=20005(slave) gid=20005(slave) groups=20005(slave),10(wheel),20004(king)

사용자 삭제

userdel [option] user-name

사용자를 삭제할 때는 "-r" 옵션을 함께 사용하는 것을 권장
'-r' 옵션을 사용하지 않으면 삭제된 사용자의 홈 디렉토리가 남게 되고, 남아 있는 홈 디렉토리와 파일은 삭제된 사용자와 같은 UID로 새로 생성된 사용자가 소유할 수 있어 보안상 문제를 발생시킬 수도 있음.

[root@centos7 ~]# useradd user02
[root@centos7 ~]# ls -l /home/
total 0
drwx------. 5 user   user   128 May 19 16:07 user
drwx------. 3 user01 user01  78 May 19 16:20 user01
drwx------. 3 user02 user02  78 May 19 16:20 user02
[root@centos7 ~]# userdel user02
[root@centos7 ~]# ls -l /home/
total 0
drwx------. 5 user   user   128 May 19 16:07 user
drwx------. 3 user01 user01  78 May 19 16:20 user01
drwx------. 3   1002   1002  78 May 19 16:20 user02
[root@centos7 ~]# useradd user03
[root@centos7 ~]# ls -l /home/
total 0
drwx------. 5 user   user   128 May 19 16:07 user
drwx------. 3 user01 user01  78 May 19 16:20 user01
drwx------. 3 user03 user03  78 May 19 16:20 user02
drwx------. 3 user03 user03  78 May 19 16:25 user03
[root@centos7 ~]# userdel -r user03
[root@centos7 ~]# ls -l /home/
total 0
drwx------. 5 user   user   128 May 19 16:07 user
drwx------. 3 user01 user01  78 May 19 16:20 user01
drwx------. 3   1002   1002  78 May 19 16:20 user02

그룹 생성

groupadd [option] group-name

 

[root@centos7 ~]# groupadd -g 2000 group01
[root@centos7 ~]# grep "group01" /etc/group
group01:x:2000:
[root@centos7 ~]# groupadd -r group02
[root@centos7 ~]# grep "group02" /etc/group
group02:x:982:

 

그룹 정보 수정

groupmod [option] group-name

[root@centos7 ~]# grep "group01" /etc/group
group01:x:2000:

[root@centos7 ~]# groupmod -g 3000 group01
[root@centos7 ~]# grep "group01" /etc/group
group01:x:3000:

[root@centos7 ~]# groupmod -n group03 group01
[root@centos7 ~]# grep "group03" /etc/group
group03:x:3000:

 

그룹 삭제

groupdel group-name
[root@centos7 ~]# grep "group03" /etc/group
group03:x:3000:
[root@centos7 ~]# groupdel group03
[root@centos7 ~]# grep "group03" /etc/group
[root@centos7 ~]# 

 

사용자 및 그룹 관리 파일

/etc/skel

/etc/skel 디렉토리는 뼈대(skeleton)라는 의미로 사용자에 대한 기본적인 초기화 파일들을 저장하고 있는 디렉토리.

사용자를 생성할 때 /etc/skel 디렉토리 내의 모든 파일들이 해당 사용자의 홈 디렉토리로 복사됌.

 

/etc/login.defs

/etc/login.defs파일은 사용자나 그룹을 생성할 때 참고하는 기본 값들이 저장되어 있음

 

[root@centos7 ~]# cat /etc/login.defs

#사용자 메일박스의 위치 설정
#리눅스에서는 오류 메시지 등을 메일박스로 전송
MAIL_DIR	/var/spool/mail

#패스워드 에이징 설정
#패스워드의 최대 사용 기간
#패스워드의 최소 사용 기간
#최소 길이
#경고 값
PASS_MAX_DAYS	99999
PASS_MIN_DAYS	0
PASS_MIN_LEN	5
PASS_WARN_AGE	7

#사용자 생성 시 부여되는 UID 값 설정
#시스템 사용자 UID 범위는 201~999
#1~200까지는 시스템에서 고정적으로 가지고 있는 UID이기 때문에 사용할 수 없음
UID_MIN                  1000
UID_MAX                 60000
SYS_UID_MIN               201
SYS_UID_MAX               999

#그룹 생성 시 부여되는 GID 값 설정
#시스템 그룹의 GID 범위는 201~999
GID_MIN                  1000
GID_MAX                 60000
SYS_GID_MIN               201
SYS_GID_MAX               999

#사용자 생성 시 홈 디렉토리 생성 여부 결정
#해당 값이 "yes"라면 useradd 명령 사용 시 "-m" 옵션을 사용하지 않아도 홈 디렉토리 자동 생성
CREATE_HOME	yes

#홈 디렉토리 생성에 관계된 umask 값 설정 
#사용자를 생성할 경우 해당 umask의 영향을 받아 사용자의 홈 디렉토리가 생성
UMASK           077

#사용자 생성 시 UPG 스키마 사용여부
#사용자를 생성할 때 같은 이름의 그룹을 생성하는 것을 UFG 스키마라고 함
#"yes" : 사용자 생성 시 사용자 이름과 같은 그룹이 생성되고 기본그룹으로 설정
#"no" : 사용자 생성 시 /etc/default/useradd 에 명시된 GROUP으로 기본 그룹이 설정
USERGROUPS_ENAB yes

#패스워드 설정 시 해시 알고리즘 설정
#DES, MD5, Blowfish, SHA-256, SHA-512 설정 가능
ENCRYPT_METHOD SHA512