Post

[LINUX] 사용자 관리

사용자 계정

  • 리눅스는 다중 사용자를 지원하는 운영체제
  • 사용자 계정이 있어야 시스템을 사용할 수 있음
  • ‘사용자명’ 또는 ‘로그인 아이디’라고도 함
  • 사용자 계정은 유일한 UID를 가짐
  • 사용자 계정별로 접근 권한을 통제할 수 있음
  • 일반 사용자 계정 외에 root 계정(UID=0), 시스템 계정도 있음
  • id username 명령은 사용자의 UID와 GID 정보를 출력함

su 명령

사용자 전환

  • su [-[l]] [username]
    • ex) su -l jjpark 또는 su - jjpark 또는 su --login jjpark : 사용자 로그인 셸을 시작
    • 옵션 없이 su jjpark를 실행하면 단순히 사용자만 바꾸며, 사용자 환경과 작업 디렉터리가 유지됨
    • username 없이 su 또는 su -l를 실행하면 root 사용자로 전환
  • 사용자 암호를 알아야 전환할 수 있으며, root 사용자로 작업 중에 일반 계정으로 전환하는 경우는 암호 입력이 필요 없다.

root 계정으로 명령 실행

  • 일회성으로 1개의 셸 명령만 root 계정으로 실행
  • root 계정의 암호 입력 필요
  • su -c 'command'
    • 명령 부분을 따옴표로 묶어야 함
    • ex) su -c 'ls -l /root/*'

sudo 명령

  • 관리자 권한으로 명령을 실행
  • 특정 사용자나 그룹 별로 세세한 권한을 부여할 수 있음
  • 현재 사용자 암호만 필요하며 root 계정의 암호는 입력하지 않음
  • 단, 관리자가 etc/sudoers 파일에 권한을 설정해야 함
  • sudo [-u username] command
    • -u 옵션을 사용하면 특정 사용자 권한으로 명령을 실행하고, 사용하지 않으면 root 권한으로 실행
    • su -c와 달리 명령 부분에 따옴표를 붙이지 않는다.
    • sudo -l은 자신에게 허용된 sudo 명령을 확인할 수 있음

/etc/sudoers 파일

  • root 사용자가 visudo 명령을 사용하여 편집 가능
  • 기본 문법은 user MACHINE=COMMANDS(사용자 허용된호스트=허용된명령) 형태

  • jjpark ALL=/usr/sbin/useradd, /usr/sbin/usermod: 사용자 jjpark이 모든 호스트에서 sudo 명령을 사용하여 root 사용자 자격으로 useradd와 usermod 명령을 실행할 수 있도록 허용
  • User_Alias ADMINS = user1, user2, kdhong: user1, user2, kdhong을 ADMINS로 지정
  • ADMINS ALL= NOPASSWD:ALL: ADMINS에 속한 사용자가 sudo 명령을 사용하여 root 사용자 자격으로 모든 호스트에서 비밀번호를 입력하지 않고도 모든 명령을 실행할 수 있도록 권한을 부여
  • %users ALL=(ALL) NOPASSWD:ALL: 그룹의 구성원이 모든 호스트에서 특정 사용자가 되어 비밀번호를 입력하지 않고 모든 명령을 실행할 수 있음

사용자 계정 만들기

useradd 명령

  • 사용자를 추가하거나 사용자 환경설정의 기본값을 변경하는 관리자 명령
  • useradd [options] [username]
  • 사용자를 추가한 후 passwd [username] 명령으로 초기 비밀번호를 설정해야 한다.
옵션설명
-c comment계정에 대한 설명
-d home_dir계정의 홈 디렉터리. 기본값은 /home/username이다.
-D [options]계정을 생성할 때 사용되는 홈 디렉터리, 주 그룹, 만료일, 기본 셸 등에 관한 기본 설정 값을 보여줌.
옵션으로 -b, -e, -g, -s 등을 사용하면 설정을 변경할 수 있다.
-b default_home계정의 홈 디렉터리가 위치할 기본 디렉터리. 기본값은 /home이다.
-e expire_date계정의 만료일. 기본값은 /etc/default/useradd 파일의 EXPIRE 변수값이며 보통 무기한(빈 문자열)이다.
-g group계정이 속할 주 그룹을 지정하며 그룹은 /etc/group 파일에 이미 존재해야 함. 옵션을 사용하지 않으면 사용자 계정 및 UID와 같은 값을 가지는 그룹 계정과 GID가 만들어짐
-G group_list계정이 속할 부 그룹을 지정하며 여러 개를 지정하려면 콤마로 구분
-s shell사용자의 기본 셸. ex) -s /bin/bash
-u user_id사용자의 UID를 수동으로 설정

