UNIX 권한 및 파일 유형 이해

오늘까지 chmod가 어떻게 작동하는지 알 수 없었습니다. 저에게 큰 문제를 설명하는 자습서입니다.

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

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

이 세 그룹을 기반으로 이제 다음을 알 수 있습니다.

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

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

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

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

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)은 무엇을 의미하며 무엇을 권한의이 부분에 사용 하시겠습니까?

댓글

  • 다음에 하나의 질문 만 시도해보세요. 여러 질문은 일반적으로 참조하기에 좋지 않으며 거의 한 번에 모두 해결 한 적이 없습니다.
  • @Kiwy I ‘ 죄송합니다. ‘ 같은 주제에 관한 것이기 때문입니다. 원하는 경우 내 질문에 대한 더 나은 제목을 제안하여 ‘ 참조 자료를 개선 할 수 있습니다.
  • 참고로, “의 값 d “는 040000이며 S_IFDIR 이름의 헤더 파일에서 찾을 수 있습니다. 파일 모드를 설정할 때 ‘ 사용하지 않지만 stat() 함수는 실제로 .
  • @jamesqf 실제로 8 진수 코드가 매핑되는 방식을 이해 했으므로 ‘ 그렇게 생각하는 것이 더 간단합니다. .
  • @Peter : 어리석은 질문은 없습니다. ‘ ‘

답변

파일 형식, 권한, 다양한 형태의 chmod에 대한 사용 사례입니다.

파일 형식

ls -l 출력은 파일 유형을 나타냅니다. d는 디렉토리임을 의미합니다. 설정하거나 설정 해제 할 수 없으며 파일 생성 방법에 따라 다릅니다. ls 문서 에서 전체 파일 유형 목록을 찾을 수 있습니다. 여러분이 접하게 될 것들은

  • - : 파일을 쓸 수있는 모든 프로그램으로 생성 된 “일반”파일입니다.
  • b : 블록 특수 파일 (일반적으로 디스크 또는 파티션 장치)은 mknod
  • 를 사용하여 생성 할 수 있습니다.

  • c : 문자 특수 파일, mknod로 생성 할 수도 있습니다 (예는 /dev 참조).
  • d : 디렉토리, mkdir
  • : 심볼릭 링크, ln -s
  • p : 명명 된 파이프, mkfifo
  • s로 생성 가능 : 소켓, nc -U
  • D : , Solaris /의 일부 서버 프로세스에 의해 생성됨 openindiana.

권한 h2>

chmod 0777는 변경 사항을 iv id = “와 결합하는 대신 한 번의 chmod 실행으로 모든 권한을 설정하는 데 사용됩니다. 9406d3ddbd “>

등4 자리 숫자는 각각 권한 집합을 나타내는 8 진수 값입니다.

  • suid, sgid 및 “고정”(아래 참조)
  • 사용자 권한
  • 그룹 권한
  • “기타”권한

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

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

첫 번째 숫자 :

  • suid는 4입니다. 이 비트 세트가있는 바이너리는 소유자 사용자로 실행됩니다 (일반적으로 root)
  • sgid는 2입니다. 이 비트 세트가있는 바이너리는 소유자 그룹으로 실행되며 (게임에 사용되었으므로 높은 점수를 공유 할 수 있지만 게임의 취약성과 결합 될 때 보안 위험이됩니다)이 비트 세트가있는 디렉터리에서 생성 된 파일은 기본적으로 디렉터리의 소유자 그룹 (공유 폴더를 만드는 데 유용함)
  • “고정”(또는 “제한된 삭제”)은 1입니다. 이 비트 세트가있는 디렉토리의 파일은 소유자, 디렉토리 소유자 또는 root 만 삭제할 수 있습니다 (일반적인 예는 /tmp 참조).

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

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

ls -l 출력에서 suid, sgid 및 “sticky”가 x 항목 : suids 또는 S 사용자의 x 대신 sgids 또는 그룹의 x 대신 sticky는 t 또는 T 다른 사람의 x 대신. 소문자는 특수 비트와 실행 가능 비트가 모두 설정되었음을 나타냅니다. 대문자는 특수 비트 만 설정되었음을 나타냅니다.

다양한 형태의 chmod

위에 설명 된 동작으로 인해 chmod는 혼란 스러울 수 있습니다 (적어도 혼란 스러웠던 것으로 밝혀졌습니다). 권한 비트와 함께 특수 비트를 설정하려는 경우에 유용합니다. 그렇지 않으면 파일을 조작하는 경우 비트가 지워지고 디렉토리를 조작하는 경우 보존됩니다. 따라서 chmod 2750는 최소한 sgid 이상, 정확히 u=rwx,g=rx,o=를 얻을 수 있도록합니다. 그러나 chmod 0750가 반드시 특수 비트를 지우지는 않습니다.

