Перенос физического сервера FreeBSD в виртуальную машину

В моем случае сервер FreeBSD 9.1, виртуальная машина будет находится на хосте ESXi 6.5, впрочем это совсем не важно. Выполняем следующие шаги:

1) Подготавливаем новый сервер (виртуальную машину).
2) Запускаем установщик сервера (достаточен bootonly ISO-образ FreeBSD).
3) Установщик спрашивает в начале что будем делать: устанавливать, запустить Shell или запустить Live CD. Выбираем «запуск Shell»
4) Настраиваем сеть: ifconfig em0 10.9.96.5/24
Добавляем маршрут по-умолчанию: route add default 10.9.96.1
Проверяем, что сервер, который требуется перенести может пинговать наш новый сервер.
5) Запускаем SSH. Для этого нужны следующие шаги:
mkdir /tmp/etc
mount_unionfs /tmp/etc /etc

Правим файл настроек SSH для возможности подключения root к серверу:
ee /etc/ssh/sshd_config
Правим строку. Должно быть:
PermitRootLogin yes
SSH-готов для запуска:
/etc/rc.d/sshd onestart
6) Меняем пароль у root-пользователя во времено загруженной системы: passwd
7) Командой sysctl kern.disks проверяем наличие дисков в системе. Находим тот, который будет выделен под систему.
Командой gpart show <имя диска> смотрим, что на этом диске есть. Если разделов нет или они отличаются от разделов на исходном сервере, то командой gpart destroy -F <имя диска> уничтожаем всё на диске.
8) Командой geom disk list на целевом сервере проверяем размер сектора диска. Если установка производится на современные жесткие диски, у которых размер сектора = 4 кб, то при создании разделов необходимо использовать выравнивание.
9) Командами gpart create -s <BSD|GPT|MBR> <имя диска> создадим одну из схем (геометрию) на диске.
10) Командой gpart add -t <freebsd-ufs|freebsd-boot|freebsd-swap> <имя диска> создаем раздел на диске (если нужно выравнивание, то используем дополнительные ключи)
11) Форматируем корневой раздел командой newfs -U <имя раздела>. Ключ -U включает Soft Updates
12) Делаем диск загрузочным: для этого выполняем команду gpart bootcode -b /boot/boot <имя диска> (для схемы BSD). Для других схем команды будут: gpart bootcode -b /boot/mbr <имя диска> и
gpart bootcode -b /boot/pmbr <имя диска>
gpart bootcode -p /boot/gptboot -i 1 <имя диска>

13) Монтируем раздел mount <имя раздела> /mnt
14) На исходной машине выполняем команду: dump -0Lf - / | ssh root@10.9.96.5 "cd /mnt ;restore -rf -". Если сервер пишет «Cannot create snapshot. Snapshots are not yet supported when running with journaled soft updates.», то тогда нужно загрузиться в Single Mode и выполнить команды:
tunefs -J disable /dev/ada0
tunefs -n disable /dev/ada0
tunefs -j disable /dev/ada0

После этого перезагружаемся и снова выполняем команду dump. Дожидаемся надписи «DUMP IS DONE»
Если сервер нет возможности перезагрузить в безопасный режим, то тогда из команды dump убираем ключ -L. Чтобы данные были как можно более консистенты на новом сервере, на исходном сервере перед дампом выключаем все сервисы. В моем случае это:
service apache22 stop; service nginx stop; service sendmail stop; service mysql-server stop
15) Перезагружаем конечный сервер. Если он не может подмонтировать корневую файловую систему, но еще раз загружаемся с ISO-образа, монтируем том, куда мы скопировали сервер и в нем открываем файл ee /etc/fstab. Там меняем название раздела для корневой системы на правильное.

Удаление ярлыка с рабочего стола через GPO средствами Powershell

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

Перед тем, как настраивать GPO для запуска powershell-скрипта на компьютерах необходимо средствами групповых политик разрешить запуск PS-скриптов. По-умолчанию, на компьютере запрещен их запуск. Поэтому заходим в дефолтную GPO для домена в User Configuration — Policies — Administrative Templates — Windows Components — Windows PowerShell. Находим там политику «Turn on Script Execution«, включаем её и переводим в режим работы «Allow local scripts and remote signed scripts«.

Теперь можно настраивать политику, которая будет запускать PS-скрипт при входе пользователя в систему. Для этого заходим в созданную для этого политику в раздел User Configuration — Policies  — Windows Settings — Scripts — Logon. Выбираем вкладку «PowerShell Scripts» и нажимаем кнопку «Add». Далее нажимаем кнопку «Browse» и в открывшееся окно проводника копируем файл с powershell-скриптом. После этого выбираем этот файл и нажимаем «Open» в этом же окне и «OK» в предыдущем. Таким образом политика настроена.

А вот текст самого скрипта. Сохраняем его под расширением PS1 у себя на компе.

