Главная

Monday, 27 December 2021

Прячем Grafana за Nginx.

Всем привет. 

Задача №1 - спрятать Grafana за Nginx по ссылке http://myserver1. Полагаем что наш Nginx по умолчанию отдает index.html.

Переходим в папку Nginx sites-enabled:

cd /etc/nginx/sites-enabled

Создаем новую конфигурацию Nginx для Grafana:

sudo nano myserver1.conf

Название файла конфигурации точно такое же как и сайта, в моем случае "myserver1".

Указываем в нем следующее:

server {

    listen 80;

    listen [::]:80;

    server_name  myserver1;

    location / {

        proxy_pass http://localhost:3000/;

    }

}

Сохраняем и провереям созданный конфиг:

>Nginx -t 

Перезапускаем nginx:

sudo service nginx restart

sudo service nginx status

Имеем Grafana по адресу:

http://myserver1

Это хорошо работает если Grafana на отдельном сервере. Если она на том же сервер что и Zabbix,  то лучше добавить немного безопасности для Grafana. Поэтому ставим следующую задачу.

Wednesday, 22 December 2021

PowerShell Direct.

Всем привет.

PowerShell Direct - это новый функционал PowerShell в Windows Server 2016 и Windows 10, позволяющая  создать  прямую локальную PowerShell сессию с любой виртуальной машиной, запущенной на хосте Hyper-V, причем подключение идет не через сеть, а через внутреннюю шину VM bus. Таким образом, администратор  Hyper-V может осуществлять управление ВМ с помощью PowerShell даже на изолированной системе без виртуальных сетевых адаптеров, т.е. можно получить доступ к ВМ которая потеряла связь по сети.

Основные требования для использования Powershell Direct:

  • в качестве хостовой ОС Hyper-V может использоваться Windows Server 2016 или Windows 10 или выше;
  • гостевая ВМ должна быть запущена на том же хосте Hyper-V, с которого осуществляется подключение (т.е. подключение исключительно локальное!);
  • гостевая ОС виртуальной машины также должна быть ОС не ниже Windows Server 2016 или Windows 10;
  • на хосте Hyper-V консоль Powershell должна быть запущена из-под администратора;
  • для подключения к гостевой ОС виртуальной машине нужно будет указать имя пользователя и пароль учетной записи этой ВМ.

Ранее администратор мог выполнять команды на виртуальной машине в Hyper-V только по сети с помощью  Invoke-Command или Enter-PSSession. 

В качестве параметра для подключения к удаленной ВМ нужно указывать ее сетевое имя (-ComputerName) или ее имя в Hyper-V (-VMName).

$cred = Get-Credential

К примеру, получить список запущенных процессов на удаленном сервере можно так:

Invoke-Command -VMName "TEST01" -ScriptBlock {Get-Process} -Credential $cred

Или создать новую интерактивную PS сессию с удаленным сервером:

Enter-PSSession -VMName "TEST01" -Credential $cred

В таком сценарии PS сессию нельзя было установить с ВМ, отключенной от виртуального коммутатора, находящейся в изолированной или защищенной файрволом системе. Все управление осуществляется только через графическую консоль Hyper-V. Для подключения к такой гостевой ВМ с помощью Powershell Direct используется не сетевое имя гостевой ОС, а имя или GUID ВМ в среде Hyper-V. При подключении через Powershell Direct также можно использовать Enter-PSSession для создания интерактивного сеанса Powershell, либо Invoke-Command для запуска одной команды или скрипта.

Saturday, 18 December 2021

Синхронизация времени в Active Directory.

Всем привет.

Синхронизация времени - важный и во многом достаточно критичный аспект работы Active Directory, особенно сегодня, когда широко используется взаимодействие с внешними системами и работа с сотрудниками, которые могут находиться в различных часовых поясах. Применение систем виртуализации вносит дополнительные особенности, которые также следует учитывать. Поэтому данный вопрос может оказаться не столь простым, как кажется, а синхронизация с внешним источником точного времени становится одной из актуальных задач.

Прежде всего вспомним, как происходит синхронизация времени в Active Directory. В качестве эталона времени выступает контроллер, владеющий ролью эмулятора PDC. Это FSMO-роль и эмулятором PDC может являться только один контроллер в каждом домене. С ним синхронизируют время остальные контроллеры домена. Доменные ПК и рядовые серверы сверяют часы с ближайшим контроллером домена.