사용자 계정 생성 절차

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

/etc/login.defs 파일

  • 사용자 계정을 생성할 때 필요한 기본값을 정의한 파일

키워드
MAIL_DIR메일 스풀 디렉터리
UMASK파일 접근권한의 기본값
HOME_MODE홈 디렉터리의 초기 접근권한
PASS_MAX_DAYS비밀번호를 변경하지 않고 사용할 수 있는 최대 기간
PASS_MIN_DAYS비밀번호를 변경 후 바꿀 수 없는 기간
PASS_WARN_AGE비밀번호 만료일 전에 경고를 보내는 날짜 수
UID_MIN과 UID_MAXUID로 할당되는 유효 범위의 최솟값과 최댓값
GID_MIN과 GID_MAXGID로 할당되는 유효 범위의 최솟값과 최댓값
CREATE_HOME홈 디렉터리의 자동 생성 여부
USERGROUPS_ENAB사용자 계정과 같은 이름의 그룹을 자동으로 만들 지 여부. 사용자 삭제 시 그룹도 삭제 (다른 구성원이 없는 경우)
ENCRYPT_METHOD비밀번호 암호화에 사용되는 알고리즘

/etc/default/useradd 파일

  • 계정을 생성할 때 사용되는 홈 디렉터리, 주 그룹, 만료일, 기본 셸 등에 관한 기본 설정을 정의한 파일
  • useradd 명령에 -D 옵션과 함께 -b, -e, -g, -s 등을 사용하면 설정을 변경할 수 있다.

키워드
GROUP사용자 계정의 주 그룹의 GID를 설정
HOME홈 디렉터리의 생성 위치
INACTIVE비밀번호 만료 후 비활성화 되기 전까지의 날짜 수. 0이면 즉시, -1이면 사용하지 않음
EXPIRE사용자 계정의 만료일. 값이 없으면 사용하지 않음
SHELL사용자의 기본 셸을 설정

/etc/passwd 파일

  • 사용자 계정에 관한 정보를 가진 텍스트 파일
  • 파일을 직접 수정하는 것보다 명령이나 관리자 도구를 사용하는 것이 좋다.
  • 라인별로 사용자 계정의 정보가 저장되며 각 라인은 콜론(:)으로 구분되는 7개의 필드를 가짐
    • 사용자계정:암호:UID:GID:설명:홈디렉터리:기본셸
    • ex) kdhong:x:1000:1000:Kildong Hong:/home/kdhong:/bin/bash

/etc/shadow 파일

  • 사용자 계정의 암호 정보와 패스워드 에이징 정보를 가짐
  • 각 라인은 콜론(:)으로 구분되는 필드를 가짐
    • 사용자계정:암호화된비밀번호:최종비밀번호변경일:…
    • ex) kdhong:$6$0:19402:0:99999:7:3:21183:
      • kdhong: 사용자계정
      • $6$0: 암호화된 비밀번호
      • 19402: 최종 비밀번호 변경일
      • 0: 비밀번호 변경 후 바꿀 수 없는 기간. 0이면 언제든 수정 가능
      • 99999: 비밀번호 변경 후 다시 변경하지 않고 사용할 수 있는 기간. 99999는 계속 사용 가능
      • 7: 비밀번호 만료일 전에 경고를 보내는 날짜 수
      • 3: 비밀번호 만료 후 로그인이 가능한 날짜 수
      • 21183: 사용자 계정의 만료일. 빈 값은 계정이 만료되지 않음
      • 마지말 필드: 다른 기능을 위해 예약된 필드

chage 명령

  • 사용자의 비밀번호 만료에 관한 정보를 변경하는 관리자 명령
  • chage [options] username
    • chage -l username으로 계정의 패스워드 에이징 정보를 확인
옵션설명
-I days비밀번호 만료 후 비활성화 되기 전까지의 날짜 수. -1이면 사용하지 않음
-m days비밀번호의 최소 사용 날짜 수(변경 후 바꿀 수 없는 기간). 0이면 즉시 수정 가능
-M days비밀번호의 최대 사용 날짜 수(다시 변경하지 않고 사용할 수 있는 기간). 99999이면 계속 사용 가능
-d date비밀번호의 마지막 변경 날짜
-E date사용자 계정의 만료일. -1이면 사용하지 않음

/etc/skel 디렉터리

  • 사사용자 계정을 만들 때 기본적으로 /etc/skel 디렉터리에 있는 파일이 사용자의 홈 디렉터리에 자동으로 복사됨
    • .bash_profile, .bashrc, .bash_logout 등