텍스트 명령 대신 숫자 모드 사용 ([ugo][=+-][rwxXst]) 아마도 습관의 경우이고 명령의 목적 일 것입니다. 숫자 모드를 사용하는 데 익숙해지면 이러한 방식으로 전체 모드를 지정하는 것이 더 쉽습니다. 다른 많은 명령에서 사용할 수 있으므로 숫자 모드를 사용하여 권한을 생각할 수 있으면 유용합니다 (install, mknod … ).

일부 텍스트 변형이 유용 할 수 있습니다. 파일을 누구나 실행할 수 있도록하려면 chmod a+x가 무엇을하든 상관없이이를 수행합니다. 다른 권한은 다음과 같습니다. 마찬가지로 +X는 실행 권한 중 하나가 이미 설정되어 있거나 파일이 디렉토리 인 경우에만 실행 권한을 추가합니다. 이것은 특별한 경우 파일 v. 디렉토리없이 전역 적으로 권한을 복원하는 데 편리 할 수 있습니다. 따라서 chmod -R ug=rX,u+w,o=는 모든 디렉터리 및 실행 파일에 chmod -R 750를 적용하고 chmod -R 640를 다른 모든 파일.

댓글

  • 다른 답변은 꽤 좋았지 만이 질문에 답하는 데 시간을 보냈습니다. 감사합니다.
  • * BSD 디렉토리에서 실제 값에 관계없이 sgid 비트가 항상 설정된 것처럼 작동합니다. FreeBSD에서 suid 비트는 sgid와 유사하게 작동하도록 구성 할 수 있습니다 (즉, 내부에서 생성 된 파일 및 하위 디렉터리는 디렉터리와 동일한 소유자를 갖습니다. ), 기본 파일 시스템이이를 지원하고 suiddir 옵션으로 마운트 된 경우.
  • +X 실행 권한 중 하나가 이미 설정 되거나 파일이 디렉토리 인 경우에만 실행 권한을 추가합니다. ” 감사합니다. @ stephen-kitt가 ” 이미 설정되어 있습니다 ” 문서가 정말 저를 반복해서 던졌습니다!

답변

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

파일 모드의 경우

모든 Unix 파일에는 파일을 읽거나 쓰거나 실행할 수 있는지 여부를 결정하는 일련의 권한이 있습니다. ls -l을 실행하면 권한이 표시됩니다. 다음은 이러한 표시의 예입니다.

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

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

여기에 이미지 설명 입력

유형은 다를 수 있습니다. 예 :

  • d (디렉토리)
  • c (문자 장치)
  • l (심볼 링크)
  • p (이름 파이프)
  • s (소켓)
  • b (블록 장치)
  • D (도어, Linux 시스템에서는 일반적이지 않지만 포팅 됨)

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

chmod -R 777 /some/directory/ 

chmod 777 대 0777의 경우

chmod 명령은 일반적으로 입력을 예상합니다. 8 진수가되기 위해 선행 0은 고정 / sgid / suid 비트 삼중 선의 값을 나타냅니다. 그러나 C에서는 77701411 (8 진수)로 변환되어 고정 비트를 설정하므로 차이가 있습니다 (참조 chmod(2) 매뉴얼 페이지), 소유자 및 그룹 및 기타 사용자의 실행 가능 비트에 대한 읽기 권한 (이는 다소 이상한 조합 임).

편집 1

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

코멘트

  • 777과 0777에 대해 틀 렸습니다. 둘 다 8 진수입니다 (10 진수는 의미가 없습니다. 이 경우) 그러나 4 자 형식에서 첫 번째 숫자는 특수 비트 (sticky & setuid)를 설정합니다.
  • @orion 가끔 실제로 사실입니다. 예 C와 유사한 코드에서 chmod(777)는 실제로 chmod 1411를 실행하는 것과 동일합니다 (예 : chmod 1411) 인수가있는 div> 명령.
  • … syscall (또는 해당 래퍼) 및 동일한 이름을 가진 바이너리의 경우 약간 혼란 스러웠습니다.
  • Python Master Race는 0으로 시작하는 모든 ” 숫자 “를 금지하여이 문제를 해결했습니다. , 사용자가 10 진수 이외의 것을 원하는 경우 명시 적으로 강제합니다. 예 : 16 진수 : 0x1FF, 2 진수 : 0b111111111 또는 8 진수 : 0o777. PYTHON POWER
  • 사진 출처?

답변

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

답변

여기에서 내 질문에 대한 답을 얻고 결과에 대해 조사한 후 모든 내용을 잘 설명하는 기사를 찾았습니다. 향후 참조를 위해이 기사의 일부를 여기에서 공유하고 싶습니다.

