Како да инсталирате и користите CFEngine Community Edition на Ubuntu 20.04


Авторот ја избра програмата Пишувај за донации.

Вовед

Уреди за Интернет на нештата (IoT).

Во ова упатство, ќе го инсталирате CFEngine Community Edition 3.21 на Ubuntu 20.04, ќе пишувате примероци од датотеки со политики и ќе ги автоматизирате извршувањето на вашите политики.

Предуслови

За да го завршите ова упатство, ќе ви требаат:

  • Еден Ubuntu 20.04 сервер со корисник sudo кој не е корен. За да го поставите ова, следете го нашиот водич Почетно поставување сервер со Ubuntu 20.04.
  • Начин на извршување на команди на школка (вклучувајќи sudo), како што е ssh.
  • Уредувач на текст. Ова упатство користи nano.

Чекор 1 - Инсталирање CFEngine

Во овој чекор, ќе инсталирате CFEngine користејќи apt и складиштата за пакети. Главната предност на користењето на apt за инсталација е тоа што можете да го користите apt за да го ажурирате CFEngine подоцна.

Постојат и други начини да се инсталира CFEngine за различни случаи на употреба:

  • cf-далечински е флексибилен избор што се справува со инсталирање на повеќе машини, различни верзии на CFEngine и ноќни изданија.
  • Скриптата на школка за брза инсталација е добар избор за една машина. Може да инсталирате со копирање на една команда во терминалот.
  • Можете и да ги преземете пакетите директно од веб-локацијата.

Ако користите една од овие алтернативи за да инсталирате CFEngine Community или Enterprise, прескокнете на чекор 3 - Креирање на вашата прва политика по подигнувањето.

Додавање на јавниот клуч на CFEngine

За да инсталирате CFEngine користејќи apt, потребен ви е apt за да можете да пристапите до складиштето. Првиот чекор е да го додадете јавниот GPG клуч CFEngine во збирката клучеви apt за да може apt да им верува на пакетите од складиштето.

Преземете го клучот со оваа команда:

  1. wget https://cfengine.com/pub/gpg.key -O ~/cfengine-gpg.key

Потоа користете apt-key за да го додадете:

  1. sudo apt-key add ~/cfengine-gpg.key

Додавање складишта за пакети на CFEngine

Следно, треба да го додадете складиштето CFEngine како извор на apt со следнава команда:

  1. sudo sh -c "echo 'deb https://cfengine-package-repos.s3.amazonaws.com/pub/apt/packages stable main' > /etc/apt/sources.list.d/cfengine-community.list"

Оваа команда го додава складиштето CFEngine во датотека во директориумот со листа на извори apt.

Без аргументот sh и опцијата -c, оваа наредба ќе добие грешка Небиена дозвола бидејќи пренасочувањето на излезот не се врши од судо. За да го решите овој проблем, користите sh за да извршите школка со sudo и да ја дадете командата со користење на опцијата -c.

Сега, извршете ја командата update така што apt може да ги види новите пакети од складиштето CFEngine:

  1. sudo apt update

Инсталирање на пакетот со apt

Со пакетот CFEngine сега регистриран со apt, можете да го користите apt за да инсталирате CFEngine:

  1. sudo apt install cfengine-community

Ако добиете предупредување дека пакетот е изграден на различен (постар) оперативен систем, можете да го игнорирате. Пакетот сè уште работи.

Потврдување на инсталацијата

Кога ќе заврши инсталацијата, ќе ги видите компонентите што го сочинуваат CFEngine во /var/cfengine/bin. Од сите овие, агентот (cf-agent) е оној со кој најчесто ќе комуницирате. Овој бинарен ја проценува политиката што ја пишувате, прави промени во системот и снима информации за тоа што направил. Стандардно, агентот ќе се буди на секои пет минути, ќе преземе нова политика доколку е потребно и ќе ја спроведе.

Користете ја следнава команда за да проверите дали агентот е успешно инсталиран:

  1. sudo cf-agent --version

Бројот на верзијата ќе се отпечати на екранот:

Output
CFEngine Core 3.21.0

Забелешка: Во моментот на пишување, тековната верзија е 3.21.0. Бројот на вашата верзија може да се разликува.

Ако командата cf-agent не работи, проверете дали /var/cfengine/bin/ е во вашата променлива PATH и дека cf-agent постои во тој директориум.

Чекор 2 - Вклучување на CFEngine

За да го стартувате CFEngine, треба да го подигнете агентот. Користете ја следнава команда за да го направите тоа:

  1. sudo cf-agent --bootstrap 127.0.0.1

