UNIX 권한 및 파일 유형 이해


68

나는 chmod오늘까지 어떻게 일 했는지 전혀 알지 못했습니다 . 나는 많은 것을 설명하는 튜토리얼을 따랐다.

예를 들어, 세 가지 권한 그룹이 있다고 읽었습니다.

  • 소유자 ( u)
  • 그룹 ( g)
  • 모두 ( o)

이 세 그룹을 바탕으로 저는 다음을 알고 있습니다.

  • 사용자가 파일을 소유 한 경우 사용자 권한에 따라 액세스가 결정됩니다.
  • 파일 그룹이 사용자 그룹과 동일하면 그룹 권한에 따라 액세스가 결정됩니다.
  • 사용자가 파일 소유자가 아니고 그룹에 없으면 다른 권한이 사용됩니다.

또한 다음 권한이 있음을 알게되었습니다.

  • 읽기 ( r)
  • 쓰기 ( w)
  • 실행 ( x)

새로 얻은 지식을 테스트 할 디렉토리를 만들었습니다.

mkdir test

그런 다음 몇 가지 테스트를 수행했습니다.

chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---

얼마 동안 장난 한 후에 마침내 나는 chmod이 명령을 사용하여 권한을 설정하는 방법과 중단을 얻었다 고 생각 합니다.


그러나...

여전히 몇 가지 질문이 있습니다.

  • 뭐라고합니까 d시작시는 약자?
  • 포함 슬롯의 이름과 용도는 무엇이며 보유 할 수있는 다른 값은 무엇입니까?
  • 어떻게 설정 및 해제 할 수 있습니까?
  • 이것의 가치는 무엇입니까 d? (7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1 만 있으므로)
  • 사람들이 때때로 권한을 설정 하는 0777대신 사용 하는 이유는 무엇 777입니까?

그러나 여러 가지 질문을하지 않아야하므로 한 번에 질문하려고합니다.

모든 Linux 배포판과 같은 UNIX 기반 시스템에서 권한과 관련하여 첫 번째 부분 ( d)의 의미와이 권한 부분의 용도는 무엇입니까?


3
다음에 하나의 질문 만하려고 시도하면 여러 질문이 일반적으로 참조하기에 좋지 않으며 거의 ​​동시에 해결되지 않습니다.
Kiwy

1
@Kiwy 죄송합니다. 같은 주제에 관한 것이기 때문에 이런 식으로 생각합니다. 원하는 경우 내 질문에 대한 더 나은 제목을 제안하여 참조를 향상시킬 수 있습니다.
피터

1
또한 "d"의 값은 040000 S_IFDIR입니다. 이름 아래의 헤더 파일에서 찾을 수 있습니다 . 파일 모드를 설정할 때는 사용하지 않지만이 stat()함수는 실제로 값 040750을 반환합니다 drwxr-x---.
Random832

2
@jamesqf 사실, 이제 8 진 코드가 어떻게 매핑되는지 이해 했으므로 그렇게 생각하는 것이 더 간단합니다.
HalosGhost

4
@ 피터 : 어리석은 질문은 없습니다. 물어 보는 것을 두려워하기 때문에 배우지 않는 바보입니다.
mgarciaisaia

답변:


117

파일 형식, 권한 및 다양한 형식의 사용 사례의 세 부분으로 귀하의 질문에 답변 해 드리겠습니다 chmod.

파일 형식

ls -l출력 의 첫 문자 는 파일 형식을 나타냅니다. d디렉토리라는 것을 의미합니다. 설정하거나 설정 해제 할 수 없으며 파일 작성 방법에 따라 다릅니다. ls 문서 에서 파일 유형의 전체 목록을 찾을 수 있습니다 . 당신이 올 가능성이 높은 사람들은

  • -: 파일을 작성할 수있는 모든 프로그램으로 작성된“일반”파일
  • b: 블록 특수 파일, 일반적으로 디스크 또는 파티션 장치는 mknod
  • c: 문자 특수 파일을 사용하여 만들 수도 있습니다 mknod( /dev예 참조 ).
  • d: 디렉토리로 만들 수 있습니다 mkdir
  • l: 심볼릭 링크로 만들 수 있습니다 ln -s
  • p: 명명 된 파이프로 mkfifo
  • s: 소켓으로 만들 수 있습니다 nc -U
  • D: door , Solaris / openindiana의 일부 서버 프로세스에 의해 작성됩니다.

