Правильный способ выполнить корневую задачу/программу в фоне

Представление ядра

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

  1. Единственная группа, которая является группой процесса по умолчанию, которой будут принадлежать файлы, созданные этим процессом.
  2. Набор групп, которые проверяются, когда группа требует разрешения открыть файл.
  3. Набор групп, которые может догнать процесс, работающий с дополнительным процессом полномочий.

По историческим причинам эти наборы соответственно:

  1. эффективный идентификатор группы (egid);
  2. эффективный идентификатор группы плюс дополнительные идентификаторы группы;
  3. все вышеупомянутое плюс реальный идентификатор группы и сохраненный идентификатор группы набора.

Обычно, программа имеет идентификатор отдельного пользователя. Если исполняемый файл имеет setuid набор битов режима, то программа имеет два идентификаторов пользователей: его эффективный идентификатор пользователя является тем, который имеет значение для полномочий файла, пределов в расчете на пользователя, определяя, работает ли процесс как корень и так далее. Процесс может переключиться между эффективным и идентификаторами реального пользователя, если ему не нужны его дополнительные полномочия все время, или если он должен переключиться между двумя некорневыми пользователями.

Тот же механизм существует для группы. Для групп существует дополнительная функция, которая не существовала, когда система была разработана: процесс может быть членом любого количества групп; это дополнительные идентификаторы группы.

Пользовательское представление базы данных

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

В ранних версиях Unix процесс мог только быть в единственной группе. Эта группа является идентификатором основной группы пользователя, сохраненным в пользовательской базе данных (обычно /etc/passwd). Эта группа становится реальным и эффективным идентификатором группы оболочки или другой программой, запущенной процессом входа в систему.

В наше время процесс может быть в нескольких группах, таким образом, пользователи могут быть в нескольких группах, также. База данных группы (обычно /etc/group) содержит список пользователей для каждой группы. Эти группы становятся дополнительными идентификаторами группы для программы, запущенной процессом входа в систему.

2
18.12.2014, 21:48
1 ответ

Нет. Это не зависит от этого. Если вы называете простую задачу из RC.Local, вы не должны получать это поведение.

Если вы хотите запустить задачу в качестве корня на заднем плане: это то, что называется демонами. Существует больше методов для этого, 3 наиболее вероятных:

  1. Если демон делает что-то периодически, вы можете развить его как Crontab скрипт. Это очень ясно, хотя не очень эффективно.
  2. Вы также можете создать услугу для этого, что означает: 1. Вам пришлось разработать свой скрипт начала / остановки в / etc / inittab , и 2. Вам пришлось настроить сервис с вашим Systemd (который, вероятно, ваша главная система Service Service Starter / Restarter). Если у вас была проблема, ваши следующие вопросы приветствуются.
  3. Самые крепкие решения приходят путем объединения предыдущего 2. Хотя он также сочетает в себе отблессы. Вы реализуете системную службу, запускают его как системный сервис, а также разрабатывает сценарий тестирования, который только тесты, если он работает правильно. Если нет, то убивает и перезапускается.

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

2
27.01.2020, 22:13

Теги

Похожие вопросы