예를 들어 Linux 및 기타 Unix 계열 시스템의 파일 권한 메커니즘을 설명할 수 있는 사람이 있습니까? 이 9개의 숫자는 무엇을 위한 것인가요? 파일에 대한 사용자 및 그룹 ID가 있는 이유는 무엇입니까? 이 둘은 관련이 있나요?
답변1
소유권과 액세스는 기본적으로 함께 작동합니다. 소유권 알리기 시스템WHO파일에 액세스할 수 있으며 파일 권한에 따르면어떻게.
소유권은 액세스를 사용자(파일을 소유한 개별 사용자), 그룹(사용자) 및 기타(나머지 세계)의 세 그룹으로 나눕니다.
권한은 다음과 같습니다.
r
- 읽기 허용, w
- 쓰기 허용, x
- 실행 허용
디렉토리의 경우 의미가 약간 다릅니다. x
디렉토리에 들어가면서 r
해당 내용을 나열할 수 있습니다(그리고 w
업데이트도 가능합니다). 즉, 정확한 파일 이름을 알고 있으면 해당 디렉토리에 대한 읽기 권한이 필요하지 않습니다. 에, x
충분합니다. 하지만 r
서류가 필요해요.
그런 다음 추가 비트 트리플이 있습니다: setuid, setgid, Sticky. 처음 두 개는 (실행 파일에서) 프로그램이 파일을 소유한 사용자/그룹으로 실행되도록 합니다(이 두 비트 중 어느 비트가 설정되어 있는지에 따라 다름). 고정 비트는 구현에 따라 다릅니다. 실행 파일의 경우 이는 다음 로드 속도를 높이기 위해 프로그램 코드를 스왑 영역에 캐시해야 함을 의미했습니다. 디렉토리의 경우, 권한이 없는 사용자가 자신이 소유하지 않은 파일을 삭제하는 것을 방지합니다. 심지어 권한이 있더라도 이를 삭제하는 것이 일반적입니다. 이것이 일반적으로 누구나 쓸 수 있는 디렉토리(예: /tmp
.
이 외에도 많은 파일 시스템은 보다 세분화된 액세스 제어를 허용하는 추가 ACL(액세스 제어 목록)을 지원합니다. 를 사용하는 대신 getfacl
/를 사용하여 액세스할 수 있습니다 .setfacl
chmod
참고로 유사한 권한 시스템은 일반적으로 페이지 단위로 메모리(RAM)에 대해 구현됩니다. 주요 목표는 "W^X" 원칙을 준수하는 것입니다. 즉, 메모리에 쓸 수도 있고 실행할 수도 있지만 동시에 둘 다할 수는 없습니다. 일반적으로 좋은 생각이지만, 해석기가 생성된 코드를 컴파일/최적화(즉, 페이지 작성)한 다음 일반적으로 증분식으로 실행해야 하기 때문에 Java와 같이 해석된 JIT(Just-In-Time) 컴파일 코드에서는 잘 작동하지 않습니다. (그리고 권한을 변경할 때마다 별 의미가 없습니다).