답변:
디스크에 저장된 파일 시스템은 파일 권한을 저장하지 않지만 파일 시스템 드라이버는 Unix 파일 시스템 개념의 핵심 부분이며 시스템 호출 인터페이스는 권한을 나타내는 방법이 없으므로 운영 체제에 파일 시스템을 제공해야합니다. 밀집.
파일에 권한 비트가 전혀 없다면 어떻게 될까요? 그것은 0777
모두에 대한 접근 과 동일 할 것인가? 또는 같은 0000
, 즉 누구에게도 접근 할 수 없습니까? 하지만 그 둘 다 있는 파일 사용 권한, 왜 그들에게 보여주지? 또는 더 유용한 것을 수행하고 적절한 권한을 설정하는 방법이 있습니다.
따라서 드라이버는 모든 파일에 대해 동일한 권한을 일부 가짜로 만듭니다. 마운트시 파일 소유자 및 그룹과 함께 권한을 구성 할 수 있습니다. 이것들은 mount (8) 매뉴얼 페이지의 "지방 장착 옵션"에 설명되어 있습니다 :
fat에 대한 마운트 옵션
(참고 : fat는 별도의 파일 시스템이 아니라 msdos, umsdos 및 vfat 파일 시스템의 일반적인 부분입니다.)
uid=value
및gid=value
모든 파일의 소유자와 그룹을 설정합니다. (기본값 : 현재 프로세스의 UID 및 GID)
umask=value
umask (존재하지 않는 권한의 비트 마스크)를 설정하십시오. 기본값은 현재 프로세스의 umask입니다. 값은 8 진수로 표시됩니다.
dmask=value
디렉토리에만 적용되는 umask를 설정하십시오. 기본값은 현재 프로세스의 umask입니다. 값은 8 진수로 표시됩니다.
fmask=value
일반 파일에만 적용되는 umask를 설정하십시오. 기본값은 현재 프로세스의 umask입니다. 값은 8 진수로 표시됩니다.
권한은 마스크로 표시되므로 최종 권한은 마스크의 부정입니다. fmask=0133
모든 파일에 권한 0644
이 있거나 rw-r--r--
.
또한 기본값은 프로세스를 호출하는 프로세스에서 상속 mount()
되므로 mount
명령 줄에서 호출 하면 셸 umask
이 적용됩니다.
umask
마운트 옵션 에 따라 달라지는 @forest . 기본값은 mount
프로세스의 umask입니다 (이 답변에 링크 된 매뉴얼 페이지 참조).
chmod ugo-w
파일에서 읽기 전용 속성을 켭니다. fmask=0133
예제와 같이 옵션을 사용하더라도 모든 파일에 0644 권한 이있는 것은 아닙니다 . FAT가 절대 저장하지 않는 것은 각 파일에 대한 UID와 GID입니다. 명확히하십시오; 그 답은 매우 오해의 소지가 있습니다.
그러나 파일에는 권한이 있습니다. 사용자 john 은 RW 액세스 권한을 가지며 일부 임의 사용자는 읽기 권한 만 갖습니다. 이러한 권한은 파일 시스템 자체가 아니라 마운트 옵션 (-o uid / gid / umask)에서 비롯 되었기 때문에 실제보다 덜 실감 나지 않습니다.
다른 옵션으로 여러 vfat 파티션을 마운트 할 수 있으며 ls 를 사용 하여 해당 옵션이 무엇인지 확인할 수 있습니다 . mount --bind 를 사용 하여 단일 디렉토리에 다른 vfat 파티션의 파일이 포함되도록 할 수 있으며 ls 는 각 파일에 지정된 권한을 올바르게 표시합니다.
ls
FAT32는 모르지만 POSIX open
/ readdir
/ stat
시스템 호출로 커널에 의해 노출되는 VFS (Virtual Filesystem) 인터페이스 만 알 수 있습니다.
리눅스는 파일의 개념을 지원하지 않습니다 이없는 사용자 / 그룹 / 기타 권한 비트를 struct stat
단순히 포함 mode_t st_mode;
커널이 해당 구성원 (및 UID, GID 회원) 해야 할 때 작성 ls -l
하게 stat(2)
시스템 호출을.
해당 필드에 대해 "사용할 수 없음"또는 "적용 할 수 없음"을 의미하는 특수 코드가 없으므로 커널의 vfat 드라이버 가 무언가를 구성 해야 합니다. FAT16 / FAT32에는 읽기 전용 플래그가 있지만 소유자 / 그룹은 마운트 옵션에서 왔으며 umask도 마찬가지입니다.