LFCS 사용자·그룹·SGID 실습

사용자·보조 그룹·공유 디렉터리 SGID를 만들고 부수 효과까지 확인하는 시나리오 연습


공개된 시험문항이나 복원 문제가 아니다. 공식 Users & Groups 영역과 권한 이해를 바탕으로 독자적으로 만든 시나리오 연습이다.

작성·검증 상태: AI가 문서 구조와 설명을 보조했다. 핵심 user·group·SGID 동작은 Rocky Linux 10.2 실습 기록과 대조했으며, 새 환경에서는 최종 검증 command를 다시 수행한다.

목표

  • 기존 상태를 확인하고 필요한 객체만 만든다.
  • 기존 보조 그룹을 잃지 않게 사용자를 그룹에 추가한다.
  • 공유 디렉터리의 소유권과 SGID를 설정한다.
  • 설정값과 실제 동작을 분리해 검증한다.

첫 시도 권장 시간은 15분, 두 번째 시도 목표는 7분 이하다.

초기 상태

폐기 가능한 실습 VM에서 root 셸로 시작한다. 다음 이름과 경로가 다른 실습에 사용되지 않는지 먼저 확인한다.

getent group baseline
getent group devops
getent passwd lfcsuser
stat /srv/project

첫 반복은 네 항목이 존재하지 않는 깨끗한 상태를 전제로 한다. 이미 존재한다면 바로 삭제하지 말고 별도 VM이나 다른 이름을 사용한다.

문제

다음 요구사항을 만족하라.

  1. baseline과 devops 그룹을 생성한다.
  2. 홈 디렉터리와 /bin/bash 로그인 셸을 가진 lfcsuser를 만들고 baseline을 보조 그룹으로 지정한다.
  3. baseline을 유지한 채 lfcsuser를 devops 보조 그룹에 추가한다.
  4. /srv/project를 만들고 소유자와 그룹을 root:devops로 설정한다.
  5. 소유자와 그룹만 모든 디렉터리 작업을 할 수 있고 기타 사용자는 접근하지 못하게 한다.
  6. 새 항목이 devops 그룹을 따르도록 디렉터리에 SGID를 설정한다.
  7. id lfcsuser에 baseline과 devops가 모두 표시되는지 포함해 최종 상태를 명령 출력으로 증명한다.

풀이를 보기 전에 다음을 기록한다.

시작 시각:
예상 명령:
위험하다고 생각한 명령:
최종 검증 명령:
풀이와 상태 검증 보기

기준 풀이

groupadd baseline
groupadd devops
useradd -m -s /bin/bash -G baseline lfcsuser
usermod -aG devops lfcsuser

mkdir /srv/project
chown root:devops /srv/project
chmod 2770 /srv/project

상태 검증

getent passwd lfcsuser
id lfcsuser
getent group devops
stat -c '%A %a %U:%G %n' /srv/project

다음 조건을 확인한다.

  • lfcsuser의 홈이 /home/lfcsuser, 셸이 /bin/bash다.
  • id lfcsuser 출력에 baseline과 devops가 모두 있다.
  • /srv/project가 root:devops다.
  • 숫자 모드는 2770, 기호 모드는 drwxrws---다.

동작 검증

runuser -u lfcsuser -- bash -c \
  'umask 0002; touch /srv/project/from-lfcsuser; mkdir /srv/project/child'

stat -c '%A %a %U:%G %n' \
  /srv/project/from-lfcsuser \
  /srv/project/child

예상 검증 포인트는 다음과 같다.

  • 두 항목의 그룹이 devops다.
  • 하위 디렉터리의 기호 모드에서 그룹 실행 위치가 s다.
  • 새 파일의 그룹 쓰기 권한은 SGID가 아니라 umask 0002의 영향을 받는다.

동작 검증 뒤에는 root 셸에서 lfcsuser의 새 프로세스를 시작해 그룹이 반영됐는지 확인한다. 이 과제에서는 lfcsuser의 비밀번호나 SSH 키를 만들지 않았으므로 해당 계정의 새 SSH 로그인을 전제로 하지 않는다.

id
id lfcsuser
runuser -u lfcsuser -- id

첫 번째 id는 현재 셸 프로세스의 그룹, id lfcsuser는 NSS의 계정 정보, runuser 안의 id는 새로 초기화한 lfcsuser 프로세스의 그룹을 보여준다.

자주 나오는 잘못된 접근

이 실습의 “그룹 추가”에 usermod -G만 사용

usermod -G devops lfcsuser

devops는 보이지만 기존 baseline 보조 그룹이 제거된다. 최종 상태 일부만 맞고 부수 효과 검증에는 실패한 풀이이다.

사용자를 삭제하고 다시 생성

userdel -r lfcsuser

기존 사용자를 그룹에 추가하는 문제에서 홈과 데이터를 삭제할 이유가 없다. 요구되지 않은 파괴적 변경이다.

이 실습의 “그룹 상속” 요구에 chmod 770만 사용

접근 권한은 맞지만 SGID가 없다. 새 파일의 그룹이 공유 디렉터리의 그룹을 따르도록 보장하지 못한다.

chmod 2770이면 그룹 쓰기도 상속된다고 생각

SGID는 그룹 ID 상속을 다룬다. 파일의 쓰기 권한은 생성 모드, umask, default ACL을 함께 봐야 한다.

자체 채점표

아래 점수는 학습용 기준이며 공식 LFCS 배점과 관계없다.

영역배점통과 기준
최종 상태50baseline·devops 보조 그룹, 소유권, 2770 모두 일치
안전성20기존 그룹·데이터를 제거하지 않음
검증20id, getent, stat과 실제 생성 동작 확인
시간10초기화한 환경에서 7분 이내

맞게 만들기 → 7분 안에 만들기 → 기존 상태를 망가뜨리지 않기 → 동작까지 검증하기

초기화

권장 방법은 복원 시험을 통과한 실습 직전 VM 체크포인트로 되돌리는 것이다. 수동 삭제는 이 과제 전용 VM이고 정확한 대상이 확인된 경우에만 한다. 삭제 전에는 다음을 기록한다.

id lfcsuser
find /srv/project -maxdepth 2 -ls
getent group baseline
getent group devops

다른 데이터가 섞여 있으면 중단하고 체크포인트로 복원한다.

참고 자료