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
권한과 관련하여 첫 번째 부분( )은 무엇을 의미합니까? 이러한 권한의 용도는 무엇입니까?
답변1
귀하의 질문에 대해서는 파일 형식, 권한, 다양한 형식의 세 부분으로 나누어 답변해 드리겠습니다 chmod
.
파일 유형
출력의 첫 번째 문자는 ls -l
파일 형식을 나타냅니다. d
즉, 디렉터리입니다. 파일 생성 방법에 따라 설정하거나 설정 해제할 수 없습니다. 파일 형식의 전체 목록은 다음에서 찾을 수 있습니다.ls 문서;당신이 만날 수 있는 것은
-
: 파일을 쓸 수 있는 모든 프로그램을 사용하여 생성된 "일반" 파일b
: 일반적으로 디스크나 파티션 장치인 블록 특수 파일은 다음을 사용하여 생성할 수 있습니다.mknod
c
: 문자 특수 파일을 사용하여 생성할 수도 있습니다mknod
(/dev
예제 참조).d
: 다음 명령을 사용하여 생성할 수 있는 디렉터리mkdir
l
: 다음 명령을 사용하여 생성할 수 있는 심볼릭 링크ln -s
p
: 다음 명령을 사용하여 생성할 수 있는 명명된 파이프mkfifo
s
:Socket(다음 명령을 사용하여 생성할 수 있음)nc -U
D
:문, Solaris/openindiana의 일부 서버 프로세스에 의해 생성됩니다.
권한
chmod 0777
변경 사항 등을 chmod
결합하는 대신 한 번의 실행으로 모든 권한을 설정하는 데 사용됩니다 . u+
4개의 숫자 각각은 권한 집합을 나타내는 8진수 값입니다.
suid
및sgid
"끈적임"(아래 참조)- 사용자 권리
- 그룹 권한
- "기타" 권한
8진수 값은 권한의 합계로 계산됩니다.
- 4로 "읽기"
- "쓰기"는 2입니다
- "실행"은 1입니다.
첫 번째 숫자의 경우:
suid
예 4, 이 비트가 설정된 바이너리는 소유자 사용자(일반적으로root
) 로 실행됩니다.sgid
2입니다. 이 비트 세트가 있는 바이너리는 소유자 그룹으로 실행되며(이는 게임에서 높은 점수를 공유할 수 있도록 사용되지만 게임의 취약점과 결합될 때 보안 위험이 되는 경우가 많습니다) 이 비트 세트로 실행됩니다. 디렉터리는 기본적으로 디렉터리의 소유자 그룹에 속합니다(공유 폴더를 생성할 때 편리함).- 고정성(또는 삭제 제한)은 1입니다. 이 비트가 설정된 디렉터리의 파일은 해당 소유자, 디렉터리 소유자 또는
root
(/tmp
일반적인 예는 참고자료 참조)만 삭제할 수 있습니다.
바라보다chmod
맨페이지더 알아보기. 여기서는 파일(SELinux, 파일 ACL...)에 대한 사용자 권한을 변경할 수 있는 다른 보안 기능을 무시하고 있습니다.
특수 비트는 파일 유형(일반 파일 또는 디렉터리)과 기본 시스템에 따라 다르게 처리됩니다. (이 내용은 매뉴얼 페이지에 언급되어 있습니다 chmod
.) 이것을 테스트하는 데 사용한 시스템(파일 시스템 coreutils
8.23 ext4
, Linux 커널 3.16.7-ckt2 실행)에서 동작은 다음과 같습니다. 파일의 경우 특수 비트는 명시적으로 설정되지 않는 한 항상 지워지므로 와 chmod 0777
동일하며 chmod 777
두 명령 모두 특수 비트를 지우고 모든 사람에게 파일에 대한 전체 권한을 부여합니다. 디렉토리의 경우 특수 비트는 4자리 형식을 사용하여 완전히 지워지지 않으므로 실제로는 chmod 0777
동일 chmod 777
하지만 일부 특수 비트가 그대로 유지되므로 오해의 소지가 있습니다. (이 답변의 이전 버전에서는 이러한 실수가 있었습니다.) 디렉토리의 특수 비트를 지우려면 을 사용하거나 명시적으로 음수 값을 지정해야 합니다 u-s
. g-s
그러면 o-t
디렉토리 chmod -7000
의 모든 특수 비트가 지워집니다.
ls -l
출력 에서 "sticky" suid
는 sgid
항목 위치에 나타납니다 x
: suid
of s
또는 S
for the user x
, sgid
for s
또는 S
for the group x
및 "sticky" for t
or T
for someone else x
. 소문자는 특수 비트와 실행 가능 비트가 모두 설정되었음을 나타내고, 대문자는 특수 비트만 설정되었음을 나타냅니다.
다양한 형태의 chmod
위 동작으로 인해 전체 4자리 숫자를 사용하는 것은 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
기타 모든 파일에 적용됩니다.
답변2
따라서 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은 Sticky/sgid/suid 비트 삼중항의 값을 나타냅니다. 그러나 C에서는 (octal) 777
로 변환되어 01411
고정 비트( chmod(2)
맨 페이지 참조), 소유자에 대한 읽기 권한, 그룹 및 기타에 대한 실행 비트(A가 아닌 A)를 설정한다는 점에서 다릅니다. 이상한 조합)
편집 1
Linux 권한에 대한 다른 사진을 찾았습니다. 이해하기 쉽도록 첨부하겠습니다.
답변3
d
는 디렉토리라는 뜻이고, 파일이 있으면 파일이고 -
, 링크라면 찾을 수 있습니다 l
. 설정/설정 해제할 수 없습니다.
0777을 권한으로 사용하면 시스템의 모든 사용자/그룹에 모든 권한(읽기+쓰기+실행)이 부여됩니다. 이는 사용자/그룹이 디렉터리/파일에 액세스할 수 없을 때 문제를 해결하는 게으른 방법입니다.
예를 들어, 디렉토리의 내용을 나열하고 다음을 얻는 경우:
-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so
preload_libintl.so사용자 루트와 그룹 루트가 소유한 파일입니다. 이것소유자읽기 및 쓰기 액세스 권한이 있습니다.그룹읽기 전용 및 모든다른 사용자읽기 권한이 있습니다. 이는 644로 해석됩니다.
777로 변경하면 다음과 같습니다.
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so
답변4
질문 d의 경우
이는 Unix 파일 유형을 알려줍니다. 기본적으로 Unix에는 3가지 유형의 파일만 있습니다. 그들은:
-
- 일반 파일d
- 카탈로그 파일- 특수 파일(5개 하위 유형 포함):
b
- 파일 차단c
- 캐릭터 장치 파일p
- 명명된 파이프 파일 또는 그냥 파이프 파일l
- 심볼릭 링크 파일s
- 소켓 파일
자세한 내용은 여기를 참조하세요:Linux/Unix의 파일 형식에 대한 자세한 설명
0777
그리고777
고정 비트를 지정할지 여부입니다. 디렉터리의 고정 비트가 설정되면 파일 시스템은 파일 소유자, 디렉터리 소유자 또는 루트 사용자만 파일 이름을 바꾸거나 파일을 삭제할 수 있도록 해당 디렉터리의 파일을 특별한 방식으로 처리합니다. 고정 비트가 설정되지 않은 경우 디렉터리에 대한 쓰기 및 실행 권한이 있는 사용자는 파일 소유자에 관계없이 포함된 파일의 이름을 바꾸거나 삭제할 수 있습니다.
0777
777 파일 권한을 설정하고 고정 비트를 0(특수 모드 없음)으로 설정합니다.
777
고정 비트를 변경하지 않고 777 파일 권한을 설정합니다.