"파일 권한"이란 커널 내부의 권한을 의미합니까, 아니면 파일 시스템의 기능을 의미합니까? 이러한 권한이 저장되는 위치는 어떤 계층에서 결정됩니다. 어떤 수준의 파일 권한이 존재하는지 혼란스럽습니다. 경계를 명확히 하는 데 도움을 줄 수 있는 사람이 있나요?
사용자 관점에서 이것이 어떻게 작동하는지 알지만 chown
chmod
, 구현 방법이나 실제로 "권한 거부" 오류가 발생하는 이유는 무엇인지 모릅니다.
touch foo
chmod 000 foo
cat foo
cat: foo: Permission denied
커널, 파일 시스템, io 및 비트가 위의 순서에 어떻게 들어맞는지 과정을 안내해 줄 수 있는 사람이 있습니까?
답변1
이 질문에 대한 가장 좋은 한 단어 대답은 다음과 같습니다.둘 다또는무.
Unix 운영 체제 설계에서 파일 시스템 기능은 커널에 의해 제공됩니다. 따라서 파일 권한은 커널에서 나오며 커널에 의해 시행됩니다.
커널 내부에는 파일 액세스를 처리하는 하위 시스템이 있습니다. 권한은 이 하위 시스템에 의해 시행됩니다. 하위 시스템에는 잘 정의된 경계가 없으며 시스템의 구조를 이해하기 위해 인간이 구성합니다. 파일 액세스를 처리하는 커널 부분을 두 부분으로 나누는 것은 실제로 유용합니다.
- 애플리케이션의 액세스를 처리하고 경로를 확인하는 VFS(가상 파일 시스템)
- 정보를 특정 형식으로 저장하는 특정 파일 시스템에 대한 액세스를 관리하는 별도의 파일 시스템 드라이버입니다.
각 파일 시스템 드라이버는 권한을 저장하고 검색하는 방법을 결정합니다. VFS 계층은 신경 쓰지 않습니다. 해당 계층의 임무는 요청을 올바른 드라이버로 전달하는 것입니다. 디스크 파일의 파일 시스템은 디스크 어딘가에 권한을 저장합니다(지원하는 경우). 파일의 다른 메타데이터와 함께 기존 Unix 디자인 저장소 권한을 따르는 디스크 파일 파일 시스템인덱스 노드. 프로토콜이 권한을 지원하는 경우 네트워크 파일 시스템은 서버에 권한이 무엇인지 묻습니다. 형식이나 프로토콜이 Unix 권한을 지원하지 않는 경우 모든 파일에 대해 동일한 권한을 보고하는 등의 보상은 드라이버에 달려 있습니다. procfs 및 sysfs와 같은 메모리 내 파일 시스템은 메모리 내 데이터 구조에 권한을 저장하거나 이를 동적으로 계산합니다.퓨즈파일 시스템 등을 구현하는 프로그램의 함수를 호출합니다.
VFS 계층과 파일 시스템 드라이버는 모두 액세스 요청 승인 여부를 결정하는 데 도움이 됩니다. 마운트 지점에 대한 경로를 순회하는 경우 요청에 여러 파일 시스템 드라이버가 포함될 수도 있습니다(예: /foo/bar
마운트 지점인 경우 해당 요청에 액세스하려면 및 를 순회하기 위해 /foo/bar/qux
하나의 파일 시스템을 쿼리해야 합니다 ). 분할의 세부 사항은 Unix 변형에 따라 다를 수 있지만 일반적으로 VFS 계층은 파일 권한을 호출 컨텍스트와 연결하고 다른 제한 사항(읽기 전용 마운트, SELinux와 같은 프레임워크)을 적용할 수 있으며 개별 파일 시스템은 추가 제한 사항을 적용할 수 있습니다( 예를 들어 네트워크 파일 시스템의 경우 서버는 항상 거부할 수 있습니다./
/foo
/foo/bar
/foo/bar/qux