如何通过Puppet触发特定用户的sudo宽限期?

我正尝试通过Puppet部署Redmine服务器。 安装过程使用Bundle来安装它的依赖关系 。 交互式安装时,当Bundle需要安装一些系统级的库时, sudo提示用户input密码。 不build议将Redmine作为root用户安装。

我使用Ubuntu 14.04 64位。 puppet从LXC非特权容器内运行。

我曾经有过一个解决scheme,包括在Bundle安装之前触摸适当的/var/lib/sudo文件。 这是hacky,最近sudo升级后停止工作。

有没有其他办法可以做到这一点? 或者,也许sudo确实允许非交互式授予宽限期,我只是错过了?

我的sudoers文件已经包含了Defaults !tty_tickets条目。 我宁愿不要这样做,但是没有这条路线,我认为解决scheme的希望就更小了。


这是我的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, } } 

编辑:

这个问题可以通过以root身份运行Bundle来绕开,虽然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.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. 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傀儡模块就是这样做的。

由于这是一个解决方法,而不是解决,问题的立场。

更新

你有没有尝试过使用木偶模块来完成这个? 至less有一个声称能够安装redmine。 只是改变它以适应您的需求可能会更容易。


你实际上没有告诉我们如何通过木偶启动redmine安装。

尝试添加到您的sudoers.d文件:

 Defaults:username !requiretty 

用户启动redmine安装应该没有必要有一个tty。 也不应该有密码提示。

如果sudo仍然提示input密码,那么redmine安装程序如何调用sudo是有问题的。

至于你的安全问题:

最好的做法是使用一个包(RPM,DEB等),无论如何,即使你必须自己创build它。

设置puppet在安装完成后删除临时授予的sudo权限应该足够了。