Оваа команда му кажува на агентот да ги стартува компонентите на CFEngine и да ја преземе политиката од оваа машина, 127.0.0.1.

Во иднина, ќе сакате повеќе машини да преземаат политика од истиот сервер. Во тој случај, 127.0.0.1 ќе се замени со IP адресата на тој сервер. Меѓутоа, за да започнете и да научите за CFEngine, ќе користите една машина и 127.0.0.1 во ова упатство.

Сега имате инсталирано CFEngine и работи на вашиот сервер. Следниот чекор е да започнете да пишувате политика.

Чекор 3 - Креирање на вашата прва политика

За да ја автоматизирате задачата за администрирање на системот користејќи CFEngine, креирате датотека со политика, која е напишана во референтната документација за CFEngine на сопствената CFEngine.

Датотеките со политики се разликуваат од скриптите по тоа што се декларативни: ја опишувате посакуваната состојба за системот, а CFEngine ќе провери дали тоа е веќе така и ќе направи промени само доколку е потребно. Некои примери на работи што можеби сакате да ги изразите во политиката се:

  • Осигурете се дека корисникот sammy постои.
  • Чувајте го ажуриран (и инсталиран) пакетот curl.
  • Осигурете се дека telnet не е инсталиран.
  • Рендерирајте датотека со скрипта од шаблон и некои податоци.
  • Запрете процес, како што е httpd, ако работи.
  • Спроведување строги дозволи во папката /usr/bin.

Во сите овие случаи, ќе напишете политика и ќе ја ставите на правилното место на вашиот сервер (/var/cfengine/masterfiles). Тогаш CFEngine ќе:

  • Автоматизирајте ја дистрибуцијата на датотеката со правилата со тоа што ќе ја префрлите на другите ваши хостови со подигање.
  • Редовно спроведувајте ги вашите барања (стандардно извршувајте ја политиката на секои пет минути). На пример, ако некој го избриша корисникот sammy или ги смени дозволите на /usr/bin, овие промени ќе бидат вратени автоматски во рок од пет минути.
  • Направете промени, како што е запишување во датотека, само ако е потребно (односно, ако состојбата веќе не е како што сакате).
  • Справете се со многу разлики во платформата за вас (на пример, командите што се користат за инсталирање пакети, креирање корисници и други операции се разликуваат во зависност од оперативниот систем).

Во овој чекор, ќе креирате политика „Hello World“ за да го изнесете текстот „Здраво!“ до терминалот.

Користете го nano или вашиот омилен уредувач на текст за да креирате нова датотека, ~/hello_world.cf:

  1. nano ~/hello_world.cf

Во датотеката, додадете го следново:

bundle agent main
{
  reports:
    "Hello!";
}

Политиката за CFEngine е декларативна и не се оценува од горе до долу.

Во јазикот на политиките на CFEngine, секоја изјава што ја давате за она што го управувате се нарекува пакети. Пакетите се корисни затоа што ви дозволуваат да изберете кои делови од полисата ќе се извршуваат (а кои не) и по кој редослед ќе се извршуваат.

Во ова правило, секвенцата на пакети ги одредува пакетите за оценување. Стандардно, го вклучува пакетот главен, така што не треба да го менувате.

Зачувајте ја и затворете ја датотеката. Користејќи nano, притиснете CTRL+X за да излезете, Y за да зачувате и ENTER за да го потврдите името на датотеката и да го затворите фајлот.

Бидејќи CFEngine вообичаено работи како root корисник, тој се обидува да спречи неовластени промени во системот со тоа што бара строги дозволи за датотеките со политики. (Да им се дозволи на другите корисници да ја уредуваат политиката на CFEngine ќе им овозможи да прават промени во системот како привилегиран корисник). Можете да користите chmod за да ги уредувате дозволите на датотеката и на тој начин да спречите други корисници да ја уредуваат оваа датотека:

  1. chmod 600 hello_world.cf

За да ја извршите политиката, користете ја следнава команда:

  1. sudo cf-agent ~/hello_world.cf

Агентот CFEngine го наоѓа вашиот пакет (поради името main), ги разгледува ветувањата во него и ги оценува. Кога ги оценува ветувањата, агентот проверува дали треба да направи промени во системот. Во овој случај, имаше само едно ветување, а агентот утврди дека треба да испечати порака до терминалот за да го задоволи.

Ќе го добиете следниот излез:

Output
R: Hello!