권한

chmod 0777chmod변경 사항 u+등을 결합하지 않고 한 번의 실행으로 모든 권한을 설정하는 데 사용됩니다 . 4 자리 숫자 각각은 권한 세트를 나타내는 8 진수 값입니다.

  • suid, sgid"끈적임"(아래 참조)
  • 사용자 권한
  • 그룹 권한
  • "기타"권한

8 진 값은 권한의 합으로 계산됩니다.

  • “읽다”는 4
  • “쓰기”는 2
  • "실행"은 1

첫 번째 자리 :

  • suid4이고; 이 비트가 설정된 바이너리는 소유자 사용자 (일반적으로 root) 로 실행됩니다.
  • sgid2이고; 이 비트 세트가있는 바이너리는 소유자 그룹으로 실행됩니다 (게임에 사용되었으므로 높은 점수를 공유 할 수 있지만 게임의 취약성과 결합 될 때 보안 위험이 발생합니다).이 비트 세트가있는 디렉토리에서 작성된 파일은 기본적으로 디렉토리의 소유자 그룹 (공유 폴더를 만드는 데 편리함)
  • "sticky"(또는 "제한된 삭제")는 1입니다. 이 비트가 설정된 디렉토리에있는 파일은 자신의 소유자, 디렉토리의 소유자 또는 삭제할 수 있습니다 root(볼 /tmp이의 일반적인 예를 들어).

자세한 내용 chmod맨 페이지 를 참조하십시오. 이 모든 과정에서 파일에 대한 사용자의 권한 (SELinux, 파일 ACL ...)을 변경할 수있는 다른 보안 기능은 무시하고 있습니다.

특수 비트는 파일 유형 (일반 파일 또는 디렉토리) 및 기본 시스템에 따라 다르게 처리됩니다. (이것은 chmod맨 페이지에 언급되어 있습니다.) 이것을 테스트하는 데 사용한 시스템 ( Linux 커널 3.16.7-ckt2를 실행 coreutils하는 ext4파일 시스템에서 8.23으로 )에서 동작은 다음과 같습니다. 파일의 경우 특수 비트는 명시 적으로 설정되지 않는 한 항상 지워 지므로, chmod 0777에 해당 chmod 777하며 두 명령 모두 특수 비트를 지우고 모든 사람이 파일에 대한 모든 권한을 부여합니다. 디렉토리의 경우 특수 비트는 4 자리 숫자 형식을 사용하여 완전히 지워지지 않으므로 사실상 다음 chmod 0777과 같습니다.chmod 777그러나 일부 특수 비트는 그대로 유지되므로 오해의 소지가 있습니다. (이 답변의 이전 버전이 잘못되었다.) 사용해야하는 디렉토리에 특별한 비트를 지우려면 u-s, g-s및 / 또는 o-t명시 적으로 또는 음의 숫자 값을 지정, 그래서 chmod -7000디렉토리에있는 모든 특별한 비트를 지 웁니다.

에서 ls -l출력 suid, sgid그리고 "끈끈한"의 장소에 표시 x항목 : suids또는 S대신 사용자의 x, sgid이다 s또는 S대신 그룹의의 x, 그리고 "끈끈한"이다 tT대신 다른 사람의 ' x. 소문자는 특수 비트와 실행 비트가 모두 설정되었음을 나타냅니다. 대문자는 특수 비트 만 설정되었음을 나타냅니다.

chmod의 다양한 형태

