Назад | Перейти на главную страницу

Как активировать льготный период sudo для данного пользователя через Puppet?

Я пытаюсь развернуть 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 после завершения установки.