CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
  • Week 1
    • 1.운영체제와 커널: 리눅스가 하는 일
    • 2.리눅스의 탄생: 유닉스에서 리누스까지
    • 3.자유 소프트웨어와 오픈소스: 라이선스가 정하는 것
    • 4.배포판: 커널과 도구를 하나로 묶어 파는 단위
    • 5.Week 1 종합 복습: 리눅스라는 이름의 정체
  • Week 2
  • Week 3
  • Week 4
    • 1.권한의 구조: rwx와 8진수
    • 2.소유권과 umask
    • 3.특수 권한: SetUID · SetGID · Sticky bit
    • 4.디렉터리 계층과 파일 시스템 관리
    • 5.Week 4 종합 복습: 권한 한 장 정리
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
리눅스마스터 1급 · 1급리눅스마스터 1급
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← 리눅스마스터 2급/Week 4/Day 2

기준: 리눅스마스터 2급 출제 기준·오류 제보

리눅스마스터 2급· AssociateWeek 4 · Day 2읽기 약 8분
핵심 정리
  • 파일에는 소유자와 소유 그룹이 하나씩 붙는다. ls -l의 3번째·4번째 열이 그것이다.
  • chown은 소유자를, chgrp는 그룹을 바꾼다. chown user:group 형태로 한 번에 바꿀 수도 있다.
  • 소유자 변경은 root만 할 수 있다. 일반 사용자는 자기 파일이라도 남에게 넘길 수 없다.
  • umask는 새로 만드는 파일의 권한을 깎는 마스크다. 일반 사용자 기본값은 022다.
  • 기준값이 다르다 — 파일은 666, 디렉터리는 777 에서 umask를 뺀다. 파일은 처음부터 x가 없다.

Day 2 - 소유권과 umask

파일에 붙은 두 이름

   -rw-r--r--  1  alice  dev  1024  Sep  3 09:00  report.txt
                   └─┬─┘  └┬┘
                     │     └── 소유 그룹 (group)
                     └──────── 소유자 (owner)
  • 파일을 만들면 만든 사람이 소유자, 그 사람의 기본 그룹이 소유 그룹이 된다.
  • 권한의 세 칸(user/group/other) 중 어느 칸을 적용받을지는 이 두 이름으로 결정된다.
  • 파일에는 사실 이름이 아니라 번호(UID·GID) 가 저장된다. ls -l이 /etc/passwd와 /etc/group을 찾아 이름으로 바꿔 보여 줄 뿐이다. 그래서 계정을 지운 뒤 남은 파일은 소유자 자리에 숫자가 그대로 보인다.
$ id
uid=1001(alice) gid=1001(alice) groups=1001(alice),1500(dev)
$ touch a.txt
$ ls -l a.txt
-rw-r--r--. 1 alice alice 0 Sep  3 09:00 a.txt
  • alice가 dev 그룹에도 속해 있지만 새 파일의 그룹은 기본 그룹인 alice 다. 보조 그룹은 "접근할 자격"을 줄 뿐, 새 파일의 그룹을 정하지 않는다.

chown과 chgrp

명령하는 일
chown alice file소유자를 alice로
chown alice:dev file소유자와 그룹을 함께
chown :dev file그룹만 (콜론 뒤에만 씀)
chgrp dev file그룹을 dev로
chown -R alice:dev /data하위까지 재귀적으로
sudo chown alice report.txt        # 소유자 변경
sudo chown alice:dev report.txt    # 소유자 + 그룹
sudo chgrp dev report.txt          # 그룹만
sudo chown -R www-data:www-data /var/www

콜론의 위치가 뜻을 정한다

쓰는 법소유자그룹
chown alice filealice로그대로
chown alice:dev filealice로dev로
chown :dev file그대로dev로
chgrp dev file그대로dev로 (위와 같은 결과)
$ ls -l report.txt
-rw-r--r--. 1 root root 1024 Sep  3 09:00 report.txt
$ sudo chown alice report.txt
$ ls -l report.txt
-rw-r--r--. 1 alice root 1024 Sep  3 09:00 report.txt
$ sudo chown :dev report.txt
$ ls -l report.txt
-rw-r--r--. 1 alice dev 1024 Sep  3 09:00 report.txt
  • chown은 소유자와 그룹만 바꾼다. 권한 rw-r--r--와 수정 시각은 그대로다. 권한까지 맞추려면 chmod를 따로 써야 한다.
  • 이름 대신 번호도 받는다 — chown 1001:1500 file.
  • 재귀는 chmod와 마찬가지로 대문자 -R 이다. chown·chgrp·chmod 셋 모두 같다.
옵션뜻 (chown·chgrp 공통)
-R디렉터리 하위 전체에 적용
-v처리한 파일마다 결과를 출력
-c실제로 바뀐 것만 출력

일반 사용자가 시도하면 이렇게 막힌다.

$ chown bob a.txt
chown: changing ownership of 'a.txt': Operation not permitted
$ chgrp dev a.txt          ← alice 는 dev 소속이므로 가능
$ chgrp wheel a.txt        ← 소속되지 않은 그룹은 불가
chgrp: changing group of 'a.txt': Operation not permitted

소유자를 바꾸는 것은 root만 가능하다. 일반 사용자가 자기 파일의 소유자를 남에게 넘기면, 디스크 쿼터를 피하거나 남의 이름으로 파일을 심는 일이 가능해지기 때문이다. 반면 그룹 변경은 자기가 속한 그룹으로 바꾸는 경우에 한해 소유자도 할 수 있다.

구분누가 할 수 있나
소유자 변경(chown)root만
그룹 변경(chgrp)root, 또는 소유자가 자기 소속 그룹으로
권한 변경(chmod)root, 또는 그 파일의 소유자

umask — 기본 권한을 깎는 마스크

새 파일이 왜 매번 644로 만들어질까. umask 가 정해진 기준값에서 권한을 깎기 때문이다.

umask          # 0022  ← 현재 값 확인
umask 077      # 값 변경 (현재 셸에만 적용)
umask -S       # u=rwx,g=rx,o=rx  ← 기호로 보기

계산 방법

기준값에서 umask를 뺀다. 그런데 기준값이 파일과 디렉터리에서 다르다.

대상기준값이유
파일666 (rw-rw-rw-)새 파일에 실행 권한을 주지 않기 위해
디렉터리777 (rwxrwxrwx)디렉터리는 들어가려면 x가 필요해서

umask 022 일 때:

   파일        666  -  022  =  644   (rw-r--r--)
   디렉터리     777  -  022  =  755   (rwxr-xr-x)

umask 077 일 때:

   파일        666  -  077  =  600   (rw-------)
   디렉터리     777  -  077  =  700   (rwx------)
umask파일디렉터리성격
022644755일반 사용자 기본값
002664775그룹 협업용
077600700개인 전용, 가장 엄격
000666777제한 없음 — 위험

파일은 아무리 umask를 0으로 해도 실행 권한이 붙지 않는다. 기준값이 666이라 x 자리가 처음부터 비어 있기 때문이다. 이 점이 "umask 000이면 파일이 777이 되는가"를 묻는 함정 문항으로 나온다. 답은 666이다.

빼기가 아니라 "가리기"다

"기준값에서 뺀다"는 022·077 같은 값에서는 맞아떨어지지만, 정확한 동작은 umask에 켜진 권한을 기준값에서 꺼 버리는 것이다. 처음부터 없던 권한은 꺼도 달라지지 않는다. 이 차이는 umask에 홀수가 들어갈 때 드러난다.

umask 033 일 때 파일을 단순히 빼면 666 − 033 = 633(rw--wx-wx)이 나오지만, 실제 결과는 다르다.

   기준값(파일)   6 6 6   rw- rw- rw-
   umask         0 3 3   --- -wx -wx     ← 여기 켜진 것(w, x)을 끈다
   ─────────────────────────────────
   결과          6 4 4   rw- r-- r--     ← x 는 원래 없었으니 w 만 꺼진다
umask파일디렉터리볼 점
033644744파일은 633이 아니다
027640750그룹은 쓰기만 막고, 기타는 전부 막음
007660770기타만 전부 막음
011666766파일에는 끌 x가 없어 그대로 666
  • 요령: 디렉터리는 그냥 뺀다(777 − umask). 파일은 그 결과에서 x를 지운다. 027이면 디렉터리 750(rwxr-x---), 파일은 거기서 x를 뗀 640(rw-r-----)이다.
  • 그래서 umask 값이 클수록 권한은 좁아진다. 077이 가장 엄격하고 000이 가장 느슨하다.

표기와 적용 범위

$ umask
0022
$ umask -S
u=rwx,g=rx,o=rx
$ umask 027
$ touch new.txt; mkdir newdir
$ ls -ld new.txt newdir
-rw-r-----. 1 user user 0 Sep  3 09:00 new.txt
drwxr-x---. 2 user user 6 Sep  3 09:00 newdir
  • umask가 네 자리(0022)로 나올 때 맨 앞 0은 특수 권한 자리다. 022와 0022는 같은 값이다.
  • umask는 "막을 것"을, umask -S는 "남는 것"을 보여 준다. 022와 u=rwx,g=rx,o=rx는 같은 설정을 반대 방향에서 적은 것이다. -S의 결과는 디렉터리 권한(755)과 같은 모양이다.
  • umask는 앞으로 만들 것에만 작용한다. 이미 있는 파일의 권한은 umask를 바꿔도 변하지 않는다. 기존 파일은 chmod로 고친다.
  • umask는 기본값을 정할 뿐 상한이 아니다. 만든 뒤 chmod 777을 하면 umask와 무관하게 777이 된다.

umask 값은 어디에 있나

파일범위
/etc/profile, /etc/bashrc시스템 전체
~/.bashrc, ~/.bash_profile사용자 개인
  • 명령으로 바꾼 umask는 그 셸에서만 유효하고 로그아웃하면 사라진다. 계속 쓰려면 위 설정 파일에 적어야 한다.
  • root의 기본 umask는 022이며, 배포판에 따라 일반 사용자에게 002를 주기도 한다.
  • 002를 주는 배포판은 사용자마다 자기 이름과 같은 전용 그룹을 기본 그룹으로 만들어 주는 경우다. 그 그룹에는 자기 혼자뿐이라 그룹에 쓰기 권한(664)을 열어도 실질적으로 위험이 없기 때문이다.
  • 시험에서 조건 없이 "기본 umask"를 물으면 022(파일 644, 디렉터리 755)로 답한다.
