Система управления конфигурацией Puppet развёртывание на linux test

Автор: | 20.04.2026

Puppet — кроссплатформенное клиент-серверное приложение, которое позволяет централизованно управлять конфигурацией операционных систем и программ, установленных на нескольких компьютера

https://redos.red-soft.ru/base/redos-8_0/8_0-administation/8_0-remote-admin/8_0-puppet/

https://wiki.astralinux.ru/pages/viewpage.action?pageId=353635618

hostipOS
server.5house.loc192.168.122.202Astra Linux 1.8 (Debian)
astra1.5house.loc192.168.122.152Astra Linux 1.7 (Debian)
redos8.5house.loc192.168.122.59RedOS (Centos)
тестовые хосты

Настройка репозиториев Astra Linux

/etc/apt/sources.list , раскомментируйте строчку подключения к сетевым репозиториям

nano /etc/apt/sources.list
# deb cdrom:[OS Astra Linux 1.8.3.8  1.8_x86-64 DVD ]/ 1.8_x86-64 contrib main non-free non-free-firmware
deb https://download.astralinux.ru/astra/stable/1.8_x86-64/repository-main/ 1.8_x86-64 main contrib non-free non-free-firmware
deb https://download.astralinux.ru/astra/stable/1.8_x86-64/repository-extended/ 1.8_x86-64 main contrib non-free non-free-firmware

Обновление кэша пакетов и установка пакета сертиикатов

sudo apt update
apt install ca-certificates

Установка Сервера puppet на Astra linux 1.7/1.8

apt install openjdk-11-jre-headless puppetserver
apt install openjdk-17-jre-headless puppetserver

PuppetServer использует Java и Ruby для работы

После установки пакетов, включите и добавьте в автозапуск Puppet:

systemctl enable puppetserver
systemctl start puppetserver

Проверить, что сервис успешно стартует можно командой

