“ls”명령이 FAT32 파티션에있는 파일의 권한을 표시하는 이유는 무엇입니까?


40

FAT32 파일 시스템은 파일 권한을 지원하지 않는다고 생각하지만 ls -lFAT32 파티션에서 작업 할 때 파일에 권한이 ls -l있음을 보여줍니다.

-rw-r--r-- 1 john john 11 Mar 20 15:43 file1.txt
-rw-r--r-- 1 john john 5 Mar 20 15:49 file2.txt

ls -l파일의 권한 이 표시되는 이유는 무엇 입니까?


좋은 질문! 환영합니다
0xSheepdog

답변:


71

디스크에 저장된 파일 시스템은 파일 권한을 저장하지 않지만 파일 시스템 드라이버는 Unix 파일 시스템 개념의 핵심 부분이며 시스템 호출 인터페이스는 권한을 나타내는 방법이 없으므로 운영 체제에 파일 시스템을 제공해야합니다. 밀집.

파일에 권한 비트가 전혀 없다면 어떻게 될까요? 그것은 0777모두에 대한 접근 과 동일 할 것인가? 또는 같은 0000, 즉 누구에게도 접근 할 수 없습니까? 하지만 그 둘 다 있는 파일 사용 권한, 왜 그들에게 보여주지? 또는 더 유용한 것을 수행하고 적절한 권한을 설정하는 방법이 있습니다.

따라서 드라이버는 모든 파일에 대해 동일한 권한을 일부 가짜로 만듭니다. 마운트시 파일 소유자 및 그룹과 함께 권한을 구성 할 수 있습니다. 이것들은 mount (8) 매뉴얼 페이지의 "지방 장착 옵션"에 설명되어 있습니다 :

fat에 대한 마운트 옵션
(참고 : fat는 별도의 파일 시스템이 아니라 msdos, umsdos 및 vfat 파일 시스템의 일반적인 부분입니다.)

uid=valuegid=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이 적용됩니다.


7
그리고 권한을 위조하는 이유는 그렇지 않으면 ls이며 파일 권한을 보았던 다른 프로그램 (파일을 읽으려는 코드조차도)은 다른 모든 파일 시스템 조직을 처리하는 논리를 가져야하기 때문입니다.
jamesqf

4
@jamesqf, 예, 심지어 시스템 호출 인터페이스에는 권한이 항상 있기 때문에 "권한 없음"옵션이 없습니다. (내가 생각했을 때 그것들은 "통합 부분"입니다.) 따라서 권한도 항상 있어야하며 ACL과 같은 것들이 의미를 유지하도록 만들어집니다.
ilkkachu

2
나는 보통 FAT 파일 시스템의 모든 파일에 대해 모드 777을 보았습니다 (적어도 오래된 드라이버가있는 FAT16).

2
umask마운트 옵션 에 따라 달라지는 @forest . 기본값은 mount프로세스의 umask입니다 (이 답변에 링크 된 매뉴얼 페이지 참조).
Ruslan

그러나 FAT Unix에 정확하게 매핑되지 않더라도 일부 권한 / 속성 (읽기 전용, 숨김, 시스템 등)을 저장합니다. chmod ugo-w파일에서 읽기 전용 속성을 켭니다. fmask=0133예제와 같이 옵션을 사용하더라도 모든 파일에 0644 권한 이있는 것은 아닙니다 . FAT가 절대 저장하지 않는 것은 각 파일에 대한 UID와 GID입니다. 명확히하십시오; 그 답은 매우 오해의 소지가 있습니다.
mosvy

22

그러나 파일에는 권한이 있습니다. 사용자 john 은 RW 액세스 권한을 가지며 일부 임의 사용자는 읽기 권한 만 갖습니다. 이러한 권한은 파일 시스템 자체가 아니라 마운트 옵션 (-o uid / gid / umask)에서 비롯 되었기 때문에 실제보다 덜 실감 나지 않습니다.

다른 옵션으로 여러 vfat 파티션을 마운트 할 수 있으며 ls 를 사용 하여 해당 옵션이 무엇인지 확인할 수 있습니다 . mount --bind 를 사용 하여 단일 디렉토리에 다른 vfat 파티션의 파일이 포함되도록 할 수 있으며 ls 는 각 파일에 지정된 권한을 올바르게 표시합니다.


15

lsFAT32는 모르지만 POSIX open/ readdir/ stat시스템 호출로 커널에 의해 노출되는 VFS (Virtual Filesystem) 인터페이스 만 알 수 있습니다.

리눅스는 파일의 개념을 지원하지 않습니다 이없는 사용자 / 그룹 / 기타 권한 비트를 struct stat단순히 포함 mode_t st_mode;커널이 해당 구성원 (및 UID, GID 회원) 해야 할 때 작성 ls -l하게 stat(2)시스템 호출을.

해당 필드에 대해 "사용할 수 없음"또는 "적용 할 수 없음"을 의미하는 특수 코드가 없으므로 커널의 vfat 드라이버 무언가를 구성 해야 합니다. FAT16 / FAT32에는 읽기 전용 플래그가 있지만 소유자 / 그룹은 마운트 옵션에서 왔으며 umask도 마찬가지입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.