새로운 파일 권한을 위해 umask를 쿼리하는 이식 가능한 방법은 무엇입니까?

새로운 파일 권한을 위해 umask를 쿼리하는 이식 가능한 방법은 무엇입니까?

나는 OSS-Security에 관한 주제를 따르고 있습니다.vim 스왑 파일의 보안 위험. 편집자가 파일 권한이 너무 많은 임시 파일을 잘못된 위치에 생성했기 때문에 Vim과 Emacs가 CVE를 포착한 것으로 보입니다.

Posix에 하나가 있다는 걸 알아요마스크마스크를 설정하는 함수가 있지만 실제로 쿼리하는 함수는 보이지 않습니다. 나는 또한 일부 쉘 지원에 대해 알고 있지만 UMASK내가 방문한 IEEE 페이지에는 언급된 내용이 없습니다. (어쩌면 제가 놓쳤을 수도 있습니다. 또한 참조하세요.Linux에서 모든 사용자의 umask를 보는 방법은 무엇입니까?).

프로그램은 어떻게 umask 값을 이식 가능한 방식으로 쿼리할 수 있나요?

답변1

매개변수가 없는 쉘 내장 함수는 umask현재 값을 인쇄합니다 umask.

시스템 umask()호출은 이전 값을 반환하므로 umask다음을 수행할 수 있습니다.

umask = umask(0777);
umask(umask);

(또는 umask(umask = umask(0777))일반적인 관용어로).

이것이 umask쉘 내장 기능이 하는 일입니다. 다중 스레드 프로그램에서 umask()2단계 프로세스는 다른 스레드가 동시에 호출하는 경우 문제를 일으킬 수 있습니다. 그러나 일반적으로 말하면 프로그램은 umask()원래 가지고 있던 것을 찾기 위해 시작 시 이 작업을 수행합니다 .

다른 프로세스에 대한 정보를 얻으려면 umask최신 버전의 Linux(4.7 이상), 넌 할 수있어:

sed -ne 's/^Umask:[[:blank:]]*//p' < "/proc/$pid/status"

귀하가 게시한 링크에 언급된 보안 고려 사항은 권한과 관련이 없으며 편집된 파일 내용을 포함하지만 다른 확장자를 가진 swp 파일 ( .swp대신 )과 관련이 있습니다. .php웹 서버가 숨겨진 파일을 제공하지 않도록 구성되지 않은 경우 .swp이 파일이 제공됩니다. 그리고 PHP 파일이 아니기 때문에 원본 내용(해석된 결과가 아닌 PHP 소스 코드)이 제공되므로 데이터베이스 비밀번호 등 민감한 정보가 노출될 수 있습니다.

이것이 웹 서버를 구성하는 것이 일반적인 이유입니다.아니요~일반적인 편집기 백업 또는 임시 파일 이름 패턴으로 끝나거나 따르는 숨겨진 파일 또는 파일을 제공하십시오 .

vim그러한 경우 이고 제한 이 umask매우 엄격 하더라도 단 한 명의 사용자만 관련되고 파일이 동일한 생성된 파일을 사용하는 일반적인 경우(클라우드 호스팅 웹 서버 배포 등)에는 여전히 도움이 되지 않습니다.umask077.swp소유자편집 중인 파일과 같습니다.

vim더 나은 해결책은 자신만 액세스할 수 있는 디렉터리에 파일을 생성하도록 지시하는 것입니다 . 바라보다swpdirectory vim

:h swap-file

자세한 내용 은 에서 vim알아보세요 .

또는 더 나은 방법은 웹 서버가 제공하는 영역에서 직접 파일을 편집하는 대신 git 또는 다른 작업 복사본과 같은 별도의 복사본에서 파일을 편집하는 것입니다. 일단 만족하면 웹 서버.


엄밀히 말하면 권한과 관련해 잠재적인 문제도 있습니다. vim해당 파일에 대해 편집된 파일과 동일한 권한이 사용되지만 .swp(여기서는 umask가 포함되지 않음) ACL(있는 경우)은 복사되지 않습니다. 파일에 사용자 ACL이 있다는 것은 반환된 권한 필드가 stat()파일에 대한 추가 권한이 있는 것으로 처리된다는 의미입니다.그룹(ACL 마스킹으로 인해) .swp이러한 경우 파일에 그룹에 비해 너무 넓은 권한이 있을 수 있습니다.

관련 정보