Я создал вычислительный движок, в котором есть следующие сетевые теги и правила брандмауэра: введите описание изображения здесь

введите здесь описание изображения Итак, если я правильно понимаю, машине разрешено прослушивать порт 80 . Я установил узел и создал действительно простой http-сервер, чтобы посмотреть, смогу ли я получить доступ к коробке через http. Авторизовался по ssh на облачной консоли. Когда я пытаюсь запустить его (например, npm start для запуска сервера), он говорит:

Error: listen EACCES: permission denied 0.0.0.0:80

Почему? Как решить?

Я где-то читал, что номера портов с низким номером обычно доступны только пользователю root, поэтому я попробовал sudo, он говорит, что sudo: npm: command не найден и аналогично для узла sudo.

Также почему при создании сервера с помощью такие скрипты, в статье написано, что они выполняются от имени root? Как это происходит и почему я не выполняю работу от имени пользователя root, если я тот, кто загрузил машину и вошел в систему как я? Да, я плохо разбираюсь в перманентах Linux.

Благодарность...

3
yen 4 Дек 2018 в 08:40

1 ответ

Лучший ответ

Чтобы использовать порты TCP ниже 1024, ваш сервер узла должен работать с привилегиями root. TCP-порты 1024 и выше не требуют привилегий.

Когда вы входите в экземпляр Google Cloud Compute Engine, вы входите в систему как пользователь normal. У вас нет привилегий root. Чтобы предоставить команде привилегии root, добавьте к ней префикс sudo. Пример: sudo mkdir /directoryname.

Я НЕ рекомендую запускать серверы узлов с правами root. Это открывает возможно серьезную дыру в безопасности вашей системы. Прежде чем принять решение, поищите в Интернете эту тему.

Ваш выбор:

  1. Выберите порт выше 1023. Общие номера портов: 8000, 8080, 5000.
  2. Запустите сервер узла с правами root: sudo node hello.js

Что касается npm, не найдено. Вам нужно будет изменить переменную среды PATH, включив в нее местоположение, где вы установили набор инструментов узла для пользователя root.

6
John Hanley 4 Дек 2018 в 06:35