User Tools

Site Tools


gpo_для_linux

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
gpo_для_linux [2023/05/02 07:57]
val
gpo_для_linux [2023/06/02 16:08] (current)
val
Line 1: Line 1:
 ====== GPO для Linux из подручных материалов====== ====== GPO для Linux из подручных материалов======
 +
 +  * [[https://​habr.com/​ru/​articles/​732736/​|GPO для Linux из подручных материалов]]
  
 Всем привет! Всем привет!
  
-На занятиях часто задают вопрос, а есть ли аналог групповых политик Microsoft для Linux систем, ​на который ​долгое время просто отвечал - "​Конечно,​ ведь есть Ansible"​! Сегодня хочется подтвердить это практическим примером,​ использование которого помогает нам управлять множеством Linux систем в сети и за ее пределами. Еще одна причина появления этого решения заключается в том, что некая компания планировала внедрить на нашем предприятии ПО с красивым названием "​Система управления конфигурациями"​ (представьте,​ как звучала аббревиатура:​),​ но, что-то пошло не так, и после Нового года понадобилось (срочно,​ как обычно) все сделать самим. Поэтому было решено реализовать только тот функционал,​ который понадобился в первую очередь:​+Когда меня спрашивали, а есть ли аналог групповых политик Microsoft для Linux систем,​ долгое время просто отвечал - "​Конечно,​ ведь есть Ansible"​! Сегодня хочется подтвердить это практическим примером,​ использование которого помогает нам управлять множеством Linux систем в сети и за ее пределами. Еще одна причина появления этого решения заключается в том, что некая компания планировала внедрить на нашем предприятии ПО с красивым названием "​Система управления конфигурациями"​ (представьте,​ как звучала аббревиатура:​),​ но, что-то пошло не так, и после Нового года понадобилось (срочно,​ как обычно) все сделать самим. Поэтому было решено реализовать только тот функционал,​ который понадобился в первую очередь:​
  
 1. Простой способ инициализации (подключения к нашей системе управления) вводимых в эксплуатацию или уже существующих систем 1. Простой способ инициализации (подключения к нашей системе управления) вводимых в эксплуатацию или уже существующих систем
Line 15: Line 17:
 IMG_1.png IMG_1.png
  
-Эти требования привели к решению,​ использующему связку [[https://​docs.ansible.com/​ansible/​latest/​cli/​ansible-pull.html|ansible-pull]] (совершенно случайно узнал про него, и вот как пригодилось:​) ​и Git+Эти требования привели к решению,​ использующему связку ​Git и [[https://​docs.ansible.com/​ansible/​latest/​cli/​ansible-pull.html|ansible-pull]] (совершенно случайно узнал про него, и вот как пригодилось:​)
  
 Коротко про ansible-pull (будем считать,​ что с самим ansible аудитория уже знакома,​ иначе [[https://​habr.com/​ru/​companies/​express42/​articles/​254959/​|вот]]) - эта утилита загружает из Git репозитория (GitLab, Gitea, ...) копию проекта и выполняет из него плейбук с именем local.yml, либо с именем,​ которое совпадает с hostname системы. Остается описать в проекте все необходимые роли и "​запускать"​ их из этих плейбуков. Коротко про ansible-pull (будем считать,​ что с самим ansible аудитория уже знакома,​ иначе [[https://​habr.com/​ru/​companies/​express42/​articles/​254959/​|вот]]) - эта утилита загружает из Git репозитория (GitLab, Gitea, ...) копию проекта и выполняет из него плейбук с именем local.yml, либо с именем,​ которое совпадает с hostname системы. Остается описать в проекте все необходимые роли и "​запускать"​ их из этих плейбуков.
Line 21: Line 23:
 По поводу ролей, рассмотрим описанные в предыдущих статьях (см. ссылки):​ По поводу ролей, рассмотрим описанные в предыдущих статьях (см. ссылки):​
  
-1. [[https://​habr.com/​ru/​articles/​718632/​|Подключение]] к [[https://​habr.com/​ru/​articles/​732290/​|домену]]+1. [[https://​habr.com/​ru/​articles/​718632/​|Подключение к домену]]
  
 2. Настройка на использование [[https://​habr.com/​ru/​articles/​732290/​|корпоративного прокси]] 2. Настройка на использование [[https://​habr.com/​ru/​articles/​732290/​|корпоративного прокси]]
Line 31: Line 33:
 Итак, поехали! Итак, поехали!
  
-На рабочей станции для ​разработки и тестирования ​(у нас будет client1) создаем каталог (в дальнейшем,​ для краткости,​ команды создания и переходов в каталоги будут опущены) для нашего проекта,​ например,​ ansible-pull-gpo (делать это будем в учетной записи root, что позволит сразу тестировать результат)+На компьютере разработчика (у нас будет client1) создаем каталог (в дальнейшем,​ для краткости,​ команды создания и переходов в каталоги будут опущены) для нашего проекта,​ например,​ ansible-pull-gpo (делать это будем в учетной записи root, что позволит сразу тестировать результат)
  
 <​code>​ <​code>​
Line 91: Line 93:
 </​code>​ </​code>​
  
-Создаем роль, настраивающую использование [[https://​habr.com/​ru/​articles/​732290/​|корпоративного прокси]] (наверное, ​самую простую ​в этой статье)+Создаем роль, настраивающую использование [[https://​habr.com/​ru/​articles/​732290/​|корпоративного прокси]] (самую простую ​из трех)
  
 <​code>​ <​code>​
-client1:​~/​ansible-pull-gpo# ​cat proxy/​files/​etc/​environment+client1:​~/​ansible-pull-gpo# ​nano proxy/​files/​etc/​environment
 </​code><​code>​ </​code><​code>​
 https_proxy=http://​authproxy.corp.ru:​3128 https_proxy=http://​authproxy.corp.ru:​3128
 no_proxy=localhost,​127.0.0.1,​corp.ru no_proxy=localhost,​127.0.0.1,​corp.ru
 </​code><​code>​ </​code><​code>​
-client1:​~/​ansible-pull-gpo# ​cat proxy/​tasks/​main.yml+client1:​~/​ansible-pull-gpo# ​nano proxy/​tasks/​main.yml
 </​code><​code>​ </​code><​code>​
 - name: Copy environment - name: Copy environment
Line 110: Line 112:
  
 <​code>​ <​code>​
-client1:​~/​ansible-pull-gpo# ​cat help/​files/​usr/​share/​applications/​help.desktop+client1:​~/​ansible-pull-gpo# ​nano help/​files/​usr/​share/​applications/​help.desktop
 </​code><​code>​ </​code><​code>​
 [Desktop Entry] [Desktop Entry]
Line 121: Line 123:
 Categories=Network Categories=Network
 </​code><​code>​ </​code><​code>​
-client1:​~/​ansible-pull-gpo# ​cat help/​tasks/​main.yml+client1:​~/​ansible-pull-gpo# ​nano help/​tasks/​main.yml
 </​code><​code>​ </​code><​code>​
 - name: Install x11vnc - name: Install x11vnc
Line 147: Line 149:
 </​code>​ </​code>​
  
-После перезагрузки,​ должна появиться возможность подключаться любым доменным пользователем,​ браузер должен работать через authproxy, а в разделе "​Интернет"​ должна появиться иконка "​Помощь"​+После перезагрузки,​ должна появиться возможность подключаться любым доменным пользователем,​ браузер должен работать через authproxy, а в меню графической оболочки, ​в разделе "​Интернет"​должна появиться иконка "​Помощь"​.
  
-Для доступа к этим ролям с других рабочих станций,​ разместим все в корпоративном GitLab ​(если его еще нет, см. 3-й шаг из [[https://​habr.com/​ru/​articles/​716454/​|этой статьи]]+Для доступа к этим ролям с других рабочих станций,​ разместим все в корпоративном GitLabесли его еще нет, см. 3-й шаг из [[https://​habr.com/​ru/​articles/​716454/​|этой статьи]]. В дальнейшем,​ подразумевается имя GitLab сервера - gitlab.corp.ru и учетная запись владельца проекта - student
  
-Создаем публичный проект без readme с названием ansible-pull-gpo (см. 4-й шаг из [[https://​habr.com/​ru/​articles/​716454/​|той же статьи]]) и выполняем команды из подсказок проекта ​внутри каталога ansible-pull-gpo, предварительно установив ​на рабочую станцию для разработки и тестирования ​утилиту git:+Создаем публичный проект без readme с названием ansible-pull-gpo (см. 4-й шаг из [[https://​habr.com/​ru/​articles/​716454/​|той же статьи]]) и выполняем ​внутри каталога ansible-pull-gpo ​команды из подсказок ​нового ​проекта,​ предварительно установив утилиту git:
  
 <​code>​ <​code>​
Line 158: Line 160:
 client1:~# cd ansible-pull-gpo/​ client1:~# cd ansible-pull-gpo/​
  
-...+client1:​~/​ansible-pull-gpo#​ git config --global user.email "​student@corp.ru" 
 + 
 +client1:​~/​ansible-pull-gpo#​ git init --initial-branch=main 
 + 
 +client1:​~/​ansible-pull-gpo#​ git remote add origin http://​gitlab.corp.ru/​student/​ansible-pull-gpo.git 
 + 
 +client1:​~/​ansible-pull-gpo#​ git add . 
 + 
 +client1:​~/​ansible-pull-gpo#​ commit -m "​Initial commit"​ 
 + 
 +client1:​~/​ansible-pull-gpo#​ push -u origin main
 </​code>​ </​code>​
  
-Для сдачи в эксплуатацию следующей системы достаточно выполнить на ней команды (подразумевается имя GitLab сервера - gitlab.corp.ru ​и учетная запись владельца проекта - student):+Для сдачи в эксплуатацию следующей системы достаточно выполнить на ней команды (вот он - ansible-pull в действии ​:)
  
 <​code>​ <​code>​
Line 171: Line 183:
 </​code>​ </​code>​
  
-Инструкцию ansible-pull можно прописать в cron, что бы обновления конфигурации загружались периодически автоматически,​ но еще лучше, добавить в проект файлы, облегчающие процесс ввода в эксплуатацию новых рабочих станций.+Инструкцию ansible-pull можно прописать в cron, что бы обновления конфигурации загружались периодически,​ но еще лучше, добавить в проект файлы, облегчающие процесс ввода в эксплуатацию новых рабочих станций:
  
 Скрипт start.sh будет устанавливать необходимое ПО и прописывать ansible-pull в cron (каждые 2 часа со случайной задержкой и после перезагрузки),​ добавляя возможность указывать (например,​ тестовую) ветку проекта. Вывод команды ansible-pull будет передаваться в syslog Скрипт start.sh будет устанавливать необходимое ПО и прописывать ansible-pull в cron (каждые 2 часа со случайной задержкой и после перезагрузки),​ добавляя возможность указывать (например,​ тестовую) ветку проекта. Вывод команды ansible-pull будет передаваться в syslog
Line 207: Line 219:
 </​code>​ </​code>​
  
-После синхронизации ​(push) ​изменений в репозиториипроцесс подключения следующей рабочей станции выглядит как на титульном скриншоте,​ а именно,​ после базовой инсталляции системы,​ инженер подключается локальной учетной записью,​ открывает браузер,​ находит (через Explore в GitLab) проект и копирует из readme.md две команды в терминал. После перезагрузки рабочей станции можно наблюдать процесс применения конфигурации:​+После синхронизации изменений в репозитории 
 + 
 +<​code>​ 
 +client1:​~/​ansible-pull-gpo#​ git --no-optional-locks status | grep '​modified\|deleted\|new file\|renamed'​ | git commit -a -F - 
 + 
 +client1:​~/​ansible-pull-gpo#​ push -u origin main 
 +</​code>​ 
 + 
 +процесс подключения следующей рабочей станции выглядит как на титульном скриншоте,​ а именно,​ после базовой инсталляции системы,​ инженер подключается локальной учетной записью,​ открывает браузер,​ находит (через Explore в GitLab) проект ​ansible-pull-gpo ​и копирует из readme.md две команды в терминал. После перезагрузки рабочей станции можно наблюдать процесс применения конфигурации:​
  
 <​code>​ <​code>​
Line 213: Line 233:
 </​code>​ </​code>​
  
-Остается рассказать про профили систем. Например,​ домашние компьютеры сотрудников не нужно включать в домен, но иконка "​Помощь/​Help"​ для разрешения удаленного подключения инженера может очень пригодиться. Для этого опишем профиль - просто еще один плейбук,​ аналогичный local.yml с названием home-comp.yml (в реальности, ​лучше использовать отдельный каталог для профилей)+Остается рассказать про профили систем. Например,​ домашние компьютеры сотрудников не нужно включать в домен, но иконка "​Помощь/​Help"​ для разрешения удаленного подключения инженера может очень пригодиться. Для этого опишем профиль - просто еще один плейбук,​ аналогичный local.yml с названием home-comp.yml (в реальности,​ удобнее использовать отдельный каталог для профилей)
  
 <​code>​ <​code>​
-client1:​~/​ansible-pull-gpo# ​cat home-comp.yml+client1:​~/​ansible-pull-gpo# ​nano home-comp.yml
 </​code><​code>​ </​code><​code>​
 - hosts: localhost - hosts: localhost
Line 223: Line 243:
 </​code>​ </​code>​
  
-Далее, уточняем hostname компьютера сотрудника (например,​ petrov-home) и создаем одноименный линк на созданный плейбук:+Далее, уточняем hostname компьютера сотрудника (например,​ petrov-home) и создаем одноименный линк на созданный плейбук ​(hostname должны быть уникальны,​ компьютерам предприятия они назначается по определенному правилу,​ которое исключает возможность совпадений)
  
 <​code>​ <​code>​
 client1:​~/​ansible-pull-gpo#​ ln -s home-comp.yml petrov-home.yml client1:​~/​ansible-pull-gpo#​ ln -s home-comp.yml petrov-home.yml
 +
 +client1:​~/​ansible-pull-gpo#​ git --no-optional-locks status | grep '​modified\|deleted\|new file\|renamed'​ | git commit -a -F -
 +
 +client1:​~/​ansible-pull-gpo#​ push -u origin main
 </​code>​ </​code>​
  
-После ​синхронизации (push) изменений в репозитории, ​сотруднику оправляется ссылка видео инструкцию ([[https://​youtu.be/​Y4RzavhVwxY?​t=3653|похожую на эту]]) и он самостоятельно подключает свой компьютер к нашей системе управления. ​+После ​этого сотруднику оправляется ссылка на видео инструкцию ([[https://​youtu.be/​Y4RzavhVwxY?​t=3653|похожую на эту]]) и он самостоятельно подключает свой компьютер к нашей системе управления. ​В дальнейшем,​ можно создать в проекте новую роль, например - openvpn, добавить ее к плейбуку home-comp.yml и она будет выполнена (в течении 2-х часов или после загрузки) на всех компьютерах,​ hostname которых мы "​прилинковали"​ к файлу home-comp.yml 
 + 
 +Вот такое решение "из подручных материалов"​. Мы его активно используем,​ добавляя,​ по необходимости,​ новые роли (в том числе, настройку 1С, установку офиса Р7 и прочее). 
 + 
 +Спасибо,​ что дочитали до конца, буду рад, если кому то пригодится и ответить на вопросы,​ а, так же, советам в комментариях!
  
-Вот такое решение "из подручных материалов"​. Спасибо,​ что дочитали до конца, буду рад ответить на вопросы и советы ​ в комментариях! 
  
gpo_для_linux.1683003440.txt.gz · Last modified: 2023/05/02 07:57 by val