From a053acc0aba4d570b2260cadfb48d5083672eea5 Mon Sep 17 00:00:00 2001 From: Alex Kup <116945542+Lifailon@users.noreply.github.com> Date: Thu, 17 Aug 2023 13:44:29 +0300 Subject: [PATCH] Add openvpn, nat, route, wireguard, vpnclient Pre add zabbix, ansible, winrm config, bit convertor, openssh, hyper-v, pki, openssl, influx regex --- posh.txt | 256 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 163 insertions(+), 93 deletions(-) diff --git a/posh.txt b/posh.txt index 3ce2a2e..e924434 100644 --- a/posh.txt +++ b/posh.txt @@ -687,13 +687,13 @@ exit 1 # код завершения, который возвращается $L $file = [System.IO.File]::Create("$home\desktop\test.txt") # создать файл $file.Close() # закрыть файл [System.IO.File]::ReadAllLines("$home\desktop\test.txt") # прочитать файл -$file = New-Object System.IO.StreamReader("$home\desktop\test.txt") # фафйл будет занят процессом PowerShell +$file = New-Object System.IO.StreamReader("$home\desktop\test.txt") # файл будет занят процессом PowerShell $file | gm $file.ReadLine() # построчный вывод $file.ReadToEnd() # прочитать файл целиком ### Read/Write Bytes -$file = [io.file]::ReadAllBytes("$home\desktop\tloztotk.jpg") # метод открывает двоичный файл, считывает его в массив байт и закрывает файл +$file = [io.file]::ReadAllBytes("$home\desktop\powershell.jpg") # метод открывает двоичный файл, считывает его в массив байт и закрывает файл [io.file]::WriteAllBytes("$home\desktop\tloztotk-2.jpg",$file) # сохранить байты в файл (можно использовать для выгрузки двоичных файлов из БД) Get-Content $home/desktop\test.txt -Wait # аналог tail @@ -720,18 +720,15 @@ Copy-Item -Path "C:\*" -Destination "C:\test\" -Include '*.txt','*.jpg' # коп Copy-Item -Path "C:\*" -Destination "C:\test\" -Exclude '*.jpeg' # копировать объекты, за исключением файлов с расширением (Exclude) $log = Copy-Item "C:\*.txt" "C:\test\" -PassThru # вывести результат копирования (логирование) в переменную, можно забирать строки с помощью индексов $log[0].FullName -$date = (Get-Date).AddDays(-30) -$files = (ls $path).FullName -$creations = Get-ItemProperty $files | select FullName,LastWriteTime -foreach ($creat in $creations) { -if ($creat.LastWriteTime -le $date) { -Remove-Item $creat.FullName -Recurse -} -} +### Clear-env-Temp-14-days -ls (pwd).Path | %{ -$size = "{0:N1} Mb" -f ((ls $_.FullName -Recurse -Force | Measure-Object -Property Length -Sum).Sum / 1Mb) # посчитать размер всех дочерних директория в Mb (округлить до одного символа после запятой) -$hashtable += @{"$_.Name" = $size} # заполнить hashtable +$ls = Get-Item $env:TEMP\*.tmp # считать все файлы с указанным расширением +$date = (Get-Date).AddDays(-14) +foreach ($l in $ls) { + if ($l.LastWriteTime -le $date) { + $l.FullName + Remove-Item $l.FullName -Recurse + } } ### Filehash @@ -867,18 +864,28 @@ Get-EventLog -LogName Security -InstanceId 4624 # найти логи по ID в # Firewall +$days = 5 $obj = @() $fw = Get-WinEvent "Microsoft-Windows-Windows Firewall With Advanced Security/Firewall" foreach ($temp_fw in $fw) { -if ($temp_fw.id -eq 2004) {$type = "Added Rule"} elseif ($id -eq 2006) {$type = "Deleted Rule"} +if ($temp_fw.id -eq 2097) { # 2004 + $type = "Added Rule" +} +elseif ($temp_fw.id -eq 2006) { + $type = "Deleted Rule" +} $port = $temp_fw.Properties[7] | select -ExpandProperty value $name = $temp_fw.Properties[1] | select -ExpandProperty value -$obj += [PSCustomObject]@{Time = $temp_fw.TimeCreated; Type = $type; Port = $port; Name = $name} +$obj += [PSCustomObject]@{ + Time = $temp_fw.TimeCreated; + Type = $type; + Port = $port; + Name = $name} } -$obj +$obj | Where-Object time -gt (Get-Date).AddDays(-$days) New-NetFirewallRule -Profile Any -DisplayName "Open Port 135 RPC" -Direction Inbound -Protocol TCP -LocalPort 135 # открыть in-порт -Get-NetFirewallRule | Where-Object {$_.DisplayName -match "135"} # найти правило по имени +Get-NetFirewallRule | where DisplayName -match kms | select * # найти правило по имени Get-NetFirewallPortFilter | where LocalPort -like 80 # найти действующие правило по номеру порта Get-NetFirewallRule -Enabled True -Direction Inbound | select -Property DisplayName, @@ -912,6 +919,7 @@ Get-MpPreference | select disable* # отобразить статус всех Set-MpPreference -DisableRealtimeMonitoring $true # отключить защиту Defender в реальном времени (использовать только ручное сканирование) Set-MpPreference -DisableRemovableDriveScanning $false # включить сканирование USB накопителей Get-MpPreference | select excl* # отобразить список всех исключений +(Get-MpPreference).ExclusionPath Add-MpPreference -ExclusionPath C:\install # добавить директорию в исключение Remove-MpPreference -ExclusionPath C:\install # удалить из исключения New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender" -Name DisableAntiSpyware -Value 1 -PropertyType DWORD -Force # полностью отключить Windows Defender @@ -2981,7 +2989,7 @@ $httpListener.Close() ### Certificate -function Get-Certificate ($srv) { +function Get-WebCertificate ($srv) { $iwr = iwr $srv $status_code = $iwr.StatusCode $status = $iwr.BaseResponse.StatusCode @@ -3003,7 +3011,7 @@ End = $date_end $Collections } -Get-Certificate https://google.com +Get-WebCertificate https://google.com # Excel @@ -3059,6 +3067,7 @@ $Excel.Quit() ### Excel.Application.Open +$path = "$home\Desktop\Services-to-Excel.xlsx" $Excel = New-Object -ComObject Excel.Application $Excel.Visible = $false $ExcelWorkBook = $excel.Workbooks.Open($path) # открыть xlsx-файл @@ -3087,7 +3096,7 @@ West,Texas,927,923.71 $null,Tennessee,466,770.67 "@ -systeminfo /FO csv | ConvertFrom-Csv # вывод работы программы в CSV и конвертация в объект +$systeminfo = systeminfo /FO csv | ConvertFrom-Csv # вывод работы программы в CSV и конвертация в объект $systeminfo."Полный объем физической памяти" $systeminfo."Доступная физическая память" @@ -3105,7 +3114,7 @@ log = " key1 = value1 key2 = value2 -" | ConvertFrom-StringData +" | ConvertFrom-StringData # создает Hashtable # XML @@ -3123,17 +3132,31 @@ Get-Service | Export-Clixml -path $home\desktop\test.xml # экспортиро Import-Clixml -Path $home\desktop\test.xml # импортировать объект XML в PowerShell ConvertTo-Xml (Get-Service) -if (Test-Path $CredFile) { -$Cred = Import-Clixml -path $CredFile -} elseif (!(Test-Path $CredFile)) { -$Cred = Get-Credential -Message "Enter credential" -if ($Cred -ne $null) { -$Cred | Export-CliXml -Path $CredFile -} else { -return -} +### Get-CredToXML + +function Get-CredToXML { + param ( + $CredFile = "$home\Documents\cred.xml" + ) + if (Test-Path $CredFile) { + Import-Clixml -path $CredFile + } + elseif (!(Test-Path $CredFile)) { + $Cred = Get-Credential -Message "Enter credential" + if ($Cred -ne $null) { + $Cred | Export-CliXml -Path $CredFile + $Cred + } + else { + return + } + } } +$Cred = Get-CredToXML +$Login = $Cred.UserName +$PasswordText = $Cred.GetNetworkCredential().password # получить пароль в текстовом виде + ### XmlWriter (Extensible Markup Language) $XmlWriterSettings = New-Object System.Xml.XmlWriterSettings @@ -3239,16 +3262,14 @@ ps | Select ProcessName, Id, CPU, WorkingSet, *MemorySize | New-Table "All Proce # SQLite -Install-Module MySQLite -Repository PSGallery -$path = "$home\desktop\Get-Service.db" -Get-Service | select Name,DisplayName,Status | ConvertTo-MySQLiteDB -Path $path -TableName Service -force -(Get-MySQLiteDB $path).Tables # список таблиц в базе -New-MySQLiteDB -Path $path # создать базу -Invoke-MySQLiteQuery -Path $path -Query "SELECT name FROM sqlite_master WHERE type='table';" # список всех таблиц в базе +$path = "$home\Documents\Get-Service.db" +$Module = Get-Module MySQLite +if ($Module -eq $null) { +Install-Module MySQLite -Repository PSGallery -Scope CurrentUser +} +Import-Module MySQLite +New-MySQLiteDB -Path $path # создать БД Invoke-MySQLiteQuery -Path $path -Query "CREATE TABLE Service (Name TEXT NOT NULL, DisplayName TEXT NOT NULL, Status TEXT NOT NULL);" # создать таблицу -Invoke-MySQLiteQuery -Path $path -Query "INSERT INTO Service (Name, DisplayName, Status) VALUES ('Test', 'Full-Test', 'Active');" # добавить данные в таблицу -Invoke-MySQLiteQuery -Path $path -Query "SELECT * FROM Service" # содержимое таблицы -Invoke-MySQLiteQuery -Path $path -Query "DROP TABLE Service;" # удалить таблицу $Service = Get-Service | select Name,DisplayName,Status foreach ($S in $Service) { @@ -3258,6 +3279,15 @@ $Status = $S.Status Invoke-MySQLiteQuery -Path $path -Query "INSERT INTO Service (Name, DisplayName, Status) VALUES ('$Name', '$DName', '$Status');" } +(Get-MySQLiteDB $path).Tables # список таблиц в базе +Invoke-MySQLiteQuery -Path $path -Query "SELECT name FROM sqlite_master WHERE type='table';" # список таблиц в базе +Invoke-MySQLiteQuery -Path $path -Query "DROP TABLE Service;" # удалить таблицу + +$TableName = "Service" +Invoke-MySQLiteQuery -Path $path -Query "SELECT * FROM $TableName" # прочитать содержимое таблицы (в формате объекта) + +Get-Service | select Name,DisplayName,Status | ConvertTo-MySQLiteDB -Path $path -TableName Service -force # конвертировать объект в таблицу + ### Database password $Connection = New-SQLiteConnection -DataSource $path @@ -3273,10 +3303,22 @@ systemctl status mysql mysqladmin -u root password # задать пароль root nano /etc/mysql/mysql.conf.d/mysqld.cnf -# port 3306 -bind-address = 192.168.1.253 # адрес прослушивания + +[mysqld] +user = mysql +# pid-file = /var/run/mysqld/mysqld.pid +# socket = /var/run/mysqld/mysqld.sock +# port = 3306 +# datadir = /var/lib/mysql +# tmpdir = /tmp +bind-address = 0.0.0.0 +mysqlx-bind-address = 0.0.0.0 +log_error = /var/log/mysql/error.log + systemctl restart mysql ufw allow 3306/tcp +ss -tulnp | grep 3306 +nc -zv 192.168.1.253 3306 tnc 192.168.1.253 -p 3306 mysql -u root -p @@ -3299,6 +3341,7 @@ INSERT # внести данные DELETE # удалить данные в (FROM) таблице ### DATA TYPE + VARCHAR(N) # строка переменной длины, в формате ASCII, где один символ занимает 1 байт, числом N указывается максимальная возможная длина строки NVARCHAR(N) # строка переменной длины, в формате Unicode, где один символ занимает 2 байта CHAR(N)/nchar(N) # строка фиксированной длины, которая всегда дополняется справа пробелами до длины N и в базе данных она занимает ровно N символов @@ -3310,81 +3353,92 @@ TIME # 23:30:55.1234567 DATETIME # 25.05.2023 23:30:55.1234567 ### DATABASE -SHOW databases; # вывести список БД -CREATE DATABASE db_aduser; # создать БД -CREATE DATABASE db_rep DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; # создать БД с кодировкой UTF-8 -DROP DATABASE db_rep; # удалить БД -USE db_aduser; # выбрать/переключиться на выбранную БД -SELECT database(); # отобразить выбранную БД + +SHOW databases; # вывести список БД +CREATE DATABASE db_aduser; # создать БД +CREATE DATABASE db_rep DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; # создать БД с кодировкой UTF-8 +DROP DATABASE db_rep; # удалить БД +USE db_aduser; # выбрать/переключиться на выбранную БД +SELECT database(); # отобразить выбранную БД ### USER -SELECT USER,HOST FROM mysql.user; # вывести список УЗ -CREATE USER posh@localhost IDENTIFIED BY '1qaz!QAZ'; # создать УЗ, которая будет подключаться с локального сервера -CREATE USER posh@localhost IDENTIFIED BY '1qaz!QAZ'; # создать УЗ, которая будет подключаться с указанного сервера -CREATE USER posh@'192.168.1.247' IDENTIFIED BY '1qaz!QAZ'; # УЗ для доступа с любого сервера -DROP USER posh@localhost; # удалить пользователя -SHOW GRANTS FOR posh@'%'; # отобразить права доступа пользователя -GRANT ALL PRIVILEGES ON db_aduser.* TO posh@'192.168.1.247'; # полный доступ для posh к БД db_aduser -GRANT ALL PRIVILEGES ON *.* TO posh@'%'; # доступ к всем БД c любого клиентского хоста -GRANT SELECT,DELETE ON mysql.* TO posh@'%'; # права SELECT и DELETE на встроенную БД mysql -REVOKE DELETE ON mysql.* FROM posh@'%'; # удалить доступ DELETE -UPDATE mysql.user SET super_priv='Y' WHERE USER='posh' AND host='%'; # изменить привелегии для пользователя -SELECT USER,HOST,super_priv FROM mysql.user; # список УЗ и таблица с правами SUPER privilege -FLUSH PRIVILEGES; # обновить права доступа + +SELECT USER,HOST FROM mysql.user; # вывести список УЗ +CREATE USER posh@localhost IDENTIFIED BY '1qaz!QAZ'; # создать УЗ, которая будет подключаться с локального сервера +CREATE USER posh@localhost IDENTIFIED BY '1qaz!QAZ'; # создать УЗ, которая будет подключаться с указанного сервера +CREATE USER posh@'192.168.3.99' IDENTIFIED BY '1qaz!QAZ'; # УЗ для доступа с конкретного сервера +CREATE USER 'admin'@'%' IDENTIFIED BY 'Admin12#'; # УЗ для доступа с любого сервера (% - wildcard) +DROP USER posh@localhost; # удалить пользователя +SHOW GRANTS FOR posh@'%'; # отобразить права доступа пользователя +GRANT ALL PRIVILEGES ON db_aduser.* TO posh@'192.168.3.99'; # полный доступ для posh к БД db_aduser +GRANT ALL PRIVILEGES ON *.* TO posh@'%'; # доступ к всем БД c любого клиентского хоста +GRANT SELECT,DELETE ON mysql.* TO posh@'%'; # права SELECT и DELETE на встроенную БД mysql +REVOKE DELETE ON mysql.* FROM posh@'%'; # удалить доступ DELETE +UPDATE mysql.user SET super_priv='Y' WHERE USER='posh' AND host='%'; # изменить привелегии для пользователя +SELECT USER,HOST,super_priv FROM mysql.user; # список УЗ и таблица с правами SUPER privilege +FLUSH PRIVILEGES; # обновить права доступа ### TABLE -SHOW TABLES; # отобразить список всех таблиц -SHOW TABLES LIKE '%user'; # поиск таблицы по wildcard-имени -CREATE TABLE table_aduser (id INT NOT NULL AUTO_INCREMENT, Name VARCHAR(100), email VARCHAR(100), PRIMARY KEY (ID)); # оздать таблицу -DROP TABLE table_aduser; # удалить таблицу + +SHOW TABLES; # отобразить список всех таблиц +SHOW TABLES LIKE '%user'; # поиск таблицы по wildcard-имени +CREATE TABLE table_aduser (id INT NOT NULL AUTO_INCREMENT, Name VARCHAR(100), email VARCHAR(100), PRIMARY KEY (ID)); # создать таблицу +DROP TABLE table_aduser; # удалить таблицу ### COLUMN -SHOW COLUMNS FROM table_aduser; # отобразить название стобцов и их свойства -ALTER TABLE table_aduser DROP COLUMN id; # удалить столбец id -ALTER TABLE table_aduser ADD COLUMN info VARCHAR(10); # добавить столбец info -ALTER TABLE table_aduser CHANGE info new_info VARCHAR(100); # изменить имя столбца info на new_info и его тип данных -ALTER TABLE table_aduser ADD COLUMN (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (ID)); # добавить столбец id + +SHOW COLUMNS FROM table_aduser; # отобразить название стобцов и их свойства +ALTER TABLE table_aduser DROP COLUMN id; # удалить столбец id +ALTER TABLE table_aduser ADD COLUMN info VARCHAR(10); # добавить столбец info +ALTER TABLE table_aduser CHANGE info new_info VARCHAR(100); # изменить имя столбца info на new_info и его тип данных +ALTER TABLE table_aduser ADD COLUMN (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (ID)); # добавить столбец id ### INSERT + INSERT table_aduser (Name,email) VALUES ('Alex','no-email'); INSERT table_aduser (Name,email) VALUES ('Alex','no-email'); INSERT table_aduser (Name) VALUES ('Support'); INSERT table_aduser (Name) VALUES ('Jack'); ### SELECT -SELECT * FROM table_aduser; # содержимое всех стобцов в выбранной (FROM) таблице -SELECT Name,email FROM table_aduser; # содержимое указанных стобцов -SELECT DISTINCT Name,Email FROM table_aduser; # отобразить уникальные записи (без повторений) -SELECT * FROM table_aduser ORDER BY Name; # отсортировать по Name -SELECT * FROM table_aduser ORDER BY Name DESC; # обратная сортировка -SELECT COUNT(*) FROM table_aduser; # количество строк в таблице -SELECT COUNT(new_info) FROM table_aduser; # количество строк в столбце + +SELECT * FROM table_aduser; # содержимое всех стобцов в выбранной (FROM) таблице +SELECT Name,email FROM table_aduser; # содержимое указанных стобцов +SELECT DISTINCT Name,Email FROM table_aduser; # отобразить уникальные записи (без повторений) +SELECT * FROM table_aduser ORDER BY Name; # отсортировать по Name +SELECT * FROM table_aduser ORDER BY Name DESC; # обратная сортировка +SELECT COUNT(*) FROM table_aduser; # количество строк в таблице +SELECT COUNT(new_info) FROM table_aduser; # количество строк в столбце ### WHERE -NOT; AND; OR # по приоритетам условий -SELECT * FROM table_aduser WHERE Name = 'Alex'; # поиск по содержимому -SELECT * FROM table_aduser WHERE NOT Name != 'Alex'; # условие NOT где Name не равен значению -SELECT * FROM table_aduser WHERE email != ''; # вывести строки, где содержимое email не рано null -SELECT * FROM table_aduser WHERE email != '' OR id > 1000; # или id выше 1000 -SELECT * FROM table_aduser WHERE Name RLIKE "support"; # регистронезависемый (RLIKE) поиск -SELECT * FROM table_aduser WHERE Name RLIKE "^support"; # начинаются только с этого словосочетания + +NOT; AND; OR # по приоритетам условий +SELECT * FROM table_aduser WHERE Name = 'Alex'; # поиск по содержимому +SELECT * FROM table_aduser WHERE NOT Name != 'Alex'; # условие NOT где Name не равен значению +SELECT * FROM table_aduser WHERE email != ''; # вывести строки, где содержимое email не рано null +SELECT * FROM table_aduser WHERE email != '' OR id > 1000; # или id выше 1000 +SELECT * FROM table_aduser WHERE Name RLIKE "support"; # регистронезависемый (RLIKE) поиск +SELECT * FROM table_aduser WHERE Name RLIKE "^support"; # начинаются только с этого словосочетания ### DELETE -SELECT * FROM table_aduser WHERE Name RLIKE "alex"; # найти и проверить значения перед удалением -DELETE FROM table_aduser WHERE Name RLIKE "alex"; # Query OK, 2 rows affected # удалено две строки -DELETE FROM table_aduser; # удалить ВСЕ значения + +SELECT * FROM table_aduser WHERE Name RLIKE "alex"; # найти и проверить значения перед удалением +DELETE FROM table_aduser WHERE Name RLIKE "alex"; # Query OK, 2 rows affected # удалено две строки +DELETE FROM table_aduser; # удалить ВСЕ значения ### UPDATE -SELECT * FROM table_aduser WHERE Name = 'Jack'; # найти и проверить значение перед изменением + +SELECT * FROM table_aduser WHERE Name = 'Jack'; # найти и проверить значение перед изменением UPDATE table_aduser SET Name = 'Alex' WHERE Name = 'Jack'; # изменить значение 'Jack' на 'Alex' -UPDATE db_aduser.table_aduser SET Name='BCA' WHERE id=1; # изменить значение в строке с ID 1 +UPDATE db_aduser.table_aduser SET Name='BCA' WHERE id=1; # изменить значение в строке с ID 1 ### CHECK -CHECK TABLE db_aduser.table_aduser; # проверить -ANALYZE TABLE db_aduser.table_aduser; # анализировать -OPTIMIZE TABLE db_aduser.table_aduser; # оптимизировать -REPAIR TABLE db_aduser.table_aduser; # восстановить -TRUNCATE TABLE db_aduser.table_aduser; # очистить + +CHECK TABLE db_aduser.table_aduser; # проверить +ANALYZE TABLE db_aduser.table_aduser; # анализировать +OPTIMIZE TABLE db_aduser.table_aduser; # оптимизировать +REPAIR TABLE db_aduser.table_aduser; # восстановить +TRUNCATE TABLE db_aduser.table_aduser; # очистить ### DUMP @@ -3396,6 +3450,22 @@ crontab -e 00 23 * * * /usr/bin/mysqldump -uroot -p1qaz!QAZ db_zabbix > `date +/dump/smb/zabbix-\%d-\%m-\%Y-\%H:\%M.sql` 0 0 * * * find /dump/zabbix -mtime +7 -exec rm {} \; +mysqldump -u root db_zabbix > /dump/zabbix/db_zabbix.sql +mysql -u user_zabbix -p -e 'CREATE DATABASE db_zabbix;' +mysql -u user_zabbix -p db_zabbix < /root/db_zabbix.sql + +### innodb_force_recovery + +sed -i '/innodb_force_recovery/d' /etc/mysql/my.cnf # удалить +mode=6; sed -i "/^\[mysqld\]/{N;s/$/\ninnodb_force_recovery=$mode/}" /etc/mysql/my.cnf # добавить mode 6 +systemctl restart mysql + +[mysqld] +innodb_force_recovery=1 # сервер пытается начать работу независимо от того, есть ли поврежденные данные InnoDB или нет +innodb_force_recovery=2 # удается восстановить работу за счет остановки потока команд, которые были частично выполнены или не выполнены (не запускает фоновые операции) +innodb_force_recovery=3 # отменяет откат после восстановления поврежденных файлов (не пытается откатить транзакции) +innodb_force_recovery=6 # запуск СУБД в режиме read only + ### MySQL Connector NET ### Add-ADUser