Я пытаюсь развернуть Redmine сервер через Puppet. Порядок установки использует Bundle для установки своих зависимостей. При интерактивной установке sudo
запрашивает у пользователя пароль, когда Bundle необходимо установить некоторые общесистемные библиотеки. Не рекомендуется устанавливать Redmine с правами root.
Я использую Ubuntu 14.04 64 бит. В puppet
запускается из непривилегированного контейнера LXC.
Раньше у меня был обходной путь, который включал прикосновение к соответствующему /var/lib/sudo
файлы перед установкой пакета. Это взломано и перестало работать после недавнего обновления 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,
}
}
Редактировать:
Проблему можно обойти, запустив Bundle от имени пользователя root, хотя Bundle этого не одобряет: 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 после завершения установки.