Является ли хорошей практикой запуск демона под учетной записью пользователя без полномочий root?

13

Я разработал приложение, которое использует NTP для изменения времени в сети, для синхронизации двух моих компьютеров. Он работает как root, поскольку только последний может изменять время и дату в Linux (я думаю).

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

  • Является ли хорошей практикой запуск демона под учетной записью пользователя без полномочий root?
  • Должен ли я дать моему приложению такую возможность , как CAP_SYS_TIME?
  • Разве это не представляет уязвимость безопасности?
  • Есть ли способ лучше?
Anonymous12223
источник
Обычно предполагается, что демон NTP запускается от имени ntpучетной записи пользователя (по крайней мере, в системах Linux), поэтому вам не нужно вносить это изменение. Какой пакет NTP вы установили?
6
Запуск демона под учетной записью без полномочий root называется «сброс корневых привилегий» и является общеизвестной хорошей практикой, поскольку он ограничивает потенциальный ущерб от уязвимостей безопасности в демоне.
1
Смотрите Википедию для " Разделение привилегий ".
Кусалананда
Я скомпилировал NTP из источников. У меня нет группы NTP
Anonymous12223
@xhaltar Вы можете создать группу NTP и пользователя. Чтобы настроить запуск службы (пользователь, группа и т. Д.), Вы можете либо создать / отредактировать скрипт инициализации службы, либо создать / настроить системный модуль.
Pl4nk

Ответы:

15

Является ли хорошей практикой запуск демона под учетной записью пользователя без полномочий root?

Да, и это распространено. Например, Apache запускается как root, а затем разветвляет новый процесс как www-data (по умолчанию).
Как было сказано ранее, если ваша программа взломана (например, внедрение кода), злоумышленник не получит root-доступ, но будет ограничен привилегиями, которые вы дали этому конкретному пользователю.

Должен ли я дать "Возможность", такую ​​как "CAP_SYS_TIME"?

Это хорошая идея, так как вы избегаете использования setuid и ограничиваете права доступа к этой специфической возможности.

Должен ли я использовать другой способ сделать это, который будет считаться "Хорошей практикой"?

Вы можете повысить безопасность, например:

  • Запустите службу как непривилегированный пользователь без оболочки.
  • Используйте chroot, чтобы заблокировать пользователя в его домашнем каталоге.
Pl4nk
источник
Примечание: Chroot не обеспечивает безопасность, если вы являетесь пользователем root и работаете в Linux. Пользователь root может создать каталог в chroot, открыть корневой каталог chroot, chroot в новый каталог, chdir вернуться обратно к реальному корню и затем выполнить chroot к реальному корню. BSD исправляет это, не разрешая помещать директории fd в chroot.
Кевин
@Kevin Если вы root, вы также можете отслеживать процессы вне chroot, и есть много других способов обойти это. Простой корень не может удержать корень.
Жиль "ТАК - перестань быть злым"
// emp.jar.st фактически создает пользователя для себя из соображений безопасности. Очень хорошая практика.
Натан Басанезе
Подождите, если я ПОЛЬЗОВАТЕЛЬ, могу ли я заблокировать ПОЛЬЗОВАТЕЛЯ в определенный каталог? Например, "/ opt" (например)?
Anonymous12223
@xhaltar Чтобы заблокировать процесс, запущенный USERв каталог, вы используете chroot(запустите его от имени пользователя root). Однако вы должны создать и инициализировать тюрьму (каталог) раньше. Короче говоря, вы должны поместить библиотеки и двоичные файлы, которые нужны вашему процессу, в эту тюрьму, а затем вызвать chroot <path/to/jail> <command>. Хороший учебник с некоторыми примерами, которые вам нужны, доступен здесь
Pl4nk
13
  • Должен ли я использовать другой способ сделать это, который будет считаться "Хорошей практикой"?

Если у вас нет веских, неопровержимых причин, вам следует просто использовать пакет NTP, который входит в ваш дистрибутив GNU / Linux. Стандартному демону NTP потребовались годы, и он обладает такими сложными функциями, как замедление или ускорение часов вашей системы для синхронизации с сетью или часами GPS. Он предназначен для синхронизации часов, поэтому, скорее всего, это лучший инструмент для этой цели.

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


источник
5

Если у вас есть программа, которая должна иметь возможность выполнять функцию X (например, манипулировать часами), и вы можете дать ей привилегию / право выполнять функцию X и ничего больше, это лучше, чем дать ей всю банку алфавита суп. Это известно как принцип наименьших привилегий . Подумайте, что если в вашей программе есть ошибка - обычная программная ошибка или уязвимость в уязвимости, которую можно использовать. Если он работает как «root», он может удалить все файлы или отправить их злоумышленнику. Если единственное, что может сделать программа, это манипулировать часами (и непривилегированными функциями, такими как манипулирование файлами в заблокированном каталоге), то это может случиться хуже всего, если программа станет мошеннической.

G-Man говорит: «Восстанови Монику»
источник