공공부하자개발 · 영어 학습 노트
리눅스
리눅스 명령어리눅스 자체를 익히는 명령 중심 학습0/10 완료
  • 01파일·디렉터리 명령
  • 02텍스트 보기·편집 (less·vi)
  • 03사용자·그룹·권한·sudo
  • 04패키지·시스템 정보 (dnf·rpm)
  • 05프로세스·자원 (ps·top·free·df)
  • 06네트워크 명령 (ip·ss·ping·scp)
  • 07압축·아카이브·검색 (tar·gzip·find)
  • 08셸 활용 (히스토리·별칭·단축키)
  • 09sed · awk 한 줄 처리 (치환·필드·집계)
  • 10링크 · 디스크 · 예약 작업 (ln·mount·crontab)
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 리눅스 명령어 › 03 / 10

사용자·그룹·권한·sudo

섹션 7진행 0 / 10
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

2. 핵심 원리

2.1 나는 누구인가

bash
whoami                      # kim
id                          # uid=1001(kim) gid=1001(kim) groups=1001(kim),10(wheel)
groups                      # kim wheel

id 한 줄에 내 사용자 번호, 기본 그룹, 속한 그룹 전부가 나옵니다. 권한 문제가 생기면 이것과 파일의 소유자·그룹을 비교하는 것이 첫 단계입니다.

2.2 열 글자 읽기

ls -l 의 첫 열은 종류 1글자와 권한 9글자입니다. 9글자는 3글자씩 소유자, 그룹, 기타 순서입니다.

text
-rw-r--r--   1 myapp myapp  app.jar
drwxr-x---   2 myapp myapp  conf
 ↑ ↑↑↑ ↑↑↑ ↑↑↑
 종류 소유자 그룹 기타
글자 파일에서 폴더에서
r 내용 읽기 이름 목록 보기
w 내용 쓰기 파일 만들기·지우기
x 실행 들어가기(cd)·안 파일 접근

첫 글자는 - 파일, d 폴더, l 링크입니다. 폴더는 x 가 없으면 r 이 있어도 안의 파일을 열 수 없습니다.

2.3 숫자 표기

r=4, w=2, x=1 을 더한 숫자 세 자리가 권한입니다. 외워 두면 ls -l 을 보는 즉시 숫자로 읽힙니다.

숫자 표기 쓰임
644 rw-r--r-- 일반 파일
600 rw------- 비밀번호·키
755 rwxr-xr-x 폴더·스크립트
750 rwxr-x--- 앱 폴더
700 rwx------ 개인 폴더
777 rwxrwxrwx 쓰지 않음

chmod 750 /opt/myapp 이 "소유자 전부, 그룹 읽기·실행, 남은 아무것도" 입니다. 대부분의 운영 폴더가 이 값입니다.

2.4 chmod 기호 표기

숫자가 전체를 설정한다면 기호는 일부만 더하거나 뺍니다. 대상 u g o a, 동작 + - =, 권한 r w x 를 조합합니다.

bash
chmod u+x deploy.sh         # 소유자에게 실행 추가
chmod go-w conf.txt         # 그룹·기타 쓰기 제거
chmod a=r readme.txt        # 모두 읽기만으로 설정
chmod -R g+w shared/        # 하위 전부 그룹 쓰기

스크립트를 만들면 chmod u+x 한 번이 필요합니다. -R 은 폴더 아래 전체에 적용하므로 범위를 확인하고 씁니다.

2.5 umask

새 파일과 폴더의 기본 권한은 umask 값을 뺀 결과입니다. 기본 022 이면 파일 644, 폴더 755 입니다.

bash
umask                       # 0022
umask 077                   # 이 셸에서 만드는 파일은 600, 폴더 700

서비스 계정의 .bashrc 나 유닛 파일의 UMask= 로 정하면 앱이 만드는 파일이 처음부터 안전한 권한을 갖습니다. 운영 묶음 01 에서 잠깐 본 값입니다.

2.6 소유자 변경: chown chgrp

파일의 소유자와 그룹은 root 만 바꿀 수 있습니다. 배포한 파일을 앱 계정에게 넘길 때 씁니다.

bash
sudo chown myapp:myapp app.jar         # 소유자:그룹
sudo chown -R myapp:myapp /opt/myapp   # 하위까지
sudo chgrp deploy conf                 # 그룹만

