파일 권한(퍼미션)란?

Linux 등에서 파일이나 디렉터리마다 소유자(user)·그룹(group)·기타(others) 각각에 읽기(r)·쓰기(w)·실행(x)을 허용할지를 정한 설정. ls -l에서는 rwxr-xr--처럼, chmod에서는 754 같은 8진수(r = 4, w = 2, x = 1의 합계)로도 나타낸다. 새로 만드는 파일의 권한은 umask로 정해진다. root(슈퍼유저)는 일반적으로 이 제한을 받지 않고 파일을 읽고 쓸 수 있다.

일본어 명칭: パーミッション

파일 권한(퍼미션)은(는) Linux와 커맨드 라인 기초 등 1개 분야의 연습 문제 2개에 나와요.

분야: Linux와 커맨드 라인 기초

표기 읽는 법

ls -l의 맨 앞 10문자는 첫 문자가 파일의 종류(-는 일반 파일, d는 디렉터리, l은 심볼릭 링크)이고, 이어지는 3문자씩이 소유자, 그룹, 기타의 권한입니다. 8진수에서는 각 자리가 r = 4, w = 2, x = 1의 합계이므로 rwxr-xr--는 754, rw-r--r--는 644가 됩니다. chmod 754 file처럼 수로 지정하는 것 외에, chmod g+w file이나 chmod o-r file처럼 기호로 일부만 바꿀 수도 있습니다.

디렉터리의 권한

디렉터리에서 r은 안에 있는 이름의 목록을 읽는 권한, w는 안에 파일을 만들거나 지우는 권한, x는 안으로 들어가 이름으로 파일에 도달하는 권한입니다. 따라서 파일을 지울 수 있는지는 파일 자신이 아니라 디렉터리의 w와 x로 정해집니다. /tmp처럼 누구나 쓸 수 있는 디렉터리에는 다른 사람의 파일을 지울 수 없도록 하는 스티키 비트(t)를 붙입니다.

특수 비트와 umask

실행했을 때 소유자의 권한으로 동작시키는 setuid(소유자의 x 위치가 s), 그룹의 권한으로 동작시키는 setgid, 앞에서 말한 스티키 비트가 있으며, 8진수에서는 각각 4000, 2000, 1000의 자리로 나타냅니다. 새 파일은 666, 디렉터리는 777에서 umask의 비트를 제거한 권한으로 만들어지며, umask 022라면 파일은 644, 디렉터리는 755가 됩니다.

도전해 보기: 파일 권한(퍼미션) 관련 문제

홈 디렉터리에서 'ls'를 실행하면 notes.txt만 표시되고, 'ls -a'를 실행하면 '.', '..', '.bashrc', 'notes.txt'가 표시되었다. 이 결과에 대한 설명으로 올바른 것은?

  1. A'.'은 현재 디렉터리, '..'은 상위 디렉터리를 나타내며, 이름이 '.'으로 시작하는 .bashrc는 숨김 파일이므로 -a를 붙이지 않으면 표시되지 않는다
  2. B'.'은 현재 디렉터리, '..'은 상위 디렉터리를 나타내며, .bashrc는 쓰기가 금지된 파일이므로 -a를 붙이지 않으면 표시되지 않는다
  3. C'.'은 루트 디렉터리, '..'은 홈 디렉터리를 나타내며, 이름이 '.'으로 시작하는 .bashrc는 숨김 파일이므로 -a를 붙이지 않으면 표시되지 않는다
정답과 해설 보기

정답: A. '.'은 현재 디렉터리, '..'은 상위 디렉터리를 나타내며, 이름이 '.'으로 시작하는 .bashrc는 숨김 파일이므로 -a를 붙이지 않으면 표시되지 않는다

