Я работаю над небольшим проектом на linux (Ubuntu), где мне требуется, чтобы один из них был аутентифицирован для доступа к службе. Моя идея заключается в том, что эта аутентификация должна храниться вместе с процессом и его дочерними элементами, а не с самим пользователем linux.Linux, хранить учетные данные с процессом и его детьми, внуками?
Эта аутентификация должна выполняться путем вызова, например, «myapplogin» с именем пользователя, паролем и скриптом/приложением (любое приложение) для запуска с этими учетными данными. Я хочу, чтобы можно было сохранить эти верительные грамоты у любых детей, созданных этим процессом, и любых внуков и так далее.
Я рассмотрел несколько вариантов этой возможности.
Храните идентификатор входа или что-то в переменных среды. Это, насколько мне известно, передается детям. Однако переменные окружения могут быть записаны процессом, что позволяет ему, возможно, получить доступ, которого он не должен иметь.
При входе в систему, храните идентификатор процесса, который вошел в систему, а затем в каждой операции с этой службой, проверьте, есть ли у него сохраненный pid или где-либо в его родословной существует сохраненный pid. Это может стать слишком медленным, если эта родословная станет большой и если к ней часто обращаются. Опция затем заключается в кэшировании любого pid, который находится в родословной, но это может иметь последствия для безопасности при повторном использовании pid в ОС.
Использование групп процессов и ссылку, с логином, но также может быть изменен самим процессом, что позволяет ему, возможно, присоединиться к существующей группе без фактического входа в систему.
Есть ли способ сделать это? Предпочтительно, это должно быть что-то, хранящееся в процессе, что все новые дети наследуют, которые невозможно перезаписать и читаются снаружи из модуля ядра.
Возможно, я просто не замечаю ничего очевидного? Буду признателен за любой вклад в это =)
Спасибо, что нашли время, чтобы написать это, но это, к сожалению, не совсем то, что я после =/Тем не менее, вы поставили меня на путь к решению, я думаю, будет работать отлично =) – Wildex999
Решение, Перейдем к: setgroups. Это позволяет мне пометить процесс, установив его в дополнительную группу. Для установки группы в процесс требуется функция SETGID (или root), поэтому я могу остановить процесс изменения/добавления групп после того, как я дал ему. Эти группы наследуются детьми, но теряются при использовании sudo. Группа не принадлежит пользователю, а процесс, который я хочу. Теперь мне просто нужно найти способ получить группы процессов из модуля ядра, когда я знаю PID, но это должно быть возможно, правильно? знак равно – Wildex999