root@server:~# systemctl status puppetserver
● puppetserver.service - Puppet Server
     Loaded: loaded (/lib/systemd/system/puppetserver.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-04-20 11:16:16 MSK; 1min 11s ago

Далее перейдем к установке настройки клиента на машине Astra1 (Astra Linux 1.7)

sudo apt update
sudo apt install puppet-agent

sudo nano /etc/hosts
192.168.122.202 server.5house.loc server
127.0.2.1 puppet

nano /etc/puppet/puppet.conf
[main]
server = server.5house.loc

Далее перейдем к установке клиента на машине RedOS (RedOS 8 Centos)

sudo dnf install puppet
sudo nano /etc/hosts
192.168.122.202 server.5house.loc server
127.0.2.1 puppet
nano  /etc/puppetlabs/puppet/puppet.conf 

[agent]
server = server.5house.loc
show_diff = true

Запустите Агент puppet на клиентском хосте

sudo systemctl start puppet

Попробуем выполнить тестовое подключение с клиента (astra linux,redOS), с помощью команды

whereis puppet
sudo /opt/puppetlabs/puppet/bin/puppet agent -tv
sudo /usr/bin/puppet agent -tv

Info: Creating a new RSA SSL key for astra1
Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for astra1
Info: Certificate Request fingerprint (SHA256): 6E:1E:EB:1A:4D:27:B2:C1:E1:BA:EE:3B:B0:57:1A:10:1D:19:6F:AE:B7:D3:C7:2E:E1:B2:6E:0C:24:3D:18:CC
Info: Certificate for astra1 has not been signed yet
Couldn't fetch certificate from CA server; you might still need to sign this agent's certificate (astra1).
Exiting now because the waitforcert setting is set to 0.

Теперь агент успешно связался с сервером и отправил запрос на подпись сертификата SSL.

Остался последний шаг — подписать этот запрос на стороне Puppet-сервера.

Error: Server hostname ‘server.5house.loc’ did not match server certificate; expected one of server, DNS:puppet, DNS:server

Удаление сертификатов с клиентского хость

sudo rm -rf /etc/puppetlabs/puppet/ssl

Puppet использует SSL-сертификаты для идентификации и авторизации компьютеров. Сертификаты самоподписные и выдаются встроенным в Puppet центром сертификации.

Одобрим запрос с сервера. Для начала выведем список всех заявок с помощью команды:

whereis  puppetserver
sudo /opt/puppetlabs/bin/puppetserver ca list
sudo puppetserver ca list --all
sudo ss -tlnp | grep 8140

sudo puppetserver ca list
Requested Certificates:
    astra1        (SHA256)  9E:B0:59:37:7D:AE:20:4A:00:30:8E:78:C9:A8:38:79:A1:3F:59:69:3A:5C:2F:58:68:EB:BF:85:DE:76:4E:E8
    redos8.       (SHA256)  80:FE:4B:33:54:E2:DF:8E:32:CF:38:2C:F2:F1:92:69:41:82:14:50:31:88:AD:74:08:71:43:98:21:E4:F3:60

На сервере выполним подписание запроса от клиента, с помощью команды:

sudo /opt/puppetlabs/bin/puppetserver ca sign –certname astra1.5house.loc
sudo /opt/puppetlabs/bin/puppetserver ca sign –certname redos8
sudo puppetserver ca sign --certname astra1

sudo puppetserver ca sign --certname redos8.5house.local
Successfully signed certificate request for redos8.5house.local

В Puppet добавили функцию автоматической выдаче сертификата, если в
имени компьютера присутствует какой-нибудь общий элемент.
Конечно, это имя домена *.5house.loc !
Для реализации автовыдачи сертификатов SSL нужно:
Создайте файл /etc/puppetlabs/puppet/autosign.conf со следующим
содержимым:

puppet config print autosign --section master

cd /etc/puppet/
touch autosign.conf
nano autosign.conf
*.5house.loc

chown puppet:puppet autosign.conf

Выполните перезагрузку службы Puppet на сервере.

systemctl restart puppet

После подписания сертификата, попробуем вновь выполнить
принудительное подключение с клиента.

whereis puppet
sudo /opt/puppetlabs/puppet/bin/puppet agent -tv

nfo: Using environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Caching catalog for astra1
Info: Applying configuration version '1776682695'
Notice: Applied catalog in 0.01 seconds
/usr/bin/puppet agent -tv
Info: Refreshed CRL: 00:C1:37:83:20:2B:D5:C7:9F:0C:AB:F1:F2:02:1F:80:86:43:C5:18:85:FD:63:0D:D7:2B:24:C1:71:6C:C0:DD
Info: Creating a new RSA SSL key for redos8.5house.loc
Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for redos8.5house.loc
Info: Certificate Request fingerprint (SHA256): C0:C9:4F:C3:F0:D6:15:15:C0:47:DB:AF:59:17:4E:4F:EF:55:A2:C1:E5:38:88:7F:2A:CB:76:DD:34:A7:0E:F5
Info: Downloaded certificate for redos8.5house.loc from https://server.5house.loc:8140/puppet-ca/v1
Info: Using environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for redos8.5house.loc
Info: Applying configuration version '1776682695'
Info: Creating state file /var/lib/puppet/state/state.yaml
Notice: Applied catalog in 0.02 seconds

Успешное подключение!

Создадим первое манифест правило, для нашей Puppet инфраструктуры.

Установка пакета ПО Yandex Browser
Убедимся, что данного ПО нет на клиенте

yandex-browser-stable
-bash: yandex-browser-stable: команда не найдена
apt search yandex-browser
dnf list installed yandex-browser-stable

Создадим файл install_package_YB.pp. название не важно, исключительно
важно его местоположение и расширение — *.pp.

Файл располагается по пути –
sudo mkdir -p /etc/puppetlabs/code/environments/production/manifests
или mkdir -p /etc/puppet/code/environments/production/manifests

nano  install_package_YB.pp
package { 'yandex-browser-stable':
  ensure  => installed, 
}

Проверим с клиента, выполните принудительное подключение или ожидайте
30 минут

sudo /opt/puppetlabs/puppet/bin/puppet agent -tv
sudo /usr/bin/puppet agent -tv

sudo /usr/bin/puppet agent -tv
[sudo] пароль для andrey: 
Info: Using environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for redos8.5house.loc
Info: Applying configuration version '1776685729'
Notice: /Stage[main]/Main/Package[yandex-browser-stable]/ensure: created
Notice: Applied catalog in 15.22 seconds

Удалим пакет YB руками

sudo apt remove yandex-browser-stable

Выполним обращение к серверу с клиента

sudo /opt/puppetlabs/puppet/bin/puppet agent -tv
Info: Using environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Caching catalog for astra1
Info: Applying configuration version '1776686934'
Notice: /Stage[main]/Main/Package[yandex-browser-stable]/ensure: created (corrective)
Notice: Applied catalog in 19.11 seconds

Если наоборот, пакет yandex-browser-stable нужно будет удалить, то можно сделать так:

nano /etc/puppet/code/environments/production/manifests/install_package_YB.pp
package { 'yandex-browser-stable':
  ensure  => absent, 
}

Проверка с клиента

sudo /opt/puppetlabs/puppet/bin/puppet agent -tv
sudo /usr/bin/puppet agent -tv

Info: Using environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Caching catalog for astra1
Info: Applying configuration version '1776687176'
Notice: /Stage[main]/Main/Package[yandex-browser-stable]/ensure: removed
Notice: Applied catalog in 1.50 seconds

Попробуем распространить на подчиненные устройства конфигурацию удаленного доступа SSH через файл

Создадим файл на сервере:

/etc/puppetlabs/puppet/fileserver.conf
/etc/puppet  touch fileserver.conf
mkdir /etc/puppet/code/files

создание этого файла необходимо, чтобы включить на сервере Puppet режим файлового сервера. Содержимое файла:

nano fileserver.conf
[files]
path /etc/puppet/code/files
allow *

Выполните перезагрузку puppetserver

sudo systemctl restart puppetserver

Скопируем конфигурационный файл sshd_config в директорию

cp /etc/ssh/sshd_config /etc/puppet/code/files

Также, выдайте файлу другие права доступа, в каталоге files.

sudo chown -R root:puppet /etc/puppet/code/files
sudo chmod 755 sshd_config

Выполним настройку файла sshd_config, например. Давайте сменим порт для
SSH с 22 на 222

nano  sshd_config
port 222

Создаём новый манифест файл config_ssh.pp

cd /etc/puppet/code/environments/production/manifests
touch config_ssh.pp
nano config_ssh.pp

file {'/etc/ssh/sshd_config':
 ensure => file,
 path => '/etc/ssh/sshd_config',
 source => 'puppet:///files/sshd_config',
 mode => '0755',
 owner => 'root',
 group => 'root',
}

service {'sshd':
 ensure => running,
 subscribe => File['/etc/ssh/sshd_config']
}

Самый простой и правильный способ проверить синтаксис — использовать встроенную команду puppet parser validate.

puppet parser validate /etc/puppet/code/environments/production/manifests/config_ssh.pp

Данный манифест распространяет собственный sshd_config файл в путь к клиенту и выполняет перезагрузку службы sshd только при условии, если файл был изменен.

Проверим результат на клиенте

sudo /opt/puppetlabs/puppet/bin/puppet agent -tv
sudo /usr/bin/puppet agent -tv

-#Port 22
+Port 222
Info: Computing checksum on file /etc/ssh/sshd_config
Info: /Stage[main]/Main/File[/etc/ssh/sshd_config]: Filebucketed /etc/ssh/sshd_config to puppet with sum 4e53556b2b73f61d9b828691e25cbbde
Notice: /Stage[main]/Main/File[/etc/ssh/sshd_config]/content: content changed '{md5}4e53556b2b73f61d9b828691e25cbbde' to '{md5}8f8e22bdaed88edfc4c7af1ba3a72d3d'
Info: /Stage[main]/Main/File[/etc/ssh/sshd_config]: Scheduling refresh of Service[sshd]
Notice: /Stage[main]/Main/Service[sshd]: Triggered 'refresh' from 1 event
Notice: Applied catalog in 0.25 seconds

Проверим прослушиваемые порты на клиенте

ss -natu | grep 222
tcp   LISTEN 0      128                 0.0.0.0:222           0.0.0.0:*           
tcp   LISTEN 0      128                    [::]:222              [::]:* 

#redos
sudo semanage port -l | grep ssh
sudo semanage port -a -t ssh_port_t -p tcp 222
ssh -p 222 andrey@astra1

Манифест система выполняет установку пакета virt-manager и xrdp.

cd /etc/puppet/code/environments/production/manifests/
nano install_pkg_vm_xrdp.pp


sudo /opt/puppetlabs/puppet/bin/puppet agent -tv
[sudo] пароль для andrey: 
Info: Using environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Caching catalog for astra1
Info: Applying configuration version '1776692895'
Notice: /Stage[main]/Main/Package[virt-manager]/ensure: created
Notice: Applied catalog in 38.55 seconds

Манифест Система выполняет настройку службы xrdp. Меняет порт с 3389 на 1337 и перезапускает службу после изменения конфигурации.

Диагностируем текущий файл настроек xrdp на клиенте

grep "port=" /etc/xrdp/xrdp.ini

сd /etc/puppet/code/environments/production/manifests/
nano config_xrdp.pp

# 1. Меняем порт (команда sed универсальна)
exec { 'update_xrdp_port':
  command => "/usr/bin/sed -i 's/^port=3389/port=1337/' /etc/xrdp/xrdp.ini",
  onlyif  => "/usr/bin/grep -q '^port=3389' /etc/xrdp/xrdp.ini",
  path    => ['/usr/bin', '/bin', '/usr/sbin'],
  notify  => Service['xrdp'],
}

# 2. Настройка безопасности и брандмауэра в зависимости от ОС
if $facts['os']['family'] == 'RedHat' {
  # Только для Red OS / CentOS
  exec { 'selinux_xrdp_1337':
    command => '/usr/sbin/semanage port -a -t ssh_port_t -p tcp 1337',
    unless  => '/usr/sbin/semanage port -l | grep -q 1337',
    path    => ['/usr/bin', '/usr/sbin'],
    before  => Service['xrdp'],
  }

  exec { 'firewall_xrdp_1337':
    command => '/usr/bin/firewall-cmd --permanent --add-port=1337/tcp && /usr/bin/firewall-cmd --reload',
    unless  => '/usr/bin/firewall-cmd --list-all | grep 1337',
    path    => ['/usr/bin', '/bin'],
  }
} elsif $facts['os']['family'] == 'Debian' {
  # Только для Astra Linux / Debian / Ubuntu
  exec { 'ufw_allow_xrdp_1337':
    command => '/usr/sbin/ufw allow 1337/tcp',
    unless  => '/usr/sbin/ufw status | grep -q 1337',
    path    => ['/usr/sbin', '/usr/bin', '/bin'],
  }
}

Проверим прослушиваемые порты клиент пк

ss -natu | grep 3389
sudo /opt/puppetlabs/puppet/bin/puppet agent -tv
ss -natu | grep 1337

Манифест система выполняет создание служебного локального пользователя по
имени – autouser с паролем P@ssw0rd. Пользователь должен быть
работоспособен.

Шифрование пароля через whois или openssl

sudo apt install whois
mkpasswd -m sha-512 P@ssw0rd
openssl passwd -6 P@ssw0rd » usser.pp
$6$wt5CXy5AQwxbtI0L$.0VeOzsXTnU9lhOo7R1knU2X8kKSzrDtHtV/kaSocRLcRZIVA8jBTypZGzIodnIdxM8StU4JtxJVCTaTl3Hgj0
cd /etc/puppet/code/environments/production/manifests
nano user.pp

node 'astra1' {
user {'UsersAstra':
	name => 'autouser',
        home => '/home/autouser',
        managehome => true,
        shell => '/bin/bash',
        ensure => present,
        password => '$y$j9T$fq7KAAuXh1z0UZlYCCMhk/$Ci1G.ln6EiK2bsn8wlhP0F9vLuKDe3xeNh5DTQDr/s4',
        groups => ['sudo'],
}
}

node 'redos8.5house.loc' {
user {'UsersRedOS':
	name => 'autouser',
        home => '/home/autouser',
        managehome => true,
        shell => '/bin/bash',
        ensure => present,
        forcelocal  => true,
 
	password => '$y$j9T$zzUtoEesp/BmVBhNc8pDE0$qJkEWvDe7i6TnVyJG09grFHmKhVYs4Z1bnXhJVSP41C',
	groups => ['wheel'],
}
}

Проверка изменений на клиенте

sudo /opt/puppetlabs/puppet/bin/puppet agent -tv
Notice: /Stage[main]/Main/Node[astra1]/User[UsersAstra]/ensure: created

id  autouser
uid=1002(autouser) gid=1003(autouser) группы=1003(autouser),27(sudo)
sudo grep autouser /etc/shadow

Сменить пользователя в консоли

su — autouser

Манифест не работает, для RedOS – хэш пароля не записывается в etc/shadow

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *