chmod 권한 계산기

Unix 파일 권한을 8진수(755), 기호(rwxr-xr-x), 체크박스로 상호 변환. setuid, setgid, sticky 비트 지원.

자주 쓰는 모드
클래스읽기쓰기실행
소유자
그룹
그 밖
8진수
기호
8진수 명령
chmod 644 file
기호 명령
chmod u=rw,g=r,o=r file
ls -l 형식
-rw-r--r--

이 도구가 하는 일

Unix 시스템의 모든 파일은 누가 그것을 읽고, 바꾸고, 실행할 수 있는지 정하는 한 벌의 권한을 지닙니다. chmod 명령이 그것을 설정하며, 그 권한을 사뭇 다른 두 표기 — 세 자리 8진수와 글자 나열 — 로 받습니다. 둘은 정확히 같은 것을 기술합니다. 이 도구는 두 표기와 체크박스 그리드를 동기화해 두므로, 가진 어느 것에서든 시작해 필요한 것을 복사할 수 있습니다.

전적으로 브라우저 안에서 돌고 순수한 산술입니다: 서버가 없고, 입력한 것이 어디로도 보내지지 않습니다. 이것은 계산기이자 참고이지 진짜 머신에서 권한을 바꾸는 방법이 아닙니다 — 그러려면 이 도구가 내는 chmod 명령을 복사해 직접 실행합니다.

세 그룹, 세 권한

권한은 세 개씩 세 그룹으로 정리됩니다. 세 그룹은 파일의 소유자, 그것을 소유한 그룹, 그리고 그 밖 모두 — "그 밖" — 입니다. 각 그룹 안에 세 권한이 있습니다: 읽기, 쓰기, 실행입니다.

  • 읽기(r) — 파일 내용을 보거나 디렉터리 항목을 나열합니다.
  • 쓰기(w) — 파일을 바꾸거나 디렉터리에서 항목을 더하고 뺍니다.
  • 실행(x) — 파일을 프로그램으로 실행하거나 디렉터리에 들어가 그 안의 파일에 닿습니다.

실행은 디렉터리와 파일에서 다른 것을 뜻하고, 그것이 사람을 걸립니다: 읽을 수는 있지만 실행할 수 없는 디렉터리는 안에 무엇이 있는지 이름은 보이지만 그중 아무것도 열지 못하게 합니다.

8진수는 어떻게 도는가

각 그룹의 세 권한이 고정값을 더해 8진수 한 자리에 담깁니다: 읽기는 4, 쓰기는 2, 실행은 1입니다. 읽기·쓰기·실행은 4+2+1 = 7, 읽기·실행은 4+1 = 5, 읽기·쓰기는 4+2 = 6입니다. 세 그룹이 세 자리를 냅니다.

755
7 = 4+2+1   # 소유자: 읽기 + 쓰기 + 실행
5 = 4+0+1   # 그룹: 읽기 + 실행
5 = 4+0+1   # 그 밖: 읽기 + 실행

그래서 755는 "소유자는 무엇이든 할 수 있고 그 밖 모두는 읽고 실행할 수 있지만 바꿀 수 없다"로, 프로그램이나 디렉터리의 보통 모드입니다. 644 — 소유자는 읽기·쓰기, 그 밖은 읽기 전용 — 는 보통 파일의 보통 모드입니다. 패턴에 익으면 흔한 모드가 한눈에 읽힙니다.

기호 나열

다른 표기는 ls -l이 표시하는 것입니다: 아홉 글자, 그룹당 셋, 각각 자기 글자 아니면 붙임표입니다. 755는 rwxr-xr-x, 644는 rw-r--r--입니다. 8진수와 정확히 같은 정보를 나르되, 머릿속으로 자릿수를 더하는 대신 각 권한이 보이게 배치되었습니다.

ls -l 줄은 앞에 열 번째 글자를 지닙니다 — 디렉터리의 d, 보통 파일의 붙임표, 심볼릭 링크의 l입니다. 그 앞 글자는 파일의 종류이지 권한이 아니고, chmod는 그것을 바꿀 수 없습니다. 여기에 ls -l 권한 필드 전체를 붙여넣을 수 있고 종류 글자는 그냥 무시됩니다.

특수 비트: setuid, setgid, sticky

아홉 개의 보통 비트 위에 세 개의 특수한 것이 있고, 앞에 붙는 선택적 네 번째 8진수 자리로 쓰입니다 — setuid(4), setgid(2), sticky 비트(1)입니다. 그것들은 자기 열을 갖지 않습니다. 대신 각각이 기호 나열의 실행 자리를 겹쳐 쓰고, 그것이 사람을 헷갈리게 하는 대문자의 근원입니다.

  • 실행 파일의 setuid는 그것을 시작한 사용자가 아니라 파일 소유자로 실행되게 합니다. 이것이 passwd가 직접 쓸 수 없는 시스템 파일을 갱신하는 방법이자 — 버그 있는 setuid 프로그램이 심각한 구멍인 이유입니다.
  • 실행 파일의 setgid는 그것을 파일 그룹으로 실행합니다. 디렉터리에서는 더 유용하고 안전한 일을 합니다: 안에 만들어지는 새 파일이 만든 이의 그룹이 아니라 그 디렉터리의 그룹을 물려받습니다.
  • 디렉터리의 sticky 비트는 모두가 디렉터리에 쓸 수 있어도 파일의 소유자만 그것을 삭제하거나 이름을 바꿀 수 있음을 뜻합니다. 이것이 /tmp를 공유하되 안전하게 지킵니다. 보통 파일에서는 아무것도 하지 않습니다.

