Capabilities

‘setcap’ 覆蓋最後的能力。如何設置多個功能?

  • August 14, 2019

我想讓 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)

如何設置多個功能?

最後一個絕望的語法猜測得到了回報:

# 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

引用自:https://unix.stackexchange.com/questions/186892