사용자와 그룹 관리
사용자와 그룹 관리¶
1. 사용자 관련 파일¶
리눅스는 사용자 정보를 특정 파일들에 저장합니다.
/etc/passwd¶
사용자 계정 정보를 저장합니다.
cat /etc/passwd | head -5
출력:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
│ │ │ │ │ │ │
│ │ │ │ │ │ └── 로그인 쉘
│ │ │ │ │ └── 홈 디렉토리
│ │ │ │ └── 설명 (GECOS)
│ │ │ └── 기본 그룹 ID (GID)
│ │ └── 사용자 ID (UID)
│ └── 비밀번호 (x = shadow 파일에 저장)
└── 사용자명
/etc/shadow¶
암호화된 비밀번호를 저장합니다 (root만 읽기 가능).
sudo cat /etc/shadow | head -3
출력:
root:$6$xxxx...:19000:0:99999:7:::
ubuntu:$6$yyyy...:19000:0:99999:7:::
ubuntu:$6$...:19000:0:99999:7:::
│ │ │ │ │ │
│ │ │ │ │ └── 비밀번호 만료 경고 일수
│ │ │ │ └── 비밀번호 최대 사용 일수
│ │ │ └── 비밀번호 최소 사용 일수
│ │ └── 마지막 변경일 (1970년 1월 1일 기준 일수)
│ └── 암호화된 비밀번호
└── 사용자명
/etc/group¶
그룹 정보를 저장합니다.
cat /etc/group | head -5
출력:
root:x:0:
daemon:x:1:
ubuntu:x:1000:
sudo:x:27:ubuntu
developers:x:1001:alice,bob
developers:x:1001:alice,bob
│ │ │ │
│ │ │ └── 그룹 멤버 (추가 멤버)
│ │ └── 그룹 ID (GID)
│ └── 비밀번호 (보통 사용 안 함)
└── 그룹명
2. 사용자 관리 명령어¶
useradd - 사용자 생성¶
# 기본 생성
sudo useradd username
# 옵션과 함께 생성 (권장)
sudo useradd -m -s /bin/bash -c "John Doe" john
# 주요 옵션
# -m : 홈 디렉토리 생성
# -s : 로그인 쉘 지정
# -c : 설명(코멘트)
# -d : 홈 디렉토리 경로 지정
# -g : 기본 그룹
# -G : 추가 그룹
# -u : UID 지정
# 여러 그룹에 추가하며 생성
sudo useradd -m -s /bin/bash -G sudo,developers newuser
# 비밀번호 설정
sudo passwd newuser
adduser - 대화형 사용자 생성 (Ubuntu/Debian)¶
# 대화형으로 사용자 생성 (더 편리)
sudo adduser newuser
출력:
Adding user `newuser' ...
Adding new group `newuser' (1002) ...
Adding new user `newuser' (1002) with group `newuser' ...
Creating home directory `/home/newuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Full Name []: New User
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
usermod - 사용자 수정¶
# 쉘 변경
sudo usermod -s /bin/zsh username
# 홈 디렉토리 변경
sudo usermod -d /home/newhome -m username
# 그룹에 추가 (기존 그룹 유지)
sudo usermod -aG sudo username
sudo usermod -aG docker,developers username
# 사용자명 변경
sudo usermod -l newname oldname
# 계정 잠금
sudo usermod -L username
# 계정 잠금 해제
sudo usermod -U username
userdel - 사용자 삭제¶
# 사용자만 삭제
sudo userdel username
# 홈 디렉토리와 메일도 삭제
sudo userdel -r username
passwd - 비밀번호 관리¶
# 자신의 비밀번호 변경
passwd
# 다른 사용자 비밀번호 변경 (root)
sudo passwd username
# 비밀번호 만료시키기 (다음 로그인 시 변경 강제)
sudo passwd -e username
# 비밀번호 잠금
sudo passwd -l username
# 비밀번호 잠금 해제
sudo passwd -u username
# 비밀번호 상태 확인
sudo passwd -S username
3. 그룹 관리 명령어¶
groupadd - 그룹 생성¶
# 그룹 생성
sudo groupadd developers
# GID 지정
sudo groupadd -g 2000 mygroup
groupmod - 그룹 수정¶
# 그룹명 변경
sudo groupmod -n newname oldname
# GID 변경
sudo groupmod -g 2001 groupname
groupdel - 그룹 삭제¶
sudo groupdel groupname
gpasswd - 그룹 멤버 관리¶
# 사용자를 그룹에 추가
sudo gpasswd -a username groupname
# 사용자를 그룹에서 제거
sudo gpasswd -d username groupname
# 그룹 관리자 지정
sudo gpasswd -A adminuser groupname
4. 사용자 전환¶
su - 사용자 전환¶
# 다른 사용자로 전환
su username
# root로 전환
su -
su - root
# 환경변수 포함 전환 (권장)
su - username
# 명령 하나만 실행
su -c 'command' username
sudo - 권한 상승¶
# 관리자 권한으로 명령 실행
sudo command
# 다른 사용자로 명령 실행
sudo -u username command
# root 쉘 열기
sudo -i
# 환경변수 유지
sudo -E command
# sudo 권한 캐시 초기화
sudo -k
5. sudo 설정¶
/etc/sudoers¶
sudo 권한을 설정하는 파일입니다. 항상 visudo로 편집해야 합니다.
sudo visudo
기본 형식¶
# 사용자별 설정
사용자 호스트=(실행사용자) 명령어
# 그룹별 설정 (% 접두사)
%그룹 호스트=(실행사용자) 명령어
설정 예시¶
# root는 모든 권한
root ALL=(ALL:ALL) ALL
# sudo 그룹 멤버는 모든 권한
%sudo ALL=(ALL:ALL) ALL
# 특정 사용자에게 모든 권한
john ALL=(ALL:ALL) ALL
# 비밀번호 없이 sudo 허용
john ALL=(ALL) NOPASSWD: ALL
# 특정 명령만 허용
backup ALL=(ALL) /usr/bin/rsync, /usr/bin/tar
# 특정 명령 비밀번호 없이
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
/etc/sudoers.d/¶
별도 파일로 설정을 관리할 수 있습니다.
# 파일 생성
sudo visudo -f /etc/sudoers.d/developers
# 내용
%developers ALL=(ALL) NOPASSWD: /usr/bin/docker
6. 사용자 정보 확인¶
id - 사용자 ID 정보¶
# 현재 사용자
id
# 특정 사용자
id username
출력:
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),27(sudo),999(docker)
groups - 그룹 멤버십¶
# 현재 사용자 그룹
groups
# 특정 사용자 그룹
groups username
who - 로그인 사용자¶
# 현재 로그인 사용자
who
출력:
ubuntu pts/0 2024-01-23 10:00 (192.168.1.100)
w - 상세 로그인 정보¶
w
출력:
10:30:00 up 5 days, 3:45, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ubuntu pts/0 192.168.1.100 10:00 0.00s 0.03s 0.00s w
john pts/1 192.168.1.101 10:15 5:00 0.01s 0.01s bash
last - 로그인 기록¶
# 최근 로그인 기록
last
# 특정 사용자
last username
# 최근 10개
last -n 10
# 재부팅 기록
last reboot
lastlog - 마지막 로그인¶
lastlog
7. 시스템 사용자¶
| UID 범위 | 용도 |
|---|---|
| 0 | root |
| 1-999 | 시스템 사용자 |
| 1000+ | 일반 사용자 |
시스템 사용자 생성¶
# 시스템 사용자 (로그인 불가)
sudo useradd -r -s /usr/sbin/nologin serviceuser
주요 시스템 사용자¶
| 사용자 | 용도 |
|---|---|
| root | 시스템 관리자 |
| www-data | 웹 서버 |
| mysql | MySQL 데이터베이스 |
| postgres | PostgreSQL |
| nobody | 최소 권한 프로세스 |
8. 실무 예제¶
개발팀 환경 구성¶
# 1. 개발팀 그룹 생성
sudo groupadd developers
# 2. 개발자 계정 생성
sudo useradd -m -s /bin/bash -G developers alice
sudo useradd -m -s /bin/bash -G developers bob
sudo passwd alice
sudo passwd bob
# 3. 공유 디렉토리 설정
sudo mkdir -p /projects/shared
sudo chgrp developers /projects/shared
sudo chmod 2775 /projects/shared
# 4. sudo 권한 부여 (Docker 명령만)
sudo visudo -f /etc/sudoers.d/developers
# %developers ALL=(ALL) NOPASSWD: /usr/bin/docker
웹 개발자 환경¶
# 웹 개발자 계정
sudo useradd -m -s /bin/bash -G www-data,developers webdev
sudo passwd webdev
# 웹 디렉토리 권한
sudo chown -R webdev:www-data /var/www/mysite
sudo chmod -R 775 /var/www/mysite
배포 전용 계정¶
# 배포 계정 (로그인은 키로만)
sudo useradd -m -s /bin/bash deploy
sudo mkdir -p /home/deploy/.ssh
sudo chmod 700 /home/deploy/.ssh
# SSH 키 설정
sudo touch /home/deploy/.ssh/authorized_keys
sudo chmod 600 /home/deploy/.ssh/authorized_keys
sudo chown -R deploy:deploy /home/deploy/.ssh
# 제한된 sudo 권한
sudo visudo -f /etc/sudoers.d/deploy
# deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp
9. 보안 모범 사례¶
비밀번호 정책¶
# /etc/login.defs 수정
sudo vi /etc/login.defs
PASS_MAX_DAYS 90 # 최대 사용 기간
PASS_MIN_DAYS 7 # 최소 사용 기간
PASS_WARN_AGE 14 # 만료 경고 일수
PASS_MIN_LEN 12 # 최소 길이
root 직접 로그인 비활성화¶
# SSH에서 root 로그인 비활성화
sudo vi /etc/ssh/sshd_config
# PermitRootLogin no
sudo systemctl restart sshd
불필요한 계정 잠금¶
# 사용하지 않는 계정 잠금
sudo passwd -l unuseduser
# 쉘을 nologin으로
sudo usermod -s /usr/sbin/nologin unuseduser
10. 실습 예제¶
실습 1: 사용자 정보 확인¶
# 현재 사용자 정보
id
groups
whoami
# /etc/passwd 확인
grep $USER /etc/passwd
# 로그인 기록
last -n 5
실습 2: 사용자 생성과 삭제¶
# 테스트 사용자 생성
sudo useradd -m -s /bin/bash -c "Test User" testuser
sudo passwd testuser
# 확인
id testuser
grep testuser /etc/passwd
ls -la /home/testuser
# 삭제
sudo userdel -r testuser
실습 3: 그룹 관리¶
# 그룹 생성
sudo groupadd testgroup
# 사용자 추가
sudo usermod -aG testgroup $USER
# 확인 (재로그인 필요)
groups
# 그룹 삭제
sudo groupdel testgroup
실습 4: sudo 테스트¶
# sudo 권한 확인
sudo -l
# root 권한으로 명령 실행
sudo whoami
# 다른 사용자로 명령 실행
sudo -u www-data whoami
다음 단계¶
07_Process_Management.md에서 프로세스 관리를 배워봅시다!