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

Я пытаюсь развернуть сервер 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 марионеточный модуль.

Так как это - обходное решение, а не зафиксируйте, вопрос стоит.

2
задан 9 March 2015 в 13:57
1 ответ

Обновление :

Вы пробовали использовать марионеточный модуль для этого? Есть по крайней мере один , который утверждает, что может установить redmine. Возможно, будет проще просто изменить его в соответствии с вашими потребностями.


На самом деле вы не сказали нам, как запускать установку Redmine через марионетку.

Попробуйте добавить это в свой файл sudoers.d:

Defaults:username !requiretty

Там должно быть Пользователю, запускающему установку Redmine, не нужно иметь tty. Также не должно быть запроса на ввод пароля.

Если sudo по-прежнему запрашивает пароль, значит, что-то не так в том, как программа установки redmine вызывает sudo.

Что касается вашей безопасности:

Лучшей практикой было бы использовать пакет (RPM, DEB и т. д.) в любом случае, даже если вам придется создать его самостоятельно.

Достаточно настроить марионетку для удаления временно предоставленных привилегий sudo после завершения установки.

2
ответ дан 3 December 2019 в 11:38

Теги

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