Сам эмулятор PDC в качестве источника точного времени может использовать либо аппаратные часы материнской платы, либо внешний источник точного времени, при нахождении в виртуальной среде также может быть использовано время хоста виртуализации.

С приходом виртуализации все изменилось, появился еще один источник времени - время хоста виртуализации. Многие гипервизоры по умолчанию имеют включенной настройку синхронизации времени гостевых систем и при попадании в виртуальную среду контроллера может возникнуть следующая коллизия: контроллер синхронизирует время с хостом, но сам хост, являясь членом домена, в свою очередь синхронизируется с контроллером.


Еще хуже, если в виртуальную среду попадает эмулятор PDC, в силу особенностей таймера виртуальных машин, время внутри может достаточно сильно плавать, поэтому виртуальный эмулятор PDC всегда должен синхронизировать время с внешним источником, а синхронизация времени с хостом должна быть отключена, последнее касается и всех остальных виртуальных членов домена.

Tuesday, 14 December 2021

Полезная программа CMPivot.

Всем привет.

SCCM cодержит в себе многофункциональную отчетную подсистему, которая позволяет выводить разностроннюю информацию относительно последнего опроса своих клиентов. По умолчанию опрос происходит каждые 7 дней.

Начиная с версии 1806 в SCCM появилась встроенная программа CMPivot, которая имеет доступ к состоянию устройств в режиме реального времени. CMPivot позволяет быстро оценить состояние устройств в вашей среде и предпринять действия. При вводе запроса CMPivot запустит его в режиме реального времени на всех подключенных устройствах в выбранной коллекции. Возвращенные данные можно затем отфильтровать, сгруппировать и уточнить, чтобы ответить на бизнес-вопросы, устранить проблемы в среде или угрозы безопасности. 

Принцип работы CMPivot.

CMPivot соединяется с SCCM-клиентами с применением «быстрого канала», который связывает сервер с клиентом, а также используется для уведомления клиентов, получения данных об их состоянии, защиты с помощью Endpoint Protection. Если клиент находится в активном состоянии, то он сразу отвечает на запрос. С офлайновых клиентов CMPivot может получить данные в течение одного часа при условии, что программа не закроется, а компьютеры станут доступными и клиенты получат статус Active. Все полученные результаты будут временно храниться в базе данных (кеш данных).

Работа с CMPivot.

Интерфейс программы CMPivot разделен на три части. Слева расположена панель с объектами, посередине сверху – поле для написания запросов, а под ней – поле для отображения результатов.

Для работы с CMPivot должны быть права администратора:

SMS_Scripts – Read = Yes

Collections – Run Script = Yes

Чтобы запустить CMPivot, нужно в консоли SCCM зайти в Asset and Compliance → Overview → Device Collections, на любой коллекции компьютеров нажать правой кнопкой мыши и выбрать пункт Start CMPivot либо нажать кнопку "Start CMPivot" на верхней панели. Закладка "Главная" имеет развернутую справку по списку сущностей, операторов и функций, которые можно будет применять в запросах CMPivot. В поле слева можно развернуть любую сущность чтобы узнать какие свойства она может показать и формат (текст, дата, число, логика) этого свойства.

CMPivot использует подмножество модели потока данных Azure Log Analytics, запросы очень похожи на запросы языка SQL, но называются Kusto Query Language (KQL) . Совокупность клиентских сущностей и операторов разделяется «|», представляя поток табличных данных слева направо. Каждый следующий оператор получает набор табличных данных от предыдущего, дополняет новыми наборами из тела оператора и передает дальше по конвейеру. Конструкция выглядит так:

Сущность | оператор1 | оператор2 | ...

Комментарий начинается с //.

Saturday, 11 December 2021

Файл не может быть дешифрован.

Всем привет.

При миграции между доменами пользователя AD может ожидать сюрприз со стороны EFS. Т.е. файлы которые он зашифровал ранее могут вдруг стать для него недоступными. 

Смотрим рисунок. Изначально только у зашифровавшего его пользователя (Dps7) и у указанного ниже админа (Administrator) есть сертификат для расшифровки файла. Это работает до того момента пока пользователь находится в своем домене. Причем файлы открываются как обычно, пользователь может даже забыть что они их зашифровал.

