모든 강의를 무료로 볼 수 있어요. 회원가입 없이도 학습 가능합니다.

11강 / 전체 12강

사용자 계정 관리 ② — 그룹 관리와 su·sudo

15분 읽기 조회 0

[1과목 3장 01절] /etc/group·/etc/gshadow 구조와 1차/2차 그룹, groupadd·gpasswd·newgrp, su와 sudo의 차이를 다룹니다.

🎯 이 강의 학습 목표

이 강은 1과목 3장 01절 사용자 계정 생성과 관리의 뒷부분입니다. 이 강을 마치면 /etc/group과 /etc/gshadow의 구조를 읽을 수 있고, 1차 그룹과 2차 그룹이 어디에 기록되는지 구분할 수 있으며, su와 su -의 차이, sudo의 동작 원리와 /etc/sudoers를 설명할 수 있게 됩니다.

이 단원에서 점수가 갈리는 지점은 두 곳입니다. 하나는 1차 그룹이 /etc/group의 멤버 목록에 나타나지 않는다는 사실이고, 다른 하나는 su와 su -가 환경변수를 다르게 가져간다는 점입니다. 둘 다 실제 출력을 보면 바로 이해되므로, 이 강에서는 실행 결과를 근거로 설명합니다.

💡 그룹이 필요한 이유와 /etc/group

파일 권한은 소유자·그룹·기타 세 주체에 대해 따로 정해집니다(14강에서 자세히 다룹니다). 사용자가 열 명인데 권한을 개인별로 준다면 파일마다 열 번을 설정해야 합니다. 그룹은 이 문제를 풉니다. 사용자들을 묶어 두고 그룹 단위로 한 번만 권한을 주면 되기 때문입니다.

그룹 정보는 /etc/group에 콜론으로 구분된 4개 필드로 저장됩니다.

$ grep -E "^(root|adm|sudo|users|chung|docker):" /etc/group
root:x:0:
adm:x:4:syslog,chung
sudo:x:27:chung
users:x:100:chung
chung:x:1000:
docker:x:1001:chung
순서필드설명adm 줄의 값
1그룹명—adm
2그룹 암호x — 실제 값은 /etc/gshadow에x
3GID그룹 번호4
4그룹 구성원2차 그룹으로 이 그룹에 속한 사용자 목록(쉼표 구분)syslog,chung

여기서 반드시 짚어야 할 지점이 있습니다. chung이라는 사용자의 1차 그룹은 같은 이름의 chung 그룹인데, 정작 chung:x:1000: 줄의 구성원 목록은 비어 있습니다. 반면 adm·sudo·users·docker 줄에는 chung이 적혀 있습니다.

이유는 이렇습니다. 1차 그룹은 /etc/passwd의 4번째 필드(GID)에 기록되고, /etc/group의 구성원 목록에는 2차 그룹 소속만 적힙니다. 그래서 "어떤 사용자가 이 그룹 소속인가"를 /etc/group만 보고 판단하면 1차 그룹 소속을 놓칩니다. 시험에서 /etc/group 한 줄을 주고 소속을 묻는 문제가 나오면 이 구조를 떠올려야 합니다.

/etc/gshadow는 /etc/passwd–/etc/shadow 관계와 똑같이, 그룹 암호를 root만 읽도록 분리한 파일입니다. 필드는 그룹명 : 암호 : 그룹 관리자 : 구성원 4개입니다.

💡 1차 그룹과 2차 그룹

구분1차 그룹(Primary)2차 그룹(Secondary)
다른 이름기본 그룹보조 그룹
개수반드시 1개0개 이상 여러 개
기록 위치/etc/passwd의 GID 필드/etc/group의 구성원 목록
파일 생성 시새로 만든 파일의 그룹이 됨영향 없음
지정 옵션useradd -g, usermod -guseradd -G, usermod -aG

가장 실질적인 차이는 새 파일을 만들 때 어느 그룹이 붙는가입니다. 사용자가 파일을 만들면 그 파일의 그룹은 1차 그룹이 됩니다. 2차 그룹은 접근 권한을 얻는 데만 쓰입니다.

