예기치 않은 파일 액세스

예기치 않은 파일 액세스

저는 Windows의 하위 시스템으로 Linux를 사용하고 있습니다.

bash 터미널을 통해 파일을 생성하는 데 문제가 있습니다. 명령을 실행 touch foo.txt하면 ls -l foo.txt. 모든 접근 권한이 활성화되며 변경할 수 없습니다.

-rwxrwxrwx foo.txt

해결책이 있나요?

또한 0750 권한을 가진 파일을 생성하기 위해 C 프로그램 작성을 시도했지만 여전히 동일한 문제가 발생합니다.

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main() {
  umask(0);
  int fd = open("foo.txt", O_RDONLY | O_CREAT | O_EXCL, 0750);
  if(fd < 0) perror("foo.txt");
  close(fd);
}

프로그램을 컴파일한 후:

-rwxrwxrwx foo.txt

그런데 가상 머신에서 Linux를 사용할 때 잘 작동합니다.

답변1

바라보다이 WSL 문서Windows 드라이브와 WSL 간의 권한을 매핑하는 방법에 대한 정보입니다. 기본적으로 파일에 대한 Windows 권한이 표시되며 chmod는 실제로 많은 작업을 수행하지 않습니다.

하지만 운전은할 수 있는메타데이터 지원으로 설치하면 WSL은 Windows 권한 대신 메타데이터에 있는 권한을 적용합니다. 이를 통해 WSL은 Linux 권한을 Windows 드라이브의 파일에 매핑할 수 있습니다.

메타데이터 지원을 통해 Windows 드라이브를 자동으로 마운트하려면:

  • /etc/wsl.confWSL 인스턴스에서 편집 또는 만들기
  • 다음 줄을 추가합니다.
    [automount]
    enabled = true
    options = "metadata,umask=22,fmask=11"
    
  • WSL 인스턴스 종료
  • wsl --terminate <distroname>PowerShell 또는 cmd를 사용하여 WSL 인스턴스를 종료합니다.
  • WSL 인스턴스 다시 시작

그런 다음 touch결과는 .rw-r--r--이고 코드 결과는 예상한 결과 .rwxr-x---(750)입니다.

최소한 내 WSL2/Ubuntu 20.04 인스턴스(테스트 애플리케이션 포함)에서 테스트 및 확인되었습니다.

또한 WSL2는 WSL1에 비해 Windows 드라이브에서 성능이 매우 떨어집니다. 이 드라이브에서 파일 집약적인 작업을 수행하는 경우 가능하면 WSL1 인스턴스를 사용하십시오. 아니면 WSL2에서 ext4 fs를 사용하세요.

관련 정보