Node.jsがポート80でリッスンしてコンピュータをシャットダウンするようにしたいと思います。最初は、次の2つのコマンドを順番に試しました。
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
これは、カンマで区切られた関数名のリスト(このリストには1つのエントリしかありません)、演算子(リセット後に発生)、およびフラグ(有効、継承可能、および許可)のcap_net_bind_service=+eip
最初の句です。二番目の条項なども同じだ。cap_net_bind_service
=+
eip
cap_sys_boot=+ep
完全な構文の詳細な説明については、マニュアルページを参照してくださいcap_from_text
。これは協会die.netを読みたい場合。