在 Puppet 中,我如何保护密码变量(在本例中为 MySQL 密码)?

Bel*_*dez 13 mysql linux puppet best-practices

我正在使用 Puppet 为 MySQL 提供参数化类:

class mysql::server( $password ) {

        package { 'mysql-server': ensure => installed }
        package { 'mysql': ensure => installed }

        service { 'mysqld':
                enable => true,
                ensure => running,
                require => Package['mysql-server'],
        }

        exec { 'set-mysql-password':
                unless => "mysqladmin -uroot -p$password status",
                path => ['/bin', '/usr/bin'],
                command => "mysqladmin -uroot password $password",
                require => Service['mysqld'],
        }
}
Run Code Online (Sandbox Code Playgroud)

我该如何保护$password?目前,我从节点定义文件中删除了默认的puppet全局可读权限,并通过 ACL明确授予了读取权限。

我假设其他人也遇到过类似的情况,所以也许有更好的做法。

rob*_*byt 3

当使用 Puppet 和 MySQL 时,我倾向于将 root 密码放在 /root/.my.cnf 中,锁定该文件,然后限制对数据库服务器的 SSH 访问。

是的,以明文形式将 root 密码存储在数据库服务器上并不是最安全的解决方案。但是,如果您在此文件中写入 mysql root 密码,则保护 mysql root 帐户以仅允许从本地主机登录将使密码远离 puppet,并且也远离进程列表ps

此外,如果某人具有 root 访问权限来读取 /root/.my.cnf 处的文件,那么他们可能还具有停止本地 MySQL 守护程序并重新启动守护程序的权限,而无需用户表来立即获得对数据库的 root 访问权限。

  • 如果在 mysql 5.6 及更高版本上,请使用 mysql_config_editor。那么至少密码不会是明文的。 (2认同)