일부 umask 값이 적용되지 않는 이유는 무엇입니까?

일부 umask 값이 적용되지 않는 이유는 무엇입니까?

권한을 더 잘 이해하려고 노력 중이므로 몇 가지 "연습"을 하고 있습니다. 다음은 내가 사용한 일련의 명령과 해당 출력입니다.

$ umask
0022
$ touch file1
$ ls -l file1
-rw-r--r-- 1 user group 0 Mar 16 12:55 file1
$ mkdir dir1
$ ls -ld dir1
drwxr-xr-x 2 user group 4096 Mar 16 12:55 dir1

이는 기본 파일 권한이 666( rw-rw-rw-)이고 디렉터리 기본 권한이 777( rwxrwxrwx)임을 알고 있기 때문에 의미가 있습니다. 이러한 기본 권한에서 umask 값을 빼면 , 가 있으므로 666-022=644이전 rw-r--r--출력 file1777-022=755도 일치 rwx-r-x-r-x합니다 dir1.

하지만 umask를 에서 로 변경하면 022021이상 그렇지 않습니다.

다음은 파일의 예입니다.

$ umask 0021
$ touch file2
$ ls -l file2
-rw-r--rw- user group 0 Mar 16 13:33 file2

-rw-r--rw-646, 하지만 그래야 합니다 666-021=645. 따라서 이전 계산대로 작동하지 않습니다.

다음은 디렉토리의 예입니다.

$ touch dir2
$ ls -ld dir2
drwxr-xrw- 2 user group 4096 Mar 16 13:35 dir2

drwxr-xrw-756, 777-021=756. 따라서 이 경우 결과는 이전 계산과 일치합니다.

나는 이 사람의 기사를 읽었지만 이 행동에 대해 아무것도 찾지 못했습니다.

누군가 이유를 설명할 수 있나요?

설명하다

답변에서 지적했듯이 umask의 가치는 다음과 같습니다.수학적 뺄셈기본 디렉터리 및 파일의 권한입니다.

관련된 유효한 연산은 AND(&) 및 NOT(!) 부울 연산자의 조합입니다. 반면:

오른쪽= 생성된 권한
=기본 권한
= 현재 umask

R = D & !U

예를 들어:

666화! 0053=110110110
            ! 000 101 011
             110 110 110 &  
             111010100
           = 110 010 100 = 624 = 읽기 및 쓰기--읽기 및 쓰기--
 
777&!0022=111111111&
            !000 010 010
             111 111 111 &  
             111 101 101
           = 111 101 101 = 755 = rwxr--xr-x

힌트

결과 권한을 빠르게 이해하는 쉬운 방법(적어도 나에게는 도움이 됨)은 소수점 이하 3자리 값만 사용할 수 있다고 생각하는 것입니다.

r = 100 = 4 
w = 010 = 2
x = 001 = 1

권한은 이 3가지 값의 조합입니다.
" "상대 권한이 부여되지 않았음을 나타내는 데 사용됩니다.

666 = 4+2+" "   4+2+" "   4+2+" "  = rw rw rw  

따라서 현재 umask가 있다면 그룹에서 읽기 및 실행 권한을 제거하고 다른 그룹에서는 쓰기 및 실행 권한을 제거 0053한다는 것을 알고 있습니다 .(4+1)(2+1)

 4+2     " "+2+" "     4+" "+" "   = 624 = rw--w-r--  

(그룹 및 기타 사용자는 더 이상 실행 권한이 없습니다)

답변1

umask마스크, 감산된 값이 아닙니다. 그러므로:

  • 패턴 666, 마스크 022: 결과는 666 & ~022,666 & 755는 644입니다.
  • 패턴 666, 마스크 021: 결과는 666 & ~021,666 & 756, 즉 646입니다.

관련된 부분을 생각해 보세요. 패턴의 6은 비트 1과 2가 설정, 읽기 및 쓰기됨을 나타냅니다. 마스크 마스크 비트 1의 2는 쓰기 비트입니다. 마스크의 1은 실행 비트인 마스크 비트 0입니다.

이를 표현하는 또 다른 방법은 권한을 텍스트 형식으로 보는 것입니다. 666666 rw-rw-rw-022 예 ----w--w-021 예 ----w---x. 마스크는 패턴에서 설정된 비트를 제거하므로 from은 rw-rw-rw-마스크가 되고 from은 마스크가 됩니다.----w--w-rw-r--r------w---xrw-r--rw-

답변2

십진수가 아닌 이진법으로 생각해야 합니다. 구체적으로 소유자, 그룹 및 기타를 나타내는 3자리 이진수 3개가 있습니다. 각 값의 범위는 000~111(10진수 0~7)입니다.

예를 들어 rw-rw-rw (666)은 110 110 110입니다.

umask은 새 파일이나 디렉터리를 생성할 때 켜거나 끌 비트(1 또는 0)를 지정하는 마스크입니다. 예를 들어 10진수 022는 2진수 000 010 010이고 10진수 021은 000 010 001입니다.

권한 비트는 부정된 umask와 AND로 연결되어 최종 값을 얻습니다. "부정"은 모든 비트가 반전되는 것을 의미합니다. 즉, 모든 1이 0으로 바뀌고 그 반대도 마찬가지입니다. 예를 들어NOT 022 (000 010 010) = 755 (111 101 101)

예: 666 & !022 = 644. 이진수로 표현하면 다음과 같습니다.

  Owner  Group  Other     mode
   110    110    110      666 
&  111    101    101      755   (this is the negated 022)
   ---    ---    ---      ---
   110    100    100      644

반품, 777 & !022 = 755:

  Owner  Group  Other     mode
   111    111    111      777 
&  111    101    101      755
   ---    ---    ---      ---
   111    101    101      755

각 비트의 최종 값이 1이면 최종 값은 1만 될 수 있습니다.둘 다원래 권한 값(666 또는 777)그리고부정적인 umask에서. 그 중 하나라도 0이면 결과는 0입니다. 지금 바로:1 & 1 = 1, 하지만1 & 0 = 0.


엄밀히 말하면 setuid, setgid 및 고정 비트에 대한 네 번째 3비트 이진수가 있습니다. 이것이 바로 앞에 0(또는 0-7 사이의 다른 앞에 숫자)이 지정된 권한과 마스크를 자주 보는 이유입니다. 예를 들어 0777 또는 2755입니다.

관련 정보