내가 알다시피, umask를 사용할 때 파일에 부여 할 수있는 최고 권한은 666 umask 0000
입니다. 그것은 내가 아는 모든 시스템에서 666 인 것처럼 보이는 기본 파일 생성 권한 때문입니다.
파일의 내용을 표시하려면 실행 권한이 필요하다는 것을 알고 있습니다.
그러나 왜 기본 파일 생성 권한을 666으로 제한합니까?
umask 0000
여전히 파일 권한 666으로 제한됩니다. (그러나 폴더는 777을 사용합니다)
내가 알다시피, umask를 사용할 때 파일에 부여 할 수있는 최고 권한은 666 umask 0000
입니다. 그것은 내가 아는 모든 시스템에서 666 인 것처럼 보이는 기본 파일 생성 권한 때문입니다.
파일의 내용을 표시하려면 실행 권한이 필요하다는 것을 알고 있습니다.
그러나 왜 기본 파일 생성 권한을 666으로 제한합니까?
umask 0000
여전히 파일 권한 666으로 제한됩니다. (그러나 폴더는 777을 사용합니다)
답변:
내가 알 수있는 한, 이것은 표준 유틸리티에 하드 코딩되어 있습니다. 나는 새로운 파일 생성과 새로운 디렉토리 생성을 strace
모두 수행했다 .touch
mkdir
touch
추적이 생산 :
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
mkdir
흔적이 이것을 생성 하는 동안 :
mkdir("newdir", 0777) = 0
C에서 파일 / 디렉토리 작성 프로세스를 코딩하지 않으면 기본 권한을 수정하는 방법이 보이지 않습니다. 그러나 기본적으로 파일을 실행 파일로 만들지 않는 것이 의미가 있습니다. 임의의 텍스트가 실수로 쉘 명령으로 잘못 구성되는 것을 원하지 않습니다.
최신 정보
권한 비트가 표준 유틸리티에 하드 코딩되는 방법에 대한 예를 제공합니다. 여기에 두 개의 파일에서 몇 가지 관련 선입니다 coreutils
소스 모두를위한 코드를 포함 패키지 touch(1)
와 mkdir(1)
다른 사람의 사이는 :
mkdir.c
:
if (specified_mode)
{
struct mode_change *change = mode_compile (specified_mode);
if (!change)
error (EXIT_FAILURE, 0, _("invalid mode %s"),
quote (specified_mode));
options.mode = mode_adjust (S_IRWXUGO, true, umask_value, change,
&options.mode_bits);
free (change);
}
else
options.mode = S_IRWXUGO & ~umask_value;
}
즉, 모드가 지정되지 않은 경우에 S_IRWXUGO
의해 수정 된 (읽기 : 0777)로 설정하십시오 umask_value
.
touch.c
더 명확합니다.
int default_permissions =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
즉, 모든 사람에게 읽기 및 쓰기 권한을 부여하십시오 (읽기 : 0666) umask
. 물론 파일 작성 프로세스 에 의해 수정 될 것 입니다.
이 방법은 프로그래밍 방식으로 만 해결할 수 있습니다. 즉, C 프로그램 내에서 파일을 작성하는 동안 시스템을 직접 호출하거나 저수준 시스템 콜을 할 수있는 언어 내에서 파일을 작성하는 동안 (예 : Perl 's sysopen
under perldoc -f sysopen
).
umask file
및 을 필요 로 umask dir
합니다. 두 가지 다른 기본값을 설정하고 잘 설정하십시오. 그러나 지금은 exec perms로 파일을 만들 수있는 방법이 없습니다.
mkdir(1)
하는 -m
스위치를 제공합니다 . 그러나 파일 open(2)
을 사용하는 경우 파일을 만들 때 syscall을 사용하므로 파일을 만드는 데 사용하는 도구는 모드 비트를 전달하는 데 사용되는 도구이므로 open
문제에 대해 언급하지 않습니다. install(1)
기본적으로 파일을 새 위치에 복사하고 실행 비트를 설정하지만 생성시 여전히 발생하지 않습니다.
touch
예를 들어 올바른 값을 설정하는 책임이있다. 값을 어디에 저장하는지 알고 있습니까? 그들은 시스템 전체에 설정되어있을 수 있습니다. 내가 자유롭게 쉬고 싶기 때문에 ;)
먼저 전역 기본값이 없으며 권한은 파일을 만드는 응용 프로그램에 따라 다릅니다. 예를 들어,이 작은 C 프로그램은 umask가 0000 인 경우 권한 0777 인 파일 '/ tmp / foo'를 만듭니다 (어쨌든 권한은 0777 & ~ umask 임).
int main()
{
creat("/tmp/foo", 0777);
return 0;
}
많은 응용 프로그램에서 권한이 0666 인 파일을 만듭니다. 두 가지 이유가 있습니다.
umask
내가 만난 유일한 것은 항상 0022 였고 기본 권한 644를