Стандардно, CFEngine следи што е направено и ги прескокнува ветувањата оценети неодамна (во последната минута). Ако се обидете повторно да ја извршите политиката, таа нема да печати ништо. Можете да го оневозможите ова заклучување со опцијата за командната линија --no-lock:

  1. sudo cf-agent --no-lock hello_world.cf

Ја создадовте и ја водевте вашата прва политика. Иако е корисно да може да се емитува на конзолата, оваа политика всушност не го менува системот. Тоа ќе го направите во следниот чекор.

Чекор 4 - Пишување политика за управување со содржината на текстуална датотека

Во претходниот чекор, креиравте политика за печатење порака до терминалот. Сепак, пореален случај на употреба е да се осигурате дека датотека со одредена содржина постои на сите хостови во вашата инфраструктура. Во овој чекор, ќе напишете политика што создава текстуална датотека (/tmp/my_file.txt) со содржината Здраво, CFEngine!.

Отворете нова датотека со политики, ~/file_management.cf:

  1. nano ~/file_management.cf

Додадете ја следнава содржина:

bundle agent manage_my_file
{
  files:
    "/tmp/my_file.txt"
      content => "Hello, CFEngine!$(const.n)";
}

Името на пакетот е manage_my_file наместо main. Како што пишувате повеќе политики, на секој пакет треба да му дадете уникатно и описно име. Може да има само еден главен пакет.

Бидејќи оваа политика управува со датотеки, типот на ветување е датотеки. Атрибутот содржина се користи за ветувања датотеки, наведувајќи каква треба да биде содржината на таа датотека. Последниот дел од низата, $ (const.n), ја проширува специјалната променлива const.n, што резултира со нова линија на крајот од датотеката .

Зачувајте ја и затворете ја датотеката.

Како и досега, поставете ги строгите дозволи на датотеката со политики:

  1. chmod 600 file_management.cf

Сега стартувајте ја датотеката со некои дополнителни опции за командната линија:

  1. sudo cf-agent --no-lock --info ~/file_management.cf --bundle manage_my_file

Одредувањето на пакетот со --bundle manager_my_file е неопходно бидејќи повеќе не постои пакет главен.

Опцијата --info прави CFEngine да печати информативни пораки за промените што ги прави во системот.

Излезот од оваа команда ќе содржи информации за овие промени:

Output
info: Using command line specified bundlesequence info: Created file '/tmp/my_file.txt', mode 0600 info: Updated file '/tmp/my_file.txt' with content 'Hello, CFEngine!

Овој излез покажува дека CFEngine создал текстуална датотека наречена my_file.txt во директориумот /tmp со содржина Здраво, CFEngine!.

Ако повторно ја извршите истата команда, пораките за создавање и ажурирање на датотеката повеќе нема да се прикажуваат. CFEngine препознава дека содржината на датотеката е веќе точна и не прави никакви промени.

Забелешка: --no-lock и --info најчесто се користат заедно при пишување и тестирање на датотеки со политики. За да зачувате малку пишување, достапни се кратенки; -KI е еквивалентно на --no-lock --info.

Сега кога имате политика на работен систем, можеби ќе сакате да ја извршите без ваш надзор. Тоа ќе го направите во следниот чекор.

Чекор 5 - Автоматизирање на извршувањето на политиката

Веројатно не сакате постојано да ја извршувате политиката рачно од командната линија. CFEngine вклучува функции за автоматизација за да се справи со тоа.

Во овој чекор, ќе го автоматизирате извршувањето на политиките со ставање на вашите датотеки со политики на очекуваната локација и ажурирање на датотека JSON. Датотеката JSON периодично и кажува на компонентата CFEngine што да прави во заднина без да морате експлицитно и рачно да извршувате команди од командната линија.

Користете ја следнава команда за да ја копирате датотеката со политика што ја создадовте во претходниот чекор на препорачаната локација:

  1. sudo cp file_management.cf /var/cfengine/masterfiles/services/

Целата политика на CFEngine е во /var/cfengine/masterfiles/. Ова ја вклучува политиката што не сте ја напишале, а доаѓа со CFEngine. За да ја задржите вашата приспособена политика одвоена од стандардната политика, се препорачува да ги ставите датотеките со вашите политики во поддиректориумот services/.

Кога агентите на CFEngine преземаат нови датотеки со политики, тие ги копираат од овој директориум на центарот. Дури и ако користите само една машина, агентот сè уште работи на ист начин: ќе бара датотеки во /var/cfengine/masterfiles и ќе ги копира во /var/cfengine/inputs . За новите корисници, најдобро е да ги користите овие патеки. Приспособувањето на патеките или ставањето датотеки со политики на други локации бара повеќе работа бидејќи треба да се осигурате дека дозволите, како и копирањето и пронаоѓањето на датотеките работат правилно.

