더북(TheBook)

접근 권한 변경하기

파일의 접근 권한을 변경하는 명령은 chmod(change mod)입니다. chmod [레퍼런스][연산자][접근권한][파일] 형식으로 입력합니다. chown과 달리 파일의 소유자도 명령을 내릴 수 있습니다.

레퍼런스는 변경할 대상 소유자(user), 그룹(group), 다른 모든 사용자(others)를 뜻하며 차례로 u, g, o로 표시합니다. a(all)는 소유자와 그룹, 다른 사용자 모두를 의미합니다. 권한을 부여하는 연산자는 ‘+’, 권한을 해제하는 연산자는 ‘-’입니다. 변경할 접근 권한은 읽기(read), 쓰기(write), 실행(excute)으로 각각 r, w, x로 표시합니다.

예를 들어 ‘ugo+rwx’는 소유자(user), 그룹(group), 다른 모든 사용자(others)에게 읽기(read), 쓰기(write), 실행(excute) 권한을 부여(+)합니다. 그 결과 시스템에 존재하는 모든 사용자가 이 파일을 읽고, 쓰고, 실행할 수 있습니다.

shinjaehun@losttemple:/tmp$ chmod ugo+rwx sample
shinjaehun@losttemple:/tmp$ ls -l sample
rwxrwx 1 shinjaehun shinjaehun 0 9월 21 23:02 sample

다른 사용자들(others)에게는 보이고 싶지도 않고(read) 수정(write), 실행(excute)도 불가능하게 변경시켜 보겠습니다. 권한을 해제하려면 ‘-’를 씁니다.

shinjaehun@losttemple:/tmp$ chmod o-rwx sample
shinjaehun@losttemple:/tmp$ ls -l sample
-rwxrwx--- 1 shinjaehun shinjaehun 0 9월 21 23:02 sample

[레퍼런스][연산자][변경할 접근권한] 형식으로 입력하는 대신 8진수의 숫자 표현을 사용할 수 있습니다. 처음에는 어려울 수 있는데 익숙해지면 훨씬 편리합니다. 파일의 소유자, 그룹 사용자, 기타 사용자의 읽기, 쓰기, 실행 권한은 각각 다음과 같이 8진수 값이 부여되어 있습니다.

표 3-1접근 권한에 대한 8진수 값
8진수 권한
400 파일 소유자의 읽기 권한
200 파일 소유자의 쓰기 권한
100 파일 소유자의 실행 권한
40 그룹 사용자의 읽기 권한
20 그룹 사용자의 쓰기 권한
10 그룹 사용자의 실행 권한
4 기타 사용자의 읽기 권한
2 기타 사용자의 쓰기 권한
1 기타 사용자의 실행 권한

이제 접근 권한에 따라 각 값을 더합니다. 모든 사용자에게 읽기 권한만 부여하고 싶다면 접근 권한을 r–r–r–로 수정해야 합니다. 파일 소유자의 읽기 권한 400, 그룹 사용자의 읽기 권한 40, 기타 사용자의 읽기 권한 4를 더해 444로 표현할 수 있습니다.

이 값을 이용해서 다음과 같이 명령할 수 있습니다.

shinjaehun@losttemple:/tmp$ chmod 444 sample
shinjaehun@losttemple:/tmp$ ls -l sample
-r--r--r-- 1 shinjaehun shinjaehun 0 9월 21 23:02 sample
이렇게 하세요!

파일에 대한 권한이 없는 사용자는 당연히 chmod 명령을 사용할 수 없습니다. 소유권이 gunsmoke에게 있는 파일은 shinjaehun이 접근권한을 변경하지 못합니다.

shinjaehun@losttemple:/tmp$ sudo chown gunsmoke:gunsmoke sample
shinjaehun@losttemple:/tmp$ ls -l sample
-rw-r--r-- 1 gunsmoke gunsmoke 0 9월 21 23:02 sample
shinjaehun@losttemple:/tmp$ chmod 444 sample
chmod: `sample'의 권한 설정 중: 명령을 허용하지 않음
예를 하나 더 들어볼까요? 모든 사용자에게 읽기, 쓰기, 실행 권한(rwxrwxrwx)을 부여하고 싶습니다. 파일 소유자에게 읽기(400), 쓰기(200), 실행(100) 권한을 부여하려면 700(400 + 200 + 100)을, 그룹 사용자에게 읽기(40), 쓰기(20), 실행(10) 권한을 부여하려면 70(40 + 20 + 10)을, 기타 사용자에게 읽기(4), 쓰기(2), 실행(1) 권한을 부여하려면 7(4 + 2 + 1)을 할당합니다. 따라서 모든 사용자에게 읽기, 쓰기, 실행 권한을 부여하기 위한 접근 권한은 777(700 + 70 + 7)이 됩니다. 이는 ugo+rwx와 같습니다.
shinjaehun@losttemple:/tmp$ sudo chmod 777 sample
shinjaehun@losttemple:/tmp$ ls -l sample
-rwxrwxrwx 1 gunsmoke gunsmoke 0 9월 21 23:02 sample
sample을 원래 권한으로 되돌려 봅시다. rw-r--r--는 파일 소유자의 읽기와 쓰기(rw-), 그룹 사용자의 읽기(r--), 기타 사용자의 읽기(r--)가 가능한 접근 권한입니다. 파일 소유자의 읽기와 쓰기 권한은 600(400 + 200), 그룹 사용자의 읽기는 40, 기타 사용자의 읽기는 4이며 값을 모두 더한 644가 원래 권한을 의미하게 됩니다.
shinjaehun@losttemple:/tmp$ chmod 644 sample
shinjaehun@losttemple:/tmp$ ls -l sample
--r-- 1 shinjaehun shinjaehun 0 9월 21 23:02 sample

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.