Время от времени я буду искать, как сделать разрешения на уровне пользователя для доступа к сетевым портам в Linux, и получаю довольно сухо. Например, если у вас есть машина, которая выполняет критический процесс, который прослушивает порт 5080, я чувствую, что должен быть способ предоставить доступ только к определенному набору доверенных пользователей к этому порту - так же, как и любой другой нормальный процесс разрешений. сделано, как разрешения файловой системы.
Но кажется, что высокие порты доступны для всех пользователей, а низкие порты доступны только для root, и только грубые хаки, такие как authbind и пересылка с iptables, позволяют другим пользователям использовать низкие порты. Кажется, что это очень странная ситуация, поэтому мне интересно, почему она была разработана таким образом и почему люди не чувствовали необходимости менять эту ситуацию?
Изначально, я думаю, потому что это потребовало бы сложного дизайна, который не соответствовал бы ранним системам Unix.
Позже, я думаю, потому что существовал способ реализации разрешений сетевого порта на уровне пользователя для общих случаев: inetd , который появился примерно через пару лет после ( 4.3BSD ) TCP / IP ( 4.2BSD ).
inetd
Демон работает как корень и прослушивает порты , указанные в файле конфигурации. При входящем соединенииinetd
порождает другую программу, указанную в его файле конфигурации и выполняющуюся как пользователь, также указанный в файле конфигурации inetd. Таким образом, по крайней мере для служб, в которых допустимо запускать новый процесс для каждого соединения, проблема решена.источник
Я думаю, что одной из причин является то, что большинство пользователей должны иметь возможность использовать временные порты для подключения к другим серверам, не обязательно являясь пользователем root.
источник