Как я могу войти в Linux, используя C или C ++ - PullRequest
0 голосов
/ 09 июня 2010

Мне нужно программно переключить текущего пользователя на другого, тогда следующий код должен быть выполнен в среде (например, путь, полномочия ..) другого пользователя. Я обнаружил, что «chroot ()», «setuid ()» могут быть связаны с моим делом, но эти функции нуждаются в полномочиях root, у меня нет полномочий root, но у меня есть пароль второго пользователя. что мне делать?

Я пробовал, оболочка "su -" может переключать текущего пользователя, может ли эта команда помочь мне в моем коде C ++?

Не смейтесь надо мной, если мой вопрос очень глупый, я настоящий новичок в Linux. :) Спасибо!

Ответы [ 5 ]

1 голос
/ 25 августа 2010

Я думаю, что ключевым моментом здесь является то, что вы не можете изменить пользователя запущенного процесса (легко). Все программы, такие как 'su', эффективно запускают новый процесс как указанный пользователь.

Поэтому в вашем проекте я бы порекомендовал отделить функциональность, которую необходимо выполнить, от другого исполняемого файла, а затем исследовать, используя execve () для его запуска.

1 голос
/ 09 июня 2010

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

Если вашим основным требованием является аутентификация, топопробуйте man pam.Есть также несколько библиотек, позволяющих авторизоваться через LDAP.К сожалению, у меня нет личного опыта реализации ни того, ни другого.

В противном случае воссоздание полной пользовательской среды ненадежно и подвержено ошибкам.Представление опечатки или бесконечного цикла, но в пользовательском ~ / .profile.

Я не делал этого в течение некоторого времени, но я бы также попытался копать в направлении "su", выясняя пользовательскую оболочку (из / etc / passwd) и пытается выполнить exec () так, как если бы это была оболочка входа в систему (с «-»).Но после этого вам нужно как-то передать ей команду для выполнения, и это проблема: оболочки работают по-разному в пакетном режиме и в интерактивном режиме.В качестве возможного взлома на ум приходит ожидаемый (man expect), но он по-прежнему слишком ненадежен для IMO.

В прошлом я использовал ssh в expect (для ввода пароля), но этоломался на настроенные профили пользователей каждый раз.С expect, чтобы отправить команду, нужно как-то распознать, что оболочка завершила инициализацию (выполнение файлов профиля и rc).Но так как многие люди настраивают приглашение оболочки и их профили / rc-файлы печатают дополнительную информацию, довольно часто expect слишком быстро распознавал приглашение оболочки.

Кстати, в зависимости от количества пользователей, можно попробоватьнастройка, при которой пользователи вручную запускают сервер под своей учетной записью.Сервер будет иметь доступ только к той информации, которая доступна только пользователю.

1 голос
/ 09 июня 2010

Вы можете взглянуть на исходный код команды login или попробовать использовать функции семейства exec () для вызова при входе в систему.

РЕДАКТИРОВАТЬ: похоже, вам в любом случае потребуется доступ с правами root.

1 голос
/ 09 июня 2010

Является ли setuid тем, что вы ищете?

1 голос
/ 09 июня 2010

Вы можете использовать системную функцию для выполнения команд оболочки в операционной системе.

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