Я пытаюсь развернуть сервер Redmine через Марионетку. Процесс установки использует Пакет для установки его зависимостей. Будучи установленным в интерактивном режиме, sudo
пользователь подсказок для пароля, когда Пакет должен установить некоторые библиотеки в масштабе всей системы. При установке Redmine, поскольку не рекомендуется корень.
Я использую Ubuntu 14.04 64 бита. puppet
выполняется из LXC непривилегированный контейнер.
Я раньше имел walkaround, который включил касание соответствующего /var/lib/sudo
файлы, предшествующие установка Пакета. Это - hacky и прекратило работать после недавнего обновления sudo.
Там какой-либо другой путь состоит в том, чтобы сделать это? Или возможно sudo действительно позволяет предоставлять льготный период нев интерактивном режиме, и я просто пропустил его?
Мой sudoers
файл уже содержит Defaults !tty_tickets
запись. Я предпочел бы не иметь его, но без этой строки я думаю, что существует еще меньше надежды на решение.
Вот мой forcesudo
ресурс:
define forcesudo ($user = $name, $notify = $notify) {
file { "/etc/sudoers.d/fix-${user}": content => "${user} ALL = (root) NOPASSWD: ALL\n" }
file { "/etc/sudoers.d/tty_tickets": content => "Defaults !tty_tickets\n" }
file { "/var/lib/sudo/${user}":
ensure => directory,
owner => 'root',
mode => 700,
group => $user
}
file { "/var/lib/sudo/${user}/0":
content => '',
owner => 'root',
mode => 0600,
group => $user
}
touch { "/var/lib/sudo/${user}":
notify => $notify,
require => File["/var/lib/sudo/${user}"]
}
touch { "/var/lib/sudo/${user}/0":
notify => $notify,
require => File["/var/lib/sudo/${user}"]
}
}
И вот touch
ресурс:
define touch ($user = "root", $group = "root", $notify = $notify) {
exec { "touch ${name}":
command => "/usr/bin/touch ${name}",
user => $user,
group => $group,
notify => $notify,
refreshonly => true,
}
}
Править:
Проблема может обойденным путем выполнения Пакета как корня, хотя этому препятствует Пакет: Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine.
Это - то, как это сделано https://github.com/johanek/johanek-redmine марионеточный модуль.
Так как это - обходное решение, а не зафиксируйте, вопрос стоит.
Обновление :
Вы пробовали использовать марионеточный модуль для этого? Есть по крайней мере один , который утверждает, что может установить redmine. Возможно, будет проще просто изменить его в соответствии с вашими потребностями.
На самом деле вы не сказали нам, как запускать установку Redmine через марионетку.
Попробуйте добавить это в свой файл sudoers.d:
Defaults:username !requiretty
Там должно быть Пользователю, запускающему установку Redmine, не нужно иметь tty. Также не должно быть запроса на ввод пароля.
Если sudo по-прежнему запрашивает пароль, значит, что-то не так в том, как программа установки redmine вызывает sudo.
Что касается вашей безопасности:
Лучшей практикой было бы использовать пакет (RPM, DEB и т. д.) в любом случае, даже если вам придется создать его самостоятельно.
Достаточно настроить марионетку для удаления временно предоставленных привилегий sudo после завершения установки.