셸 환경 유형
리눅스 시스템에서는 사용자가 로그인할 때 사용하는 셸(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
- 계정 이름: 로그인 시 사용하는 이름
- 비밀번호 자리표시자: 실제 암호는 /etc/shadow에 있음 ('x')
- UID: 사용자 고유 번호
- GID: 기본 그룹 번호
- 설명 정보: 사용자 이름 또는 역할
- 홈 디렉터리 경로
- 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/.*
이후 재로그인하면 정상적인 프롬프트가 표시됩니다.