$DeleteItem = "Кодекс-клиент.lnk"
$Date = Get-Date
$ComputerName = $Env:Computername
$UserName = $Env:UserName
$DesktopPath = [Environment]::GetFolderPath("Desktop")
$ShortcutFiles = Get-ChildItem -Path $DesktopPath -Recurse -Include *.lnk
Write-Host "Всего найдено ярлыков:" $ShortcutFiles.Count -ForegroundColor Green
$Changed = 0
ForEach ($Shortcut in $ShortcutFiles) {
IF ($Shortcut -match $DeleteItem ) {
Remove-Item $Shortcut
$Changed ++
}
}
Write-Host "Удалено ярлыков:" $Changed -ForegroundColor Green
echo $Date $UserName "Всего найдено ярлыков:" $ShortcutFiles.Count "Удалено ярлыков:" $Changed >> \\DC-01\C$\Logs_remove_shortcut\$ComputerName.log

В последней строке скрипта я сохраняю логи исполнения данного скрипта на компьютерах пользователя. У меня они сохраняются в скрытую папку на контроллере домена, у вас она будет другой, поэтому поменяйте путь до вашей папки.

Этот же скрипт может быть взят за основу для удаления любого файла из любой директории.

Как узнать версию Exchange по дистрибутиву

У меня возникла задача установить Exchange-сервер 2016, в наличии есть какой-то древний ISO-файл. Как по нему определить какая версия Exchange в нем находится? Запускаем файл .exe внутри ISO и распаковываем дистрибутив сервера, далее заходим в директорию .\setup\serverroles\common и находим там файл version.txt, в нем и будет написано версия. В моем случае там было написано: «Version 15.01 (Build 0225.042)». Воспользовавшись поиском, узнаем, что данная версия является RTM.

Сбор статистики с принт-сервера на Windows.


В данный момент у меня есть сервер, к которому подключено более 400 принтеров и мне захотелось узнать сколько страниц ежедневно распечатывается. К сожалению, в сети большинстве своем есть только платные программы для сбора множества информации по серверу печати, поэтому решил для себя написать небольшой powershell-скрипт.

$date = get-date -format dd-MM-yyyy
$number = get-counter "\Очередь печати(_total)\Всего напечатано страниц" | Foreach-Object {$_.CounterSamples[0].CookedValue}
Convertto-html -title "Статистика печати" -PreContent "Количество распечатанных листов за $date : <b>$number</b>" >> C:\counter_print_pages.html

Всё, что он делает — это создает html файл в корне диска C:, в котором записывается информация из счетчика очереди печати со всех принтеров.

Чтобы этот скрипт выполнялся каждый день и заносил каждый раз новую информацию, нужно в «Планировщике задач» создать расписание, где в 23:59 будет выполняться данный выше кусок кода. Далее, чтобы статистика за день обнулилась, а также для того, чтобы на сервере печати очищались от заданий очереди на печать, в «Планировщик задач» добавить на выполнение в 0:00 еще один скрипт:

net stop "spooler"
del /S /Q c:\windows\system32\Spool\Printers\*
net start "spooler"

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

Настройка аудита запуска/остановки службы в Windows

Столкнулся с такой задачей: требовалось знать кто остановил критически важную службу на Windows-сервере. Как оказалось аудит этого события настраивается немного по-другому, в отличии, например, от файлового сервера. Что для этого требуется:

1) для начала скажу, что нельзя настроить аудит сразу всех служб — нужно выбрать конкретные службы для их аудита. Узнаем короткое имя службы, например, через команду PS get-service и в столбце «Name» оно будет отображено

2) в cmd выполняем команду sc sdshow [короткое имя службы]. Выведется строка примерно такого вида D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU). Скопируйте ее в блокнот и в конце добавьте строку S:(AU;SAFA;RPWPDT;;;WD). Буква «D» в начале строки означает начало списка доступа DACL, а буква «S» — список доступа SACL, который используется при логировании. Если выводимая строка в команде «sc sdshow» уже будет содержать SACL, то удаляем ее и добавляем ту, которая указана выше.

3) выполняем в cmd команду sc sdset [короткое имя службы][получившаяся новая строка]. После этого должна появиться строка [SC] SetServiceObjectSecurity: успех


4) командой auditpol /get /category:* проверяем какой аудит включен в системе. Нам необходимо, чтобы был включен аудит для подкатегорий «Другие события доступа к объекту» и «Работа с дескриптором». В английской Windows они соответственно называются «Other Object Access Events» и  «Handle Manipulation». Если аудит не настроен, то делаем это через групповые политики, если компьютер в домене или через команды auditpol /set /subcategory:"Другие события доступа к объекту" /success:enable /failure:disable и  auditpol /set /subcategory:"Работа с дескриптором" /success:enable /failure:disable, если компьютер не в домене.

5) фильтруем журнал безопасности Windows по коду события «4656» и можем видеть событие в журнале


Аудит настроен.

 

Изменения Storage Replica в Windows Server 2019