대부분의 배포판은 계정을 만들 때 같은 이름의 그룹을 함께 만들어 1차 그룹으로 지정합니다. 이를 UPG(User Private Group) 방식이라 하며, 10강에서 본 /etc/login.defs의 USERGROUPS_ENAB yes가 이 동작을 켜는 설정입니다. 사용자마다 전용 그룹을 두면 기본 권한을 느슨하게 줘도 다른 사용자가 접근하지 못하므로 안전합니다.

💡 그룹 관리 명령어

명령역할주요 옵션
groupadd그룹 생성-g GID 지정, -r 시스템 그룹
groupmod그룹 속성 변경-n 이름 변경, -g GID 변경
groupdel그룹 삭제— (누군가의 1차 그룹이면 삭제 불가)
gpasswd그룹 암호·관리자·구성원 관리-a 추가, -d 삭제, -A 관리자 지정, -M 구성원 일괄 지정
newgrp현재 세션의 1차 그룹을 일시 변경— (새 셸이 뜸)
groups소속 그룹 조회—
idUID·GID·그룹 조회-g 1차 GID, -G 전체 GID, -n 이름으로

gpasswd -a와 usermod -aG는 둘 다 사용자를 2차 그룹에 추가합니다. 차이는 방향입니다. gpasswd는 그룹 쪽에서("이 그룹에 이 사람을 넣어라"), usermod는 사용자 쪽에서("이 사람의 그룹을 이렇게 만들어라") 조작합니다. gpasswd -a는 기존 구성원을 건드리지 않으므로 usermod -G처럼 실수로 날릴 위험이 없습니다.

newgrp은 자주 오해받는 명령입니다. 이것은 소속을 바꾸는 것이 아니라, 현재 세션의 1차 그룹을 일시적으로 갈아 끼우는 명령입니다. newgrp docker를 실행하면 새 셸이 뜨고 그 안에서 만드는 파일의 그룹이 docker가 됩니다. exit하면 원래대로 돌아옵니다. 이미 그 그룹의 구성원이면 암호 없이, 아니면 그룹 암호를 물어봅니다.

💡 su와 sudo — 권한을 빌리는 두 방법

관리 작업에는 root 권한이 필요하지만 평소에 root로 로그인해 쓰는 것은 위험합니다. 오타 하나로 시스템을 망가뜨릴 수 있고, 누가 무엇을 했는지 추적할 수도 없습니다. 그래서 필요할 때만 권한을 빌리는 두 가지 방법이 있습니다.

su(substitute user)는 다른 사용자로 전환합니다. 대상 사용자를 생략하면 root가 됩니다. 여기서 중요한 것이 하이픈(-) 유무입니다.

명령동작환경
su 또는 su root사용자만 전환이전 사용자의 환경변수 유지. 현재 디렉터리도 그대로
su - 또는 su -l, su --login전환 + 로그인 셸대상 사용자로 새로 로그인한 것과 동일. PATH·홈 디렉터리까지 전환

su만 쓰면 root가 되었는데도 PATH에 /sbin·/usr/sbin이 없어서 관리 명령을 못 찾는 상황이 생깁니다. 그래서 실무에서는 su -를 쓰는 것이 원칙이며, 시험에서도 이 차이를 묻습니다. 인증은 전환할 대상의 암호로 합니다. root로 가려면 root 암호를 알아야 합니다.

sudo(superuser do)는 접근 방식이 다릅니다. 사용자 전환 없이, 지정된 명령 하나만 다른 사용자 권한으로 실행합니다. 세 가지 결정적 장점이 있습니다.

  • root 암호를 알려 줄 필요가 없습니다. 인증은 자기 자신의 암호로 합니다.
  • 허용 범위를 명령 단위로 제한할 수 있습니다. "이 사용자는 systemctl restart nginx만 가능" 같은 설정이 됩니다.
  • 실행 내역이 로그에 남습니다. 누가 언제 무엇을 했는지 추적됩니다.

