Oh MyUtils

Chmod 계산기 - Unix 파일 권한 계산기 온라인

인터랙티브 매트릭스로 Linux/Unix 파일 권한 계산. 8진수(755, 644)와 심볼릭(rwxr-xr-x) chmod 형식 간 변환.

권한 그리드

읽기 (r)쓰기 (w)실행 (x)#
소유자 (u)
7
그룹 (g)
5
기타 (o)
5
특수 권한
SetUID
SetGID
Sticky

chmod 명령어

$ chmod 755 filename

보안

주의

기타 사용자에게 실행 권한 또는 그룹에 쓰기+실행 권한이 있습니다

ls -l 미리보기

$ ls -l -rwxr-xr-x 1 user group 4096 Feb 13 10:00 filename

일반 프리셋

자주 묻는 질문

chmod란 무엇이며 어떤 역할을 하나요?

chmod(change mode)는 Unix/Linux에서 파일 및 디렉토리의 접근 권한을 변경하는 명령어입니다. 파일을 누가 읽고, 쓰고, 실행할 수 있는지를 제어합니다. 파일 소유자(user), 그룹(group), 기타 사용자(others) 세 가지 사용자 클래스에 대해 권한을 설정합니다. chmod를 이해하는 것은 서버 보안, 웹 개발, 시스템 관리에 필수적입니다.

이 chmod 계산기를 어떻게 사용하나요?

권한 그리드에서 체크박스를 클릭하여 소유자, 그룹, 기타의 개별 권한을 토글하세요. 또는 숫자 입력 필드에 8진수 값(예: 755)을 입력할 수 있습니다. 도구가 8진수 표기, 심볼릭 표기, 시각적 그리드 간의 변환을 즉시 수행합니다. 생성된 chmod 명령어를 복사하여 터미널에 붙여넣으세요. 644나 755 같은 일반적인 권한 설정에는 프리셋 버튼을 사용하세요.

데이터가 안전한가요? 서버로 전송되나요?

완전히 안전합니다. 이 chmod 계산기는 100% 브라우저에서 클라이언트 사이드 JavaScript로 실행됩니다. 데이터가 어떤 서버로도 전송되지 않습니다. 모든 계산은 로컬에서 수행되는 단순한 비트 연산을 사용합니다. 따라서 개인정보 걱정 없이 서버 설정에 안전하게 사용할 수 있습니다.

8진수 표기와 심볼릭 표기의 차이점은 무엇인가요?

8진수 표기는 숫자를 사용합니다(예: 755). 각 숫자는 소유자, 그룹, 기타의 권한을 나타냅니다. 각 숫자는 읽기(4), 쓰기(2), 실행(1)의 합입니다. 심볼릭 표기는 문자를 사용합니다(예: rwxr-xr-x). r=읽기, w=쓰기, x=실행, -=권한 없음을 의미합니다. 두 표기법 모두 같은 권한을 다른 형식으로 나타냅니다.

setuid, setgid, sticky bit는 무엇인가요?

이것들은 파일과 디렉토리의 동작을 변경하는 특수 권한 비트입니다. SetUID(4000)는 실행 파일을 파일 소유자의 권한으로 실행하게 합니다(예: passwd 명령어). SetGID(2000)는 파일을 그룹 권한으로 실행하게 하며, 디렉토리의 경우 새 파일이 디렉토리의 그룹을 상속받게 합니다. Sticky Bit(1000)는 디렉토리에서 파일 소유자만 해당 파일을 삭제할 수 있게 합니다(예: /tmp 디렉토리는 1777 사용).

웹 서버 파일에는 어떤 chmod 값을 사용해야 하나요?

대부분의 웹 서버에서: 일반 파일(HTML, CSS, PHP)에는 644(rw-r--r--)를 사용하여 소유자가 편집하고 웹 서버가 읽을 수 있게 합니다. 디렉토리와 실행 가능한 스크립트에는 755(rwxr-xr-x)를 사용합니다. 프로덕션 서버에서 777은 절대 사용하지 마세요. 누구나 읽고, 쓰고, 실행할 수 있어 심각한 보안 취약점이 됩니다.

왜 chmod 777은 위험한가요?

chmod 777은 시스템의 모든 사용자(소유자, 그룹, 기타 모든 사용자)에게 읽기, 쓰기, 실행 권한을 부여합니다. 이는 어떤 사용자나 프로세스든 파일을 수정하거나 삭제할 수 있고, 어떤 실행 파일이든 누구나 실행할 수 있다는 의미입니다. 웹 서버에서는 공격자가 악성 코드를 주입할 수 있게 됩니다. 애플리케이션이 정상적으로 작동하는 데 필요한 가장 제한적인 권한을 사용하세요.

코드 예제

// Unix file permission calculator in JavaScript

const PERM = {
  OWNER_R: 0o400, OWNER_W: 0o200, OWNER_X: 0o100,
  GROUP_R: 0o040, GROUP_W: 0o020, GROUP_X: 0o010,
  OTHER_R: 0o004, OTHER_W: 0o002, OTHER_X: 0o001,
  SETUID:  0o4000, SETGID: 0o2000, STICKY: 0o1000,
};

function octalToSymbolic(octal) {
  const chars = [];
  chars.push(octal & PERM.OWNER_R ? 'r' : '-');
  chars.push(octal & PERM.OWNER_W ? 'w' : '-');
  if (octal & PERM.SETUID) {
    chars.push(octal & PERM.OWNER_X ? 's' : 'S');
  } else {
    chars.push(octal & PERM.OWNER_X ? 'x' : '-');
  }
  chars.push(octal & PERM.GROUP_R ? 'r' : '-');
  chars.push(octal & PERM.GROUP_W ? 'w' : '-');
  if (octal & PERM.SETGID) {
    chars.push(octal & PERM.GROUP_X ? 's' : 'S');
  } else {
    chars.push(octal & PERM.GROUP_X ? 'x' : '-');
  }
  chars.push(octal & PERM.OTHER_R ? 'r' : '-');
  chars.push(octal & PERM.OTHER_W ? 'w' : '-');
  if (octal & PERM.STICKY) {
    chars.push(octal & PERM.OTHER_X ? 't' : 'T');
  } else {
    chars.push(octal & PERM.OTHER_X ? 'x' : '-');
  }
  return chars.join('');
}

// Example usage
const perm = 0o755;
console.log(`Octal: ${perm.toString(8)}`);
console.log(`Symbolic: ${octalToSymbolic(perm)}`);
console.log(`Command: chmod ${perm.toString(8)} myfile.sh`);

관련 도구