어느 디렉터리에나 그 디렉터리 자신을 나타내는 '.'과 상위 디렉터리를 나타내는 '..'이라는 항목이 있습니다. 이름이 '.'으로 시작하는 파일이나 디렉터리는 숨김 파일로 취급되며, ls는 옵션을 붙이지 않으면 표시하지 않고 -a(all)를 붙이면 표시합니다. .bashrc 같은 셸(shell)이나 도구의 설정 파일은 평소의 목록에서 눈에 띄지 않도록 숨김 파일 이름으로 하는 경우가 많습니다. 표시되는지 여부는 이름만으로 정해지며, 파일의 권한과는 관계없습니다.

Linux의 sudo 명령에 대한 설명으로 올바른 것은?

  1. Asudo를 붙인 명령은 root의 비밀번호를 알면 누구나 실행할 수 있으며, 누가 실행했는지의 기록은 어디에도 남지 않는다
  2. Bsudo를 붙인 명령은 다른 프로세스보다 높은 우선순위를 커널로부터 받아 CPU를 우선하여 사용할 수 있으므로 빠르게 실행된다
  3. Csudoers에서 허가된 사용자가 다른 사용자(기본값은 root)의 권한으로 명령을 실행하는 것으로, 기본적으로는 자신의 비밀번호를 입력한다
정답과 해설 보기

정답: C. sudoers에서 허가된 사용자가 다른 사용자(기본값은 root)의 권한으로 명령을 실행하는 것으로, 기본적으로는 자신의 비밀번호를 입력한다

root는 파일 권한의 제한을 기본적으로 받지 않고 시스템의 모든 것을 조작할 수 있는 관리자 계정(슈퍼유저)입니다. sudo는 /etc/sudoers 등에서 허가된 사용자만이 명령을 하나씩 root 등의 권한으로 실행할 수 있게 하는 구조로, 기본 설정에서는 본인의 비밀번호로 확인하고 실행한 명령을 기록합니다. root의 비밀번호를 공유하여 항상 root로 로그인하는 것보다 누가 무엇을 했는지 추적하기 쉽고, 필요할 때만 강한 권한을 사용할 수 있습니다. 권한을 필요 최소한으로 한다는 생각은 보안의 최소 권한의 원칙에 바탕을 두고 있습니다.

자주 묻는 질문

chmod 777로 하면 문제가 해결되나요?

'Permission denied'는 사라지더라도 누구나 고쳐 쓰거나 실행할 수 있는 상태가 되어, 다른 사용자나 프로그램이 내용을 바꿀 우려가 있습니다. 먼저 어느 사용자가 어떤 조작을 할 수 있어야 하는지 확인하고, 소유자나 그룹을 chown·chgrp로 맞춘 다음, 필요한 권한만 붙이는 것이 기본입니다.

공유 서버에서 팀 구성원에게만 파일을 읽게 하려면 어떻게 하나요?

팀용 그룹을 만들어 구성원을 추가하고, 파일이나 디렉터리의 그룹을 그 그룹으로 한 다음, 그룹에는 r(디렉터리에는 r과 x)을, 기타에는 아무것도 주지 않는 설정(파일이라면 640, 디렉터리라면 750 등)으로 합니다. 사람마다 세세하게 정하고 싶은 경우에는 ACL(setfacl·getfacl)을 사용하는 방법도 있습니다.

해설 속 파일 권한(퍼미션)

파일 권한(퍼미션)이(가) 나오는 문제 (2)

  1. 홈 디렉터리에서 'ls'를 실행하면 notes.txt만 표시되고, 'ls -a'를 실행하면 '.', '..', '.bashrc', 'notes.txt'가 표시되었다. 이 결과에 대한 설명으로 올바른 것은?
  2. Linux의 sudo 명령에 대한 설명으로 올바른 것은?

관련 용어

셸(Shell) 슈퍼유저(Superuser) 최소 권한의 원칙(Principle of Least Privilege) 시그널(Unix 시그널) 심볼릭 링크(Symbolic Link) 입출력 리다이렉션(I/O Redirection) 정규 표현식(Regular Expression) 파이프(|) 하드 링크(Hard Link) 환경 변수(Environment Variable)

용어집으로 돌아가기