설정 파일은 /etc/sudoers이며, 반드시 visudo로 편집해야 합니다. visudo는 저장 전에 문법을 검사하는데, 이 파일에 문법 오류가 나면 아무도 sudo를 쓸 수 없게 되어 복구가 매우 번거롭기 때문입니다. 항목 형식은 다음과 같습니다.

# /etc/sudoers 항목 형식 — 사용자 호스트=(전환대상) 명령
root     ALL=(ALL:ALL) ALL
%sudo    ALL=(ALL:ALL) ALL
%wheel   ALL=(ALL)     NOPASSWD: ALL

앞에 %가 붙으면 그룹을 뜻합니다. 데비안·우분투 계열은 sudo 그룹, 레드햇 계열은 wheel 그룹에 속한 사용자에게 관리자 권한을 주는 것이 관례입니다. NOPASSWD:를 붙이면 암호 확인을 생략합니다. 계열별 그룹 이름 차이는 시험에 그대로 나옵니다.

💻 실습으로 확인하기

아래는 실제 실행 결과입니다.

$ id -gn
chung

$ id -Gn
chung adm cdrom sudo dip plugdev users docker

$ groups
chung adm cdrom sudo dip plugdev users docker

id -gn은 1차 그룹 이름만 출력해 chung이 나왔습니다. id -Gn은 1차와 2차를 모두 출력합니다. 두 출력을 빼면 2차 그룹이 adm cdrom sudo dip plugdev users docker임을 알 수 있습니다. groups도 같은 결과를 줍니다. 옵션의 대소문자(-g와 -G)가 1차와 전체를 가른다는 규칙이 useradd·usermod와 일관됩니다.

이제 /etc/group 출력을 다시 보십시오.

$ grep -E "^(chung|sudo|docker):" /etc/group
chung:x:1000:
sudo:x:27:chung
docker:x:1001:chung

id는 chung이 chung 그룹 소속이라고 했는데, chung:x:1000:의 구성원 목록은 비어 있습니다. 앞에서 설명한 구조가 그대로 드러난 것입니다. 1차 그룹 소속은 /etc/passwd의 GID 필드(10강에서 본 chung:x:1000:1000:...의 네 번째 값)에 기록되어 있습니다. 반면 2차 그룹인 sudo·docker에는 이름이 적혀 있습니다. 같은 소속 정보가 파일 두 곳에 나뉘어 들어간다는 점을 이 세 줄로 확인할 수 있습니다.

$ ls -l /etc/gshadow /etc/sudoers
-rw-r----- 1 root shadow  671 Sep 11 22:46 /etc/gshadow
-r--r----- 1 root root   1800 Jan 30  2024 /etc/sudoers

두 파일의 권한이 의미심장합니다. /etc/gshadow는 rw-r-----로 일반 사용자에게 아무 권한이 없습니다. 그룹 암호를 숨기려는 목적이 권한에 반영된 것입니다. /etc/sudoers는 r--r-----로 소유자인 root조차 쓰기 권한이 없습니다. 실수로 덮어쓰는 것을 막기 위한 설계이며, 그래서 편집에 visudo가 필요합니다. 권한 표기를 읽는 법은 14강에서 자세히 다룹니다.

그룹 실습은 가상머신에서 다음과 같이 해 보십시오.

# 가상머신 등 실습 환경에서만 실행할 것
sudo groupadd -g 5000 devteam          # GID 5000으로 그룹 생성
sudo gpasswd -a lms devteam            # lms를 devteam의 2차 그룹 구성원으로 추가
grep devteam /etc/group                # 구성원 목록에 lms가 들어갔는지 확인
id lms                                 # 1차/2차 그룹 확인
sudo groupdel devteam                  # 삭제 (누군가의 1차 그룹이면 실패)

gpasswd -a로 추가한 결과가 /etc/group의 4번째 필드에 나타나는지 확인하는 것이 이 실습의 핵심입니다. 반대로 usermod -g devteam lms로 1차 그룹을 바꾸면 /etc/group에는 이름이 나타나지 않고 /etc/passwd의 GID만 바뀝니다.

