Запуск веб-службы, которая привязывается к порту 80, обычно не требует привилегий sudoer. Поскольку порты 80/443 являются системными портами, то есть они могут использоваться только привилегированными пользователями, почему эти службы все еще могут связываться с этими портами?
service
permissions
port-443
adaml
источник
источник
Ответы:
Есть два основных подхода:
Сначала запустите запуск с правами суперпользователя, выполните привязку к привилегированному порту, а затем перейдите к непривилегированному пользователю.
inetd, или xinetd, запускается с привилегиями и перенаправляет запросы на веб-сервер, работающий без привилегий.
источник
Я думаю, ты ошибаешься. Любой может использовать эти порты. Привязка к ним является привилегированной операцией.
Обоснование здесь заключается в том, что какой-то пользователь Джо не сможет написать вредоносный веб-сервер, а затем создать хост, на котором у него нет никаких административных прав. Конечно, это довольно слабая модель, обычно ничто не мешает Джо подключить свой компьютер к сети, и он может иметь административные права на любой компьютер, к которому у него есть физический доступ.
Я сделаю демонстрацию с Netcat.
Как обычный пользователь, я не могу привязаться к порту 80:
Я могу привязать к порту 8080:
Тем временем в другом терминале я могу подключиться к порту 80 и отправить некоторые данные, и увидеть, что они появляются на стороне сервера, которую я только что начал:
Если я хочу привязать к порту 80, мне нужно быть пользователем root:
Или я могу назначить
CAP_NET_BIND_SERVICE
возможность дляnc
двоичного файла:Другой вариант - написать серверную программу так, чтобы после ее вызова
listen()
она удаляла привилегии root. Это довольно распространенное решение, и вы увидите его с большинством демонов. Например, Apache запускается из init как root, а затем удаляет привилегии root и становится пользователемwww-data
или чем-то похожим, когда он привязан к порту 80. Попробуйте запустить/etc/init.d/apache start
не как root, и Apache, вероятно, не сможет запуститься.источник