Czy Puppet (lub podobny) jest odpowiednią technologią do radzenia sobie z podstawowymi, ale krytycznymi zmianami masy?
Tak, można go używać w ten sposób. Używam tego do obsługi systemów klientów zewnętrznych.
Nie chcę, aby jakikolwiek serwer mógł zobaczyć konfigurację, której nie powinien
Jeśli używasz marionetką, to nie musi umożliwiać autosign wtedy. Autosign pozwala hostom na automatyczne żądanie certyfikatu. Twoja konfiguracja i uprawnienia będą prawie na pewno związane bezpośrednio z CN w certyfikacie. Nie chcesz, aby przypadkowy komputer pojawiał się w Internecie i mógł twierdzić, że w rzeczywistości jest to system z wszystkimi tajnymi funkcjami wysokiego bezpieczeństwa.
Jeśli jesteś naprawdę paranoikiem, możesz dostosować ustawienia serwera plików marionetek, aby utworzyć udziały, do których dostęp mają tylko niektóre systemy. Dostęp do serwera plików oparty jest na certyfikatach.
Nie chcę, aby Puppet wprowadzał zmiany, których nie powinien, ani nie cofał żadnych ręcznych zmian wprowadzonych na serwerze.
Istnieje kilka różnych podejść do zezwalania na lokalne zmiany.
Jedną z metod, której często używam, jest poniżej. Zasadniczo, jeśli przekażesz listę do source, a następnie marionetka wypróbuje każdy element na liście. Więc dodaję pierwszy element na liście, aby wskazywał na plik lokalny.
file { '/etc/ssh/sshd_config':
ensure => present,
source => ["/etc/ssh/sshd_config_local",
"puppet:///modules/ssh/$ssh_config_file"],
...
}
Inną opcją byłoby użycie dowiązań symbolicznych. Jeśli ktoś chce użyć wersji marionetkowej, symbolizuje dowiązanie do marionetkowej wersji pliku. Jeśli chcą zachować konfigurację lokalnie, nie tworzą dowiązania symbolicznego.
file { '/etc/ssh/sshd_config_puppet':
ensure => present,
source => "puppet:///modules/ssh/$ssh_config_file",
...
}
Inną możliwością jest użycie augeas do wprowadzenia zmian na poziomie linii zamiast zmiany całych plików. Bądź bardzo konserwatywny w kwestii tego, co zmienisz.