$ 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.txtchown: 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만 가능하다. 일반 사용자가 자기 파일의 소유자를 남에게 넘기면, 디스크 쿼터를 피하거나 남의 이름으로 파일을 심는 일이 가능해지기 때문이다. 반면 그룹 변경은 자기가 속한 그룹으로 바꾸는 경우에 한해 소유자도 할 수 있다.
sudo groupadd dev # 그룹 생성sudo usermod -aG dev alice # 사용자 추가 (-aG 로!)sudo usermod -aG dev bobsudo chgrp dev /project # 디렉터리 그룹 지정sudo chmod 770 /project # 그룹까지 전부 허용, 기타는 차단
chmod 770은 rwxrwx--- 다. 소유자와 그룹은 전부 되고 기타 사용자는 접근 자체가 막힌다.
다만 이렇게만 하면 각자 만든 파일의 그룹이 제각각이 된다. 이것을 해결하는 것이 내일 배울 SetGID 다.
실제로 어떤 일이 생기는지 따라가 본다.
$ ls -ld /projectdrwxrwx---. 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를 다룬다.