사용자 관리

  • 학습 개요
    리눅스 시스템에서 관리자 계정과 일반 사용자 계정의 차이를 이해하고 사용자 계정 또는 그룹 계정의 생성과 관리에 사용되는 명령과 파일에 관해 알아보자.
    패스워드 에이징의 의미를 학습하고 비밀번호 관리에 사용되는 명령과 파일을 살펴보자.

  • 학습 목표

    1. 사용자 계정의 관리에 사용되는 파일을 나열하고 용도를 알아보자
    2. 사용자 계정을 생성, 삭제, 변경 가능.
    3. 그룹 계정을 생성, 삭제, 변경 가능.

사용자 계정

사용자 관리

  • 사용자 계정이 있어야 시스템을 사용할 수 있음
    • 리눅스는 다중 사용자를 지원하는 운영체제
    • '사용자명' 또는 '로그인 아이디'
    • 사용자 계정은 UID를 가짐
  • 관리자 입장에서 사용자 계정 별로 접근 권한을 통제할 수 있음
    • 사용자 계정에 따라 부여된 권한이 다름
    • 일반 계정은 자신의 홈 디렉토리를 제외하면 제한된 권한을 가짐
    • 일반 계정 외에 root 계정 (UID=0) 시스템 계정도 있음

su

  • 사용자를 전환시키는 명령
  • su [-[l]] [username]
    • su -l jeaha 또는 su - jeaha는 지정된 사용자의 로그인 셸을 시작함
    • root 사용자가 아니라면 지정된 사용자의 암호를 알아야 실행시킬 수 있음
    • su -l과 같이 사용자가 생략되면 root 사용자로 로그인 함
    • 단순히 su를 실행하면 로그인 셸이 아니고, 작업 디렉토리도 바뀌지 않음
  ➜  UNIX git:(master) ✗ su -l
  Password:
  su: Sorry
  ➜  UNIX git:(master) ✗
  • 1 개의 셸 명령을 root 계정으로 실행하는 명령
    • su -c 'command'
      • root 암호를 알아야 함
      • 여러 단어로 되어 있다면 명령 부분을 따옴표로 묶어야 함
[ec2-user@ip-aws ~]$ su -c 'ls -l /root/*'
Password:
su: Authentication failure

sudo

root 또는 다른 사용자가 되어 명령을 실행하기 위한 명령

  • 특정 사용자나 그룹별로 세세한 권한을 부여할 수 있음
  • 본인의 암호만 필요하며, root 계정의 암호를 요구하지 않음
  • /etc/sudoers파일에 누가/어디서/어떤 명령을 수행할 수 있는지 설정되어 있어야 함

sudo [-u username] command

  • 현재 셸에서 수행되므로 명령어 부분에 따옴표가 필요 없음
  • -u 옵션을 사용하면 root 사용자가 아닌 특정 사용자로 수행함
  • sudo -l은 자신에게 sudo를 통해 허용된 명령을 확인할 수 있음

/etc/sudoers

  • root 사용자가 visudo를 사용하여 편집함
    • 문법 오류를 검사하고 안전하게 편집할 수 있음
  • 기본 문법은 user MACHINE=COMMANDS형태

useradd

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

  • useradd [options] username
    • useradd -d "jeaha, oh" jeaha jeaha라는 계정을 만든다
    • -c 계정의 comment
    • passwd [username] 명령으로 비밀번호 설정 가능
  • useradd -D [options]
    • 계정을 생성할 때 사용되는 홈 디렉토리, 기본 그룹, 만료일, 기본 셸에 관한 기본 설정 가능
    • 다른 옵션을 사용하여 기본 설정을 변경 가능
옵션 설명
-d home_dir 새로운 계정의 홈 디렉토리를 지정. 기본은 /home/username
-D [options] -D만 사용하면 사용자 계정 생성시 사용되는 현재의 환경 설정 값을 보여줌. options로 -b, -e, -g, -s 등을 사용하면 홈 디렉토리의 위치, 만료 날짜, 주 그룹, 기본 셸 등에 관해 변경 가능.
-e expire_date 계정의 만료일 -e 2020-12-31. 기본값은 /etc/default/useradd 파일에 EXPIRE 변수의 값
-g group 계정이 속할 주 그룹을 지정. 그룹은 /etc/group 파일에 이미 존재해야 함. 기본적으로 사용자 계정 및 UID와 같은 값을 가지는 그룹 계정과 GID가 만들어짐
-G group_list 계정이 속한 부 그룹을 지정. 여러 개를 지정하면 콤마로 구분하여 설정
-s shell 사용자 기본 셸을 지정. -s /bin/bash
-u user_id 사용자의 UID를 수동으로 설정

사용자 계정의 생성 절차

  • /etc/login.defs 파일과 /etc/default/useradd 파일을 읽어서 사용자 계전 생성과 관련된 기본값을 확인
  • useradd 명령어에서 주어진 옵션을 검사하여 기본값을 대체할 것인지 확인
  • /etc/passwd 파일과 /etc/shadow 파일에 새로운 사용자 계정에 해당하는 항목을 생성
  • /etc/group 파일에 새로운 그룹에 해당하는 항목을 추가
  • /home/ 디렉토리에서 사용자 계정의 홈 디렉토리 (/home/username)을 생성
  • /etc/skel/ 디렉토리에 있는 파일을 사용자 계정의 홈 디렉토리에 복사

