내 애플리케이션(.out)이 소유자 전용 권한으로 폴더에 쓰고 해당 내용에 액세스할 수 없습니다.

내 애플리케이션(.out)이 소유자 전용 권한으로 폴더에 쓰고 해당 내용에 액세스할 수 없습니다.

Visual Studio Cross-Platform Build를 사용하여 애플리케이션(.out) 파일을 빌드하는 Raspberry Pi 3이 있습니다. (.out) 파일에는 모든 사람의 권한이 있습니다. 이(.out)을 실행하면 Pi에 일부 출력 데이터가 포함된 일부 텍스트 파일을 보관할 폴더가 생성됩니다. 그러나 데이터에 액세스하기 위해 폴더를 열려고 하면 "열기 오류...권한이 거부되었습니다"라는 오류가 발생합니다. 어떤 이유로 출력 폴더의 권한은 "소유자 전용"입니다. 권한을 변경할 때마다 "chmod"를 사용해야 하는데, 이는 매우 불편합니다. 이상하게도 동일한 ".out"을 가진 다른 Pi 장치가 있지만 파일에 액세스할 수 있고 권한 문제가 없습니다. 이 특정 장치에 새 OS 이미지를 설치하려고 시도했지만 동일한 문제가 발생했습니다. 어떤 아이디어가 있나요?

편집: 이것은 출력 폴더를 만드는 데 사용하는 코드입니다.

    if (mkdir(outputdir_time_tagged, 0700) == 0)
        printf("[INFO_] Output directory created successfully\n");

답변1

프로그램에서 특별히 권한을 설정하지 않는 한 UMASK가 사용됩니다.

에서 전역적으로 UMASK를 설정할 수 있습니다 /etc/pam.d/common-session. 현재 세션에 대해 UMASK를 설정할 수 있습니다

umask 007

특정 명령의 경우에도:

(umask 002 &&  a.out)

답변2

명령에서 권한을 변경하면 문제가 해결되는 것으로 나타났습니다. 내가 사용하는 0700 권한은 "소유자"에게만 적용됩니다. 제가 개발 중인 Raspberry Pi에서는 "root"가 내 사용자 계정이 아닌 소유자입니다. 권한을 777로 변경하면 "누구나" 권한이 설정됩니다. Ljm Dullaart가 답변에서 언급했듯이 "mkdir"은 "umask"의 영향을 받기 때문에 "umask" 값에 관계없이 필요한 777 권한이 적용되도록 "chmod"를 추가했습니다.

if (mkdir(outputdir_time_tagged, 0777) == 0)
    chmod(outputdir_time_tagged, 0777);
    printf("[INFO_] Output directory created successfully\n"); 

관련 정보