이번 주는 리눅스 보안의 뼈대 를 다뤘다. 네 조각(계정 파일 → 관리 명령 → 권한 산수 → 특수 권한·ACL)을 하나의 그림으로 잇는다.
파일 권한 필드 수 핵심 필드 짝 /etc/passwd 644 7 UID(3) · GID(4) · 홈(6) · 셸(7) shadow /etc/shadow 400/640 9 해시(2) · LastChange(3) · Min(4) · Max(5) passwd /etc/group 644 4 GID(3) · 보조멤버(4) gshadow /etc/gshadow 400 4 그룹암호(2) · 관리자(3) group
기억 고정 포인트:
passwd 7필드, shadow 9필드, group/gshadow 각 4필드
UID 0 = root(이름 아닌 번호로 판정)
shadow 날짜 필드 = 1970-01-01부터의 일수
기본 그룹은 passwd(GID), 보조 그룹은 group(멤버 목록)
passwd↔shadow, group↔gshadow는 "공개(644, 신원/소속)와 비밀(400, 해시/정책)"로 분리된 짝이다. 정합성은 pwck(passwd/shadow), grpck(group/gshadow)로 검사한다.
명령 핵심 옵션 주의 함정 useradd -u -g -G -d -s -m -c -g(기본,하나) vs -G(보조,여럿) usermod -aG(추가) / -G(교체) -a 빠뜨리면 기존 보조 그룹 소실 userdel -r(홈까지 삭제) 옵션 없으면 홈은 남음 passwd -l(잠금) -u -e(만료) -d(삭제) -l(차단)과 -d(무암호)는 정반대 chage -M(Max) -m(Min) -W -E 대문자 M=Max, 소문자 m=Min gpasswd -a -d -A group+gshadow 동시 갱신
⚠️ 함정 복습 : usermod -G(단독)는 기존 보조 그룹을 날리고 교체한다. 반드시 -aG. 이건 매주 시험에 나온다고 봐도 된다.
구분 su sudo 요구 암호 대상 사용자 암호자기 자신 암호범위 전환 후 그 사람으로 계속 단일 명령만 위임 설정 파일 없음 /etc/sudoers (visudo로 편집) 감사 어려움(공유 암호) 로그에 남음(/var/log/secure) 로그인 셸 su - (환경 완전 적용)sudo -i
su -의 하이픈 = 로그인 셸(대상 환경 완전 적용). sudoers는 %로 그룹 지정(Red Hat=wheel, Ubuntu=sudo). 편집은 항상 visudo(문법 검사+잠금).
변환 규칙 가중치 r=4, w=2, x=1 순서 owner→group→other, 각 r→w→x 644 rw-r--r-- (일반 파일) 755 rwxr-xr-x (실행/디렉터리) 600 rw------- (비밀 파일) umask 파일 666 − umask umask 디렉터리 777 − umask
⚠️ 함정 복습 : umask 022 → 파일 644, 디렉터리 755. 파일은 666, 디렉터리는 777에서 출발(파일은 x 기본 제외). umask가 클수록 더 제한적.
디렉터리에서 x=진입(cd), 파일 삭제는 파일이 아닌 디렉터리의 w 권한. chown(소유자 변경)은 root만 가능.
항목 8진수 표시 효과 SetUID 4 owner x→s 소유자 권한 실행(passwd=4755) SetGID 2 group x→s 그룹 실행/디렉터리 그룹 상속 Sticky 1 other x→t 공유 디렉터리 삭제 보호(/tmp=1777) ACL setfacl -m ls의 + 개별 사용자/그룹 권한
SetUID 셸 스크립트는 커널이 무시(보안). SetUID 탐색=find / -perm -4000. ACL 있으면 ls -l 권한 끝에 +. mask가 named user/group 권한의 상한.
시나리오 A — 새 협업 디렉터리 구축
groupadd devteam
usermod -aG devteam alice
usermod -aG devteam bob
mkdir /shared && chgrp devteam /shared
chmod 2775 /shared # SetGID: 모든 새 파일이 devteam 그룹 상속
SetGID(2) + 그룹 쓰기(7의 w)로 팀원이 서로 파일 편집 가능. Day 2(그룹)+Day 3(권한)+Day 4(SetGID) 통합.
시나리오 B — 신규 직원 계정 + 첫 로그인 강제 변경
useradd -m -s /bin/bash -c "New Hire" newbie
passwd newbie # 초기 암호 설정
chage -d 0 newbie # 다음 로그인 시 암호 강제 변경
chage -M 90 -W 7 newbie # 90일마다 변경, 7일 전 경고
Day 1(shadow 필드)+Day 2(useradd/passwd/chage) 통합.
시나리오 C — 보안 점검
awk -F: '$3==0{print $1}' /etc/passwd # UID 0 계정(root만 정상)
find / -perm -4000 -type f 2> /dev/null # 의심스러운 SetUID
ls -ld /tmp # Sticky 확인
실무 침해 사고 분석의 첫 단계가 정확히 이 세 가지다 — UID 0 백도어 계정, 비정상 SetUID 바이너리, /tmp의 Sticky 누락. 한 줄짜리 명령으로 시스템 보안의 핵심 구멍을 즉시 점검할 수 있다는 점에서, 이번 주 내용은 시험을 넘어 실무 보안의 기초다.
UID 0 : root 권한의 정의. 커널은 계정 이름이 아니라 이 번호만 본다.
passwd↔shadow / group↔gshadow : 공개 파일(신원·소속)과 비밀 파일(해시·정책)로 갈라진 두 쌍.
pwck / grpck : 두 쌍의 정합성을 검사하는 명령.
-g vs -G : 기본 그룹 하나를 정하는 옵션과 보조 그룹 여럿을 정하는 옵션.
usermod -aG : 기존 보조 그룹을 유지한 채 추가. -a를 빠뜨리면 통째로 교체된다.
chage -d 0 : 마지막 변경일을 0으로 만들어 다음 로그인 때 암호 변경을 강제하는 기법.
su -의 하이픈 : 대상 사용자의 로그인 환경(PATH·HOME·프로파일)까지 완전히 적용하라는 표시.
visudo : sudoers를 문법 검사와 잠금을 걸고 편집하는 전용 명령.
wheel / sudo 그룹 : 레드햇 계열과 우분투 계열의 기본 관리자 그룹.
umask : 새로 만드는 파일·디렉터리에서 깎아낼 권한을 정하는 마스크. 클수록 제한적이다.
디렉터리의 w : 그 안의 파일을 지울 수 있는 권한. 파일 자체 권한과 무관하다.
SetUID / SetGID / Sticky : 소유자 권한 실행 / 그룹 실행·그룹 상속 / 공유 디렉터리 삭제 보호.
ACL mask : 이름이 붙은 ACL 항목이 가질 수 있는 권한의 상한선.
📝 연습 문제 선택지를 클릭하면 정답·해설이 펼쳐집니다.
/etc/shadow의 9개 필드 중 "암호를 마지막으로 변경한 후 다시 변경할 수 있을 때까지의 최소 일수"를 나타내는 필드는?
A 3번째 (Last Change) B 4번째 (Min) C 5번째 (Max) D 6번째 (Warn) 권한이 rwxr-x---인 파일을 8진수로 올바르게 표현하고, 그 의미를 바르게 설명한 것은?
A 750 — 소유자는 전체, 그룹은 읽기/실행, 기타는 권한 없음 B 740 — 소유자는 전체, 그룹은 읽기, 기타는 권한 없음 C 755 — 소유자/그룹/기타 모두 읽기/실행 가능 D 700 — 소유자만 전체, 그룹/기타는 권한 없음 사용자 alice를 기존 보조 그룹을 유지한 채 wheel 그룹에 추가하려 한다. 올바른 명령은?
A usermod -G wheel aliceB usermod -aG wheel aliceC usermod -g wheel aliceD gpasswd -A wheel aliceumask 값이 027일 때 새로 생성되는 디렉터리의 권한은?
A 750 (rwxr-x---) B 755 (rwxr-xr-x) C 640 (rw-r-----) D 770 (rwxrwx---) su와 sudo에 대한 설명으로 옳은 것은?
A su는 자기 암호로, sudo는 대상 사용자 암호로 인증한다 B su는 대상 사용자 암호로, sudo는 자기 암호로 인증하며, sudo 권한은 /etc/sudoers에 정의된다 C 둘 다 root 암호만 요구하며 설정 파일이 동일하다 D sudo는 visudo 없이 직접 vi로 편집하는 것이 표준이다 /tmp 디렉터리의 권한이 1777(drwxrwxrwt)인 이유로 가장 적절한 것은?
A 모든 사용자가 서로의 파일을 자유롭게 삭제하도록 하기 위해 B 모두가 파일을 생성할 수 있되 Sticky bit로 자기 파일만 삭제하도록 보호하기 위해 C root만 파일을 만들 수 있도록 제한하기 위해 D 디렉터리 내용을 메모리에 상주시키기 위해 실행 파일 /usr/bin/passwd에 SetUID가 필요한 이유로 가장 정확한 것은?
A 실행 속도를 높이기 위해 B 일반 사용자가 root만 쓸 수 있는 /etc/shadow를 수정해 자기 암호를 바꿀 수 있게 하기 위해 C 파일을 메모리에 상주시키기 위해 D 그룹 단위로 암호를 공유하기 위해 파일 data.csv에 대해 ls -l 결과가 -rw-rw-r--+로 표시되었다. 끝의 + 기호가 의미하는 것과, 이를 확인하는 명령으로 옳은 것은?
A 압축 파일을 의미하며 gzip -l로 확인한다 B ACL이 설정되어 있음을 의미하며 getfacl로 확인한다 C SetUID가 설정되어 있음을 의미하며 find -perm으로 확인한다 D 심볼릭 링크를 의미하며 readlink로 확인한다 보안 점검 중 awk -F: '$3==0 {print $1}' /etc/passwd를 실행했더니 root와 backdoor 두 개가 출력되었다. 이 결과의 의미는?
A 정상이며 두 계정 모두 시스템 기본 계정이다 B backdoor 계정의 UID가 0으로 설정되어 root와 동등한 권한을 가지는 보안 위협이다 C backdoor 계정의 암호가 비어 있다는 뜻이다 D 두 계정이 같은 그룹에 속해 있다는 뜻이다 디렉터리 /share에 chmod 2770 /share를 적용하고 그룹을 team으로 설정했다. 이 설정의 효과로 가장 정확한 것은?
A team 그룹원이 만든 파일의 그룹이 각자의 기본 그룹이 되어 서로 접근이 막힌다 B SetGID로 인해 /share 안에 생성되는 모든 파일이 team 그룹을 상속하여 그룹 협업이 원활해진다 C Sticky bit로 인해 소유자만 파일을 삭제할 수 있다 D 기타(other) 사용자도 디렉터리에 진입할 수 있다 신규 사용자 계정을 생성하면서 홈 디렉터리를 만들고 /etc/skel의 기본 설정 파일을 복사하려 한다. 올바른 명령은?
A useradd -d newuserB useradd -m newuserC useradd -r newuserD usermod -m newuserpasswd -l user1과 passwd -d user1의 차이로 옳은 것은?
A -l은 암호를 삭제하고, -d는 계정을 잠근다 B -l은 해시 앞에 !를 붙여 로그인을 차단하고, -d는 암호를 삭제해 무암호 상태로 만든다 C 둘 다 동일하게 계정을 완전히 삭제한다 D -l은 암호를 만료시키고, -d는 계정 만료일을 설정한다