/etc/passwd

  • 사용자 계정에 관한 정보를 가진 텍스트 파일
    • 라인 별로 사용자 계정의 정보가 저장됨
    • 계정의 생성이나 수정을 위해 직접 수정하는 것은 좋지 않음
  • 각 라인은 콜론 : 으로 구분되는 7개 필드를 가짐
  • 사용자계정:암호:UID:GID:설명:홈디렉토리:기본셸
    • jeaha:x:500:500:Jeaha Oh:/home/jeaha:/bin/bash

/etc/skel

사용자 홈 디렉토리에 복사되는 .bash_profile, .bashrc, .bash_login등의 파일을 가짐

/etc/shadow

사용자 계정의 암호 정보와 '패스워드 에이징' 정보를 가짐
각 라인은 아래와 같은 정보를 가짐

  • 202034-364390:!!:18539:0:99999:7:::
  • 사용자계정:암호화된비밀번호:최종비밀번호변경일:minpa:maxpa:pwp:pip:aed::
  • minpa(minimum password age) : 비밀번호 변경 후 바꿀 수 없는 기간
  • maxpa(maximum password age) : 비밀번호 변경 후 다시 변경하지 않고 사용할 수 있는 최대 기간
  • pwp(password warning period) : 비밀번호 만료 전 경고할 날짜 일수
  • pip(password inactivity period) : 비밀번호 만료 후 로그인 가능한 날짜 수
  • aed(account expiration date) : 사용자 계정의 만료일. 빈 값은 계정이 만료되지 않는다.
  • 예약 필드

chage

  • 사용자의 비밀번호 만료에 관한 정보를 변경하는 관리자 명령
  • chage [option] username
    • chage -l username으로 자신의 패스워드 에이징 정보를 확인함
  • 옵션
    • -l days는 비밀번호 만료 후 비활성화 되기 전까지의 날짜 수 (-1은 사용하지 않음)
    • -m days-M days는 각각 비밀번호의 최소(0은 즉시 수정 가능)/최대 사용 날짜 수(최대 : 99999)
    • -d date는 비밀번호의 마지막 변경 날짜 수정
    • -E date는 사용자 계정의 만료일을 지정 (-1은 사용하지 않음)
  [ec2-user@ip-aws ~]$ chage -l ec2-user
  Last password change                                    : Oct 04, 2020
  Password expires                                        : never
  Password inactive                                       : never
  Account expires                                         : never
  Minimum number of days between password change          : 0
  Maximum number of days between password change          : 99999
  Number of days of warning before password expires       : 7

사용자 계정 만들기

사용자 계정의 기본 설정

  • 사용자 계정을 생성할 때 필요한 기본값을 정의한 파일이 있음
  • /etc/login.defs
    • 각 라인은 키워드와 값으로 구성됨
      • UID_MIN과 UID_MAX는 UID를 자동 할당할 때 유효 범위를 지정
      • USERGROUPS_ENAB은 사용자 계정과 같은 이름의 그룹을 자동으로 만들 지를 지정
  [ec2-user@ip-aws ~]$ 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_MIN                  1000
  UID_MAX                 60000

  SYS_UID_MIN               201
  SYS_UID_MAX               999

  GID_MIN                  1000
  GID_MAX                 60000

  SYS_GID_MIN               201
  SYS_GID_MAX               999

  CREATE_HOME     yes

  UMASK           077

  USERGROUPS_ENAB yes

  ENCRYPT_METHOD SHA512
  • useradd
    • /etc/default/useradd 파일
    • GROUP은 사용자 계정의 주 그룹(자동 생성을 안 할때)을 지정
    • 홈 디렉토리의 생성 위치와 셸의 종류를 지정
    • INACTIVE가 0이면 비밀번호 만료 후 즉시 계정을 비활성화, -1이면 기능을 사용하지 않는 것.
    • EXPIRE 값이 없으면 계정의 만료일이 없는것
  [ec2-user@ip-aws ~]$ cat /etc/default/useradd
  # useradd defaults file
  GROUP=100
  HOME=/home
  INACTIVE=-1
  EXPIRE=
  SHELL=/bin/bash
  SKEL=/etc/skel
  CREATE_MAIL_SPOOL=yes

사용자 계정 수정

usermod

  • 사용자 계정의 정보를 수정하는 관리자 명령
  • usermod [options] username
    • 많은 옵션이 useradd 명령과 유사
    • usermod -g root jeaha는 주어진 사용자의 주 그룹을 root로 변경함
    • id username 주어진 사용자의 uid와 gid를 출력
  • 옵션
옵션 설명
-d home_dir 사용자 계정의 홈 디렉토리 변경
-m -d와 함께 사용해야 하며 기존 홈 디렉토리의 내용을 새 디렉토리로 복사함
-l login_name 사용자 계정의 이름 변경
-u user_id 사용자 계정의 UID를 변경
-L 사용자 계정을 잠금. 실제 /etc/shadow 파일에서 비밀번호 앞에 !를 붙임
-U 사용자 계정의 잠금 해제

