getpcaps가 우분투 20.04 및 Linux 5.11.0-38-generic에서 작동하지 않습니다.

getpcaps가 우분투 20.04 및 Linux 5.11.0-38-generic에서 작동하지 않습니다.

StackOverflow에서 봤어요https://stackoverflow.com/a/64000118/8507296명령어를 이용하여 프로세스를 확인하는 기능

getpcaps <pid>

ps 명령의 출력

$ ps
    PID TTY          TIME CMD
   9618 pts/0    00:00:02 zsh
  12797 pts/0    00:00:00 bash
  12920 pts/0    00:00:00 ps

PCAP 받기

$ getpcaps 9618
9618: =

시스템 메시지

$ uname -a
Linux Vostro-5568 5.11.0-38-generic 
#42~20.04.1-Ubuntu SMP Tue Sep 28 20:41:07 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

다른

하지만 같은 대답에는 아래와 같이 나에게 도움이 된 또 다른 방법이 있습니다.

$ cat /proc/<PID>/status | grep Cap
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
$ capsh --decode=000001ffffffffff
WARNING: libcap needs an update (cap=40 should have a name).
0x000001ffffffffff=cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,
cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,
cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,
cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,
cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,
cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,
cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,
cap_audit_read,38,39,40

답변1

해당 상태 파일에서 보고 있는 0이 아닌 값은 다음과 같습니다.경계설정(실제 기능의 상한선입니다). 경계 세트는 프로세스가 가질 수 있는 기능을 제한하는 데 사용됩니다. 0이 아닌 값이 시스템 기본값입니다. 따라서 흥미로운 값은 아닙니다. 이것이 의미하는 바는 이것이 실행 중인 시스템의 알려진 기능이라는 것입니다. 그 가치는흥미로운기본값에서 변경된 경우.

Cap*이 상태 파일에는 개별 항목과 관련된 많은 양의 델타 기록이 있습니다 . 그냥 CapInh, CapPrm그리고 CapEff처음부터(~1999?) 존재했습니다. POSIX.1e(초안 사양,이 초안의 마지막으로 알려진 사본에 대한 링크는 이 페이지 하단을 참조하세요.). libcap이 프로그램을 제공하는 라이브러리는 getpcaps원래 이 사양에 설명된 기능을 위한 사용자 공간 API의 구현으로 개발되었습니다. 텍스트는 다음과 같이 표현됩니다.능력사양에는 이 세 가지 기능만 포함되어 있습니다.배너.

사양에 따르면 , CapInh및 은 프로세스의 실제 기능 CapPrm이고 , , 만 실제로 프로세스에 직접적인 권한을 부여합니다.CapEffCapPrmCapEff

나중에 CapBnd프로세스가 비트만 제거할 수 있는 프로세스별 경계 세트가 생성되었습니다(모듈로 사용자 네임스페이스 컨테이너 버그가 최근 수정되었습니다). 나중에 CapAmb추가되었습니다. 이 두 벡터의 의미는 다음과 같습니다.순진하게상속 가능 - 자식은 부모의 정확한 복사본을 상속받습니다 exec*(). 이는 CapPrm및 의 의미와 매우 다릅니다 CapEff.

이러한 의미론과 텍스트 표현의 유산(약 20년 전)에 대해 생각할 때 A와 B 개념을 지원하기 위해 우리는 3-튜플인 I, A 및 B에 대해 서로 다른 텍스트 표현을 만들었습니다. IAB 튜플입니다. 당신은 할 수 있습니다cap_iab매뉴얼 페이지 또는 문서pam_cap.so. IAB 텍스트 형식은 pam_cap.so구성 구문 에 사용됩니다 . B는 실제로 다음과 같이 표현됩니다.CapBnd기본값은 흥미롭지 않은 0 값이라는 점을 강조하세요 . 이러한 모든 메커니즘은 다음에 중점을 두고 자세히 논의됩니다.능력 계승은 여기에서.

시도해 볼 수 있는 예(비교 목적):

$ getpcaps 1

이런게 있을거야많은능력 ...=ep. 여기에서 모든 작동 방식에 대해 자세히 알아볼 수 있습니다.libcap이것. 최신 버전에서는 명령줄 옵션을 찾으면 getpcaps지원합니다 .--iab흥미로운(기본값이 아닌 IAB 값) 프로세스의 텍스트 출력을 추가합니다 [..IAB..]. 릴리스 노트에는 이 지원이 libcap-2.54.

어떤 버전을 설치하셨는지 는 잘 모르겠지만 libcap, 글을 쓰는 시점에서는 최신 버전입니다 libcap-2.60. 이 프로그램은 여러분이 보고 있는 이름 없는 함수(38, 39, 40)를 모두 알고 있습니다. 실제로 Even libcap-2.60버전은 capsh다음을 지원합니다.

$ capsh --explain=40
cap_checkpoint_restore (40) [/proc/self/status:CapXXX: 0x0000010000000000]

    Allows a process to perform checkpoint
    and restore operations. Also permits
    explicit PID control via clone3() and
    also writing to ns_last_pid.

관련 정보