root 로 scp 한 파일은 root 소유라 앱 계정이 못 읽습니다. 배포 스크립트 끝에 chown -R 을 넣어 두는 것이 관례입니다.

2.7 사용자 만들기

명령 뜻
useradd -m -s /bin/bash kim 홈 폴더와 셸
useradd -r -s /sbin/nologin myapp 서비스 계정
passwd kim 비밀번호 설정
usermod -aG wheel kim 그룹 추가
userdel -r kim 홈까지 삭제

-r 은 시스템 계정으로 번호가 1000 미만이고, /sbin/nologin 은 로그인을 막습니다. 앱을 띄우는 계정은 이 형태로 만들어 뚫려도 셸을 못 얻게 합니다.

2.8 그룹

bash
sudo groupadd deploy               # 그룹 만들기
sudo gpasswd -a kim deploy         # 넣기
sudo usermod -aG deploy kim        # 같은 뜻
getent group deploy                # deploy:x:1005:kim,lee

그룹 추가는 다시 로그인해야 적용됩니다. usermod -G 에서 -a 를 빼면 기존 그룹이 전부 빠지고 지정한 그룹만 남는 큰 실수가 됩니다.

2.9 /etc/passwd 와 /etc/group

사용자 정보는 이 두 텍스트 파일에 있고 getent 로 읽습니다.

bash
getent passwd myapp        # myapp:x:989:989::/opt/myapp:/sbin/nologin
getent group wheel         # wheel:x:10:kim

passwd 한 줄은 이름, 비밀번호 자리, uid, gid, 설명, 홈, 셸 순서입니다. 비밀번호는 /etc/shadow 에 따로 있어 root 만 봅니다.

2.10 sudo

sudo 명령 이 그 명령만 root 로 실행합니다. 내 비밀번호를 묻고 잠시 기억합니다.

bash
sudo systemctl restart myapp       # root 로 한 명령
sudo -u myapp jstack 1234          # 다른 사용자로
sudo -l                            # 내가 할 수 있는 것
sudo -i                            # root 셸, 꼭 필요할 때만

RHEL 은 wheel 그룹이 sudo 를 쓸 수 있습니다. sudo -u 는 운영 묶음 09 에서 앱 계정으로 jstack 을 붙일 때 쓴 형태입니다.

2.11 sudoers 최소 권한

특정 명령만 허용하려면 visudo 로 /etc/sudoers 를 편집합니다. 문법 오류를 검사해 잠기는 사고를 막습니다.

text
kim ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp, /usr/bin/systemctl status myapp
%deploy ALL=(myapp) NOPASSWD: /opt/myapp/app.sh

첫 줄은 kim 이 두 명령만 비밀번호 없이, 둘째 줄은 deploy 그룹이 myapp 계정으로 배포 스크립트만 실행합니다. 운영자에게 root 셸을 주지 않고 필요한 것만 여는 방식입니다.

2.12 특수 권한

세 가지 특수 비트가 있습니다. 폴더의 setgid 와 /tmp 의 sticky 를 알아 두면 됩니다.

비트 표기 뜻
setgid 폴더 drwxrwsr-x 새 파일이 폴더 그룹을 상속
sticky drwxrwxrwt 남의 파일 못 지움
setuid -rwsr-xr-x 소유자 권한으로 실행
bash
chmod g+s /srv/shared      # 팀 공유 폴더
chmod +t /srv/upload       # 각자 자기 파일만 삭제

passwd 명령이 setuid 로 /etc/shadow 를 고칩니다. 직접 만든 스크립트에는 setuid 를 쓰지 않습니다.

핵심 원리
  • 2.1 나는 누구인가
  • 2.2 열 글자 읽기
  • 2.3 숫자 표기
  • 2.4 chmod 기호 표기
  • 2.5 umask
  • 2.6 소유자 변경: chown chgrp
  • 2.7 사용자 만들기
  • 2.8 그룹
  • 2.9 /etc/passwd 와 /etc/group
  • 2.10 sudo
  • 2.11 sudoers 최소 권한
  • 2.12 특수 권한
이전 섹션1 왜 배우는가2 / 7다음 섹션3 코드 예제