А завтра пользователя мигрировали в другой домен и файлы стали для него в один момент залочены с сообщением "Файл не может быть дешифрован". 

Что же можно сделать? Можно залогиниться под старым пользователем со старого домена. Т.е. мигрировать пользователя обратно если старый домен еще жив.

Или тоже самое сделать под указанным админом. Или достать сертификат этого админа с любого другого хоста из старого домена. Нужен сертификат и приватный ключ pfx-файл. Но проблема может быть в том, что главный Administrator (а это точно он!) обычно в AD отключен и для логинов не используется.

В общем решения есть хотя может быть возни много. Поэтому лучше пользователей опрашивать перед миграцией про их файловые секреты.

Успехов.

Friday, 10 December 2021

Глобальная чистка Windows с Powershell.


Всем привет.

Нашел я на просторах сети еще один мега-скрипт очистки Windows, который перебирает все наявные профили в системе. Собственно сам скрипт:

# задаем системные пути для очистки:

$SysCleanPathsArr = "C:\Temp\*","C:\Windows\Temp\*","C:\tmp\*"

# чистим согласно заданных путей: 

ForEach ($Path in $SysCleanPathsArr) {

Remove-Item -Path $Path -Recurse -Force -ErrorAction SilentlyContinue -WhatIf

 }

# задаем возможные пути чистки в профилях пользователей:

$InProfilesCleanPathsArr = "\AppData\Local\Temp\*","\AppData\Local\*.auc","\AppData\Local\Microsoft\Terminal Server Client\Cache\*", "\AppData\Local\Microsoft\Windows\Temporary Internet Files\*","\AppData\Local\Microsoft\Windows\WER\ReportQueue\*","\AppData\Local\Microsoft\Windows\Explorer\*"

# извлекаем из реестра местоположение профилей и формируем список:

$Profiles = Get-ChildItem (Get-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList").ProfilesDirectory -Exclude "Администратор","Administrator","Setup","Public","All Users","Default User"

# чистим согласно списка:

ForEach ($Profile in $Profiles) {

 ForEach ($Path in $InProfilesCleanPathsArr) {

 Remove-Item -Path $Path -Recurse -Force -ErrorAction SilentlyContinue -WhatIf

  }

}

# напоследок чистим Корзину: 

Clear-RecycleBin -Force

(New-Object -ComObject Shell.Application).NameSpace(0x0a).Items() | Remove-Item -Recurse -Force

Совет: прогоните скрипт для начала с -WhatIf чтобы оценить последствия. А потом уже запускайте без предохранителя. Мало ли.) 

Удачи.

Wednesday, 8 December 2021

Форматы файлового вывода в Powershell.

Всем привет.

В Powershell кроме простого перенаправления вывода в текстовый файл есть возможность сделать это и в другие форматы: XML, JSON, HTML и, конечно же, CSV.  Причем можно использовать как командлет ConvertТо_ так и Export_.

# XML

Get-Process | Export-CliXML d:\processes.xml -Encoding UTF8

Get-Process | ConvertTo-XML | Set-Content d:\processes2.xml -Encoding UTF8

P.S.: а вот тут глюк - без ошибок, но файл processes2.xml получился нулевого размера!

# JSON

Get-Process | ConvertTo-Json | Set-Content d:\processes.json -Encoding UTF8

# HTML

Get-Process | ConvertTo-HTML | Set-Content d:\processes.html -Encoding UTF8

# CSV

Get-Process | Export-CSV d:\processes.csv -Encoding UTF8

Get-Process | ConvertTo-CSV | Set-Content d:\processes2.csv -Encoding UTF8

# TXT

Get-Process | Out-File d:\processes.txt -Encoding UTF8

И не забываем везде добавлять кодирование -Encoding UTF8.

Monday, 6 December 2021

MSC оснастки Windows.


Всем привет. 

Уверен что всегда полезно иметь (и в голове) список необходимых элементов оснастки Консоли управления в Windows. Почему? Подчас набрать десяток символов намного удобнее и быстрее чем перещелкиваться мышкой  по окнам. Собственно вот и он в 3-х частях:

1. Перечень msc оснасток для Windows:

appwiz.cpl — Установка и удаление программ

certmgr.msc — Сертификаты

ciаdv.msc — Служба индексирования