위에서 설명한 동작으로 인해 전체 네 자리 숫자를 사용하면 chmod혼란 스러울 수 있습니다 (적어도 혼란 스러웠습니다). 권한 비트뿐만 아니라 특수 비트도 설정하려고 할 때 유용합니다. 그렇지 않으면 파일을 조작하는 경우 비트가 지워지고 디렉토리를 조작하는 경우 유지됩니다. 따라서 chmod 2750적어도 sgid정확하게 얻을 수 있습니다 u=rwx,g=rx,o=. 그러나 chmod 0750반드시 특수 비트를 지울 필요는 없습니다.

텍스트 명령 ( [ugo][=+-][rwxXst]) 대신 숫자 모드를 사용 하는 것이 습관과 명령의 목적 일 수 있습니다. 숫자 모드 사용에 익숙해지면 전체 모드를 그런 식으로 지정하는 것이 더 쉬운 경우가 많습니다. 많은 다른 명령에서 사용할 수 있기 때문에 숫자 모드를 사용하여 권한을 생각할 수 있으면 유용합니다 ( install, mknod...).

일부 텍스트 변형이 유용 할 수 있습니다. 다른 사람이 파일을 실행할 수 있도록 chmod a+x하려면 다른 권한에 관계없이 그렇게하십시오. 마찬가지로, +X실행 권한 중 하나가 이미 설정되어 있거나 파일이 디렉토리 인 경우에만 실행 권한을 추가합니다. 이것은 디렉토리 대 파일을 특수한 경우없이 전체적으로 권한을 복원하는 데 유용 할 수 있습니다. 따라서 모든 디렉토리 및 실행 파일과 다른 모든 파일 chmod -R ug=rX,u+w,o=에 적용 chmod -R 750하는 것과 같습니다 chmod -R 640.


다른 답변은 꽤 좋았지 만 실제로이 질문에 대답하는 데 약간의 시간을 보냈습니다. 감사.
Peter

* BSD 디렉토리에서 sgid실제 값에 관계없이 비트가 항상 설정된 것처럼 작동 합니다. 기본 파일 시스템이이를 지원하고 옵션으로 마운트 된 경우 FreeBSD에서 suid비트는 유사하게 작동하도록 구성 할 수 있습니다 sgid(즉, 내부에서 작성된 파일 및 서브 디렉토리는 디렉토리와 동일한 소유자를 갖습니다) suiddir.
lcd047

" +X실행 권한 중 하나 가 이미 설정되어 있거나 파일이 디렉토리 인 경우에만 실행 권한을 추가합니다. "@ stephen-kitt에게 "이미 설정되어 있습니다" 문서가 누락되었습니다 .
Ryan Fisher

39

따라서 Linux의 권한은 매우 중요합니다. 간단한 설명을하려고합니다.

파일 모드의 조각

모든 Unix 파일에는 파일을 읽거나 쓰거나 실행할 수 있는지 여부를 결정하는 권한 세트가 있습니다. ls -l을 실행하면 권한이 표시됩니다. 이러한 디스플레이의 예는 다음과 같습니다.

-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile

파일 모드의 조각 이미지를 첨부합니다.

여기에 이미지 설명을 입력하십시오

유형이 다를 수 있습니다. 예를 들면 다음과 같습니다.

  • d (디렉토리)
  • c (문자 장치)
  • l (기호)
  • p (명명 된 파이프)
  • s (소켓)
  • b (블록 장치)
  • D (리눅스 시스템에서는 일반적이지 않지만 이식 됨)

모든 디렉토리에 대해 일부 권한을 설정하려는 경우 R 속성을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

chmod -R 777 /some/directory/

chmod 777 대 0777

chmod명령은 일반적으로 입력이 8 진수 일 것으로 예상하고 앞에 오는 0은 스티키 / 스 지드 / 스 위드 비트 삼중 항의 값을 나타냅니다. 그러나 C에서는 (8 진수) 777로 변환되어 01411고정 비트 ( chmod(2)man 페이지 참조), 그룹 및 기타 사용자에 대한 소유자 및 실행 비트에 대한 읽기 권한 (다소 이상한 조합) 으로 변환 되므로 차이 가 있습니다. .

편집 1

Linux 권한에 대한 다른 그림을 찾았으며 더 쉽게 이해할 수 있도록 첨부하겠습니다. UNIX 파일 권한


5
777 대 0777에 대해서는 틀 렸습니다. 둘 다 8 진수 (이 경우 10 진수는 의미가 없습니다)이지만 4 자리 형식의 첫 번째 숫자는 특수 비트 (스티커 및 setuid)를 설정합니다.
오리온

3
@orion 때때로 그것은 사실입니다. 예를 들어 C와 같은 코드 chmod(777)에서는 실제로 실행하는 것과 같습니다 chmod 1411(예 : chmodargument with 명령 1411).
peterph 2012

2
... syscall (또는 래퍼)과 같은 이름을 가진 이진의 경우 약간 혼란 스러울 수 있습니다.
peterph 2012

3
Python Master Race는 0으로 시작하는 모든 "숫자"를 금지하여이 역전 문제를 해결했습니다. 16 진수 이외의 다른 것을 원하는 경우 사용자가 명시 적으로 표시하도록합니다 (예 : hex : 0x1FF, binary : 0b111111111또는 octal :) 0o777. PYTHON POWER
Nick T

사진 출처?
rugk

10

d는 디렉토리이고, 파일이 -있으면 링크이고 링크이면를 찾을 수 있습니다 l. 설정 / 설정 해제 할 수 없습니다.

권한으로 0777을 사용하면 시스템의 모든 사용자 / 그룹에 모든 권한 (읽기 + 쓰기 + 실행)을 부여합니다. 디렉토리 / 파일에 액세스 할 수없는 사용자 / 그룹이있을 때 문제를 해결하는 게으른 방법입니다.

예를 들어 디렉토리의 내용을 나열하고 다음을 얻는 경우 :

-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so

preloadable_libintl.so 는 사용자 루트 및 그룹 루트가 소유 한 파일입니다. 소유자는 읽기 및 쓰기 권한을가집니다의 그룹은 읽기 전용 액세스 것이며 다른 사용자가 읽기 액세스 권한이. 644로 번역 될 수 있습니다.

777로 변경하면 다음과 같습니다.

-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so


7

내 질문에 대한 답변을 얻고 결과에 대한 조사를 한 후 모든 것을 잘 설명하는 기사를 찾았습니다. 나중에 참조 할 수 있도록이 기사의 일부를 공유하고 싶습니다.

권한보기

chmod파일 또는 디렉토리의 권한을 변경하는 데 사용 하려면 먼저 현재 액세스 모드가 무엇인지 알아야합니다. 터미널에서 디렉토리의 내용 cd을 해당 디렉토리로보고 다음을 사용할 수 있습니다.

$ ls -l

-l사용하기 때문에 스위치는 중요 ls없이 것은 단지 디렉토리에있는 파일이나 폴더의 이름을 표시합니다.

아래는 ls -l내 홈 디렉토리 에서 사용하는 예입니다 .

total 128
drwxr-xr-x 2 peter users  4096 Jul  5 21:03 Desktop
drwxr-xr-x 6 peter users  4096 Jul  5 17:37 Documents
drwxr-xr-x 2 peter users  4096 Jul  5 13:45 Downloads
drwxr-xr-x 2 peter users  4096 Jun 24 03:36 Movies
drwxr-xr-x 2 peter users  4096 Jun 24 03:38 Music
drwxr-xr-x 2 peter users  4096 Jun 26 00:09 Pictures
-rw-r--r-- 1 peter users   354 Jul  6 17:15 chmodtest

열의 의미

첫 번째 열은 각 파일의 유형입니다.

  • - 일반 파일을 나타냅니다.
  • d 는 디렉토리, 즉 다른 파일 또는 폴더를 포함하는 폴더를 나타냅니다.
  • p 명명 된 파이프 (일명 FIFO)를 나타냅니다.
  • l 기호 링크를 나타냅니다.

그 후의 글자는 권한이며,이 첫 번째 열은 우리가 가장 관심을 가질 것입니다. 두 번째는 파일에 몇 개의 링크가 있는지, 안전하게 무시할 수 있습니다. 세 번째 열에는 두 개의 값 / 이름이 있습니다. 첫 번째 열 (예 : 'peter')은 파일을 소유 한 사용자의 이름입니다. 두 번째 값 (예에서 'users')은 소유자가 속한 그룹입니다 (그룹에 대해 자세히 알아보기).

다음 열은 파일 또는 디렉토리의 크기 (바이트)와 그 이후의 정보는 파일 또는 디렉토리가 마지막으로 수정 된 날짜 및 시간이며 물론 파일 또는 디렉토리의 이름입니다.

권한의 의미

첫 번째 -또는의 뒤에있는 첫 세 글자 d는 소유자가 가진 권한입니다. 다음 세 글자는 그룹에 적용되는 권한입니다. 마지막 세 글자는 다른 모든 사람에게 적용되는 권한입니다.

세 글자의 각 세트는 r w및로 구성 x됩니다. r항상 첫 번째 위치에 w있고 항상 두 번째 위치에 있으며 x항상 세 번째 위치에 있습니다. r읽기 권한, w쓰기 권한 및 x실행 권한입니다. -이 문자 중 하나 대신 하이픈 ( ) 이 있으면 권한이 부여되지 않았으며 문자가 있으면 해당 권한이 부여 된 것입니다.

폴더

폴더의 경우 모드 비트는 다음과 같이 해석 될 수 있습니다.

  • r (읽기)는 주어진 디렉토리의 목차를 읽는 기능을 나타냅니다.
  • w(쓰기)는 실행 비트가 설정된 경우에만 지정된 디렉토리의 목차를 쓸 수있는 기능을 나타냅니다 (새 파일, 폴더 생성, 이름 바꾸기, 기존 파일, 폴더 삭제). 그렇지 않으면이 권한은 의미가 없습니다.
  • x (실행)은 명령 cd를 사용하여 지정된 디렉토리에 들어가서 해당 디렉토리의 파일, 폴더에 액세스하는 기능을 나타냅니다.

chmod 명령을 사용하여 권한 변경

chmodLinux 및 기타 유닉스 계열 운영 체제의 명령입니다. 파일 또는 디렉토리의 권한 (또는 액세스 모드)을 변경할 수 있습니다.

다음 두 가지 방법으로 권한을 변경할 수 있습니다.-텍스트 기반 chmod -숫자 기반chmod

텍스트 방법

파일의 권한 또는 액세스 모드를 변경하기 위해 터미널에서 chmod 명령을 사용합니다. 다음은 명령의 일반적인 구조입니다.

chmod who=permissions filename

누가 편지의 범위에서 누구이며, 각각은 당신이 허락 할 사람을 나타냅니다. 다음과 같습니다.

u - The user that owns the file.
g - The group the file belongs to.
o - The other users i.e. everyone else.
a - all of the above - use this instead of having to type ugo.

이미 논의 된 바와 같이 권한이 동일 ( r, wx).

chmod 명령을 사용하면 = 대신 + 또는-를 사용하여 기존 세트에서 권한을 추가하고 뺄 수 있습니다. 이것은 본질적으로 권한을 다시 쓰기 위의 명령에 다른 (즉로부터 권한을 변경 r--rw-여전히 포함해야합니다, r뿐만 아니라 w애프터 =에서 chmod명령. 당신이 놓친 경우 r, 그것은 멀리 걸릴 것 r같은 권한을 +와-를 사용하여 현재 권한 세트를 추가하거나 제거하여 이것을 피하십시오).

번호 방법

chmod 숫자를 사용하여 권한을 설정할 수도 있습니다.

숫자를 사용하면 세 소유자, 그룹 및 다른 사람의 권한을 동시에 편집 할 수있는 또 다른 방법이 있습니다. 이 코드의 기본 구조는 다음과 같습니다.

chmod xxx file/directory

여기서 xxx는 각 숫자가 1에서 7까지의 3 자리 숫자입니다. 첫 번째 숫자는 소유자의 권한에 적용되고 두 번째 숫자는 그룹의 권한에 적용되며 세 번째 숫자는 다른 모든 권한에 적용됩니다.