Следно, креирајте Augments JSON-датотека за да одредите каде е датотеката со политики и кој пакет треба да се изврши:

  1. sudo nano /var/cfengine/masterfiles/def.json

Додадете ја следнава содржина во таа датотека:

{
  "inputs": [ "services/file_management.cf" ],
  "vars": {
    "control_common_bundlesequence_end": [ "manage_my_file" ]
  }
}

Потребни се два чекори за да се направи вашата политика да работи редовно (на секои пет минути): проверете дали агентот ја наоѓа и чита датотеката и погрижете се агентот да го извршува вашиот пакет.

Копчето внеси во def.json му кажува на агентот кои датотеки со политики да ги чита. Во овој случај, агентот ќе ја прочита политиката што ја креиравте во последниот чекор, file_management.cf.

Копчето vars може да се користи за дефинирање на променливи. Променливата control_common_bundlesequence_end се користи во стандардната политика, така што сите имиња на пакети што ќе ги ставите таму ќе се додадат на крајот од Bundlesequence и ќе се проценат по сите стандардни пакети. Заедно, овие две информации значат дека cf-agent знае кои датотеки со политики да ги чита и кои пакети во нив да ги оценува без да мора да ги специфицира овие работи од командната линија.

Во овој момент, вие ја уредувате политиката во /var/cfengine/masterfiles/, а за останатото се грижи автоматизацијата. Поконкретно, cf-agent периодично се буди и ги презема новите датотеки со политики што сте ги напишале. Агентот ќе ја прочита и оцени политиката, спроведувајќи ги сите ветувања и правејќи промени на машините по потреба (како што е уредување датотеки и создавање корисници).

Врз основа на политиката што сте ја напишале во ова упатство, секогаш кога агентот ќе работи, тој ќе гарантира дека /tmp/my_file.txt постои со содржината што сте ја навеле во датотеката со политиката.

Зачувајте ја и затворете ја датотеката.

За да потврдите дека автоматизацијата работи, избришете ја текстуалната датотека создадена кога првпат сте ја извршиле политиката за управување со датотеки:

  1. sudo rm /tmp/my_file.txt

По пет минути, можете да потврдите дали CFEngine повторно создал my_file.txt во позадина:

  1. cat /tmp/my_file.txt
Output
Hello, CFEngine.

Алтернативно, можете исто така да го принудите создавањето на датотеката да се случи порано:

  1. sudo rm /tmp/my_file.txt ; sudo cf-agent -Kf update.cf ; sudo cf-agent -KI

Командата rm ја брише датотеката така што CFEngine ќе види дека се неопходни промени.

Првата команда cf-agent ја ажурира датотеката со политики, копирајќи ја од /var/cfengine/masterfiles во /var/cfengine/inputs.

Последната команда cf-agent ја спроведува вашата политика, што ја тера да ја бара датотеката /tmp/my_file.txt и да ја креира и уредува доколку е потребно.

Во овој случај, го извршувате агентот веднаш по бришењето на датотеката, така што cf-agent треба да отпечати дека ја создал датотеката. (Шансите за извршување на агентот да се случи во позадина помеѓу овие команди се мали до никакви.)

Забелешка: Командата sudo cf-agent -Kf update.cf ; sudo cf-agent -KI е слична на командата CFEngine стандардно работи на секои пет минути. Значи, извршувањето на оваа команда треба да го има истиот резултат како да чекате пет минути ако CFEngine работи правилно. Првата работа со агенти ја ажурира политиката, а втората ја оценува политиката и прави промени во системот.

Во овој чекор, ја автоматизиравте вашата прва задача за управување со системот со CFEngine. Додека овој пример се фокусираше на креирање и уредување датотека, процесот за друга задача би бил идентичен: напишете ја политиката, ставете ја во правилниот директориум и соодветно ажурирајте ја датотеката def.json.

Заклучок

Сега го инсталиравте и стартувавте CFEngine на еден сервер. Го напишавте вашето прво правило и го поставивте да работи автоматски.

Како следен чекор, проверете ја официјалната документација на CFEngine, како што е ова упатство за управување со датотеки: Креирај, Измени и Избриши датотеки.

Ако имате какви било прашања или ви треба помош, слободно објавете во делот за прашања и одговори од дискусиите за GitHub на CFEngine.