권한보기

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 wx. r는 항상 첫 번째 위치에, w는 항상 두 번째 위치에, x는 항상 세 번째 위치에 있습니다. r는 읽기 권한, w는 쓰기 권한, x는 실행입니다. 허가. 이 문자 중 하나에 하이픈 (-)이 있으면 권한이 부여되지 않았 음을 의미하며 문자가 있으면 부여 된 것입니다.

폴더

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

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

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

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

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

텍스트 방법

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

chmod who=permissions filename 

Where Who is any from a range of letters, each indicates the who you will give the permission to . 다음과 같습니다.

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 명령을 사용하면 + 또는-대신 + 또는-를 사용하여 기존 집합에서 권한을 추가하거나 뺄 수 있습니다. of =. 이는 기본적으로 권한을 다시 작성하는 위의 명령과 다릅니다 (예 : 권한을 r--에서 rw-로 변경). , = 뒤에 rw를 포함해야합니다. div id = “4f801e3eef”>

명령.r를 놓친 경우r권한이 없어집니다. =로 다시 작성되고 있습니다. g + 및-현재 권한 집합을 추가하거나 제거하여이를 방지합니다.

숫자 방법

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

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

chmod xxx file/directory 

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

이 숫자 표기법에서 r, w 및 x 값은 고유 한 번호를 갖습니다. value :

r=4 w=2 x=1 

3 자리 숫자를 얻으려면 소유자, 그룹 및 사용자에게 부여 할 권한을 고려한 다음 총 그들의 가치. 예를 들어, 디렉토리 소유자에게 읽기-쓰기 및 실행 권한을 부여하고 그룹 및 다른 모든 사람에게 읽기 및 실행 권한 만 부여하고 싶다고 가정 해 보겠습니다. 다음과 같은 숫자 값을 얻을 수 있습니다.

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 권한의 부족에 대한 마지막 참고 사항을 참조하십시오. 여기서도 마찬가지입니다.

댓글

  • 다른 기사에서 텍스트를 복사하는 것은 적어도 무례합니다. 저작권 위반 일 수도 있습니다. 복사 된 것이 아니거나 실제로 작은 부분을 사용한 경우 (공정한 사용 덕분에 저작권 친화적 인) 최소한 참조 / 인용하는 기사에 대한 링크를 추가하십시오.

답변

d 질문

이것은 Unix 파일 유형을 알려줍니다. 기본적으로 Unix에는 3 가지 유형의 파일 만 있습니다. 다음과 같습니다.

  • --일반 파일
  • d-디렉토리 파일
  • 특수 파일 (5 개의 하위 유형 포함) :
    • b-블록 파일
    • c-문자 장치 파일
    • p-명명 된 파이프 파일 또는 단순한 파이프 파일
    • l-심볼릭 링크 파일
    • s-소켓 파일

자세히 알아보기 : Linux / Unix의 파일 형식에 대해 자세히 설명

0777 vs 777

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

0777는 777 파일 권한을 설정합니다. , 고정 비트는 0-특수 모드 없음.

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

자세히보기 : 고정 비트 chmod

댓글

  • 더 좋음 :하지만 아직 다른 답변에서 다루지 않은 ‘ 아무것도 제공하지 않습니다 …
  • ( 1) 세 가지 기본 파일 유형이 있습니다 : 일반 파일, 디렉토리 및 기타 모든 것. 뭐? 이거 어디서 구해요? 훌륭한 계획에서 일반 파일과 디렉토리는 매우 유사합니다. 명명 된 파이프와 심볼릭 링크는 장치 파일이나 소켓보다는 일반 파일 및 디렉토리와 비슷합니다. (2) chmod 777가 setuid, setgid 및 고정 비트를 지우지 않는다고 생각하십니까? 시도해보세요.
  • Unix에는 3 개가 아닌 7 개의 파일 형식이 있습니다.

답변

항상 혼란스럽고 위에서 다루지 않은 두 가지 관련 사항은 다음과 같습니다.


I) 1 “는 다음을 수행합니다.

chmod : 각 “1” ko 는 권한을 부여합니다. 예 : chmod 777 ko 모두 가능하지만
umask : 각 “1” dis 는 권한 (예 : umask 777)을 허용합니다. div id = “3352597ea1”>

dis 모두 가능합니다.


II ) 파일 “소유자” 대파일 “users” :

즉, “소유”하는 사용자 및 “사용”하는 사용자 .

각 파일은 다음 두 항목이 동시에 소유 합니다.

  • 단일의 특정 사용자
  • 단일의 특정 그룹 (한 명 이상의 사용자).

따라서 각 파일은 특정 사용자가 세 가지 방법으로 사용 :

1) 파일,
2) 파일을 소유 한 그룹의 구성원으로 직접, 그리고
3 ) 가능합니다.


그렇지 않으면 , 위의 답변, 훌륭한 일을하십시오! 모두에게 감사합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다