기호 나열에서 켜진 특수 비트가 그 실행 자리를 글자로 바꿉니다: setuid는 소유자 자리의 s, setgid는 그룹 자리의 s, sticky는 그 밖 자리의 t입니다. 대소가 실행도 켜졌는지 알려 줍니다 — 소문자면 그렇고, 대문자면 아닙니다.

rwsr-xr-x  4755   # setuid, 소유자 실행함
rwSr-xr-x  4655   # setuid, 소유자 실행 안 함
rwxrwxrwt  1777   # sticky, 그 밖 실행함
rwxrwxrwT  1776   # sticky, 그 밖 실행 안 함

대문자 S나 T는 거의 늘 실수입니다: 실행할 수 없는 파일에 특수 비트가 켜졌다는 뜻이라 그 비트에 작용할 상대가 없습니다.

명령줄에서 8진수냐 기호냐

chmod은 두 형태를 다 받고, 이 도구는 둘 다 씁니다. 8진수 형태는 모든 비트를 한꺼번에 설정합니다: chmod 755 file. 기호 = 형태는 같은 것을 절대적으로 합니다 — chmod u=rwx,g=rx,o=rx file — 각 그룹을 나열해 결과가 파일이 무엇에서 시작했는지에 달리지 않게 합니다.

계산기에는 필요 없지만 만나게 될 세 번째 상대적 형태가 있습니다: chmod +x file은 모두에게 실행을 더하고, chmod g-w file은 그룹 쓰기를 빼고, chmod o= file은 그 밖의 모든 것을 지웁니다. 그 형태는 전체를 설정하는 것이 아니라 현재 모드에 대해 비트를 바꾸는 것으로, 명령줄에서는 편리하지만 표시할 단일 "결과"가 없습니다.

설정하지 않는 편이 나은 모드

권한 도구는 모드가 나쁜 생각일 때도 그렇게 말해야 합니다. 둘이 끊임없이 나옵니다:

  • 777은 모든 사용자에게 읽기, 쓰기, 실행을 줍니다. 무언가가 "안 될" 때의 반사적 수정이고, 거의 늘 작은 문제를 진짜 보안 구멍과 맞바꿉니다. 옳은 모드는 거의 늘 더 좁습니다 — 대개 755나 644입니다.
  • 누구나 쓸 수 있는 파일(마지막 자리에 2 포함)은 머신의 어느 계정이든 그 내용을 다시 쓰게 합니다. 실행되거나, 소싱되거나, 신뢰되는 것에는 무엇이든 그것이 들어오는 길입니다. 대신 그룹에 쓰기를 주거나 소유자에게만 두세요.

이 도구는 이것들을 일어날 때 짚습니다. 대상이 파일인지 디렉터리인지 알 수 없으므로 오류가 아니라 한 번 더 볼 만한 것으로 말합니다 — sticky 비트는 디렉터리에서 옳고 파일에서 무의미하며, 어느 것을 가졌는지는 당신만 압니다.

자주 묻는 질문

644와 755의 차이는 무엇인가요?
644는 소유자에게 읽기·쓰기, 그 밖에게 읽기 전용으로 보통 파일의 보통 모드입니다. 755는 세 그룹 모두에 실행을 더하고, 이는 프로그램이 실행되는 데, 디렉터리가 들어가지는 데 필요한 것입니다. 문서와 소스 파일에는 644, 스크립트와 디렉터리에는 755를 쓰세요.
제 모드가 대문자 S나 T를 보인 이유는 무엇인가요?
실행 권한이 없는 그룹에 특수 비트가 켜졌기 때문입니다. 소문자 s나 t는 특수 비트와 실행이 둘 다 켜졌음을, 대문자 S나 T는 특수 비트는 켜졌지만 실행은 꺼졌음을 뜻하고, 대개 모드가 의도와 다름을 뜻합니다 — 예를 들어 4644(rwSr--r--)는 아무도 실행할 수 없는 파일의 setuid입니다.
chmod 777은 실제로 무엇을 하고 왜 권장되지 않나요?
소유자, 그룹, 그 밖 모두에게 읽기, 쓰기, 실행을 줍니다 — 시스템의 모든 계정에 완전한 접근입니다. 모든 보호를 한꺼번에 없애므로 권장되지 않습니다. 누구나 쓸 수 있는 파일은 누구나 변조할 수 있는 파일이고, 누구나 쓸 수 있는 디렉터리는 누구나 파일을 심을 수 있는 것입니다. 777에 손을 뻗는 거의 모든 경우는 755나 644에 올바른 소유권을 더하면 풀립니다.
앞자리가 반드시 있어야 하나요?
아니요. 특수 비트가 하나도 켜지지 않으면 모드는 그냥 세 자리 — 0755가 아니라 755 — 이고, 그것이 이 도구가 보이는 것입니다. 앞의 0은 받아들여지고 같은 것을 뜻합니다. 앞의 4, 2, 1은 각각 setuid, setgid, sticky 비트를 켭니다.
ls -l 줄을 그대로 붙여넣을 수 있나요?
네. -rwxr-xr-x나 drwxr-xr-x 같은 열 글자 권한 필드를 붙여넣으면 이 도구가 앞의 종류 글자를 벗기고 나머지를 읽습니다. 종류(파일, 디렉터리, 링크)는 권한이 아니고 chmod가 바꿀 수 없으므로 무시됩니다.
제가 입력한 것이 서버로 전송되나요?
아니요. 도구 전체가 브라우저 안에서 도는 산술입니다. 아무것도 업로드·기록·저장되지 않고, 그래서 네트워크 연결이 전혀 없어도 동작합니다.