Linux 사용자 및 그룹 관리: 계정 설정과 권한 조정

셸 환경 유형

리눅스 시스템에서는 사용자가 로그인할 때 사용하는 셸(Shell)이 다양하며, 이는 사용자의 접근 가능 여부를 결정합니다.
/bin/bash        # 로그인 허용
/sbin/nologin    # 로그인 불가 (서비스 전용 계정에 사용)
/bin/sh          # 기본 Bourne 쉘
/sbin/sync       # 데이터 동기화 용도로만 사용

사용자와 그룹의 기본 구조

UID와 GID 이해하기

- UID (User ID): 각 사용자에게 고유하게 부여되는 번호입니다. - GID (Group ID): 그룹을 식별하는 번호로, 사용자는 하나 이상의 그룹에 속할 수 있습니다.

/etc/passwd 파일 구조

이 파일은 모든 사용자 계정의 기본 정보를 포함합니다. 각 줄은 7개의 필드로 구성됩니다.
root:x:0:0:관리자 계정:/root:/bin/bash
  1. 계정 이름: 로그인 시 사용하는 이름
  2. 비밀번호 자리표시자: 실제 암호는 /etc/shadow에 있음 ('x')
  3. UID: 사용자 고유 번호
  4. GID: 기본 그룹 번호
  5. 설명 정보: 사용자 이름 또는 역할
  6. 홈 디렉터리 경로
  7. Login Shell: 기본 실행 셸 (/sbin/nologin은 접속 차단)

/etc/shadow 파일 구조

암호화된 비밀번호와 보안 정책 정보를 저장합니다.
test:$6$salt$hash:19456:0:99999:7:::
주요 필드:
  • 비밀번호 해시값: MD5 또는 SHA-512 기반 암호화
  • 마지막 변경일: 1970년 1월 1일 이후 경과 일수
  • 최소 변경 주기: 재설정까지 필요한 최소 일수
  • 최대 유효 기간: 비밀번호 만료 일수
  • 만료 경고 기간: 만료 전 경고 시작 일수
  • 비활성화 후 계정 정지 일수
  • 계정 종료 날짜: 전체 계정 비활성화 시점

사용자 계정 유형

  • 관리자 계정 (root): UID 0, 시스템 전체 제어 가능
  • 일반 사용자: CentOS 7 기준 UID 1000 이상
  • 시스템 서비스 계정: 프로세스 전용, UID 1~999

초기 설정 파일

- /etc/profile: 모든 사용자에게 적용되는 글로벌 환경 변수 설정 - ~/.bash_profile: 개별 사용자 로그인 스크립트, 별칭(alias) 정의 가능 예제:
alias ll='ls -al'
export EDITOR=vim
source ~/.bash_profile  # 반영 명령어

그룹 계정 구조

- 기본 그룹 (Primary Group): 사용자 생성 시 자동 할당 - 보조 그룹 (Supplementary Groups): 다중 그룹 소속 가능

그룹 관련 파일

- /etc/group: 그룹 이름, GID, 구성원 목록 - /etc/gshadow: 그룹 암호 및 관리자 정보 예시:
developers:x:2001:user1,user2

주요 관리 명령어

사용자 전환: su 및 sudo

su - username      # 사용자 전환 및 환경 로드
sudo command       # 임시로 루트 권한 실행
exit               # 현재 세션 종료

사용자 생성 및 삭제

useradd [옵션] username
주요 옵션:
  • -u UID: 특정 UID 지정
  • -d /path/home: 홈 디렉터리 위치 지정
  • -e YYYY-MM-DD: 계정 만료일 설정
  • -g groupname: 기본 그룹 지정
  • -G group1,group2: 보조 그룹 추가
  • -s /bin/bash: 로그인 셸 설정
  • -M: 홈 디렉터리 미생성
삭제 명령:
userdel username           # 계정만 삭제
userdel -r username        # 계정과 홈 디렉터리 모두 삭제
확인 방법:
id username                # UID/GID 및 그룹 확인
grep username /etc/passwd  # 계정 존재 여부 확인

비밀번호 설정: passwd

passwd username            # 대화형으로 비밀번호 설정
passwd -d username         # 비밀번호 삭제 (무비밀 로그인 허용)
passwd -l username         # 계정 잠금
passwd -u username         # 계정 잠금 해제
passwd -S username         # 계정 상태 확인
자동화 예시:
echo "newpass" | passwd --stdin username

사용자 정보 수정: usermod

usermod -u 1005 testuser            # UID 변경
usermod -g developers testuser      # 기본 그룹 변경
usermod -G docker,nginx testuser    # 보조 그룹 재설정
usermod -L testuser                 # 계정 잠금
usermod -U testuser                 # 계정 잠금 해제

그룹 관리 명령어

생성/삭제:
groupadd groupname
groupdel groupname
멤버 관리:
gpasswd -a user1 developers     # user1을 developers 그룹에 추가
gpasswd -d user1 developers     # user1 제거
gpasswd -M user1,user2,admin developers  # 멤버 리스트 완전히 재정의

정보 조회 명령어

groups username        # 해당 사용자가 속한 그룹 목록 출력
id username            # UID, GID, 그룹 정보 표시
finger username        # 상세 사용자 정보 (finger 패키지 필요)
who                    # 현재 시스템 접속 중인 사용자 보기

파일 및 디렉터리 권한 설정

chmod – 권한 변경

문자 기반 방식:
chmod u+x script.sh        # 소유자에게 실행 권한 추가
chmod g-w data.txt         # 그룹에서 쓰기 권한 제거
chmod o=r report.log       # 기타 사용자에게 읽기 전용 설정
chmod a+rX shared/         # 모든 사용자에게 읽기 + 실행(디렉터리 기준)
숫자 기반 방식:
chmod 755 script.sh        # rwxr-xr-x
chmod 644 config.conf      # rw-r--r--
chmod -R 775 /var/www      # 하위 항목 전체 재귀 적용

chown – 소유권 변경

chown alice /files/report.txt              # 소유자 변경
chown alice:developers /project            # 소유자 및 그룹 동시 변경
chown :operators /logs                     # 그룹만 변경
chgrp admins backup.tar                   # 그룹 변경 (별도 명령어)

기본 생성 권한: umask

현재 값 확인:
umask                    # 출력 예: 0022
기본값에 따라 새 파일/디렉터리는 다음과 같이 생성됨:
  • 파일: 666 - umask = 일반적으로 644 (-rw-r--r--)
  • 디렉터리: 777 - umask = 일반적으로 755 (drwxr-xr-x)

실습 예제: 사용자 생성 절차

요구사항:
  • 계정명: tester
  • UID: 1002
  • 홈 디렉터리: /opt/tester
  • 기본 그룹: devteam
  • 보조 그룹: web, db
  • 로그인 셸: /bin/bash
실행 명령어:
groupadd devteam
groupadd web
groupadd db
useradd -u 1002 -d /opt/tester -g devteam -G web,db -s /bin/bash tester
passwd tester

프롬프트 오류 해결: -bash-4.2$ 문제

이 현상은 홈 디렉터리에 초기 설정 파일이 누락되었을 때 발생합니다. 해결 방법:
cp /etc/skel/.bash_profile /home/tester/
cp /etc/skel/.bashrc /home/tester/
chown tester:tester /home/tester/.*
이후 재로그인하면 정상적인 프롬프트가 표시됩니다.

태그: linux user management group management chmod chown

7월 18일 03:29에 게시됨