Убедитесь, что пользователь root запускает клиентскую программу, которая пытается подключить серверную программу - PullRequest
0 голосов
/ 04 марта 2011

У меня есть серверная программа, которая прослушивает определенный порт.У меня есть требование, когда клиентская программа, которая пытается подключиться к моему серверу, должна быть инициирована пользователем root.Как мне убедиться в этом в серверной программе?

Ответы [ 2 ]

1 голос
/ 04 марта 2011

Как мне обеспечить [ что-нибудь о клиентской программе ] в серверной программе?

Вы не можете.Если ваша модель безопасности требует, чтобы сервер знал, является ли клиент пользователем root, у вас нет защиты.

Давайте рассмотрим одну возможность: ваш сетевой протокол включает уведомлениекак это:

My-Uid-Is: 0

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

fprintf(socketFd, "My-Uid-Is: %d\n", getuid()); // send server my identity

Но, мой клиент, тот, без которого я написалваши знания или согласие, будут реализовывать уведомления, как это:

fprintf(socketFd, "My-Uid-Is: 0\n"); // lie to server about my identity

Pop викторина: как ваш сервер может узнать, разговаривает ли он с вашим правдивым клиентом или моим лживым клиентом?Ответ: не может.Фактически, если вы обобщите эту концепцию, вы поймете, что сервер не может полагаться на достоверность (означает ли это достоверность, формат, проверку диапазона и т. Д.) что-нибудь клиент говорит.

В этом конкретном случае использование номера порта источника клиента так же ненадежно, как и любой другой выбор.Да, многим операционным системам требуются привилегии root для привязки к исходным портам с низким номером.Но мой компьютер может не работать под вашей любимой операционной системой.Возможно, я подключаюсь со своего компьютера под управлением собственной ОС, у которой нет этой функции.Помните: вы не можете доверять тому, что говорит клиент.

Существуют методы шифрования с открытым ключом, которые можно использовать, чтобы гарантировать, что программа, с которой вы разговариваете, имеет доступ к определенным секретам.Это, если предположить, что секреты должным образом защищены, может использоваться для гарантии того, что конкретный человек, компьютер или учетная запись сгенерировали запрос.Я позволю кому-то еще обсудить PKI и то, как это может относиться к вашей ситуации.

0 голосов
/ 04 марта 2011

Клиент должен подключиться к порту ниже 1024 перед подключением.Этот диапазон портов зарезервирован для root.

...