С изменением пользователя - PullRequest
0 голосов
/ 07 января 2011

Хорошо, так что мой вопрос прост, но я немного новичок в Си, и я надеялся, что кто-нибудь сможет мне помочь. Я хочу изменить на другого пользователя в C. Например, я знаю пароль пользователя, и если пользователь вводит: ./change user1 Это изменится на user1. Я знаю, что сейчас это может быть проблемой безопасности, но сейчас я не беспокоюсь о безопасности.

Ответы [ 3 ]

2 голосов
/ 07 января 2011

Вы захотите использовать setuid, который можно найти в unistd.h, чтобы он был доступен в системах POSIX (поэтому все ошибки linux / unix должны быть в порядке)

со страницы руководства

Если процесс имеет соответствующие привилегии, setuid () устанавливает реальный идентификатор пользователя, действующий идентификатор пользователя и сохраненный set-user-ID вызывающего процесса в uid.

Если у процесса нет соответствующих привилегий, но uid равен реальному идентификатор пользователя или сохраненный set-user-ID setuid () должен установить эффективный идентификатор пользователя в uid; реальный идентификатор пользователя и сохраненный установленный идентификатор пользователя должны остаться без изменений.

Функция setuid () никоим образом не должна влиять на список дополнительных групп.

Вот пример

1 голос
/ 08 января 2011

Вызовите двоичный файл su (например, через system() или комбинацию fork() и одну из функций exec), который знает обо всех тонкостях изменения учетных данных, как в общем случае в Unix, так и в вашемконкретная ОС.Терминал является общим и продолжает принадлежать исходному пользователю.

Некоторые из этих сложностей, которые не обрабатываются простым вызовом setuid(), представляют собой группы, отключение учетной записи и ограничения ресурсов.

Если этопросто для прикола setuid() с предшествующими setgid() и initgroups() вам, вероятно, будет достаточно.

0 голосов
/ 07 января 2011

Вы должны узнать UID, используя getpwuid () .После слов вы должны установить UID в вашей программе с помощью setuid () , за которым следует приложение / функция, которую вы собираетесь запускать с этими новыми правами, например, оболочка.Чтобы запустить приложение с текущим UID, используйте system () .

...