설정 위치적용 대상유지 기간
명령행에서 umask 027그 셸과 거기서 실행한 프로그램셸을 닫으면 사라짐
~/.bashrc에 umask 027그 사용자셸을 새로 열 때마다 적용
/etc/profile·/etc/bashrc모든 사용자계속 유지 (root만 수정)

그룹으로 협업하기

여러 사람이 같은 디렉터리를 쓰려면 같은 그룹에 넣고 그룹 권한을 연다.

sudo groupadd dev                  # 그룹 생성
sudo usermod -aG dev alice         # 사용자 추가 (-aG 로!)
sudo usermod -aG dev bob
sudo chgrp dev /project            # 디렉터리 그룹 지정
sudo chmod 770 /project            # 그룹까지 전부 허용, 기타는 차단
  • chmod 770은 rwxrwx--- 다. 소유자와 그룹은 전부 되고 기타 사용자는 접근 자체가 막힌다.
  • 다만 이렇게만 하면 각자 만든 파일의 그룹이 제각각이 된다. 이것을 해결하는 것이 내일 배울 SetGID 다.

실제로 어떤 일이 생기는지 따라가 본다.

$ ls -ld /project
drwxrwx---. 2 root dev 6 Sep  3 09:00 /project
$ id -gn                       ← alice 의 기본 그룹
alice
$ touch /project/plan.txt
$ ls -l /project/plan.txt
-rw-r--r--. 1 alice alice 0 Sep  3 09:05 /project/plan.txt
걸림돌원인푸는 방법
파일의 그룹이 dev가 아니라 alice새 파일은 만든 사람의 기본 그룹을 따른다chgrp dev 파일 — 매번 해야 한다 (내일의 SetGID가 자동화)
그룹 권한이 r--라 bob이 못 고침umask 022가 그룹의 w를 가렸다chmod g+w 파일, 또는 umask를 002로
방금 그룹에 넣은 사용자가 여전히 접근 못 함그룹 목록은 로그인할 때 정해진다로그아웃 후 다시 로그인
  • 협업이 매끄러우려면 세 가지가 모두 맞아야 한다 — 같은 그룹 소속, 디렉터리의 그룹 권한, 그리고 새 파일의 그룹과 그룹 쓰기 권한.
  • 소유권·권한·umask가 하는 일을 한 줄씩 정리하면 이렇다.
도구정하는 것언제 작용하나
chown / chgrp누구의 파일인가이미 있는 파일에
chmod그들이 무엇을 할 수 있는가이미 있는 파일에
umask새 파일이 어떤 권한으로 태어나는가앞으로 만들 파일에

내일은 일반 권한 세 칸 바깥에 있는 특수 권한 — SetUID, SetGID, Sticky bit를 다룬다.

📖 용어

  • 소유자(owner) : 파일을 소유한 사용자. ls -l의 세 번째 열.
  • 소유 그룹(group) : 파일에 붙은 그룹. ls -l의 네 번째 열.
  • chown : 소유자를 바꾸는 명령. root만 실행할 수 있다.
  • chgrp : 소유 그룹을 바꾸는 명령.
  • umask : 새로 만드는 파일·디렉터리의 권한에서 깎아낼 값을 정하는 마스크.
  • 기준값 : umask를 적용하기 전의 권한. 파일은 666, 디렉터리는 777이다.
  • 기본 그룹 : 사용자가 만든 파일에 자동으로 붙는 그룹. /etc/passwd의 GID 필드가 정한다.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

다음 중 파일의 소유자와 소유 그룹을 한 번에 변경하는 명령으로 알맞은 것은?

문제 2

umask 값이 022일 때 새로 생성되는 일반 파일의 권한으로 알맞은 것은?

문제 3

다음 중 파일의 소유자를 다른 사용자로 변경할 수 있는 권한을 가진 대상으로 알맞은 것은?

문제 4

umask 값이 077일 때 새로 생성되는 디렉터리의 권한으로 알맞은 것은?

문제 5

다음 중 현재 셸에 설정된 umask 값을 확인하는 명령으로 알맞은 것은?

이전권한의 구조: rwx와 8진수Week 4 · Day 1다음 특수 권한: SetUID · SetGID · Sticky bitWeek 4 · Day 3

참고 공식 자료

  • 리눅스마스터 2급 공식 출제 기준(새 탭에서 열림)

이 페이지

  • 파일에 붙은 두 이름
  • chown과 chgrp
  • 콜론의 위치가 뜻을 정한다
  • umask — 기본 권한을 깎는 마스크
  • 계산 방법
  • 빼기가 아니라 "가리기"다
  • 표기와 적용 범위
  • umask 값은 어디에 있나
  • 그룹으로 협업하기
  • 용어
  • 연습 문제