학습 가이드
#20주 실습 커리큘럼

사용자 만들기: useradd·/etc/skel·/etc/default/useradd

_리눅스 실습 커리큘럼 13/40 · 권한과 사용자 (7주차)_

지금까지는 이미 있는 사용자와 그룹을 전제로 권한을 다뤘습니다. 이번 편에서는 useradd 로 계정을 직접 만들면서 주 그룹과 추가 그룹을 지정하는 법, 그리고 새 계정의 모양을 결정하는 두 설정 파일 /etc/skel 과 /etc/default/useradd 를 다룹니다. 마지막으로 skel 의 .bashrc 를 정비해 신규 계정의 셸 환경을 통일하는 방법까지 이어 갑니다.

주 그룹과 추가 그룹 구분하기

소문자 -g 는 주 그룹 하나(passwd 의 GID 필드)를, 대문자 -G 는 추가 그룹 목록(쉼표로 구분)을 지정합니다. 두 옵션 모두 그룹이 미리 있어야 하므로 필요하면 groupadd 로 먼저 만듭니다.

groupadd dev; groupadd ops
useradd -g dev -G ops alice
id alice                  # gid=...(dev) groups=...(dev),...(ops)
usermod -aG wheel alice   # 기존 추가 그룹은 유지하고 wheel 만 덧붙임
  • usermod -G 를 -a 없이 쓰면 추가 그룹 목록이 통째로 교체되어 기존 그룹이 빠집니다. 그룹을 "더하는" 작업이면 반드시 -aG 입니다.
  • 확인은 id 사용자, groups 사용자, getent group 그룹명 으로 합니다.

/etc/skel — 새 홈의 원본 틀

useradd 가 홈 디렉터리를 만들 때 /etc/skel 의 내용을 숨김 파일과 하위 디렉터리까지 그대로 복사하고, 소유자를 새 사용자로 바꿔 줍니다. 파일뿐 아니라 빈 디렉터리도 복사 대상입니다.

ls -a /etc/skel               # .bashrc, .bash_profile 등 기본 템플릿
mkdir /etc/skel/public_html
useradd -m tester && ls -la /home/tester
  • skel 을 바꿔도 이미 만든 계정에는 영향이 없습니다. 적용 여부는 새 계정을 만들어 확인합니다.
  • RHEL 계열은 /etc/login.defs 의 CREATE_HOME yes 로 홈이 기본 생성되지만, 배포판에 따라 -m 이 없으면 홈도 skel 복사도 없습니다. 습관적으로 -m 을 붙이는 편이 안전합니다.

/etc/default/useradd 와 useradd -D

옵션 없이 useradd 를 실행했을 때 쓰이는 기본값은 /etc/default/useradd 에 있습니다. 파일을 직접 고칠 수도 있지만 useradd -D 로 바꾸는 것이 정석입니다.

useradd -D                  # HOME=/home, SHELL=/bin/bash, SKEL=/etc/skel ...
useradd -D -b /data/users   # 홈의 기본 부모 디렉터리 변경
useradd -D -s /bin/zsh      # 기본 셸 변경
  • HOME 은 홈 자체가 아니라 부모 경로입니다. 실제 홈은 HOME/사용자명 이 됩니다. 부모 디렉터리가 없으면 이후 계정 생성이 실패하니 미리 만들어 둡니다.
  • -D 없이 useradd -b 나 -s 를 쓰면 그 계정 하나에만 적용되고 기본값은 그대로입니다.
  • 변경 여부는 useradd -D 를 다시 실행하거나 cat /etc/default/useradd 로 확인합니다. 셸은 실제로 설치되어 있고 /etc/shells 에 등록돼 있어야 로그인에 쓸 수 있습니다.

.bashrc 템플릿으로 셸 환경 맞추기

skel 의 .bashrc 에 설정을 넣으면 앞으로 만들어지는 계정이 모두 같은 셸 환경으로 시작합니다. 자주 쓰는 변수는 다음과 같습니다.

  • HISTSIZE — 현재 세션 메모리에 유지하는 기록 줄 수
  • HISTFILESIZE — 로그아웃 때 ~/.bash_history 파일에 남기는 줄 수. 두 변수를 바꿔 쓰는 실수가 흔합니다.
  • HISTTIMEFORMAT — history 출력 앞에 붙는 시각 형식(strftime). %Y %m %d %H %M %S 를 조합하며 %F 는 %Y-%m-%d, %T 는 %H:%M:%S 의 줄임입니다. 끝에 공백을 두어야 명령과 붙지 않습니다.
  • umask — 파일은 666, 디렉터리는 777 에서 마스크를 뺀 값이 기본 권한입니다. 022 라면 파일 644, 디렉터리 755 가 됩니다. 원하는 권한에서 거꾸로 계산하세요.
# /etc/skel/.bashrc 에 추가하는 형태 (값은 설명용)
HISTSIZE=1000
HISTFILESIZE=2000
HISTTIMEFORMAT='%d/%m %H:%M '
umask 022
  • 홈 경로를 지정할 때는 useradd -m -d 경로 계정 처럼 -d 와 -m 을 함께 씁니다.
  • 확인은 grep -E 'HIST|umask' /home/계정/.bashrc 와 stat -c '%U %n' 으로 내용과 소유자를 함께 봅니다.
  • 기존 계정에는 적용하지 않아야 한다면 /etc/bashrc 같은 전역 파일에 넣으면 안 됩니다. 전역 파일은 모든 계정에 즉시 영향을 줍니다.

이번 편과 연결된 문제

  • 사용자 생성 및 관리 — -g 와 -G 로 주·추가 그룹을 나누고, usermod -aG 로 기존 그룹을 유지한 채 그룹을 더하는지
  • 사용자 생성 기본 템플릿 - /etc/skel — skel 에 디렉터리를 두어 신규 계정 홈에 자동 제공되게 하는지
  • 사용자 생성 기본 설정 - /etc/default/useradd — useradd -D 로 홈 부모 경로와 기본 셸을 바꾸고 변경 결과를 확인하는지
  • skel 템플릿 신규 계정 표준화 — 기록 보관량·시각 형식·umask 를 skel .bashrc 에 넣고, 신규 계정에만 복제되고 기존 계정은 그대로인지

다음 편

다음 편은 계정 잠금과 비밀번호 정책 chage 입니다. 화·금요일에 이어집니다.

<!-- publish_key:linux-path-20w-p13-post -->

댓글 0

아직 댓글이 없습니다. 궁금한 점이나 풀이 경험을 남겨 보세요.