Рейтинг:0

Linux: резервирование петлевого порта для пользователя без аутентификации. Это возможно?

флаг nl

Я хочу, чтобы пользователь, который запускает процесс прослушивания порта на петлевом интерфейсе, был единственным пользователем, который может подключиться к этому порту. Резервирование порта. Нет аутентификации.

Я хочу, чтобы другие пользователи могли делать то же самое на любых доступных петлевых портах.

Есть ли какой-либо механизм, такой как selinux или apparmor, способный достичь этого?

[РЕДАКТИРОВАТЬ] Просто чтобы уточнить, сценарий cntlm на многопользовательской машине. Каждый пользователь использует cntlm для аутентификации на прокси-сервере со своими учетными данными для уникального порта на интерфейсе обратной связи. Я пытаюсь найти способ изолировать это, чтобы пользователи не могли подключаться, используя прокси-соединения друг друга.

флаг mx
Я только что обнаружил, что это можно сделать с помощью iptables https://unix.stackexchange.com/questions/486945/restrict-local-port-access-to-a-specific-user.
A.B avatar
флаг cl
A.B
Если ваше редактирование изменилось с произвольного порта от любого пользователя на фиксированный список портов, соответствующих фиксированному списку пользователей, то это значительно упростило проблему.
Рейтинг:2
флаг cn

Если под петлей вы подразумеваете сетевое подключение только к локальному хосту, рассмотрите Сокеты AF_UNIX. Сокеты домена AKA UNIX. Также известный как способ подключения без IP к базам данных PostgreSQL или MySQL.

В Linux преимущество заключается в соблюдении прав доступа к файлам. Без записи в сокет под своим пользователем это не сработает. Возможно, такое поведение не стандартизировано.

В IP-сетях нет идентификатора пользователя операционной системы, отправившего пакет. Возможно, в правиле брандмауэра nftables вы можете фильтровать по uid, но только в брандмауэре хоста для локальных сокетов. Лучше бы какой-нибудь протокол аутентификации.

A.B avatar
флаг cl
A.B
Если поведение описано в POSIX (https://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html см. EACCES), то это вполне стандартизированное поведение.
John Mahowald avatar
флаг cn
man 7 unix в Linux предупреждает, что «в некоторых системах (например, старых BSD) разрешения сокетов игнорируются». Может быть устаревшей вещью, но стоит изучить, является ли это портативным приложением без аутентификации вообще.
Рейтинг:0
флаг mx

Iptables делает именно то, что я хотел сделать. Вот пример iptables, который я протестировал и работает. Мне просто нужно написать оболочку для включения команды cntlm в команды iptables. Я мог бы назвать это обедом.sh

# Чтобы зарезервировать порт 7777 на lo для пользователя "foo"
iptables -I ВЫВОД -o lo -p tcp --dport 7777 -j DROP
iptables -I ВЫВОД -o lo -p tcp --dport 7777 --match-owner --uid-owner foo -j ПРИНЯТЬ

# Чтобы освободить порт 
iptables -D ВЫВОД -o lo -p tcp --dport 7777 -j DROP
iptables -D ВЫВОД -o lo -p tcp --dport 7777 --match-owner --uid-owner foo -j ПРИНЯТЬ

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.