cliconfg — Программа сетевого клиента SQL

clipbrd — Буфер обмена

compmgmt.msc — Управление компьютером

dcomcnfg — Консоль управления DCOM компонентами

ddeshare — Общие ресурсы DDE (на Win7 не работает)

desk.cpl — Свойства экрана

devmgmt.msc — Диспетчер устройств

dfrg.msc — Дефрагментация дисков

diskmgmt.msc — Управление дисками

drwtsn32 — Dr.Watson

dxdiag — Служба диагностики DirectX

eudcedit — Редактор личных символов

eventvwr.msc — Просмотр событий

firewall.cpl — настройки файерволла Windows

gpedit.msc — Груповая политика

fsmgmt.msc — Общие папки

fsquirt — Мастер передачи файлов Bluetooth

chkdsk — Проверка дисков (обычно запускается с параметрами буква_диска: /f /x /r)

control printers — Принтеры и факсы — запускается не всегда

control admintools — Администрирование компьютера — запускается не всегда

control schedtasks — Назначенные задания (планировщик)

control userpasswords2 — Управление учётными записями

compmgmt.msc — Управление компьютером (compmgmt.msc /computer=pc — удаленное управление компьютером pc)

lusrmgr.msc — Локальные пользователи и группы

mmc— создание своей оснастки

mrt.exe — Удаление вредоносных программ

msconfig — Настройка системы (автозапуск, службы)

mstsc — Подключение к удаленному рабочему столу

ncpa.cpl — Сетевые подключения

ntmsmgr.msc — Съёмные ЗУ

mmsys.cpl — Звук

ntmsoprq.msc — Запросы операторов съёмных ОЗУ (для XP)

odbccp32.cpl — Администратор источников данных

perfmon.msc — Производительность

regedit — Редактор реестра

rsop.msc — Результатирующая политика

secpol.msc — Локальные параметры безопасности (Локальная политика безопасности)

services.msc — Службы

sfc /scannow — Восстановление системных файлов

sigverif — Проверка подписи файла

sndvol — управление громкостью

sysdm.cpl — Свойства системы

syskey — Защита БД учётных записей

taskmgr — Диспетчер задач

utilman Диспетчер служебных программ

verifier Диспетчер проверки драйверов

wmimgmt.msc — Инфраструктура управления WMI

Wednesday, 1 December 2021

Членство в коллекции SCCM.


Всем привет.

Не редко бывает необходимость добавить(удалить) в коллекции SCCM всего один хост, который не подчиняется заданным правилам. Мышкой нащелкать можно, но скучно. Поэтому лучше для это использовать Powershell.

Как инициировать сессию к сайту SCCM я писал ранее, поэтому сегодня просто пройдусь по командам.

Найти хост:

Get-CMDevice -CollectionName "All Computers" | where {$_.name -like '*0008*'} 

Найти пользователя:

Get-CMUSER -CollectionName "All Users" | where {$_.name -like '*Pupkin*'} | ft name

Получаем текущие логины на хостах главной колекции:

(Get-CMDevice -Name $Computer -CollectionName "All Computers").UserName

Получить всех членов коллекции "Forza Upgrade":

Get-CMDeviceCollection –Name "Forza Upgrade"

Получить имена всех членов коллекции "Forza" и ID коллекций в которых они состоят:

Get-CMDeviceCollection –Name "Forza*" | Select Name,CollectionID

Добавляам хост T3-WKS007 в коллекцию c ID "UA1009DA" (ID получен из предыдущего запроса):

$CMCollectionID = "UA1009DA"

$Computer = "T3-WKS007" 

Add-CMDeviceCollectionDirectMembershipRule -CollectionID $CMCollectionID -ResourceId $(Get-CMDevice -Name $Computer -CollectionName "All Computers").ResourceID

Ищем хост T3-WKS007 в главной коллекции:

Get-CMDevice -Name $Computer -CollectionName "All Computers"

А теперь ищем хост T3-WKS007 в нашей коллекции:

Get-CMDevice -Name $Computer -CollectionName "Forza Upgrade"

Или удаляем хост T3-WKS007 из коллекции UA1009DA:

Remove-CMDeviceCollectionDirectMembershipRule -CollectionID $CMCollectionID -ResourceId $(Get-CMDevice -Name $Computer -CollectionName "All Computers").ResourceID

Успехов.