⚠️ 시험에 나오는 함정

함정정확한 사실
/etc/group만 보면 소속 그룹을 다 알 수 있다1차 그룹은 안 나온다. /etc/passwd의 GID를 함께 봐야 함
su와 su -는 같다su -는 로그인 셸로 전환해 PATH·홈까지 바뀜
su는 자기 암호를 입력한다전환할 대상의 암호를 입력(sudo가 자기 암호)
/etc/sudoers를 vi로 직접 연다visudo로 편집(문법 검사). 오류 시 sudo 전체 사용 불가
관리자 그룹은 어느 배포판이나 wheel이다레드햇 계열 wheel / 데비안·우분투 계열 sudo
newgrp은 그룹 소속을 영구히 바꾼다현재 세션의 1차 그룹만 일시 변경
2차 그룹은 새 파일의 그룹이 된다새 파일의 그룹은 1차 그룹

📝 핵심 요약 — 암기표

항목핵심
/etc/group 4필드그룹명 : x : GID : 구성원(2차 그룹만)
/etc/gshadow 4필드그룹명 : 암호 : 그룹 관리자 : 구성원
1차 그룹1개. /etc/passwd의 GID. 새 파일의 그룹이 됨
2차 그룹여러 개. /etc/group 구성원 목록. 접근 권한용
그룹 명령groupadd/groupmod(-n 이름)/groupdel · gpasswd -a/-d/-A · newgrp
id 옵션-g=1차 · -G=전체 · -n=이름으로
su vs su -su=사용자만 / su -=로그인 셸(환경·PATH·홈까지)
암호 입력 주체su=대상의 암호 / sudo=자신의 암호
sudo 설정/etc/sudoers, 편집은 visudo. %는 그룹
관리자 그룹레드햇 wheel / 데비안·우분투 sudo

다음 12강에서는 리눅스 디렉터리 계층 표준(FHS)과 ls·cp·mv·rm 등 파일·디렉터리 조작 명령어를 다룹니다.

📋 실전 문제

1. /etc/group 파일의 필드 구성으로 알맞은 것은?
① 그룹명 : GID : 암호 : 구성원
② 그룹명 : 암호 : GID : 구성원
③ 그룹명 : 구성원 : GID : 암호
④ GID : 그룹명 : 암호 : 구성원

2. 사용자 lms의 1차 그룹이 lms인데도 /etc/group의 lms:x:1001: 줄에 구성원이 비어 있는 이유로 옳은 것은?
① 파일이 손상되었기 때문이다.
② 1차 그룹 소속은 /etc/passwd의 GID 필드에 기록되기 때문이다.
③ 1차 그룹은 /etc/gshadow에만 기록되기 때문이다.
④ 구성원이 1명이면 생략되기 때문이다.

3. su와 su -의 차이에 대한 설명으로 옳은 것은?
① 둘 다 완전히 동일하게 동작한다.
② su -는 대상 사용자로 새로 로그인한 것처럼 환경변수와 홈 디렉터리까지 전환한다.
③ su -는 암호를 묻지 않는다.
④ su는 root로만 전환할 수 있다.

4. su와 sudo에서 입력해야 하는 암호로 올바르게 짝지어진 것은?
① su — 자신의 암호 / sudo — 자신의 암호
② su — 전환 대상의 암호 / sudo — 자신의 암호
③ su — 전환 대상의 암호 / sudo — root 암호
④ su — root 암호 / sudo — 전환 대상의 암호

5. /etc/sudoers 파일을 편집할 때 반드시 사용해야 하는 명령과 그 이유로 옳은 것은?
① vi — 가장 널리 쓰이는 편집기이기 때문
② visudo — 저장 전에 문법을 검사해 sudo 전체가 사용 불능이 되는 것을 막기 때문
③ nano — 초보자가 쓰기 쉽기 때문
④ sed — 자동 치환이 가능하기 때문