userdel

  • 사용자 계정을 삭제하는 관리자 명령
    • /etc/passwd 파일에서 해당 라인 삭제
  • user del [options] username
  • 옵션
    • -r 홈디렉토리와 파일을 함께 삭제, 메일 스풀도 삭제.
    • -f 로그인 중이거나 다른 사용자가 사용 중이어도 삭제, 같은 이름의 그룹도 삭제.

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

  • 홈 디렉토리도 삭제할 것인가
  • 계정을 삭제하지 않고 잠금 할 것인가
  • 삭제될 계정이 소유하는 파일이 더 있는가
    • 삭제 전에 find / -user username -ls로 확인해야 함
    • 삭제 후라면 find / -uid UID -ls, find / -nouser -ls로 확인

그룹 계정과 관리

그룹 계정

사용자 계정들을 모아서 하나의 집합을 이루는 개념

  • 그룹의 구성원은 특정 파일(또는 디렉토리)에 대해 그룹에 부여된 권한을 가짐
  • 일반 사용자는 bin, mail, sys 등의 '시스템 정의 그룹'에는 포함될 수 없음
  • 사용자 계정을 만들 때 주 그룹(기본 그룹)이 지정됨
    • 기본적으로 사용자 계정과 같은 이름으로 그룹 계정이 만들어짐
  • 사용자 계정은 0개 이상의 부 그룹에 속할 수 있음

groupadd

  • 그룹을 만드는 관리자 명령
    • 그룹도 계정 이름과 GID를 가짐
  • groupadd [options] group
  • 옵션
    • -g gid는 수동으로 GID를 지정
    • -r 시스템 그룹 계정 생성
    • -o -g를 함께 사용시 기존 그룹의 GID를 사용하는 것

/etc/group

  • 그룹 계정의 정보를 가진 텍스트 파일
    • 라인마다 그룹 계정의 정보가 저장됨
  • 각 라인은 : 으로 구분되는 4개 핑드를 가짐
  • 그룹계정:암호:GID:구성원_리스트
    • devs:x:1000:jeaha,jeje
  • 암호화된 비밀번호는 /etc/gshadow에 저장됨
  • 사용자 계정을 부 그룹에 추가하는 방법
    • usermod -G group -a username
  • 사용자가 자신의 그룹을 확인하는 방법
    • id username
    • groups username
  [ec2-user@ip-aws ~]$ id ec2-user
  uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal)
  [ec2-user@ip-aws ~]$ groups ec2-user
  ec2-user : ec2-user adm wheel systemd-journal

사용자 계정과 그룹 및 파일의 접근권한

  • 사용자가 파일이나 디렉토리를 생성하면 그것의 소유 그룹은 사용자의 주 그룹으로 지정됨
  • 사용자는 0개 이상의 부 그룹에 속할 수 있음
  • 사용자 스스로 다른 그룹의 구성원이 되게 할 수 없음
    • 관리자라면 gpasswd -a user group으로 구성원 추가 가능
  • newgrp group을 실행하면 일시적으로 자신의 주 그룹 변경 가능
    • 자신이 속해 있는 그룹 중에서 지정해야 함
    • 그룹 계정의 비밀번호를 알고 있다면 다른 그룹으로도 지정 가능
    • 단순히 newgrp를 실행하면 원래 주 그룹으로 돌아감

gpasswd

  • 그룹의 관리를 위한 명령
    • 그룹의 관리자가 사용
  • gpasswd [options] group
    • 옵션을 사용하지 않으면 그룹의 비밀번호를 설정
    • 옵션을 사용하면 그룹의 구성원 변경
  • 옵션
    • -a user는 구성원 추가, -A users는 그룹의 관리자를 지정
    • -d user는 구성원 삭제, -M users는 구성원 설정
    • -r 비밀번호 삭제

groupmod

  • 기존 그룹의 정보를 수정하기 위한 명령
    • 그룹의 관리자가 사용함
  • group [options] group
    • -g gid를 사용하여 GID를, -n name은 그룹 이름을 변경함

groupdel

  • 그룹을 삭제하는 관리자 명령
    • 그룹 계정 관련 파일에서 해당 라인을 삭제함
    • 사용자 계정의 주 그룹으로 되어있는 경우 삭제 불가능
  • groupdel group

사용자 관리를 위한 GUI

사용자 관리 도구

GUI를 지원 하지만 CLI방식에 비해 제한이 있다.

  • 시스템 > 관리 > 사용자 및 그룹
    • root 계정의 비밀번호 입력
    • 사용자 추가그룹 추가로 계정을 추가할 수 있음
    • 선택된 계정에서 등록정보 버튼으로 정보를 수정할 수 있음
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] 파일 시스템 관리  (0) 2020.10.25
[Linux] vi 사용 텍스트 편집  (0) 2020.10.25
[Linux] 시작과 종료  (0) 2020.10.24
[Linux] 파일과 디렉토리  (0) 2020.10.24
[Linux] Shell 사용하기  (0) 2020.10.16

+ Recent posts