파일 담는 것 권한 /etc/passwd계정 기본 정보 누구나 읽을 수 있다 /etc/shadow암호화된 비밀번호 와 만료 정책root만 읽을 수 있다/etc/group그룹 정보 누구나 읽을 수 있다
왜 나눴나: /etc/passwd는 여러 프로그램이 사용자 이름·UID를 조회해야 해서 누구나 읽을 수 있어야 한다. 그런데 비밀번호까지 거기 있으면 누구나 해시를 가져가 크래킹할 수 있다. 그래서 비밀번호만 /etc/shadow로 떼어내 root 전용 으로 막았다.
user:x:1000:1000:Test User:/home/user:/bin/bash
│ │ │ │ │ │ │
│ │ │ │ │ │ └── ⑦ 로그인 셸
│ │ │ │ │ └───────────── ⑥ 홈 디렉터리
│ │ │ │ └──────────────────────── ⑤ 설명(코멘트)
│ │ │ └──────────────────────────────── ④ GID (기본 그룹)
│ │ └───────────────────────────────────── ③ UID
│ └──────────────────────────────────────── ② 비밀번호 자리 (x = shadow 에 있음)
└─────────────────────────────────────────── ① 사용자 이름
필드는 7개, 구분자는 콜론(:) — 이 두 가지를 묻는 문항이 있다.
두 번째 필드의 x 는 "실제 비밀번호는 /etc/shadow에 있다"는 표시다.
다섯 번째 설명 필드는 비어 있어도 된다. 그래도 콜론은 남으므로 (user:x:1000:1000::/home/user:/bin/bash) 필드 수는 언제나 7이다.
alice:$6$Xy3k...:19968:0:99999:7:::
│ │ │ │ │ │ │││
│ │ │ │ │ │ ││└─ ⑨ 예약(사용 안 함)
│ │ │ │ │ │ │└── ⑧ 계정 만료일
│ │ │ │ │ │ └─── ⑦ 만료 후 유예(비활성) 일수
│ │ │ │ │ └───── ⑥ 만료 전 경고 일수
│ │ │ │ └───────── ⑤ 최대 사용 일수
│ │ │ └───────────── ④ 최소 사용 일수
│ │ └───────────────── ③ 마지막으로 바꾼 날
│ └─────────────────────────── ② 암호화된 비밀번호
└────────────────────────────────── ① 사용자 이름
/etc/shadow는 9개 필드 다. /etc/passwd의 7개와 짝으로 묻는다.
③의 날짜는 연·월·일이 아니라 1970년 1월 1일부터 센 일수 로 적힌다.
②가 $6$로 시작하면 SHA-512 방식으로 암호화됐다는 뜻이다($1$은 MD5, $5$는 SHA-256).
② 자리가 !·!!·*이면 비밀번호로 로그인할 수 없는 계정이다. 막 만들어 비밀번호를 아직 정하지 않았거나, 잠갔거나, 시스템 계정인 경우다.
dev:x:1500:alice,bob
│ │ │ │
│ │ │ └── ④ 구성원 목록 (쉼표로 구분)
│ │ └───────── ③ GID
│ └───────────── ② 그룹 비밀번호 자리
└──────────────── ① 그룹 이름
파일 필드 수 구분자 /etc/passwd7 :/etc/shadow9 :/etc/group4 : (구성원끼리는 ,)
함정: /etc/group의 ④에는 그 그룹을 보조 그룹 으로 가진 사용자만 적힌다. 그 그룹이 기본 그룹 인 사용자는 여기 나타나지 않는다 — 그 관계는 /etc/passwd의 GID 필드에 적혀 있기 때문이다.
UID 뜻 0 root — 이름과 무관하게 관리자 권한1~999 시스템 계정(데몬용) 1000 이상 일반 사용자 (배포판에 따라 500부터인 경우도 있다)
UID 0이 root 라는 점이 핵심이다. 계정 이름을 바꿔도 UID가 0이면 root다.
로그인시키지 않을 계정은 셸을 /sbin/nologin 이나 /bin/false로 지정한다.
명령 하는 일 useradd 이름계정 생성 useradd -m 이름홈 디렉터리까지 생성useradd -u 1500 -g dev 이름UID·기본 그룹 지정 passwd 이름비밀번호 설정·변경 usermod -aG 그룹 이름보조 그룹 추가 usermod -L / -U계정 잠금 / 해제 userdel 이름계정 삭제 (홈은 남는다) userdel -r 이름홈 디렉터리까지 삭제id 이름UID·GID·소속 그룹 확인 who / w현재 접속한 사용자
sudo useradd -m alice # 홈 디렉터리와 함께 생성
sudo passwd alice # 비밀번호 설정
id alice # uid=1001(alice) gid=1001(alice) ...
sudo usermod -aG wheel alice # wheel 그룹에 추가
sudo userdel -r alice # 홈까지 삭제
함정 둘. ① useradd는 홈 디렉터리를 자동으로 만들지 않는 경우가 있다 — -m이 그 역할이다(배포판 기본 설정에 따라 다르다). ② usermod -G만 쓰면 기존 보조 그룹이 날아간다. 추가하려면 반드시 -aG 를 쓴다.
useradd의 옵션은 결국 /etc/passwd의 어느 필드를 채울지 정하는 것이다.
옵션 채우는 것 passwd 필드 -u UID사용자 번호 ③ -g 그룹기본 그룹 ④ -G 그룹,그룹보조 그룹 (/etc/group에 기록) -c "설명"설명 ⑤ -d 경로홈 디렉터리 위치 ⑥ -s 셸로그인 셸 ⑦ -e 날짜계정 만료일 (/etc/shadow ⑧)
sudo useradd -m -u 1500 -g dev -G wheel -c "Kim" -d /home/kim -s /bin/bash kim
grep kim /etc/passwd
# kim:x:1500:1500:Kim:/home/kim:/bin/bash
소문자 -g는 기본 그룹(하나), 대문자 -G는 보조 그룹(여러 개) 이다. usermod에서도 같은 뜻이다.
옵션을 주지 않은 항목은 기본값으로 채워진다. 그 기본값이 적힌 곳이 따로 있다.
파일 담는 것 /etc/default/useradd기본 홈 위치·기본 셸 등 (useradd -D로 확인) /etc/login.defsUID 범위, 비밀번호 최대 사용 일수 등 정책 /etc/skel새 홈 디렉터리에 복사될 기본 파일 (.bashrc 등)
계정을 만든 직후에는 비밀번호가 없어 로그인할 수 없다. passwd 이름으로 정해 줘야 비로소 쓸 수 있다.
명령 하는 일 passwd -l 이름비밀번호 잠금 (lock) passwd -u 이름잠금 해제 (unlock) passwd -d 이름비밀번호 삭제 — 비밀번호 없이 로그인 가능해져 위험 passwd -S 이름비밀번호 상태 확인 usermod -L / -U계정 잠금 / 해제 usermod -s /sbin/nologin 이름로그인 셸을 바꿔 로그인 자체를 막음
잠금은 /etc/shadow의 암호 앞에 !를 붙여 어떤 비밀번호도 맞지 않게 만드는 방식이다. 계정과 파일은 그대로 남는다.
일반 사용자는 passwd로 자기 비밀번호만 바꿀 수 있고, 다른 계정의 비밀번호와 -l·-u·-d는 root만 쓸 수 있다.
usermod의 나머지 옵션은 useradd와 같다 — -s(셸), -d(홈), -g(기본 그룹), -c(설명). 로그인 이름을 바꾸는 -l 새이름만 따로 기억한다(대문자 -L은 잠금).
구분 설명 기본 그룹(primary) /etc/passwd의 GID 필드. 파일을 만들면 이 그룹이 붙는다보조 그룹(secondary) /etc/group에 이름이 올라간 그룹. 여러 개 가능
명령 하는 일 groupadd 이름그룹 생성 groupdel 이름그룹 삭제 groups 사용자소속 그룹 확인 groupadd -g 1500 이름GID를 지정해 생성 groupmod -n 새이름 옛이름그룹 이름 변경 gpasswd -a 사용자 그룹그룹에 사용자 추가 gpasswd -d 사용자 그룹그룹에서 사용자 제거
$ id alice
uid=1001(alice) gid=1001(alice) groups=1001(alice),10(wheel),1500(dev)
│ │ │
│ │ └── 소속 그룹 전부 (기본 + 보조)
│ └──────────────────── 기본 그룹
└─────────────────────────────────── 사용자 번호
계정을 만들 때 그룹을 지정하지 않으면 사용자와 같은 이름의 그룹 이 함께 만들어져 기본 그룹이 되는 것이 일반적이다. 위에서 alice의 기본 그룹이 alice인 이유다.
보조 그룹을 추가한 뒤에는 다시 로그인해야 적용된다. 이미 열려 있는 셸은 로그인할 때의 그룹 목록을 그대로 갖고 있다.
어떤 사용자의 기본 그룹으로 쓰이고 있는 그룹은 groupdel로 지워지지 않는다.
명령 보여 주는 것 whoami지금 권한을 쓰고 있는 사용자 이름who현재 로그인한 사용자와 터미널, 접속 시각 wwho에 더해 무엇을 하고 있는지 와 시스템 부하last과거 로그인 기록 idUID·GID·소속 그룹
$ who
user pts/0 2026-09-03 09:00 (192.168.0.10)
$ su -
Password:
# whoami
root
# who am i
user pts/0 2026-09-03 09:00 (192.168.0.10)
su로 전환한 뒤 whoami는 바뀐 사용자 (root)를, who am i는 처음 로그인한 사용자 (user)를 보여 준다. 띄어쓰기 하나로 답이 달라진다.
구분 susudo하는 일 사용자 자체를 전환 한 명령만 다른 권한으로 실행필요한 비밀번호 대상 계정의 비밀번호자기 자신의 비밀번호로그 남기 어렵다 누가 무엇을 했는지 기록된다 설정 파일 — /etc/sudoers
su # root 로 전환 (환경변수는 그대로)
su - # root 로 전환 + root 의 환경까지 로드
sudo 명령 # 그 명령 하나만 root 권한으로
su -의 하이픈 이 중요하다. 붙이면 대상 사용자로 로그인한 것처럼 환경 변수·작업 디렉터리까지 바뀐다.
sudo가 권장되는 이유는 최소 권한 원칙과 감사 추적 때문이다. root 비밀번호를 여러 사람이 공유할 필요도 없다.
/etc/sudoers는 visudo로 편집 한다. 문법 오류를 검사해 주기 때문에, 직접 편집하다 망가뜨리면 sudo 자체를 못 쓰게 된다.
$ pwd
/home/user
$ su
Password:
# pwd
/home/user ← su : 위치와 환경이 그대로
# exit
$ su -
Password:
# pwd
/root ← su - : root 의 홈으로, root 의 환경으로
쓰는 법 뜻 su사용자 이름을 생략하면 root 로 전환 su - alicealice로 전환하며 alice의 환경까지 su -c "명령" alice전환하지 않고 그 명령 하나만 alice 권한으로 sudo -u alice 명령root가 아닌 alice 권한으로 명령 실행 sudo -l내가 sudo로 실행할 수 있는 명령 목록 exit전환한 셸을 끝내고 원래 사용자로 복귀
root가 su로 다른 사용자가 될 때는 비밀번호를 묻지 않는다. 일반 사용자가 전환할 때만 대상 계정의 비밀번호가 필요하다.
모든 사용자가 sudo를 쓸 수 있는 것은 아니다. /etc/sudoers에 허용된 사용자·그룹만 가능하다.
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
앞의 %는 그룹 이라는 표시다. 위 두 번째 줄은 "wheel 그룹의 구성원은 모든 명령을 sudo로 실행할 수 있다"로 읽는다.
관리자 그룹의 이름은 배포판마다 다르다 — RedHat 계열은 wheel, Debian·Ubuntu 계열은 sudo 그룹이다. 그래서 usermod -aG wheel alice가 곧 "alice에게 sudo 권한을 준다"는 뜻이 된다.
내일은 이번 주에 익힌 명령들을 한 장으로 묶어 정리한다.
/etc/passwd : 사용자 계정의 기본 정보를 담은 파일. 콜론으로 구분된 7개 필드.
/etc/shadow : 암호화된 비밀번호와 만료 정책을 담은 파일. root만 읽을 수 있다.
UID : 사용자 식별 번호. 0은 root, 1000 이상이 일반 사용자다.
GID : 그룹 식별 번호.
기본 그룹 : /etc/passwd에 기록된 그룹. 새로 만든 파일의 그룹이 된다.
보조 그룹 : 추가로 속한 그룹. usermod -aG로 더한다.
su : 다른 사용자로 전환하는 명령. 대상 계정의 비밀번호가 필요하다.
sudo : 지정한 명령 하나만 관리자 권한으로 실행하는 명령. 자기 비밀번호를 쓴다.
visudo : /etc/sudoers를 문법 검사와 함께 안전하게 편집하는 명령.
📝 연습 문제 선택지를 클릭하면 정답·해설이 펼쳐집니다.
다음 중 /etc/passwd 파일의 필드 구분자와 필드 개수로 알맞은 것은?
A 콜론(:), 7개 B 쉼표(,), 5개 C 탭, 6개 D 공백, 7개 다음 중 root 계정을 나타내는 UID 값으로 알맞은 것은?
다음 중 사용자의 암호화된 비밀번호가 저장되는 파일로 알맞은 것은?
A /etc/group B /etc/shadow C /etc/passwd D /etc/sudoers 다음 중 기존 보조 그룹을 유지하면서 사용자를 새 그룹에 추가하는 명령으로 알맞은 것은?
A usermod -G dev alice B useradd -G dev alice C usermod -aG dev alice D groupadd -a dev alice 다음 중 su와 sudo의 차이에 대한 설명으로 알맞은 것은?
A 둘 다 대상 계정의 비밀번호를 입력해야 한다 B su는 자기 비밀번호를, sudo는 root 비밀번호를 쓴다 C sudo는 사용자 자체를 전환하고 su는 명령 하나만 실행한다 D su는 사용자를 전환하고 sudo는 명령 하나만 권한을 올려 실행한다