6. 현재 세션의 1차 그룹을 일시적으로 변경하여 새로 만드는 파일의 그룹을 바꾸는 명령은?
① groupmod    ② gpasswd    ③ newgrp    ④ chgrp

7. 레드햇 계열에서 전통적으로 관리자 권한을 부여하는 데 사용하는 그룹은?
① adm    ② wheel    ③ users    ④ staff

8. 기존 구성원을 그대로 두면서 사용자 lms를 devteam 그룹에 추가하는 명령으로 알맞지 않은 것은?
① gpasswd -a lms devteam    ② usermod -aG devteam lms
③ usermod -G devteam lms    ④ gpasswd -M lms,kim devteam(기존 구성원이 lms, kim일 때)

✅ 정답과 해설

1. 정답 ②
그룹명 : 암호(x) : GID : 구성원 순서입니다. /etc/passwd와 마찬가지로 2번째 자리가 암호이고 그다음이 번호라는 점이 일관됩니다. 나머지 선지는 모두 순서가 어긋났습니다.

2. 정답 ②
1차 그룹은 /etc/passwd의 네 번째 필드(GID)에 기록되고, /etc/group의 구성원 목록에는 2차 그룹 소속만 적힙니다. 따라서 정상 동작이며 파일 손상이 아닙니다. ④처럼 인원수에 따라 생략되는 규칙은 없습니다.

3. 정답 ②
su -는 로그인 셸로 전환하여 대상 사용자의 PATH·환경변수·홈 디렉터리를 그대로 가져옵니다. su만 쓰면 이전 사용자의 환경이 남아 /sbin 경로가 없어 관리 명령을 못 찾는 일이 생깁니다. ③은 두 경우 모두 암호를 묻고, ④는 su lms처럼 임의 사용자로 전환할 수 있으므로 틀립니다.

4. 정답 ②
su는 전환할 대상의 암호를, sudo는 실행하는 본인의 암호를 입력합니다. 이 차이 덕분에 sudo는 root 암호를 공유하지 않고도 관리 권한을 위임할 수 있습니다.

5. 정답 ②
visudo는 저장 직전에 문법을 검사하고, 오류가 있으면 저장을 막습니다. /etc/sudoers에 문법 오류가 생기면 sudo 자체를 쓸 수 없게 되어 복구가 매우 번거롭기 때문에 필수입니다. 또한 동시 편집도 방지합니다.

6. 정답 ③
newgrp입니다. 실행하면 새 셸이 뜨고 그 안에서의 1차 그룹이 바뀌며, exit하면 원래대로 돌아옵니다. ①의 groupmod는 그룹 자체의 속성 변경, ②의 gpasswd는 구성원·관리자 관리, ④의 chgrp는 이미 존재하는 파일의 그룹 소유권 변경(15강)입니다.

7. 정답 ②
레드햇 계열은 wheel, 데비안·우분투 계열은 sudo 그룹을 씁니다. ①의 adm은 주로 로그 파일 읽기 권한과 관련되고, ③의 users는 일반 사용자용 공용 그룹입니다.

8. 정답 ③
usermod -G devteam lms는 -a가 없어 기존 보조 그룹을 모두 지우고 devteam 하나만 남깁니다. ①의 gpasswd -a는 그룹에 한 명을 추가하므로 안전하고, ②는 -a가 있어 올바릅니다. ④의 -M은 구성원을 일괄 지정하는 옵션이라 기존 구성원을 모두 나열해야 하지만, 문제 조건대로 기존 구성원이 lms,kim이라면 결과적으로 유지됩니다.

📚 참고 자료

관련 주제

  • /etc/group
  • 1차 그룹
  • 2차 그룹
  • groupadd
  • gpasswd
  • newgrp
  • su
  • sudo
  • 자격증
  • 자격증 강의
  • 리눅스마스터 2급 완전정복
  • 무료강의
  • 무료 온라인 강의
  • NUGUNA
  • 누구나

📚 시리즈 전체 공유

리눅스마스터 2급 완전정복

이 강의가 속한 시리즈는 총 12강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.

댓글

0/1000

불러오는 중...