Где то на середине было лишь "что за хрень", потом меня повеселила песенка "чирибим, чирибом, чирибим бом бом", а когда выяснилось кто такой Тайлер, мозг взорвался. На один раз норм, второй раз уже фигня будет
Бойцовский клуб, 1999
![]() |
слева настройка есть, справа настройки нету |
![]() |
Сопоставление атрибутов |
В какой то момент я перепутал книги, посчитав, что "Над пропастью во ржи" и "Пролетая над гнездом кукушки" это одно произведение и помня положительные ощущения от нее, я прослушал "Пролетая над гнездом кукушки" и не нашел того, чего искал...
Исправимся Селинджер Над пропастью во ржи
(хм, пока писал, я вспомнил, что второй раз так заблуждаюсь, но в другую сторону)
Задача банальна - завершить сеансы пользователей через 2 минуты простоя, но это оказалось не так просто, по следующим причинам:
Спустя два года я таки настроил на Ubuntu 14 с Samba 4.3.11 аудит действий с файлами.
Это оказалось не так просто, как описывалось во всех инструкциях:
Мне нравится матрица, но Джон Уик мне не понятен, то ли дело Великий Уравнитель, тут все хоть не много робингудства.
Смотрел в оригинальной озвучке с русскими субтитрами
А, самое забавное то, что в третьей части главных героев играют актеры исполнившие главные роли в фильме Гнев с разницей в 19 лет, но истории не связаны (((
Великий уравнитель 1-2-3
На Postfix настроена отправка отчетов о работе SpamAssasin при помощи скрипта sa-stats.pl. В какой-то момент я захотел увидеть статистику по входящим сообщениям, так как заподозрил снижение общей массы, а это звоночек руководству о качестве работы менеджеров.
У одного из клиентов я работаю с терминала, и решили мы все ssh сервера перевести на другой порт... и что же?, как же бесит каждый раз вводить номер порта. Я не сторонник сохранения сессий, но и пустой траты времени тоже. Как выяснилось, можно добавить порт прямо в ярлык запуска putty
Отталкиваясь от описания можно заставить FileZille открывать FTP соединение с автоматической авторизацией. Cтрочка "URL override":
cmd://%systemdrive%\progra~1\Filezi~1\filezilla.exe ftp://{USERNAME}:{PASSWORD}@{BASE:RMVSCM}
Проблема: некоторые принтеры на сервере(ах) без закономерности меняют статус на Offline (не подключен)
Подробности: сеть хостера и сеть клиента соединены GRE туннелем. Дабы избежать проблем пробраса принтеров, они были установлены прямо на сервер. Появились жалобы "принтер не работает", перезапуск spooler в 90% решает проблему, в остальных случаях требуется повторный перезапуск. Перезагрузка сервера не решила проблему. Проблема появилась также на других серверах у данного хостера, где установлены принтеры. Сервера на базе Windows server 2019.
Простой скрипт добавления интерфейса IKEv2. Данное решение выполняет следующие задачи:
Понадобилось закодировать скрипт, но не ради обмана антивируса, а из-за нежелания возиться с экранированием символов при создании скрипта из батника. В итоге родилось вот такое чудо:
param ($CreateBatch=$False)
$CurrentDir = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location -Path $CurrentDir
if ($CreateBatch -eq $true) {
$ps_file_name=(Get-Item $PSCommandPath).Name
$cmd_file_name=((Get-Item $PSCommandPath).Basename+".bat")
$encoded_script=[Convert]::ToBase64String( [System.Text.Encoding]::Unicode.GetBytes( $(Get-Content $ps_file_name -Raw)))
$content=("@echo off`r`n"+
"cd %~dp0`r`n"+
"powershell -Command [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String('$encoded_script'))>$ps_file_name`r`n"+
"powershell -NoProfile -ExecutionPolicy Bypass -File $ps_file_name`r`n"+
"pause")
out-file -FilePath $CurrentDir\$cmd_file_name -InputObject $content -Encoding ASCII
exit
}
Данная заготовка добавляет параметр (добавьте его, если блок с параметрами уже есть) и проверяет его, если он истин, то выполняется создание батника с закодированным скриптом. Батник будет иметь такое же имя с расширением bat и лежать в этой же директории.
Именно Get-Content -Raw позволяет закодировать и раскодировать потом скрипт со всеми переносами строк. Если в скрипте нет обращений к файлам с неизвестным расположением, то можно выполнить скрипт без разворачивания в отдельный файл командой powershell -enc "закодированная строка".
Создать RemoteApp без установки оснастки и дополнительных приложений можно прописав в реестре
Пример на Google Chrome
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList\Applications\Chrome]
"RequiredCommandLine"=""
"Name"="Google"
"SecurityDescriptor"=""
"Path"="C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
"ShortPath"="C:\\PROGRA~2\\Google\\Chrome\\Application\\chrome.exe"
"ShowInTSWA"=dword:00000000
"CommandLineSetting"=dword:00000000
"VPath"="%SYSTEMDRIVE%\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
И файл RDP
allow desktop composition:i:1
allow font smoothing:i:1
alternate full address:s:SERVER_ADDRESS
alternate shell:s:rdpinit.exe
devicestoredirect:s:*
disableremoteappcapscheck:i:1
drivestoredirect:s:*
full address:s:SERVER_ADDRESS
prompt for credentials on client:i:1
promptcredentialonce:i:0
redirectcomports:i:1
redirectdrives:i:1
remoteapplicationmode:i:1
remoteapplicationname:s:Google
remoteapplicationprogram:s:||Chrome
span monitors:i:1
use multimon:i:1
Да, можно использовать VPN, разрешенные списки IP адресов и прочее, но бывают случаи, когда требуется прямой доступ к машине без всего этого. Тогда встает вопрос о хотя бы защите от грубого перебора паролей? Есть некоторое количество программ, которые позволяют это сделать, но к сожалению они не являются частью ОС Windows. На просторах интернета был найден скрипт и слегка доработан, можно его использовать повесив в планировщике на событие 4625 журнала безопасность.
Также для работы нужно правило в firewall с именем BlockRDP (читай комментарии к скрипту)
# After first run you need to create firewall rule
# New-NetFirewallRule -DisplayName "BlockRDPBruteForce" –RemoteAddress 1.1.1.1 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Block
# In action task scheduler. Check name script file
# %systemroot%\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\ps\ban_rdp_brutfors.ps1"
$log = "C:\ps\blocked_ip.txt"
$interval = 600000; #600000ms = 10min
$count_fail = 5
# фильтр событий в журнале
$XPath = "*[System[Provider[@Name=""Microsoft-Windows-Security-Auditing""]
and Task = 12544
and (band(Keywords,4503599627370496))
and (EventID=4625)
and TimeCreated[timediff(@SystemTime) >= $interval]]]";
$list_IP =@();
$Events = @();
# выбираем события
try { $Events = Get-WinEvent -Logname "security" -FilterXPath $XPath -ErrorAction Stop
}
catch [Exception] {
if ($_.Exception -match "Не удалось найти события, соответствующие указанному условию выбора.") {
Write-Host "Не найдены события перебора паролей за последние $($interval/60000) мин.";
exit;
}
}
# выбираем IP адреса
$list_IP = $Events | ForEach-Object {
([xml]$_.ToXML()).Event.EventData.Data | Where-Object {$_.Name -eq "IpAddress"} | ForEach-Object {$_."#text"}} | Where-Object {$_ -ne "-" };
$current_ips = @((Get-NetFirewallRule -DisplayName "BlockRDP" | Get-NetFirewallAddressFilter ).RemoteAddress)
foreach ($ip in $list_IP) {
if ( $((($list_IP | where {$_ -eq $ip}).count) -gt $count_fail) -AND $(($current_ips | where {$_ -eq $ip}).count -eq 0)) {
(Get-Date).ToString() + " " + $ip + " IP заблокирован за " + $cnt_try + " попыток за $($interval/60000) мин.">> $log # запись события блокировки IP адреса в лог файл
$current_ips += $ip
}
}
$current_ips = $current_ips | gu
if ($current_ips.Length -gt 0) {
Set-NetFirewallRule -DisplayName "BlockRDP" -RemoteAddress $current_ips
}
Get-DnsClientServerAddress покажет список DNS серверов с их интерфейсом и метрикой (индексом). Как это ни странно, при выборе DNS сервера между несколькими сетевыми интерфейсами метрика играет не последнюю роль. Метрика устанавливается в автоматическом режиме по внутренней логике операционной системы и согласно ей интерфейс VPN имеет меньшие затраты нежели WiFi, а значит и предпочтительней.
Google Chrome (да и большинство браузеров) можно настроить так, что при закрытии он удаляет все данные работы, как инкогнито, но не инкогнито (читай тут). Встала задача провернуть такое же с учеткой Windows.
Сразу, это длинопост, в котором нет конкретного решения, есть мой путь к моему решению в самом конце
СБИС по прежнему не умеет запускать плагин с remoteapp, а мне уж порядком поднадоело ручками создавать задачу в планировщике. Я попробовал сделать задачу при помощи CMD:
set "nameuser=%USERDOMAIN%\%username%"
set "nametask=SBIS Plugin %nameuser%"
schtasks /create /sc ONLOGON /ru %nameuser% /it /tn "%nametask%" /tr "C:\PROGRA~2\TENSOR~1\SBIS3Plugin\sbis3plugin.exe --autostart"
И потерпел фиаско по двум пунктам
$name = Read-Host -Prompt "Enter your name"
$TaskName = "SBIS PLUGIN for $name"
$username ="$env:USERDOMAIN\$name"
#create a scheduled task with powershell
$Action = New-ScheduledTaskAction -Execute "C:\PROGRA~2\TENSOR~1\SBIS3Plugin\sbis3plugin.exe" -Argument "--autostart"
$Trigger = New-ScheduledTaskTrigger -AtLogOn -User $username
Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -User $username
Ничего лишнего, только запрос имени пользователя, домен вытаскивается текущий
Стоит отметить, что параметр --autostart не обязателен
dir /X ~1 "c:\" - отобразит короткие имена каталогов, удобно, когда нельзя использовать пробелы. Логика проста - первые 6 символов + тильда + порядковый номер, понятно, что это условно, но в большинстве случаев нет каталогов с одинаковыми именами.
Например: C:\PROGRA~2\TENSOR~1\SBIS3Plugin\sbis3plugin.exe
Давно замечено, что в человеке не может всего сочетаться в равных пропорциях, да и не смогли бы тогда появляться самородки - все были бы "нормальными" и посредственными. Но к сожалению у творческих людей, талантов хромает все, а на фоне собственного эгоизма результат возводится в степень
Совсем низко, 2014
Я уже ранее указывал на то, что большинство детей крайние до боли, в этой картине видится непонимание ребенком каких-то устоев и правил сегрегации и только благодаря этим новым росткам то, что было человечным для отдельных, ускорило интеграцию после законодательного провозглашения отмены сегрегации.
Если же не вдаваться в смысл, то лично мне показался неудачным подбор актеров, а может и их ролей.
Коррина, Коррина, 1994
Настроил тут на Mikrotik IKEv2, у меня работает даже в sandbox, а у одного из сотрудников вылетает сабж. При этом в логе на Mikrotik ничего, может показаться что клиент даже не инициирует подключение, но мы то умные, идем в System-Logging и добавляем ipsec. Снова пробуем подключиться и сразу видим вот такую картину:
Как одно и то же существо может вызывать и положительные и отрицательные эмоции?
Как одно и то же существо может быть жестоким до рвоты и нежным до приторности?
Я не говорю об одном экземпляре, под существом я подразумеваю именно человека. Собственно ремарка не говорит о фильме практически ничего кроме того, что в этот раз это существо вдохнуло еще чуть кислороду для последнего, но величайшего шага в марафоне под названием жизнь....
"Этрусская улыбка", 2017
Где-то я видел/слышал мысль о том, что великие люди для потомков это лишь отголоски их наследия, а самих людей они не знают. Не знают что и как привело их тому или иному выбору, который определил их деяния в будущем. Да, может им не интересно или не важно знать, что мистер (миссис) Х спал(а) на этой кушетке с N года по N год, но есть много деталей, которые могут послужить уроком для будущих поколений. Забавно смотреть на это лицемерие, когда нацистскому преступнику прощают все ради его будущих работ, а Алана Тьюринга химически кастрируют, хотя именно он принял тяжелейшее решение - пожертвовать пассажирским экипажем ради победы в войне спустя 2 года. Но и тут можно вспомнить кучу примеров, когда ради одного рискуют многими, а многие осуждают того, кто стоял на их защите....
"Игра в имитацию", 2014
Наибанальнейшая задача, связанная с тем фактом, что Mikrotik подставляет расширение txt практически к любому файлу. Простой консольный вариант:
/tool fetch mode=ftp user=FTP_USER password=Parol src-path=$SrcFile dst-path=$DstFile
Для работы требуется включить FTP, для безопасности можно ограничить адресом 127.0.0.1:
add action=accept chain=input dst-address=127.0.0.1 dst-port=80,21 protocol=tcp
Также требуется создать пользователя с ограничением по адресу и связать с группой с правами FTP,read,write
/user group add name=ftp policy="ftp,read,write,!local,!telnet,!ssh,!reboot,!policy,!test,!winbox,!password,!web,!sniff,!sensitive,!api,!romon,!dude,!tikapp"
/user add address=127.0.0.1/32 group=ftp name=FTP_USER
А это простенькая функция:
# Example: $RenameCopyFile SrcFile="File.ovpn.txt" DstFile="File.ovpn" ItCopy=true
:local RenameCopyFile do={
do {
[/tool fetch mode=ftp user=User password=Parol url="ftp://127.0.0.1/$SrcFile" dst-path=$DstFile as-value]
} on-error={
:put ("Failed to copy/rename file from \"$SrcFile\"")
:put ("Check settings ftp. \r\nImportant: \r\n\tftp - enable, \r\n\tport 21 open from 127.0.0.1, \r\n\tcreate user with permisson: \r\n\t\tftp,\r\n\t\tread,\r\n\t\twrite \r\n\tand allowed address=127.0.0.1")
return 0
}
if ($ItCopy=false) do={
/file remove $SrcFile
:put ("Success to rename file to \"$DstFile\"")
} else {
:put ("Success to copy file to \"$DstFile\"")
}
}
Функция не делает всяких проверок на наличие файла и правил, полагаемся на пользователя. Также внимательный читатель обратит внимание на то, что в первом примере использовался scr-path, а в этом примере используется url, так сделано для того, чтобы скрыть вывод команды (as-value)
Параметр ItCopy указывает на то, что мы хотим - скопировать или переименовать/переместить файл. Если указать true, то исходный файл удален не будет. Т.о. можно скопировать файл размером более 4096
После смены сертификата из-за ошибки я не обратил внимания на то, что вход в ECP перестал работать (просто обновлялась страница входа), так как редко пользуюсь, да и DAG обычно посылал на другой сервер. Поковырявшись я обнаружил вот такую заметку:
During the setup process, a self-signed certificate called Microsoft Exchange is bound to the Exchange Backend website on port 444. The certificate is for communication between the Default Web Site and Exchange Back End websites. When the certificate is removed, the Default Web Site can't proxy connections to the Exchange Back End website.
Хм, интересно. Открыл IIS => Site => Exchange Back End => Edit Bindings => 444 и тут действительно был указан старый сертификат. Для пущей уверенности сравнил со вторым сервером, там был другой сертификат. Установил верную привязку, iis reset не потребовался, так как вход заработал сразу
Задача банальная, но сначала она ввела меня в ступор, ибо copy в /file нету. А решение банальное - в set contents направить get contents
/file set myFile.txt contents=[/file get SourceFile.txt contents]
Также не стоит забывать про ограничение на размер переменной 4096 байта, а в данном примере мы как раз сталкиваемся с этим ограничением
Плюс к этому, файл приемник должен существовать. Оригинальная инструкция с сайта mikrotik:
/file print file=myFile
/file set myFile.txt contents=""
Ошибки тут нет, к файлам добавляется расширение txt и это не поправить.
Но на wapLTE получаю ошибку no such item, так как файл не успевает создаться до выполнения второй строки. Добавляем паузу
/file print file=myFile
delay 2
/file set myFile.txt contents=""
Таким образом наш скрипт будет выглядеть так:
:local FileName "MyFile.txt"
:local Contents ([/file get SourceFile.txt contents])
/file print file=$FileName
delay 2
if ([:len [/file find where name=$FileName]]>0) do={
/file set $FileName contents=$Contents
}else={
:put "File not found"
}
А как дописать в тот же файл?
/file set myFile.txt contents=([/file get myFile.txt contents] . "\r\nBlalalala")
но и здесь работает ограничение 4096, поэтому слить 2+ файла <4096 bite в один файл >4096 не получится
А как скопировать или сформировать большой файл?, ограничение 4096 байт распространяется только на размер переменной
Вот тут можно провернуть фокус execute + put
:local mergeFile "
:local contents [/file get MyFile.txt contents]
:put \$contents
:put \$contents
:put \$contents
:put \$contents
"
:execute script=$mergeFile file=test
Но и в этом примере есть ограничение - источник не может быть больше 4096, плюс к имени файла будет добавлено расширение txt (переименовываем файлы).
Если нужно просто скопировать большой файл, то можно выполнить трюк с переименовыванием, исправил скрипт 16/09/2023.
И еще очень важный момент, данный трюк выполняется отдельно, а родительская программа будет работать дальше, т.о. если используются глобальные переменные с последующим удалением, то требуется установить паузу перед удалением.
Имеем: доску trello такого вида:
Задача: перенести неотмеченные пункты чек-листа из карточки за предыдущий день от стартовой даты текущей карточки в чек лист текущей карточки.
В ходе пыток я нашел способ, костылем назвать - ничего не сказать, т.к. стандартных средств Trello не предлагает, по крайней мере на бесплатном варианте.
Легка заметка о том, как изменить размер VM on based Ubuntu 20.04 on Hyper-V. В GUI Hyper-V меняем размер, далее переходим в консоль.
user@server:~$ sudo reboot
# фиксируем ошибку GPT, из-за изменения размера "физического носителя"
user@server:~$ sudo parted -l
# меняем размер раздела
user@server:~$ sudo parted
(parted) print
(parted) select /dev/sda
(parted) resizepart 3
(parted) 108Gb
(parted) quit
# Обновляем размер pv
user@server:~$ sudo pvresize /dev/sda3
# контроль
user@server:~$ sudo pvdisplay
user@server:~$ sudo vgdisplay
# Если размер группы томов увеличился, то можно увеличить размер тома до 100% свободного пространства
user@server:~$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
# контроль
user@server:~$ sudo lvdisplay
# обновляем размер файловой системы, на 20.04 позволяет это сделать без размонтирования
user@server:~$ resize2fs /dev/ubuntu-vg/ubuntu-lv
# контроль ищем наш диск и проверяем размер
user@server:~$ sudo fdisk -l
user@server:~$ df -h
# для теста после перезапуска
user@server:~$ reboot
Обратили внимание, что отчеты из консоли nexcloud приходят через день. Решил разобраться, в итоге выяснилось, что отчет не приходит только в те дни, когда ведущий сервер mail3, а не Mail2 (кластер из двух серверов Exchange). При этом в логах наблюдается такая запись:
Jul 11 23:29:47 nxtcloud sm-mta[1432736]: 36BGo5fO1427601: to=<aa@domain.ru>, ctladdr=<user@nxtcloud.domain.ru> (1000/1000), delay=03:39:42, xdelay=00:00:00, mailer=esmtp, pri=2100378, relay=mail.domain.ru. [10.20.0.222], dsn=4.0.0, stat=Deferred: 403 4.7.0 TLS handshake failed.
Тестовое подключение проваливается:
user@nextcloud:~$ openssl s_client -starttls smtp -connect mail3.domain.ru:465
CONNECTED(00000003)
write:errno=0
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 406 bytes and written 341 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
Порты открыты.
При этом к imap подключается как положено
Прогулялся сегодня до Dvorac Petrovića, но он не работает сегодня (((
Прошелся по Park Petrovića, ничего особенно интересного.
Заглянул в Park Ljubović, тоже ничего особенного, есть клетка для футбола, столики для пинг-понга и тренировочная площадка. Также есть смотровая площадка на городское кладбище
В воскресенье добрался до Острога. Некоторые люди босиком поднимаются несколько километров в гору по скользким и острым камням 😳, так как веруют в очищение души
По пути можно встретить носки, чулки, платки, привязанные и тут и там, это как то связано с носочками на мощах...
А самое непонятное, это развешанные ковры, пледы на улице...