"setcap"은 마지막 함수를 재정의합니다. 여러 기능을 설정하는 방법은 무엇입니까?

"setcap"은 마지막 함수를 재정의합니다. 여러 기능을 설정하는 방법은 무엇입니까?

Node.js가 포트 80에서 수신 대기하고 컴퓨터를 종료하도록 하고 싶습니다. 처음에는 다음 두 명령을 순서대로 시도했습니다.

setcap cap_net_bind_service=+ep /usr/bin/nodejs
setcap cap_sys_boot=+ep /usr/bin/nodejs

그러면 내 애플리케이션이 포트 80에 바인딩하지 못합니다. getcap으로 확인했습니다.

# getcap /usr/bin/nodejs
/usr/bin/nodejs = cap_sys_boot+ep

cap_net_bind_service에 대해 setcap을 다시 실행하면 다음과 같습니다.

# getcap /usr/bin/nodejs
/usr/bin/nodejs = cap_net_bind_service+ep

매뉴얼 페이지에 아무것도 표시되지 않습니다http://linux.die.net/man/8/setcap여러 기능을 설정하고 필사적으로 몇 가지를 시도하는 방법은 다음과 같습니다.

# setcap cap_net_bind_service=+ep /usr/bin/nodejs cap_sys_boot=+ep /usr/bin/nodejs
# getcap /usr/bin/nodejs
/usr/bin/nodejs = cap_sys_boot+ep
# setcap cap_net_bind_service=+ep cap_sys_boot=+ep /usr/bin/nodejs
Failed to set capabilities on file `cap_sys_boot=+ep' (No such file or directory)

여러 기능을 설정하는 방법은 무엇입니까?

답변1

마지막 절박한 구문 추측이 성과를 거두었습니다.

# setcap cap_net_bind_service,cap_sys_boot=+ep /usr/bin/nodejs
# getcap /usr/bin/nodejs
/usr/bin/nodejs = cap_net_bind_service,cap_sys_boot+ep

답변2

이 질문을 하는 사람에게: 다른 기능에 대해 다른 작업을 지정하려면 다음 구문이 필요합니다.

# this is for illustrative purposes only
# obviously it's not how you would formally define the syntax
setcap "<CAP_0,CAP_1,...><ACTIONS_A> <CAP_2,...><ACTION_B> ..."

=+eip따라서 OP의 예를 사용하여 for cap_net_bind_service대신 설정한다고 가정하면 =+ep다음과 같이 됩니다.

setcap "cap_net_bind_service=+eip cap_sys_boot=+ep" /usr/bin/nodejs

보다 공식적으로, 허용되는 모든 "능력 설명"은 setcap공백으로 구분된 여러 "절"로 구성되며, 각 절은 다음과 같은 형식을 갖습니다 <CAP_NAME_LIST><OPS><FLAGS>(한 <OPS><FLAGS>쌍을 "작업"이라고도 함).

따라서 앞서 언급한 예를 들어보면 다음과 같습니다.

cap_net_bind_service=+eip cap_sys_boot=+ep

이것은 쉼표로 구분된 함수 이름 목록(이 목록에는 항목이 하나만 있음), 연산자(재설정 후 발생) 및 플래그(유효, 상속 가능 및 허용) cap_net_bind_service=+eip인 첫 번째 절입니다 . 두 번째 조항 등도 마찬가지다.cap_net_bind_service=+eipcap_sys_boot=+ep


전체 구문에 대한 자세한 설명을 보려면 매뉴얼 페이지를 참조해야 합니다 cap_from_text. 이것은협회die.net을 읽고 싶다면.

관련 정보