이 숫자 표기법에서 값 r, w 및 x는 고유 한 숫자 값을 갖습니다.

r=4
w=2
x=1

세 자리 숫자를 찾으려면 소유자, 그룹 및 사용자에게 부여 할 권한을 고려한 다음 해당 값을 합산해야합니다. 예를 들어, 디렉토리 소유자에게 읽기-쓰기 및 실행 권한을 부여하고 그룹 및 다른 모든 사용자에게 읽기 및 실행 권한을 부여하려고한다고 가정합니다. 다음과 같은 숫자 값을 생각해 냈습니다.

Owner: rwx = 4+2+1=7
Group: r-x = 4+0+1=5 (or just 4+1=5)
Other: r-x = 4+0+1=5 (or just 4+1=5)

Final number = 755

$ chmod 755 filename

이것은 다음을 사용하는 것과 같습니다.

chmod u=rwx filename
chmod go=rx filename

대부분의 폴더 / 디렉토리는 소유자에 대한 읽기 및 쓰기 및 실행을 허용하기 위해 755로 설정되어 있지만 다른 사람에 대한 쓰기는 거부하고 파일은 일반적으로 소유자에 대한 읽기 및 쓰기는 허용하지만 다른 사람은 읽을 수 있도록 644입니다. 실행 파일이 아닌 파일에 x 권한이 없다는 점에 유의하십시오.


다른 기사의 텍스트를 복사하는 것은 최소한 무례합니다. 아마도 저작권 위반 일 수도 있습니다. 복사하거나 작은 부품을 실제로 사용한 경우 (적절한 사용으로 인해 저작권 친화적) 최소한 참조 / 인용중인 기사에 대한 링크를 추가하십시오.
rugk

0

d 질문에

유닉스 파일 형식을 알려줍니다. 기본적으로 Unix에는 3 가지 유형의 파일 만 있습니다. 그들은:

  • - -일반 파일
  • d -디렉토리 파일
  • 특수 파일 (하위 유형 5 개) :
    • b -파일 차단
    • c -캐릭터 장치 파일
    • p -명명 된 파이프 파일 또는 파이프 파일
    • l -심볼릭 링크 파일
    • s 소켓 파일

자세한 내용은 여기를 참조하십시오 : Linux / Unix의 파일 형식에 대한 자세한 설명

0777 vs 777

스티커 비트 지정 여부. 디렉토리의 고정 비트가 설정되면 파일 시스템은 파일의 소유자, 디렉토리의 소유자 또는 루트 사용자 만 파일의 이름을 바꾸거나 삭제할 수 있도록 이러한 디렉토리의 파일을 특별한 방식으로 처리합니다. 고정 비트가 설정되지 않으면 디렉토리에 대한 쓰기 및 실행 권한이있는 사용자는 파일 소유자에 관계없이 포함 된 파일의 이름을 바꾸거나 삭제할 수 있습니다.

0777 777 파일 권한과 고정 비트를 0으로 설정합니다. 특수 모드는 없습니다.

777 고정 비트를 변경하지 않고 777 파일 권한을 설정 중입니다.

더 읽어보기 : sticky bit and chmod


2
더 나은 : 그러나 그것은 여전히 ​​다른 답변이 아직 다루지 않은 아무것도 제공하지 않습니다 ...
jasonwryan

1
(1) 기본 파일 유형에는 일반 파일, 디렉토리 및 기타 모든 세 가지 파일 유형이 있습니다. 뭐? 어디서 구할 수 있습니까? 훌륭한 계획에서 일반 파일과 디렉토리는 매우 비슷합니다. 명명 된 파이프와 심볼릭 링크는 장치 파일이나 소켓보다 일반 파일 및 디렉토리와 비슷합니다. (2) chmod 777setuid, setgid 및 sticky 비트를 지우지 않는다고 생각 하십니까? 시도 해봐.
G-Man

유닉스는 3 가지가 아닌 7 가지 파일 형식을 가지고있다.
wjandrea
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.