В Windows Server 2019 Build 17650 стали доступны улучшения в работе Storage Replica:
1) Storage Replica теперь доступна в редакции Standard, но с ограничениями:
— можно реплицировать только один том (в Datacenter редакции ограничений нет)
— том можно реплицировать только одному партнеру (в Datacenter можно создавать неограниченное число партнеров по репликации)
— том, который подвергается репликации, должен быть размером не более 2 Tb (в старшей редакции такого ограничения нет)
2) В Storage Replica теперь доступен режим «Test Failover». При его включении на партнере по репликации становится доступным на запись реплицированный том. В этот момент  репликация прекращается до момента, пока мы не выйдем из режима «Test-Failover». Все изменения на временно подключенном томе сохраняются, но как только прекращается «Test-Failover», изменения откатываются на время последнего снапшота на сервере-источнике.

Инструкция по копированию GAL в GAL другого домена на сервере Kerio Connect

Дано: имеется 2 домена на одном сервере Kerio Connect. Нужно, чтобы контакты были едины, при условии, что общедоступные папки для каждого из доменов свои.

  1. В каждом из доменов должен быть пользователь с правами на администрирование Общедоступных папок, пусть это будет пользователь admin.
  2. Заходим в почтовый ящик admin@<ваш_домен> в первом домене и очищаем папку «Мои контакты». Тоже самое делаем и у admin@<ваш_домен_2>
  3. Подключаемся по SSH к серверу Kerio Connect . Поднимаем права через su —
  4. Заходим в директорию /opt/Kerio/mailserver/store/mail/<ваш_домен>/#public/Contacts/#msgs — здесь находятся контакты домена <ваш_домен> (GAL). Копируем их в директорию /opt/Kerio/mailserver/store/mail/<ваш_домен_2>/admin/Contacts/#msgs – если предварительно мы очистили личные контакты, то она должна быть пустая.
  5. Через панель администрирования у почтового ящика admin@<ваш_домен_2> запускаем переиндексацию почтового ящика. Чтобы она быстрее закончилась, почтовый ящик должен содержать как можно меньше писем
  6. После окончания индексации, GAL домена <ваш_домен> будет отображаться как «Мои контакты» в почтовом ящике admin@<ваш_домен-2> Теперь их можно перенести в общедоступные папки в раздел «Контакты»
  7. Повторяем процедуру, но для GAL домена <ваш_домен-2> с копированием его в почтовый ящик admin@<ваш_домен>
  8. Повторяем эти процедуры при любых изменениях GAL

Изменения в настройке папки-свидетеля в Windows Server 2019

Начиная с Windows Server 2019 общую папку-свидетель (File Share Witness) для работы кластера больше нельзя создать на DFS ресурсе. При попытке создать такого свидетеля появится сообщение об ошибке:

То же самое будет, если создавать папку через Powershell:
Set-ClusterQuorum : There was an error configuring the file share witness ‘\\contoso.com\dfs-share’.
Unable to save property changes for ‘File Share Witness’.
The request is not supported

Эта конфигурация не поддерживалась и раньше, но мастер создания не выдавал какой-либо ошибки и многие делали неправильные конфигурации кластера.

Хорошая новость:  теперь папку-свидетель можно создать на компьютере, не включенном в домен. Теперь можно подключить папку-свидетель так:

Set-ClusterQuorum -FileShareWitness \\SERVER\SHARE -Credential $(Get-Credential)
и ввести после этого локальную учетную запись — это сработает!

Kerio Connect 9.2 Резервное копирование

В процессе эксплуатация почтового сервера Kerio выяснилось, что резервные копии, который он делает своими скриптами (настроенными из графического интерфейса), хранятся вечно и их нужно самим периодически очищать. То есть получается параметр «число сохраняемых резервных копий» не работает.

Я позвонил в службу поддержки и мне подтвердили, что этот функционал не работает как надо. Не стал уточнять на каких платформах не работает, у меня же почтовый сервер настроен на Debian 8.9 x64. Они посоветовали добавить в Cron скрипт по очистке дискового пространства от старых резервных копий. И вот что получилось:

В файле /etc/crontab добавляем строчку, где добавляется ежедневный запуск скрипта, который ищет в директории с резервными копиями файлы старше 40 дней и удаляет их.

Ошибка принтера Xerox: 07-500 Bypass Tray is empty.

Подключаю несколько принтеров Xerox к принт-серверу, у которых в статусе горят ошибки: «07-500 Bypass Tray is empty», пытался их устранить — обновлял прошивки, менял настройки, но ничего не помогало — состояние очереди к этому принтеру на сервере было «Отключен». Помогла информация из сети интернет — нужно зайти в свойства принтера во вкладку «Порты», выбрать настроенный порт и нажать «Настроить порт» и снять галочку с пункта «Состояние SNMP разрешено»

После этого состояние очереди принтера перешла в статус «Готов» и принтер запечатал.