diff --git a/Issue tracker for IT department.md b/Issue tracker for IT department.md index b80a0ee..cbaafd7 100644 --- a/Issue tracker for IT department.md +++ b/Issue tracker for IT department.md @@ -1 +1,328 @@ -** RT SecureScout** **(rt-4.4.1 ** **Ubuntu 16.04.1 LTS GNU/Linux 4.4.0-51-generic x86\_64)** readme ( ): [https://docs.bestpractical.com/rt/4.4.1/README.html](https://docs.bestpractical.com/rt/4.4.1/README.html) 1) ( , , firewall) UFW: **sudo ufw disable** 2) ( root mysql): **sudo apt-get install mysql-server mysql-client libmysqlclient-dev** 3) SQL / **etc/mysql/mysql.conf.d/mysqld.cnf** Fine Tuning (50-80% ): **innodb\_buffer\_pool\_size = 2048M** 4) mysql : **sudo mysql\_secure\_installation** **sudo service mysql restart** 5) -: **sudo apt-get install make apache2 libapache2-mod-fcgid libssl-dev libyaml-perl libgd2-xpm-dev libgd-gd2-perl libgraphviz-perl** 6) apache: **sudo adduser --system --group rt** **sudo usermod -aG rt www-data** ------------------------------------------------------------ 7) ( Satellite, , relay _smtp.yandex.ru_): **sudo apt-get install postfix mailutils** 8) postfix **/etc/postfix/main.cf** ( s_mtp\_tls\_session\_cache\_database_ ): **smtp\_sasl\_auth\_enable = yes** **smtp\_sasl\_password\_maps = hash:/etc/postfix/sasl\_passwd** **smtp\_sasl\_security\_options = noanonymous** **smtp\_sasl\_type = cyrus** **smtp\_sasl\_mechanism\_filter = login** **smtp\_sender\_dependent\_authentication = yes** **sender\_dependent\_relayhost\_maps = hash:/etc/postfix/sender\_relay** **smtp\_generic\_maps = hash:/etc/postfix/generic** **smtp\_tls\_CAfile = /etc/postfix/cacert.pem** **smtp\_use\_tls = yes** 9) **/etc/postfix/sasl\_passwd** ( postfix ) : **smtp.yandex.ru alert@example.com:password** postfix: **sudo chmod 400 /etc/postfix/sasl\_passwd** **sudo postmap /etc/postfix/sasl\_passwd** 10) **/etc/postfix/generic** alert : **@\_\_ ** [**alert@example.com**](mailto:alert@example.com) postfix: **sudo postmap /etc/postfix/generic** 11) **/etc/postfix/sender\_relay** example.com relay smtp.yandex.ru : **@example.com smtp.yandex.ru** postfix: **sudo postmap /etc/postfix/sender\_relay** 12) ( ) _/etc/postfix/cacert.pem_ : **sudo cat /etc/ssl/certs/thawte\_Primary\_Root\_CA.pem | sudo tee -a /etc/postfix/cacert.pem** **sudo service postfix restart** 13) : **echo "Hello World" | mail -s "Test Message" myemail@gmail.com -aFrom:alert@example.com** 14) [myemail@gmail.com](mailto:myemail@gmail.com) - : **tail /var/log/mail.log** --------------------------------------------------------- 15) rt ( ): **sudo apt-get install perl make** 16) ( ): **cd ~** **wget** [https://download.bestpractical.com/pub/rt/release/rt-4.4.1.tar.gz](https://download.bestpractical.com/pub/rt/release/rt-4.4.1.tar.gz) 17) : **sudo tar xzvf** **rt-4.4.1.tar.gz** **-C /tmp** **cd /tmp/rt-4.4.1** 18) _./configure_ ( _./configure --help_) **sudo ./configure --with-web-user=www-data --with-web-group=www-data --enable-graphviz --enable-gd**** --enable-externalauth** 19) CPAN: **sudo cpan** **yes** **o conf prerequisites**** \_ ****policy follow** ** ** **o conf build**** \_ ****requires**** \_ ****install**** \_ ****policy** **o conf commit** **q** 20) - P.S. , - . _ , , perl, JSON:XL. yes_. _ XStash - , yes._ _ , no._ P.P.S , testdeps . **sudo make testdeps** **sudo make fixdeps** 21) : ( mysql root 2) **sudo make install** **sudo make initialize-database** 22) **/etc/apache2/sites-available/000-default.conf** ( , RT) ( , Apache): **ServerName rt.example.com** ** AddDefaultCharset UTF-8** ** DocumentRoot /opt/rt4/share/html** ** Alias /NoAuth/images/ /opt/rt4/share/html/NoAuth/images/** ** ScriptAlias / /opt/rt4/sbin/rt-server.fcgi/** ** <Location />** ** ## Apache version < 2.4 (e.g. Debian 7.2)** ** #Order allow,deny** ** #Allow from all** ** ## Apache 2.4** ** Require all granted** ** </Location>** 23) - rt ( ). : _root_, : _password_. **sudo service apache2 restart** ----------- 24) **/opt/rt4/etc/RT\_SiteConfig.pm** (, , ..), apahe: **Set( @LexiconLanguages, qw(en ru));** **Set( $rtname, 'rt.example.com');** **Set( $WebDomain, '****rt.example.com****');** **Set( $Organisation, 'rt.example.com');** **Set( @ReferrerWhitelist, qw(rt.example.com:80 12.34.56.78:80));** **Set( $Timezone , 'Europe/Moscow');** **Set( $LogoLinkURL, '** [**http://**](http://rt.example.com/) [**rt.example.com**](http://rt.example.com/) [**/**](http://rt.example.com/)**');** 25) -: Root - - - ( ). RT ( ). ( ). ( - : - ). 27) rt ( rt , connect@mydomain.local) **/opt/rt4/etc/RT\_SiteConfig.pm** _P.S. , _ _$LDAPBase ._ _P.P.S :_ [_https://metacpan.org/pod/RT::Authen::ExternalAuth_](https://metacpan.org/pod/RT::Authen::ExternalAuth) **Set($LDAPHost,'domaincontroller.mydomain.local');** **Set($LDAPUser,'mydomain\connect');** **Set($LDAPPassword,'password');** **Set($LDAPBase,'dc=****mydomain****,dc=local');** **Set($LDAPFilter, ' (&(objectCategory=person))');** **Set($LDAPMapping, {Name => 'sAMAccountName',** ** RealName => 'cn',** ** EmailAddress => 'mail'** **});** **Set($LDAPCreatePrivileged, 1);** **Set($LDAPUpdateUsers, 1);** **Set($AutoCreateNonExternalUsers, 1);** 28) ( ) : **sudo** **/opt/rt4/sbin/rt-ldapimport** **--debug > ldapimport.debug 2>&1** **cat ldapimport.debug** 29) ( cron ). " - - " rt ( connect ). **sudo **** /opt/rt4/sbin/rt-ldapimport **** --import** 30) **/opt/rt4/etc/RT\_SiteConfig.pm** . apache RT . **Set($ExternalAuthPriority, ['My\_AD'] );** **Set($ExternalInfoPriority, ['My\_AD'] );** **Set( $UserAutocreateDefaultsOnLogin, { Privileged => 1 , Lang => 'ru'} );** **Set($ExternalSettings, {** ** 'My\_AD' => {** ** 'type' => 'ldap',** ** 'server' => 'domaincontroller.**** mydomain ****.local',** ** 'user' => '**** mydomain ****\connect',** ** 'pass' => 'password',** ** 'base' => 'dc=**** mydomain ****,dc=local',** ** 'filter' => '(objectCategory=person)',** ** 'attr\_match\_list' => ['Name'],** ** 'attr\_map' => {** ** 'Name' => 'sAMAccountName',** ** 'EmailAddress' => 'mail',** ** 'RealName' => 'cn',** ** **** },** ** },** **} );** ---------- 31) - ( ), , **/etc/apache2/sites-available/000-default.conf** **<Location />** ** Require valid-user** ** AuthType Basic** ** AuthName " "** ** AuthBasicProvider ldap** ** AuthLDAPURL "ldap://domaincontroller.**** mydomain****.local/dc=mydomain,dc=local?sAMAccountName?sub?(objectClass=\*)"** ** AuthLDAPBindDN "cn=connect,dc=mydomain,dc=local"** ** AuthLDAPBindPassword "password"** **</Location** _>_ 32) ldap Apache : **sudo a2enmod authnz\_ldap** **sudo service apache2 restart** 33) RT ( **/opt/rt4/etc/RT\_SiteConfig.pm** ) Apache ( apache): **Set($WebRemoteUserAuth, 1);** \ No newline at end of file +**Первичная настройка трекера заявок RT от SecureScout** + +**(rt-4.4.1 на** **Ubuntu 16.04.1 LTS GNU/Linux 4.4.0-51-generic x86\_64)** + +Вообще вот официальный readme для текущей версии (текущая по опыту стабильная и колдовать уже вроде бы не нужно): [https://docs.bestpractical.com/rt/4.4.1/README.html](https://docs.bestpractical.com/rt/4.4.1/README.html) + +1) Для первичной настройки (да и вообще на будущее, так как обычно трекер находится в локалке, и доступ извне защищает отдельный firewall) выключаю UFW: + +**sudo ufw disable** + +2) Ставлю всю что необходимо для работы с БД (при установке нужно будет задать пароль пользователю root внутри mysql): + +**sudo apt-get install mysql-server mysql-client libmysqlclient-dev** + +3) Оптимизирую размер буфера под работу SQL а именно в файле / **etc/mysql/mysql.conf.d/mysqld.cnf** добавляю в раздел Fine Tuning строку (50-80% ОЗУ): + +**innodb\_buffer\_pool\_size = 2048M** + +4) Запускаю мастер настройки безопасности mysql и перезапускаю демон: + +**sudo mysql\_secure\_installation** + +**sudo service mysql restart** + +5) Ставлю все что необходимо для работы веб-сервера: + +**sudo apt-get install make apache2 libapache2-mod-fcgid libssl-dev libyaml-perl libgd2-xpm-dev libgd-gd2-perl libgraphviz-perl** + +6) Создаю пользователя для трекера заявок и добавляю его в группу пользователей apache: + +**sudo adduser --system --group rt** + +**sudo usermod -aG rt www-data** + +------------------------------------------------------------ + +7) Для отправки с сервера почтовых сообщений ставлю нужные пакеты (при установке укаываю режим работы Satellite, имя системы могу не менять, в качестве relay в моем случае выступает _smtp.yandex.ru_): + +**sudo apt-get install postfix mailutils** + +8) В основной конфигурационный файл postfix **/etc/postfix/main.cf** добавляю (для красоты после s_mtp\_tls\_session\_cache\_database_ ): + +**smtp\_sasl\_auth\_enable = yes** + +**smtp\_sasl\_password\_maps = hash:/etc/postfix/sasl\_passwd** + +**smtp\_sasl\_security\_options = noanonymous** + +**smtp\_sasl\_type = cyrus** + +**smtp\_sasl\_mechanism\_filter = login** + +**smtp\_sender\_dependent\_authentication = yes** + +**sender\_dependent\_relayhost\_maps = hash:/etc/postfix/sender\_relay** + +**smtp\_generic\_maps = hash:/etc/postfix/generic** + +**smtp\_tls\_CAfile = /etc/postfix/cacert.pem** + +**smtp\_use\_tls = yes** + +9) Создаю файл **/etc/postfix/sasl\_passwd** и указываю логин и пароль для аутентификации на внешнем почтовом сервере (на том который указали при установке postfix в качестве релея) в формате: + +**smtp.yandex.ru alert@example.com:password** + +Затем меняю режим доступа к файлу и заугружаю информацию в postfix: + +**sudo chmod 400 /etc/postfix/sasl\_passwd** + +**sudo postmap /etc/postfix/sasl\_passwd** + +10) Создаю файл **/etc/postfix/generic** в котором указываю что для отправки писем с этого сервера используется ящик alert в формате: + +**@полное\_имя\_сервера ** [**alert@example.com**](mailto:alert@example.com) + +После этого загружаю информацию в postfix: **sudo postmap /etc/postfix/generic** + +11) Создаю файл **/etc/postfix/sender\_relay** в котором говорю что для домена example.com будет использоваться relay smtp.yandex.ru в формате: + +**@example.com smtp.yandex.ru** + +И загружаю конфиг в postfix: **sudo postmap /etc/postfix/sender\_relay** + +12) Копирую доступный (в разных версиях ОС тут бывают разные сертификаты) корневой сертификат в файл _/etc/postfix/cacert.pem_и перезапускаю демон: + +**sudo cat /etc/ssl/certs/thawte\_Primary\_Root\_CA.pem | sudo tee -a /etc/postfix/cacert.pem** + +**sudo service postfix restart** + +13) Создаю тестовое сообщение и отправляю его: + +**echo "Hello World" | mail -s "Test Message" myemail@gmail.com -aFrom:alert@example.com** + +14) Проверяю доставку письма к себе на [myemail@gmail.com](mailto:myemail@gmail.com) и если что-то пошло не так изучаю лог: + +**tail /var/log/mail.log** + +--------------------------------------------------------- + +15) Устанавливаю все необходимое для установки rt (устанавливать буду из скаченнного пакета): + +**sudo apt-get install perl make** + +16) Скачиваю установочный файл (выбрать версию можно вбив в браузер ссылку и стерев имя пакета): + +**cd ~** + +**wget** [https://download.bestpractical.com/pub/rt/release/rt-4.4.1.tar.gz](https://download.bestpractical.com/pub/rt/release/rt-4.4.1.tar.gz) + +17) Распакую пакет во временную директорию и перейду в нее: + +**sudo tar xzvf** **rt-4.4.1.tar.gz** **-C /tmp** + +**cd /tmp/rt-4.4.1** + +18) Для подготовки пакета к установке нужно запустить скрипт _./configure_ указав ему необходимые параметры (можно их посмотреть командой _./configure --help_) + +**sudo ./configure --with-web-user=www-data --with-web-group=www-data --enable-graphviz --enable-gd**** --enable-externalauth** + +19) Теперь нужно настроить для работы CPAN: + +**sudo cpan** + +**yes** + +**o conf prerequisites**** \_ ****policy follow** ** ** + +**o conf build**** \_ ****requires**** \_ ****install**** \_ ****policy** + +**o conf commit** + +**q** + +20) Для проверки готовности системы к установке запускаю тестирование и так как точно не хватает многих модулей - запускаю автоматическую подготовку системы + +P.S. Второй шаг может длиться до получаса, при этом может уйти в цикл на какой-нибудь поломанной зависимости и придется гуглить в чем там дело. + +_У меня, к примеру, спросил готов ли я работать с моей версией perl, ведь в ней не поддерживается JSON:XL. Я выбрал yes_. + +_Также спросил строить ли ему модуль XStash - я решил что пусть строит, yes._ + +_От проведения дополнительных тестов я отказался, no._ + +P.P.S Необходимо повторять эти команды по очереди, пока testdeps нее скажет что все в порядке. + +**sudo make testdeps** + +**sudo make fixdeps** + +21) Завершающий этап установки: запуск сценарий установки и инициализация БД (нужен пароль от mysql root из шага №2) + +**sudo make install** + +**sudo make initialize-database** + +22) Для корректной работы веб интерфейса необходимо указать в файле **/etc/apache2/sites-available/000-default.conf** имя сервера (или внешнее имя сайта, которое будете привязывать к RT) и настройки сайта (в том числе откоментировать нужное, в зависимости от версии Apache): + + **ServerName rt.example.com** + +** AddDefaultCharset UTF-8** + +** DocumentRoot /opt/rt4/share/html** + +** Alias /NoAuth/images/ /opt/rt4/share/html/NoAuth/images/** + +** ScriptAlias / /opt/rt4/sbin/rt-server.fcgi/** + +** <Location />** + +** ## Apache version < 2.4 (e.g. Debian 7.2)** + +** #Order allow,deny** + +** #Allow from all** + +** ## Apache 2.4** + +** Require all granted** + +** </Location>** + +23) Необходимо перезапустить веб-сервер и проверить доступность сайта rt по выбранному вам адресу (или имени). Логин: _root_, пароль: _password_. + +**sudo service apache2 restart** + +----------- +24) Редактирую под себя файл конфигурации **/opt/rt4/etc/RT\_SiteConfig.pm** (язык, имя сайта, адрес и имя для обращения и т.д.), для применения нужно перезапустить apahe: + +**Set( @LexiconLanguages, qw(en ru));** + +**Set( $rtname, 'rt.example.com');** + +**Set( $WebDomain, '****rt.example.com****');** + +**Set( $Organisation, 'rt.example.com');** + +**Set( @ReferrerWhitelist, qw(rt.example.com:80 12.34.56.78:80));** + +**Set( $Timezone , 'Europe/Moscow');** + +**Set( $LogoLinkURL, '** [**http://**](http://rt.example.com/) [**rt.example.com**](http://rt.example.com/) [**/**](http://rt.example.com/)**');** + +25) Прочие настройки могу изменить через веб-интерфейс: + +Root - настройки - персональные данные - пароль + +Администратор – утилиты – оформление (меняем лого и можем сменить цвета). + +Администратор – общие – обзор RT (меняем внешний вид главной страницы). + +Администратор – общие – шаблоны (можно перевести на русский язык текст в шаблонах). + +Администратор – общие – скриплеты (здесь редко нужно что-то менять: это действия выполняемые при каких-то изменениях по заявке). + +27) Для настройки связки rt с доменом редактирую файл конфигурации (предварительно создаю в домене учентную запись для связки с rt с правами пользователя домена, в моем случае connect@mydomain.local) **/opt/rt4/etc/RT\_SiteConfig.pm** + +_P.S. я импортирую пользователей из всего домена, а можно указать в_ _$LDAPBase конкретное подразделение._ + +_P.P.S мануал по плагину:_ [_https://metacpan.org/pod/RT::Authen::ExternalAuth_](https://metacpan.org/pod/RT::Authen::ExternalAuth) + +**Set($LDAPHost,'domaincontroller.mydomain.local');** + +**Set($LDAPUser,'mydomain\connect');** + +**Set($LDAPPassword,'password');** + +**Set($LDAPBase,'dc=****mydomain****,dc=local');** + +**Set($LDAPFilter, ' (&(objectCategory=person))');** + +**Set($LDAPMapping, {Name => 'sAMAccountName',** + +** RealName => 'cn',** + +** EmailAddress => 'mail'** + +**});** + +**Set($LDAPCreatePrivileged, 1);** + +**Set($LDAPUpdateUsers, 1);** + +**Set($AutoCreateNonExternalUsers, 1);** + +28) Выполняю тестовый импорт пользователей (группы втягивать не хочу) и проверяю успешное выполнение команды в лог файле: + +**sudo** **/opt/rt4/sbin/rt-ldapimport** **--debug > ldapimport.debug 2>&1** + +**cat ldapimport.debug** + +29) В случае отсутствия ошибок делаю реальный импорт (разрабы рекомендуют добавить эту задачу в cron для регулярного импорта пользователей). + +После импорта в "Администратор - Пользователи - выбрать" нужно отключить учетные записи которые не будут входиь в rt (тот же connect например). + +**sudo **** /opt/rt4/sbin/rt-ldapimport **** --import** + +30) Для включения аутентификации через контроллер домена добавляю в конфигурационый файл **/opt/rt4/etc/RT\_SiteConfig.pm** настройки. Для проверки корректной работы нужно перезапустить apache и войти в RT с любой импортированной доменной учетной записью. + +**Set($ExternalAuthPriority, ['My\_AD'] );** + +**Set($ExternalInfoPriority, ['My\_AD'] );** + +**Set( $UserAutocreateDefaultsOnLogin, { Privileged => 1 , Lang => 'ru'} );** + +**Set($ExternalSettings, {** + +** 'My\_AD' => {** + +** 'type' => 'ldap',** + +** 'server' => 'domaincontroller.**** mydomain ****.local',** + +** 'user' => '**** mydomain ****\connect',** + +** 'pass' => 'password',** + +** 'base' => 'dc=**** mydomain ****,dc=local',** + +** 'filter' => '(objectCategory=person)',** + +** 'attr\_match\_list' => ['Name'],** + +** 'attr\_map' => {** + +** 'Name' => 'sAMAccountName',** + +** 'EmailAddress' => 'mail',** + +** 'RealName' => 'cn',** + +** **** },** + +** },** + +**} );** + +---------- + +31) Если необходимо настроить авторизацию при помощи веб-сервера (в дополнение к предыдущим), то нужно отредактировать настройки сайта трекера, в моем случае это сайт по умолчанию **/etc/apache2/sites-available/000-default.conf** + +**<Location />** + +** Require valid-user** + +** AuthType Basic** + +** AuthName "Трекер заявок"** + +** AuthBasicProvider ldap** + +** AuthLDAPURL "ldap://domaincontroller.**** mydomain****.local/dc=mydomain,dc=local?sAMAccountName?sub?(objectClass=\*)"** + +** AuthLDAPBindDN "cn=connect,dc=mydomain,dc=local"** + +** AuthLDAPBindPassword "password"** + +**</Location** _>_ + +32) Для работы аутентификации в ldap через Apache нужно включить соответсвующий модуль: + +**sudo a2enmod authnz\_ldap** + +**sudo service apache2 restart** + +33) В настройках RT (файл **/opt/rt4/etc/RT\_SiteConfig.pm** ) следует разрешить аутентификацию сервером Apache (и перезапустить демон apache): + +**Set($WebRemoteUserAuth, 1);** \ No newline at end of file diff --git a/Puppet.md b/Puppet.md index 3d2e634..50387e7 100644 --- a/Puppet.md +++ b/Puppet.md @@ -1 +1,224 @@ -**Настройка PUPPET** Официальная документация: [https://docs.puppet.com/puppet/4.8/](https://docs.puppet.com/puppet/4.8/) 1) Настройка службы времени: sudo apt-get -y install ntp По желанию можно добавить свои серверы в /etc/ntp.conf и перезапустить службу sudo service ntp restart 2) Установка репозитория и самого пакета puppetserver: cd ~ && wget [https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb](https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb) sudo dpkg -i puppetlabs-release-pc1-trusty.deb sudo apt-get update sudo apt-get install –y puppetserver 3) Для определения количества ОЗУ доступного серверу puppet редактируется файл /etc/default/puppetserver а именно параметры JAVA\_ARGS 4) Для указания агенту puppet на том же сервере адреса сервера редактируется файл /etc/puppetlabs/puppet/puppet.conf, а именно в него добавлется секция: [main] certname = devops server = devops 5) Запускаю службы сервера и агента puppet: sudo /opt/puppetlabs/bin/puppet resource service puppetserver ensure=running enable=true sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true 6) Проверяю корректную работу агента: sudo /opt/puppetlabs/bin/puppet agent --test ------ Официальное руководство: [**https://docs.puppet.com/puppet/latest/install\_linux.html**](https://docs.puppet.com/puppet/latest/install_linux.html) 7) Устанавливаю информацию о репозитории puppet и сам puppet-agent на Ubuntu (в моем случае 16, Xenial): wget [https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb](https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb) sudo dpkg -i puppetlabs-release-pc1-wheezy.deb sudo apt-get update sudo apt-get install puppet-agent 8) Делаю то же самое на Centos или RedHat (у меня Centos 5.11): wget [https://yum.puppetlabs.com/puppetlabs-release-pc1-el-5.noarch.rpm](https://yum.puppetlabs.com/puppetlabs-release-pc1-el-5.noarch.rpm)rpm -Uvh puppetlabs-release-pc1-el-5.noarch.rpm yum install puppet-agent 9) На обоих системах прописываю в /etc/hosts инфонмацию о сервере (в моем случае 10.0.1.6 devops) и настаиваю службу точного времени аналогично шагу №1 10) Редактирую файл конфигурации puppet на агентах: /etc/puppetlabs/puppet/puppet.conf , добавляя туда сведения о сервере: [agent] server = devops 11) Запускаю и ставлю в автозапуск puppet на агентах командой: sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true 12) На сервере подписываю все сертификаты: sudo /opt/puppetlabs/bin/puppet cert sign –all 13) На клиентах проверяю связь с сервером: sudo /opt/puppetlabs/bin/puppet agent –test -------- 14) Создаю тестовую среду ( [https://docs.puppet.com/puppet/4.8/environments\_creating.html](https://docs.puppet.com/puppet/4.8/environments_creating.html) ): cd /etc/puppetlabs/code/environments sudo cp -R production test sudo mv test/environment.conf test/test.conf 15) Создаю манифест для тестовой среды ( [https://docs.puppet.com/puppet/latest/types/package.html](https://docs.puppet.com/puppet/latest/types/package.html) ): sudo vim /etc/puppetlabs/code/environments/test/manifests/test.pp Со сценарием установки пакета "tree": package { 'tree': ensure => installed, } 16) На узлах прописываю тестовую среду по умолчанию в файле **/etc/puppetlabs/puppet/puppet.conf** ( [https://docs.puppet.com/puppet/latest/configuration.html](https://docs.puppet.com/puppet/latest/configuration.html) ): environment = test И запускаю принудительную связь с сервером puppet: sudo /opt/puppetlabs/bin/puppet agent --test --------- 17) Устаналиваю пакет whois и создаю хэш пароля "12345": sudo apt-get install whois mkpasswd 12345 18) Переименовываю основной манифест ( [https://docs.puppet.com/puppet/latest/dirs\_manifest.html](https://docs.puppet.com/puppet/latest/dirs_manifest.html)) и добавляю в него код создания нового пользователя (отдельно для каждого из двух узлов): cd /etc/puppetlabs/code/environments/test/manifests sudo mv test.pp site.pp sudo vim sitee.pp Добавляю следующие строки ( [https://docs.puppet.com/puppet/latest/types/user.html](https://docs.puppet.com/puppet/latest/types/user.html)): _node 'ubsrv' {_ _ user { 'engin':_ _ _ _name => 'engineer',_ _ home => '/home/engineer',_ _ managehome => true,_ _ shell => '/bin/bash',_ _ ensure => present,_ _ password => 'OMbJkRx6Ocyok',_ _ groups => sudo,_ _ }_ _}_ _ _ _node 'cnt3.vbox' {_ _ user { 'engin':_ _ name => 'engineer',_ _ home => '/home/engineer',_ _ managehome => true,_ _ shell => '/bin/bash',_ _ ensure => present,_ _ password => 'OMbJkRx6Ocyok',_ _ groups => wheel,_ _ }_ _}_ -------- 19) Создаю конфиг файлового сервера (файл **/etc/puppetlabs/puppet/fileserver.conf** по мануалу [https://docs.puppet.com/puppet/latest/config\_file\_fileserver.html](https://docs.puppet.com/puppet/latest/config_file_fileserver.html)) с текстом: _[files]_ _ path /etc/puppetlabs/code/files_ _ allow \*_ 20) Создаю новый каталог mkdir -p /etc/puppetlabs/code/files/test 21) В нем создаю файл **.bashrc** со следующим содержимым: _# managed by puppet_ _echo "$(tput setaf 2)====== Привет ! ======"$(tput sgr 0)_ _echo "Точное время: $(date)"_ _echo "Место на дисках:"_ _df -h | sed -n '/^\/dev/p'_ _echo "Имя хоста: $(tput setaf 3)$(hostname -f)$(tput sgr 0)"_ 22) Дописываю в главный манифест **/etc/puppetlabs/code/environments/test/manifests/site.pp** текст ( [https://docs.puppet.com/puppet/latest/types/file.html](https://docs.puppet.com/puppet/latest/types/file.html)): _file { 'bashrc':_ _ ensure => file,_ _ path => '/home/engineer/.bashrc',_ _ source => 'puppet:///files/test/.bashrc',_ _ owner => 'engineer',_ _ group => 'engineer',_ _ mode => '0644',_ _}_ -------- \ No newline at end of file +**Настройка PUPPET** + +Официальная документация: [https://docs.puppet.com/puppet/4.8/](https://docs.puppet.com/puppet/4.8/) + +1) Настройка службы времени: + +sudo apt-get -y install ntp + +По желанию можно добавить свои серверы в /etc/ntp.conf и перезапустить службу + +sudo service ntp restart + +2) Установка репозитория и самого пакета puppetserver: + +cd ~ && wget [https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb](https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb) + +sudo dpkg -i puppetlabs-release-pc1-trusty.deb + +sudo apt-get update + +sudo apt-get install –y puppetserver + +3) Для определения количества ОЗУ доступного серверу puppet редактируется файл /etc/default/puppetserver а именно параметры JAVA\_ARGS + +4) Для указания агенту puppet на том же сервере адреса сервера редактируется файл /etc/puppetlabs/puppet/puppet.conf, а именно в него добавлется секция: + +[main] + +certname = devops + +server = devops + +5) Запускаю службы сервера и агента puppet: + +sudo /opt/puppetlabs/bin/puppet resource service puppetserver ensure=running enable=true + +sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true + +6) Проверяю корректную работу агента: + +sudo /opt/puppetlabs/bin/puppet agent --test + +------ + +Официальное руководство: [**https://docs.puppet.com/puppet/latest/install\_linux.html**](https://docs.puppet.com/puppet/latest/install_linux.html) + +7) Устанавливаю информацию о репозитории puppet и сам puppet-agent на Ubuntu (в моем случае 16, Xenial): + +wget [https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb](https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb) + +sudo dpkg -i puppetlabs-release-pc1-wheezy.deb + +sudo apt-get update + +sudo apt-get install puppet-agent + +8) Делаю то же самое на Centos или RedHat (у меня Centos 5.11): + +wget [https://yum.puppetlabs.com/puppetlabs-release-pc1-el-5.noarch.rpm](https://yum.puppetlabs.com/puppetlabs-release-pc1-el-5.noarch.rpm)rpm -Uvh puppetlabs-release-pc1-el-5.noarch.rpm + +yum install puppet-agent + +9) На обоих системах прописываю в /etc/hosts инфонмацию о сервере (в моем случае 10.0.1.6 devops) и настаиваю службу точного времени аналогично шагу №1 + +10) Редактирую файл конфигурации puppet на агентах: /etc/puppetlabs/puppet/puppet.conf , добавляя туда сведения о сервере: + +[agent] + +server = devops + +11) Запускаю и ставлю в автозапуск puppet на агентах командой: + +sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true + +12) На сервере подписываю все сертификаты: + +sudo /opt/puppetlabs/bin/puppet cert sign –all + +13) На клиентах проверяю связь с сервером: + +sudo /opt/puppetlabs/bin/puppet agent –test + +-------- + +14) Создаю тестовую среду ( [https://docs.puppet.com/puppet/4.8/environments\_creating.html](https://docs.puppet.com/puppet/4.8/environments_creating.html) ): + +cd /etc/puppetlabs/code/environments + +sudo cp -R production test + +sudo mv test/environment.conf test/test.conf + +15) Создаю манифест для тестовой среды ( [https://docs.puppet.com/puppet/latest/types/package.html](https://docs.puppet.com/puppet/latest/types/package.html) ): + +sudo vim /etc/puppetlabs/code/environments/test/manifests/test.pp + +Со сценарием установки пакета "tree": + +package { 'tree': + + ensure => installed, + +} + +16) На узлах прописываю тестовую среду по умолчанию в файле **/etc/puppetlabs/puppet/puppet.conf** ( [https://docs.puppet.com/puppet/latest/configuration.html](https://docs.puppet.com/puppet/latest/configuration.html) ): + +environment = test + +И запускаю принудительную связь с сервером puppet: +sudo /opt/puppetlabs/bin/puppet agent --test + +--------- + +17) Устаналиваю пакет whois и создаю хэш пароля "12345": + +sudo apt-get install whois + +mkpasswd + +12345 + +18) Переименовываю основной манифест ( [https://docs.puppet.com/puppet/latest/dirs\_manifest.html](https://docs.puppet.com/puppet/latest/dirs_manifest.html)) и добавляю в него код создания нового пользователя (отдельно для каждого из двух узлов): + +cd /etc/puppetlabs/code/environments/test/manifests + +sudo mv test.pp site.pp + +sudo vim sitee.pp + +Добавляю следующие строки ( [https://docs.puppet.com/puppet/latest/types/user.html](https://docs.puppet.com/puppet/latest/types/user.html)): + +_node 'ubsrv' {_ + +_ user { 'engin':_ + +_ _ _name => 'engineer',_ + +_ home => '/home/engineer',_ + +_ managehome => true,_ + +_ shell => '/bin/bash',_ + +_ ensure => present,_ + +_ password => 'OMbJkRx6Ocyok',_ + +_ groups => sudo,_ + +_ }_ + +_}_ + +_ _ + +_node 'cnt3.vbox' {_ + +_ user { 'engin':_ + +_ name => 'engineer',_ + +_ home => '/home/engineer',_ + +_ managehome => true,_ + +_ shell => '/bin/bash',_ + +_ ensure => present,_ + +_ password => 'OMbJkRx6Ocyok',_ + +_ groups => wheel,_ + +_ }_ + +_}_ + +-------- + +19) Создаю конфиг файлового сервера (файл **/etc/puppetlabs/puppet/fileserver.conf** по мануалу [https://docs.puppet.com/puppet/latest/config\_file\_fileserver.html](https://docs.puppet.com/puppet/latest/config_file_fileserver.html)) с текстом: + +_[files]_ + +_ path /etc/puppetlabs/code/files_ + +_ allow \*_ + +20) Создаю новый каталог + +mkdir -p /etc/puppetlabs/code/files/test + +21) В нем создаю файл **.bashrc** со следующим содержимым: + +_# managed by puppet_ + +_echo "$(tput setaf 2)====== Привет ! ======"$(tput sgr 0)_ + +_echo "Точное время: $(date)"_ + +_echo "Место на дисках:"_ + +_df -h | sed -n '/^\/dev/p'_ + +_echo "Имя хоста: $(tput setaf 3)$(hostname -f)$(tput sgr 0)"_ + +22) Дописываю в главный манифест **/etc/puppetlabs/code/environments/test/manifests/site.pp** текст ( [https://docs.puppet.com/puppet/latest/types/file.html](https://docs.puppet.com/puppet/latest/types/file.html)): + +_file { 'bashrc':_ + +_ ensure => file,_ + +_ path => '/home/engineer/.bashrc',_ + +_ source => 'puppet:///files/test/.bashrc',_ + +_ owner => 'engineer',_ + +_ group => 'engineer',_ + +_ mode => '0644',_ + +_}_ + +-------- \ No newline at end of file diff --git a/Simple daemon on Linux.md b/Simple daemon on Linux.md index 7e2de49..0d1c063 100644 --- a/Simple daemon on Linux.md +++ b/Simple daemon on Linux.md @@ -1 +1,113 @@ -** Linux** 1) **/opt/checker.sh** : _#!/bin/bash_ _while true_ _ do_ _LIMIT=0.02_ _LAST="$(uptime | tail -c 5)"_ _if (( $(echo "$LAST >= $LIMIT" | bc -l) )) ; then_ _ echo "ALERT at $(date)" >> /var/log/checker_ _fi_ _sleep 10_ _done_ 2) : **chmod u+x /opt/checker.sh** **/opt/checker.sh** **touch /var/log/checker** **tail /var/log/checker** 3) /etc/init.d/checker : _#!/bin/bash_ _# chkconfig: 2345 20 80_ _# description: checking load_ _# Source function library._ _. /etc/init.d/functions_ _ _ _case "$1" in_ _start)_ _ echo "$(date) service checker started" >> /var/log/checker_ _ /opt/checker.sh &_ _ echo $!>/var/run/checker.pid_ _ ;;_ _stop)_ _ echo "$(date) service checker stopped" >> /var/log/checker_ _ kill `cat /var/run/checker.pid`_ _ rm /var/run/checker.pid_ _ ;;_ _restart)_ _ $0 stop_ _ $0 start_ _ ;;_ _status)_ _ if [-e /var/run/checker.pid]; then_ _ echo checker is running, pid=`cat /var/run/checker.pid`_ _ else_ _ echo checker is NOT running_ _ exit 1_ _ fi_ _ ;;_ _\*)_ _ echo "Usage: $0 {start|stop|status|restart}"_ _esac_ _ _ _exit 0_ 4) : **sudo chmod u+x /etc/init.d/checker** **chkconfig checker on** **service checker start** **service checker status** \ No newline at end of file +**Пишем своего демона для Linux** + +1) Создаем по пути **/opt/checker.sh** скрипт с содержимым: + +_#!/bin/bash_ + +_while true_ + +_ do_ + +_LIMIT=0.02_ + +_LAST="$(uptime | tail -c 5)"_ + +_if (( $(echo "$LAST >= $LIMIT" | bc -l) )) ; then_ + +_ echo "ALERT at $(date)" >> /var/log/checker_ + +_fi_ + +_sleep 10_ + +_done_ + +2) Превращаем его в исполняемый файл и проверяем работу: + +**chmod u+x /opt/checker.sh** + +**/opt/checker.sh** + +**touch /var/log/checker** + +**tail /var/log/checker** + +3) Пишу в файл /etc/init.d/checker скрипт для демона: + +_#!/bin/bash_ + +_# chkconfig: 2345 20 80_ + +_# description: checking load_ + +_# Source function library._ + +_. /etc/init.d/functions_ + +_ _ + +_case "$1" in_ + +_start)_ + +_ echo "$(date) service checker started" >> /var/log/checker_ + +_ /opt/checker.sh &_ + +_ echo $!>/var/run/checker.pid_ + +_ ;;_ + +_stop)_ + +_ echo "$(date) service checker stopped" >> /var/log/checker_ + +_ kill `cat /var/run/checker.pid`_ + +_ rm /var/run/checker.pid_ + +_ ;;_ + +_restart)_ + +_ $0 stop_ + +_ $0 start_ + +_ ;;_ + +_status)_ + +_ if [-e /var/run/checker.pid]; then_ + +_ echo checker is running, pid=`cat /var/run/checker.pid`_ + +_ else_ + +_ echo checker is NOT running_ + +_ exit 1_ + +_ fi_ + +_ ;;_ + +_\*)_ + +_ echo "Usage: $0 {start|stop|status|restart}"_ + +_esac_ + +_ _ + +_exit 0_ + +4) Делаю скрипт исполняемым и добавляю в автозапуск и проверяю его работу: + +**sudo chmod u+x /etc/init.d/checker** + +**chkconfig checker on** + +**service checker start** + +**service checker status** \ No newline at end of file