사용자 계정 수정

usermod 명령

  • 사용자 계정의 정보를 수정하는 관리자 명령
  • usermod [options] username
    • ex) usermod -g root kdhong은 주어진 사용자의 주 그룹을 root 그룹으로 변경함
옵션설명
-d home_dir사용자 계정의 홈 디렉터리를 변경
-m-d와 함께 사용되어야 하며 기존 홈 디렉터리의 내용을 새 디렉터리로 복사함
-l login_name사용자 계정의 이름을 변경
-u user_id사용자 계정의 UID를 변경
-g group사용자 계정의 주 그룹을 변경
-G group_list사용자 계정의 부 그룹을 변경
-L사용자 계정을 잠금
-U사용자 계정을 잠금을 해제

userdel 명령

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

삭제 시 고려사항

  • 홈 디렉터리도 삭제할 것인가?
  • 계정을 삭제하지 말고 잠금 할 것인가?
    • usermod -L username
  • 홈 디렉터리 바깥에 삭제될 계정이 소유하고 있는 파일이 있는가?
    • 삭제 전: find / -user username -ls 명령으로 확인
    • 삭제 후: find / -uid UID -ls 또는 find / -nouser -ls 명령으로 확인

그룹 계정과 관리

  • 그룹: 사용자의 계정들을 하나로 모아서 하나의 집합을 이루는 개념
  • 그룹의 구성원은 특정 파일 또는 디렉터리에 대해 그룹에 부여된 권한을 가짐
  • 일반 사용자는 bin, mall, sys 등의 시스템 그룹 계정에는 포함될 수 없음
  • 사용자 계정을 만들 때 주 그룹이 지정됨
    • 기본적으로 사용자 계정과 같은 이름으로 그룹 계정이 만들어짐
  • 그룹별로 암호화된 비밀번호는 /etc/gshadow 파일에 저장됨
  • id username 또는 groups username 명령은 사용자의 그룹을 출력

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

  • 사용자가 파일이나 디렉터리를 생성하면 그것의 소유 그룹은 사용자의 주 그룹으로 지정됨
  • 사용작는 0개 이상의 부 그룹에 속할 수 있음
  • 사용자 스스로 다른 그룹의 구성원이 되게 할 수는 없음
  • newgrp group 명령을 실행하면 일시적으로 자신의 부 그룹 중 하나를 주 그룹으로 변경할 수 있음
    • 자신이 속한 그룹이 아니어도 비밀번호를 알고 있다면 주 그룹으로 변경 가능

groupadd 명령

  • 그룹을 만드는 관리자 명령
  • groupadd [options] group
옵션설명
-g수동으로 GID를 지정. 이 옵션을 사용하지 않으면 기본적으로 1000 이상의 값 중에서 사용 중인 GID보다 큰 값 중 가장 작은 값으로 GID를 지정한다.
-o-g 옵션과 함께 사용하면 기존 GID로 지정 가능
-r시스템 그룹 계정을 생성. 기본적으로 1000보다 작은 첫 번째 숫자가 GID로 지정된다.
-p password그룹의 초기 비밀번호 설정

/etc/group 파일

  • 그룹 계정의 정보를 가진 텍스트 파일
  • 라인별로 그룹 계정의 정보가 저장되며 각 라인은 콜론(:)으로 구분되는 4개의 필드를 가짐
    • 그룹이름:그룹비밀번호:GID:구성원리스트
    • ex) sales:x:1005:kdhong,jjpark

gpasswd 명령

  • 그룹의 관리를 위한 그룹 관리자 명령
  • gpasswd [options] group
    • 옵션을 사용하지 않으면 그룹의 비밀번호를 설정
    • 옵션을 사용하면 그룹의 구성원을 변경
옵션설명
-a user새로운 사용자를 그룹에 추가
-A users그룹의 관리자를 지정
-d user그룹에서 사용자를 삭제
-M users그룹의 구성원을 설정
-r그룹의 비밀번호 삭제. 이후 그룹의 구성원만 newgrp 명령 사용 가능

groupmod 명령

  • 그룹의 정보를 수정하는 관리자 명령
  • groupmod [options] group
옵션설명
-g gidGID를 지정
-n group_name그룹의 이름 변경
-o-g 옵션과 함께 사용하면 기존 GID로 지정 가능
-p password그룹의 비밀번호 설정

groupdel 명령

  • 그룹을 삭제하는 관리자 명령
  • groupdel group
  • 사용자 계정의 주 그룹으로 되어 있는 경우 삭제할 수 없음
This post is licensed under CC BY 4.0 by the author.