권한이 없는 파일에 유효한 비트를 활성화하려면 어떻게 해야 합니까? (POSIX 기능)

권한이 없는 파일에 유효한 비트를 활성화하려면 어떻게 해야 합니까? (POSIX 기능)

나는 POSIX 기능적 원리와 execve() 동안의 변환을 좀 더 구체적으로 이해하려고 노력하고 있습니다. 일부를 인용하겠습니다.문서내가 물었을 때 :

       P'(ambient)     = (file is privileged) ? 0 : P(ambient)

       P'(permitted)   = (P(inheritable) & F(inheritable)) |
                         (F(permitted) & P(bounding)) | P'(ambient)

       P'(effective)   = F(effective) ? P'(permitted) : P'(ambient)

       P'(inheritable) = P(inheritable)    [i.e., unchanged]

       P'(bounding)    = P(bounding)       [i.e., unchanged]

   where:

       P()   denotes the value of a thread capability set before the
             execve(2)

       P'()  denotes the value of a thread capability set after the
             execve(2)

       F()   denotes a file capability set

이를 바탕으로 먼저 실행 파일에 권한이 있는지 확인합니다.특권파일은 해당 기능이 있거나 set-user-ID 또는 set-group-ID 비트가 활성화된 파일로 정의됩니다.

When determining the transformation of the ambient set during execve(2), 
a privileged file is one that has capabilities or 
has the set-user-ID or set-group-ID bit set.

그런 다음 파일의 유효한 비트가 활성화되어 있는지 확인합니다. 이제 두 가지 확인을 기반으로 4가지 상황이 있습니다.

  • 권한 있는 파일에는 유효한 비트가 활성화되어 있습니다. -> 파일에 고려해야 할 기능이 있습니다. -> 새로운 기능을 계산합니다.
  • 권한이 없는 파일에는 유효한 비트가 비활성화되어 있습니다. -> 파일에 기능이 없습니다. -> 스레드를 사용하여 환경이 설정되었습니다.
  • 권한 있는 파일에는 유효한 비트가 비활성화되어 있습니다. -> 파일에는 setuid/setguid 비트가 활성화되어 있을 수 있습니다. 이것이 의미하는 바는 기능을 전혀 사용해서는 안 되고, 두 가지 다른 권한 도구를 혼합해서는 안 된다는 것입니다. -> 유효 스레드 세트는 0이 됩니다.

하지만 네 번째 경우는 이해할 수 없습니다. 권한이 없는 파일에는 유효한 비트가 활성화되어 있습니다. 기능이 없습니다(권한이 없기 때문에).

  1. 권한이 없는 파일이 유효한 비트를 활성화하는 것이 어떻게 가능합니까?
  2. 유효한 비트가 파일의 권한 상태에 영향을 미치지 않더라도 왜 권한이나 유효한 기능 없이 활성화하도록 설정하겠습니까?

그래서 제 질문은 어떤 구체적인 상황이 네 번째 시나리오로 이어질 수 있느냐는 것입니다.

답변1

이런 일은 없을 거라 생각했는데,허용되거나 상속된 기능이 없으면 유효한 비트를 설정할 수 없습니다.

나타난 동작은 setcap다음을 확인하는 것 같습니다.

$ sudo setcap cap_chown=ep mybinary
$ getcap mybinary
mybinary = cap_chown+ep
$ sudo setcap cap_chown=e mybinary
$ getcap mybinary
mybinary =

그러나 당신이 발견한 바와 같이,저장된 기능이 없더라도 유효한 비트를 설정할 수 있습니다.

$ xattr -l mybinary
0000   01 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00    ................
0010   00 00 00 00                                        ....

이 값은구조vfs_cap_data, 버전 2(0x02000001). 첫 번째 32비트 값의 마지막 비트는 이것이 유효한 기능임을 나타내기 위해 설정되지만 기능(상속 및 허용)은 0으로 설정됩니다.

관련 정보