Как я могу позволить узлу прослушивать порты ниже 1024 в Ubuntu 18.04? - PullRequest
0 голосов
/ 23 ноября 2018

Я могу использовать любое PORT выше 1023 с server.listen(PORT) в узле, установленном nvm.Как я могу использовать системные порты (например, ниже 1024) с непривилегированным пользователем?

На наших серверах Ubuntu 16.04 я делал это:

sudo setcap CAP_NET_BIND_SERVICE=+eip `readlink -f \`which node\``

Однако мы обновилив Ubuntu 18.04, и это больше не работает.Я вижу следующую ошибку:

Error listen EACCES 0.0.0.0:925

Это происходит со всеми портами ниже 1024, так что это не просто случай, когда порт уже используется.

Почему бы неТ эта работа (больше)?Должно быть, я что-то упустил, или с Ubuntu 18.04 все изменилось.

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

@ Ответ AdiRoiban может быть правильным о том, почему setcap не работает.Проверьте файловую систему, в которой установлена ​​node.В случае nvm, node может быть установлено в вашем домашнем каталоге.Ваш домашний каталог может быть зашифрован.И ваш зашифрованный дом может быть смонтирован как nosuid.

Это обходной путь, который я в итоге использовал.


Сначала установите authbind.Затем создайте порты, к которым вы хотите иметь доступ как пустые файлы в /etc/authbind/byport/.Дайте им разрешения на чтение для вашего пользователя или группы.В целях тестирования вы можете пойти ва-банк с пользователем root:root и разрешением 777.

Далее запустите приложение вашего узла следующим образом:

authbind node index.js

Если приложение порождает *Процесс 1020 *, для которого требуется доступ (например, nodemon), необходимо предоставить процессу, чтобы дать разрешение дочернему процессу, используя переключатель командной строки --deep.

Например:

authbind --deep nodemon --inspect index.js
0 голосов
/ 08 марта 2019

Убедитесь, что раздел, из которого запускается исполняемый файл, не смонтирован с nosuid.

getcap не поможет при устранении неполадок, так как он покажет атрибуты, установленные в файловой системе, а нефактические возможности, доступные во время выполнения.

Вы можете проверить возможности выполнения в /proc/PID/status.

Они должны выглядеть как

CapPrm: 0000000000000400
CapEff: 0000000000000400
CapBnd: 0000003fffffffff

На моем nosuid раздел, они были такими.

CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000003fffffffff

Надеюсь, это поможет.Я смог это выяснить только после консультации с другом:)

...