Skip to content

Instantly share code, notes, and snippets.

@Eduard-gan
Created October 7, 2018 18:47
Show Gist options
  • Save Eduard-gan/38d808fe6c67efb6f70a0b47a1a66509 to your computer and use it in GitHub Desktop.
Save Eduard-gan/38d808fe6c67efb6f70a0b47a1a66509 to your computer and use it in GitHub Desktop.
Наследие
5288 Python: Экранирование строк от спецсимволов регулярных выражений:
Бывает так что из конфига или от пользователя нужно собрать строку, которая потом идёт в регулярное выражение.
Для того чтобы эффективно и быстро заэскейпить все спецссимволы регулярок в этой сроке используется re.escape(контент) - она возвращает заэкранированный контент.
т.е. реально можно использовать вот так:
re.search(re.escape(resource['mask'])+'.*'+re.escape(resource['format']),object.filename)
5289: Python: Отправка файла по SMB
def send_file(filename):
from smb.SMBConnection import SMBConnection
user='gan'
password='texa$is4re@son'
client_machine_name='Zabbix'
conn = SMBConnection(user, password, client_machine_name, 'beta', use_ntlm_v2 = True)
assert conn.connect('192.168.0.251', 139)
with open(filename, 'rb') as opened_file:
a = conn.storeFile('Backup', 'schedule_states.txt', opened_file, timeout=30)
conn.close()
5295: Python: Запрос к MSSQL
apt-get install freetds-dev freetds-bin python-dev
pip install pymssql
import pymssql
conn = pymssql.connect(server='yourserver.database.windows.net', user='yourusername@yourserver', password='yourpassword', database='AdventureWorks')
cursor = conn.cursor()
cursor.execute('SELECT c.CustomerID, c.CompanyName,COUNT(soh.SalesOrderID) AS OrderCount FROM SalesLT.Customer AS c LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID GROUP BY c.CustomerID, c.CompanyName ORDER BY OrderCount DESC;')
row = cursor.fetchone()
while row:
print str(row[0]) + " " + str(row[1]) + " " + str(row[2])
row = cursor.fetchone()
5297: PowerShell: Удалённая активация WinRM
WinRM - это служба отвечающая за удалённый вызов команд PowerShell.
Активируется она из командной строки(которую штатно получаем с помощью PsExec):
winrm quickconfig
Это автоматически запустит службу и добавит нужные исключения а фаерволл.
5298: Windows: Удалённая активация RDP-подключений
Подключение:
psexec \\hostname -u domain\admin_user -e cmd
Активация:
reg add "hklm\system\currentcontrolset\control\terminal server" /f /v fDenyTSConnections /t REG_DWORD /d 0
Обезвреживание фаерволла:
netsh firewall set service remoteadmin enable
netsh firewall set service remotedesktop enable
То же но с Powershell:
get-ItemProperty -Path "HKLM:\system\currentcontrolset\control\terminal server" -Name fDenyTSConnections
Set-ItemProperty -Path "HKLM:\system\currentcontrolset\control\terminal server" -Name fDenyTSConnections -Value 0
в Windows 7 нет командлета для работы с фаерволом так что на PS в этом случае можно забить...
5299: Python: Выполнение с Linux-хоста произвольного PowerShell-кода на удалённой машине в домене. | Это сложно.
* Нужно настроить WinRM на машине-цели и проверить его:
winrm quickconfig
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
Просмотр параметров WinRM:
winrm get winrm/config/service
* Нужно установить все необходимые пакеты для работы Kerberos на Linux-машину:
apt-get install python3-dev libkrb5-dev krb5-user
* Настроить и проверить Kerberos:
При установке пакета KRB5 будет задан вопрос о дефолтном домене. Пишется полное имя домена заглавными буквами - SOUZ.LOCAL
конфигурационный файл /etc/krb5.conf будет включать следующее:
[libdefaults]
default_realm = SOUZ.LOCAL
...
[realms]
MYDOMAIN.LOCAL = {
kdc = dc0.mydomain.local
kdc = dc2.mydomain.local
}
Проверка:
kinit gan - будет запрошен пароль. Нужно проследить что пароль запрашивается для правильной учётки и правильного домена.
kilst - удостовериться что билет получен.
kdestroy - удалить билет если это необходимо. Нам перед запуском кода нужно будет УЖЕ иметь билет. Автоматически он не получится.
* Для безопасного получения билетов без указания пароля в явном виде можно использовать безопасное хранилище учётных данных kerberos:
Для создания нужного хранилища используется утилита ktutil у неё интерактивный режим работы - вот схема работы в нём:
ktutil
add_entry -password -p [email protected] -k 1 -e aes128-cts-hmac-sha1-96
add_entry -password -p [email protected] -k 1 -e rc4-hmac
add_entry -password -p [email protected] -k 1 -e des-cbc-crc
add_entry -password -p [email protected] -k 1 -e des-cbc-md5
wkt /etc/krb5.keytab
quit
Проверка. Теперь билеты могут получаться не интерактивно и безопасно с помощью
kinit -k gan
* Установить нужные модули для Python3:
pip3 install requests-kerberos==0.10.0
pip3 install pywinrm[kerberos]
* Не забыть получить билет и протестировать код:
import winrm
session = winrm.Session('192.168.0.217', auth=('[email protected]', 'doesNotMatterBecauseYouAreUsingAKerbTicket'), transport='kerberos')
cmd = session.run_cmd('ipconfig', ['/all']) #Выполнение CMD-кода
ps = session.run_ps('get-host') #Выполнение PS-кода
print(cmd.std_out.decode('cp866')) # Выход приходит как байтстринг. нужен декод с соответствующей кодировкой. У Windows это cp866 или cp1251.
print(ps.std_out.decode('cp866'))
print(ps.std_err.decode('cp866'))
print(ps.status_code)
5665: Python: нахождение диапазонов чисел с помощью регулярных выражений
Общий метод - создание составного диапазона из более мелких, объединяя их с помощью ИЛИ ( "|" ) + крайние значения:
Например:
от 0 до 180: "0{0,2}[0-9]|0?[1-9][0-9]|1[0-7][0-9]|180"
более 25: "[2][5-9]|[3-9]\d)|\d{3,6}"
Если нужно только совпадение в конкретном месте строки - можно добавлять контекст. В данном случае это "WAS: " и возможный "-".
"WAS: -?[2][5-9]|WAS: -?[3-9]\d|WAS: -?\d{3,6}"
5968: Просмотр даты создания файла в Linux
Довольно интересно что на уровне ОС данный функционал пока не реализован в готовом виде так что получить эти данные через программы ls и stat пока невозможно.
Однако на уровне файловой системы EXT4 эта информация есть и чтобы её получить "умные люди советуют":http://moiseevigor.github.io/software/2015/01/30/get-file-creation-time-on-linux-with-ext4/ воспользоваться дебаггером файловой системы:
debugfs -R 'stat <filename>' </dev/sdXX - partition name>
Например:
debugfs -R 'stat /var/log/check_schedule_last_run.log' /dev/mapper/Zabbix--vg-root
Для завершения просмотра можно нажать "q".
Python: Выполнение локальной команды Powershell и получение объекта обратно
май 21, 2017, 22:12
<div>Python 3.6 / Windows management framework 5.1
import subprocess
import json
output = subprocess.check_output(["powershell.exe", "Get-Process -Name smss | ConvertTo-Json"], shell=True)
print (output)
print (type(output))
decoded = output.decode('ascii')
print(type(decoded))
imported = json.loads(decoded)
print(imported)
print(type(imported))
print(imported['StartInfo']['Environment'][4][16:-1])
Tags: windows, #print, python, powershell
15 июля 2016
Django: Начало
#Минимальная базовая установка Djano + uWSGI + nginx:
# Начальная установка
apt-get update
apt-get install python3 python3-pip
#Возможно потребуется установить python3-dev
pip3 install Django
pip3 install uwsgi
apt-get install nginx-full
#Проверка работы веб-сервера uWSGI на простом скрипте python:
nano test.py:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
# Большая часть этй функции стандартизирована, здесь ничего нелья убрать или сократить. Это чистый стандарт.
uwsgi --http 0.0.0.0:8000 --wsgi-file test.py
# Это запустит uwsgi с прослушиванием внешнего порта на действующем ip-адресе(не 127.0.0.1) причём наружу uwsgi будет отдавать и принимать данные по протоколу HTTP. С внутренней стороны разумеется протокол uwsgi который практически реализует стандарт WSGI.
# Создание проекта Django
cd /var/www
django-admin startproject TEST
cd TEST
./manage.py migrate
nano TEST/settings.py:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
mkdir /var/www/TEST/static
./manage.py collectstatic
# Тест проекта с встроенным сервером разработки
./manage.py runserver 0.0.0.0:8080(тестируем с реальным внешним адресом, а не локально на 127.0.0.1)
# Тестовый запуск проекта с uWSGI
# Для расшифровки опций uWSGI очень хороша uwsgi --help
uwsgi --chdir=/var/www/TEST --module=TEST.wsgi:application --env DJANGO_SETTINGS_MODULE=TEST.settings --master --http=0.0.0.0:80 --vacuum
# Запускаем на реальном адресе uWSGI. Потом для проксирования через nginx мы запустим на лупбэке и в режиме --socket а не --http.
# Запуск uWSGI для обслуживания динамических и статических запросов
uwsgi --chdir=/var/www/TEST --module=TEST.wsgi:application --env DJANGO_SETTINGS_MODULE=TEST.settings --master --http=0.0.0.0:8000 --vacuum --static-check /var/www/TEST/
# Запуск для проксирования через nginx(используем лупбэк, но лучше перейти на unix-сокет)
mkdir /var/log/uwsgi
uwsgi --chdir=/var/www/TEST --module=TEST.wsgi:application --env DJANGO_SETTINGS_MODULE=TEST.settings --master --socket=127.0.0.1:8000 --vacuum --daemonize=/var/log/uwsgi/TEST.log
# Запуск nginx для обработки статики и трансляции динамических(Python) запросов на uWSGI-сервер
nano /etc/nginx/sites-available/TEST:
upstream my_uWSGI_server {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name your_hostname;
charset utf-8;
location /static {
alias /var/www/TEST/static;
}
location / {
uwsgi_pass my_uWSGI_server;
include /var/www/TEST/uwsgi_params;
}
}
nano /var/www/TEST/uwsgi_params:
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
ln -s /etc/nginx/sites-available/TEST /etc/nginx/sites-enabled/TEST
/etc/init.d/nginx restart
Настроение хз-
Метки (редактировать) django, nginx, python, uwsgi
Python: Получение данных со стандартного ввода (echo "hey" | script.py)
echo -e "Hello Holly.\n This is HEY@" | python3 -c "import sys; print(sys.stdin.readlines())"
Как видно модуль sys даёт возможность поработать с стандартным вводом. У него много методов.
-e Включает escape-последовательности в echo.
-с Позволяет выполнить произвольный код прямо из команды. Не сильно произвольный т.к. многие конструкции зависят от правальных отступов.
";"(разделитель команд) - оказывается очень полезен в этом режиме.
При попытке использовать циклы возникают проблемы, лучше заменять их list comperhension'ом.
Метки: python
2 июня 2016
Linux: Создание и отправка зашифрованных файловых архивов по SFTP
1) Для работы в неинтерактивном режиме понадобится установка ключей ssh:
На сервере с которого мы хотим неинтерактивно заходить на другой сервер:
- ssh-keygen -t rsa (Генерируем ключи в стандартную папку и без пароля)
- копируем ключ ~./ssh/id_rsa.pub в папку пользователя от имени которого будем подключаться в ~.ssh/authorized_keys
2) Сам алгоритм работы:
mysqldump -u root --single-transaction postfix > /root/backup_somedatabase.sql (бэкапится какая-то SQL-база)
cp -r /usr/local/etc/someprogramm /root/someprogramm_conf_backup (бэкапятся какие-то файлы)
tar -cvf - /root/backup_somedatabase.sql /root/someprogramm_conf_backup/ | openssl enc -aes-256-cbc -salt -k PASS -e > /home/sysadmin/backup.tar.enc (создаётся зашифрованный архив свя фишка в - которое означает что выхлоп tar идёт на stdout)
printf "cd /mnt/vl1\nput /home/sysadmin/backup.tar.enc" | sftp myserver (Складываем бэкап на удалённый сервер по SFTP)
3) Использование бэкапа:
DECRYPT:
openssl enc -aes-256-cbc -d -in /mnt/vl1/backup.tar.enc -out /mnt/vl1/backup.tar -k PASS
EXTRACT:
tar -xvf /mnt/vl1/backup.tar
Метки (редактировать) bash, linux, openssl, ssh, tar
25 мая 2016
Python: Памятка по цветному выводу в Linux-консоли
1print '\033[1;30mGray like Ghost\033[1;m'
2print '\033[1;31mRed like Radish\033[1;m'
3print '\033[1;32mGreen like Grass\033[1;m'
4print '\033[1;33mYellow like Yolk\033[1;m'
5print '\033[1;34mBlue like Blood\033[1;m'
6print '\033[1;35mMagenta like Mimosa\033[1;m'
7print '\033[1;36mCyan like Caribbean\033[1;m'
8print '\033[1;37mWhite like Whipped Cream\033[1;m'
9print '\033[1;38mCrimson like Chianti\033[1;m'
10print '\033[1;41mHighlighted Red like Radish\033[1;m'
11print '\033[1;42mHighlighted Green like Grass\033[1;m'
12print '\033[1;43mHighlighted Brown like Bear\033[1;m'
13print '\033[1;44mHighlighted Blue like Blood\033[1;m'
14print '\033[1;45mHighlighted Magenta like Mimosa\033[1;m'
15print '\033[1;46mHighlighted Cyan like Caribbean\033[1;m'
16print '\033[1;47mHighlighted Gray like Ghost\033[1;m'
17print '\033[1;48mHighlighted Crimson like Chianti\033[1;m'
5 мая 2016
VirtualBox: Смена UUID диска
PS C:\Windows\system32> &"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" internalcommands sethduuid "E:\virtual\IPyt
hon\debian.vhd"
UUID changed to: f0b1163d-9ff8-4c38-a4dd-de318dfe059b
PS C:\Windows\system32>
Метки (редактировать) powershell, virtualbox
4 мая 2016
MySQL: Рутина
Создание пользователя с указанием хоста(чтобы разрешить существующему пользователю доступ а конкретного хоста, придётся создать такого же пользователя с таим же пролем но с другим хостом.):
grant all privileges on *.* to 'newuser'@'192.168.10.1' identified by 'password' WITH GRANT OPTION;
* GRANT - даёт права REVOKE - отбирает
* ALL - тип привилегий, есть ещё:
Table 6.2 Permissible Privileges for GRANT and REVOKE
Privilege Column Context
CREATE Create_priv databases, tables, or indexes
DROP Drop_priv databases, tables, or views
GRANT OPTION Grant_priv databases, tables, or stored routines
LOCK TABLES Lock_tables_priv databases
REFERENCES References_priv databases or tables
EVENT Event_priv databases
ALTER Alter_priv tables
DELETE Delete_priv tables
INDEX Index_priv tables
INSERT Insert_priv tables or columns
SELECT Select_priv tables or columns
UPDATE Update_priv tables or columns
CREATE TEMPORARY TABLES Create_tmp_table_priv tables
TRIGGER Trigger_priv tables
CREATE VIEW Create_view_priv views
SHOW VIEW Show_view_priv views
ALTER ROUTINE Alter_routine_priv stored routines
CREATE ROUTINE Create_routine_priv stored routines
EXECUTE Execute_priv stored routines
FILE File_priv file access on server host
CREATE TABLESPACE Create_tablespace_priv server administration
CREATE USER Create_user_priv server administration
PROCESS Process_priv server administration
PROXY see proxies_priv table server administration
RELOAD Reload_priv server administration
REPLICATION CLIENTRepl_client_priv server administration
REPLICATION SLAVE Repl_slave_priv server administration
SHOW DATABASES Show_db_priv server administration
SHUTDOWN Shutdown_priv server administration
SUPER Super_priv server administration
ALL [PRIVILEGES] server administration
USAGE server administration
* on *.* - на любую таблицу и базу. А вообще - база.таблица
* to 'newuser'@'192.168.10.1' - имя и хост с которого имя будет заходит. Для любого хоста используется '%'
* identified by 'password' - пароль
* WITH GRANT OPTION - даёт право раздавать пользователю свои привелегии другим пользователям, но не большие чем он обладает сам.
Смена пароля для пользователя:
use mysql;
SET PASSWORD FOR 'tom'@'localhost' = PASSWORD('foobar');
Создание резервной копии без блокировки БД:
mysqldump -u root -p --single-transaction zabbix > /root/zabbix_backup_db.sql
Восстановление резервной копии БД:
mysqldump -u root -p zabbix < zabbix_backup_db.sql
28 апреля 2016
PowerShell: Альтернативный способ запуска приложений
powershell -command "& {&'some-command' someParam}"
Also, here is a neat way to do multiple commands:
powershell -command "& {&'some-command' someParam}"; "& {&'some-command' -SpecificArg someParam}"
For example, this is how I ran my 2 commands:
powershell -command "& {&'Import-Module' AppLocker}"; "& {&'Set-AppLockerPolicy' -XmlPolicy myXmlFilePath.xml}"
powershell -command "& {&'Dismount-DiskImage' -ImagePath '\\server\someshare\backup\content.vhd'}"
Метки (редактировать) powershell
25 апреля 2016
tcpdump: Просмотр и одновременная запись пакетов в файл
tcpdump -w - | tee somefile | tcpdump -r -
Метки (редактировать) tcpdump
8 апреля 2016
Linux: Просмотр статистики I/O
Для этого можно использовать программу sysstat
Настройка простая:
Step 1. Install sysstat
sudo apt-get install sysstat
Step 2. Enable stat collection
sudo vi /etc/default/sysstat
change ENABLED=”false” to ENABLED=”true”
save the file
Step 3. Change the collection interval from every 10 minutes to every 2 minutes.
sudo vi /etc/cron.d/sysstat
Change
5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
To
*/2 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
save the file
Step 4. Restart sysstat
sudo service sysstat restart
Step 5. If you want to see all statistics you can type:
sar -A
Step 6. If you want to save the statistics for further analysis to a file use:
sudo sar -A > $(date +`hostname`-%d-%m-%y-%H%M.log)
References
man sysstat
man sar
For disk I/O trending there are a few options. My personal favorite is the sar command from sysstat. By default, it gives output like this:
09:25:01 AM CPU %user %nice %system %iowait %steal %idle
09:35:01 AM all 0.11 0.00 0.01 0.00 0.00 99.88
09:45:01 AM all 0.12 0.00 0.01 0.00 0.00 99.86
09:55:01 AM all 0.09 0.00 0.01 0.00 0.00 99.90
10:05:01 AM all 0.10 0.00 0.01 0.02 0.01 99.86
Average: all 0.19 0.00 0.02 0.00 0.01 99.78
The %iowait is the time spent waiting on I/O. Using the Debian package, you must enable the stat collector via the /etc/default/sysstat config file after package installation.
To see current utilization broken out by device, you can use the iostat command, also from the sysstat package:
$ iostat -x 1
Linux 3.5.2-x86_64-linode26 (linode) 11/08/2012 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.84 0.00 0.08 1.22 0.07 97.80
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
xvda 0.09 1.02 2.58 0.49 112.79 12.11 40.74 0.15 48.56 3.88 1.19
xvdb 1.39 0.43 4.03 1.82 43.33 18.43 10.56 0.66 112.73 1.93 1.13
Some other options that can show disk usage in trending graphs is munin and cacti.
10 марта 2016
Hyper-V: Права на файлы виртуальных машин.
В одну историю слиты и Hyper-V и Руссификация Windows.
Как выразился один блоггер, когда вы увидите разрешения на файлы Hyper-V у вас взорвётся мозг и вам будет проще съесть свои носки, чем исправить проблему с незапускающейся из-за недостаточности прав виртуальной машиной.
Суть в том, что Hyper-V создаёт "специальные" системные группы безопасности(Service SIDs). Специальность их заключается в том, что манипулировать ими, как и остальными группами из графического интерфейча не получится, узнать о них сложно. Группы например называются NT Virtual Machines. Или 2DDE62F7-509D-438A-BB6C-838ABD8E4C0E, например.
Сразу поясню, что:
- Группа 2DDE62F7-509D-438A-BB6C-838ABD8E4C0E - это группа созданная автоматически при создании виртуальной машины и называется она ровно так же как ID виртуальной машины.
- Группа NT Virtual Machines - это группа в которую входят все группы предыдущего вида. Группы предыдущего вида указываются в "особом" формате:
NT Virtual Machines\2DDE62F7-509D-438A-BB6C-838ABD8E4C0E
Это взрыв.
Теперь про любимую руссификацию: Название группы "NT Virtual Machines" руссифицировано. Т.е. если вы попробуете к ней или её членам обратиться с помощью icacl, то получите:
Сопоставление между именами пользователей и идентификаторами безопасности не было произведено.
Успешно обработано 0 файлов; не удалось обработать 1 файлов
Руссифицированные названия групп выглядят так:
ВИРТУАЛЬНАЯ МАШИНА NT
ВИРТУАЛЬНАЯ МАШИНА NT\Виртуальные машины
ВИРТУАЛЬНАЯ МАШИНА NT\2DDE62F7-509D-438A-BB6C-838ABD8E4C0E.
Слава Богу, что не руссифицировали ID.
Теперь носки.
Для начала нужно разобраться на что какие разрешения дать. Вот здесь чувак довольно дельно разложил на части стандартный сетап прав Hyper-V.
Тут тоже много разложено по полочкам.
А вообще манипуляции ведутся с помощью icacls.
Краткий хинт:
Посмотреть пермишны: icacls "E:\my_vms"
Отключить наследование: icacls "E:\my_vms" /inheritance:r
Удалить ACL: icacls "E:\my_vms" /remove "souz\gan"(или "система" или "Пользователи")
Добавить носочный ACL: icacls "E:\my_vms" /grant "ВИРТУАЛЬНАЯ МАШИНА NT\Виртуальные машины":F
Что куда давать:
Как правило даётся доступ группе "ВИРТУАЛЬНАЯ МАШИНА NT\Виртуальные машины" на общую папку с файлом настроек вирт.машины, дисками и снапшотами. На сам диск VHD, даётся полный доступ для "ВИРТУАЛЬНАЯ МАШИНА NT\2DDE62F7-509D-438A-BB6C-838ABD8E4C0E" (ID виртуальной машины естественно заменить на нужный, а нужный можно узнать по названию файла конфигурации вм)
Метки (редактировать) hyper-v, permissions
1 марта 2016
AD: Назначение гранулярных прав доменным учётным записям
В АД это устроено через GPO.
Если стоит например задача дать доменной учётке право типа SeServiceLogonRight на конкретном компьютере, то один из вариантов реализации это применить к подразделению(OU) в котором находится учётная запись компьютера политику гарантирующую права данному пользователю.
Это можно делать и в дефолтной доменной политике если изменения сильно глобально, но можно и создать отдельную политику повесив её на нужный OU дополнительно ограничив поле её применения учётной записью нужного ПК в фильтрах безопасности политики.
Конкретно право внутри политики выдаётся следующим способом:
Конфигурация компьютера -> Политики -> Параметры безопасности -> Локальные политики -> Назначение прав пользователя.
Метки (редактировать) ad, gpo, windows
15 февраля 2016
PowerShell: добавляем историю введённых команд
Проверяем верситю PS:
$PSVersionTable.PSVersion (Если меньше 3 то ставим её отсюда и перезагружаем ПК)
Разрешаем выполнение скриптов:
set-executionpolicy remotesigned
Устанавливаем PsGet(типа apt-get для PS):
(new-object Net.WebClient).DownloadString("http://psget.net/GetPsGet.ps1") | iex
import-module PsGet
Устанавливаем какие-то лунные модули:
install-module PsUrl
install-module PSReadline
Открываем Notepad++ в режиме суперпользователя и набиваем такой скрипт:
$HistoryFilePath = Join-Path ([Environment]::GetFolderPath('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action { Get-History | Export-Clixml $HistoryFilePath } | out-null
if (Test-path $HistoryFilePath) { Import-Clixml $HistoryFilePath | Add-History }
# if you don't already have this configured...
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward
и сохраняем по пути C:\Users\\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Перезапускаем PS и тестируем.
Метки (редактировать) powershell, windows
11 февраля 2016
Получение SID по username и обратно
wmic useraccount where name='username' get sid
wmic useraccount where sid='S-1-5-21-2572202928-53892503-2622909331-1366' get name
Метки (редактировать) sid, windows
26 января 2016
MSSQL: Выгрузка баз на удалённую систему.
При создании простого задания бэкапа с автоматическим именем файла зависящим от времени, типа такого:
DECLARE @backup_full_path varchar(1000)
SELECT @backup_full_path = (SELECT '\\beta\backup\sql_backup\MyDB_' + REPLACE(REPLACE(convert(varchar(500),GetDate(),120) , ':', '') , '-', '') + '.bak')
BACKUP DATABASE [upp2013_time] TO DISK = @backup_full_path WITH NOFORMAT, NOINIT, NAME = N'upp2013_time_full', SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10
Если владелец задания доменная учётка, то оно не запускается, а если владелец sa, то запускается но не может получить доступ на шару. ответ в этом случае просто. Выяснить от какого пользователя работает служба MSSQLSERVR и соответственно это и есть тот самый пользователь который будет проситься на шару. А случае работы SQL-сервера от локального админа - это соответственно будет локальный админ на удалённой системе. Просто даём соответствующие права.
Если всё равно не понятно от кого SQL-сервер пытается работать на шаре - хорошо помогают логи безопасности удалённой системы. там фиксируются входы в систему учётных записей.
Метки (редактировать) backup, sql
20 января 2016
VirtualBox: Сжатие динамического VDI
http://superuser.com/questions/529149/how-to-compact-virtualboxs-vdi-file-size
You have to do the following steps:
Run defrag in the guest (Windows only)
Nullify free space:
With a Linux Guest run this:
sudo dd if=/dev/zero of=/bigemptyfile bs=4096k
sudo rm -rf /bigemptyfile
Or:
telinit 1
mount -o remount,ro /dev/sda1
zerofree -v /dev/sda1
With a Windows Guest, download SDelete from Sysinternals and run this:
sdelete –z
Shutdown the guest VM
Now run VBoxManage's modifyhd command with the --compact option:
With a Linux Host run this:
vboxmanage modifyhd /path/to/thedisk.vdi --compact
With a Windows Host run this:
VBoxManage.exe modifyhd c:\path\to\thedisk.vdi --compact
Метки (редактировать) virtualbox
16 декабря 2015
Hyper-V: Уменьшение размера динамически-расширяемых образов (VHD)
При использовании динамически-расширающихся файлов-жестких дисков в Hyper-V происходит их рост, но не сокращение. Т.е. размер всегда растёт но никогда не сокращается, даже в том случае если данные в виртуальной машине были уже удалены.
По сути ситуация решается следующим принципом:
1) Дефрагментация дисков самой виртуальной машиной (желательно)
2) Заполнение неиспользуемых секторов нулями.
3) Использоывание средств сжатия файла-жесткого диска. (различные методы для NTFS-контента и Non-NTFS-контента)
Подробнее:
1) Для гостевых систем Windows и остальных, например, Linux-based используются свои индивидуальные способы и программы для дефрагментации. Этот шаг желателен но не обязателен.
2) Так же используются различные инструменты. Для Windows это могут быть нестандартные дефрагментаторы с опцией "заполнения нулями" или утилита от Русиновича Sdelete. Для Linux-based есть специально для этого написанная утилита zerofree, чуть подробнее о том как ей воспользоваться на практике:
А) Для рабты утилиты файловая система должна быть смонтирована в режиме "только для чтения", соотвественно перезагружаемся в безопасном режиме или уходим туда без перезагрузки ( telinit 1 ).
B) В этом режиме монтируем корневую систему в ro: mount -o remount,ro /dev/sda1
Если это не проходит и система кем-то занята, смотрим кем: fuser -v -m / (ищем программы помеченные в атрибутах буквой F или f и завершаем их)
У меня это были dhclient и systemd-udevd: pkill dhclient, кильнуть юдев нельзя так что завершаем его service sysdtmd-udevd stop
C) После того как всё же смонтировали ФС в ro используем zerofree -v /dev/sda1
D) Выключаем виртуальную машину
E) Проводим конверсию файла-образа из одного формата в другой (например из VHD в VHDX или обратно) Но учитываем что VHDX как правило намного больше по размерам сам по себе. Если другой формат не устраивает конвертируем обратно. Размер будет уменьшен относительно начала процесса.
FIXIT - найти не такой уёбищный способ compacting'а образов non-NTFS контента в Hyper-V
A1) Для Windows процедура и средства иные. Используется Sdelete
B1) Выключается машина.
C1) Файл-диск монтируется в оснастке "Управление дисками"
D1) В Hyper-V выбирается изменение диска, выбирается этот смонтированный файл.
E1) Выбирается действия дефрагментация(compact)
F1) По завершении всё отмонтируется и включается виртуальная машина.
В помощь:
http://serverfault.com/questions/165070/how-to-zero-fill-a-virtual-disks-free-space-on-windows-for-better-compression
http://serverfault.com/questions/633044/compacting-vhd-disk-images-when-they-are-dynamic
http://blogs.technet.com/b/askcore/archive/2012/09/20/compacting-a-dynamically-expanding-virtual-hard-disk-in-windows-server-2012.aspx
http://www.pwrusr.com/tips-and-tricks/2-ways-to-compact-your-dynamically-expanding-vhds
Метки (редактировать) hyper-v, linux, windows
11 ноября 2015
SMBCLIENT: SMB-браузинг из командной строки *nix
1) Для начала можно поставить пакет с клиентом Kerberos - krb5-user. При установке спросят дефолтный домен - указываем. Я указал заглавными буквами - работает. Проверяем рабостоспособность:
kinit gan
klist
если билет получен - замечательно.
2) Браузинг сети:
smbtree -S -k
3) Браузинг ПК:
smbclient -L //computer -k
4) Пользование ресурсом:
smbclient //computer -k
Метки (редактировать) samba
8 ноября 2015
Debian: Live HDD copy
Миграция с одного физического винта на другой.
1) Подключаем новый диск
2) Копируем MBR на новый диск - dd if=старый диск(sda) of=новый диск(sdb) bs=512 count=1
3) Сверяем идентичность таблиц размещения разделов с помощью fdisk. В моём случае пришлось создать раздел под своп и дать ему правильную метку(82).
4) Создаём и монтируем новую корневую ФС. mkfs.ext4 /dev/sdb1 ; mount /dev/sdb1 /mnt
5) Создаём файловую систему подкачки - mkswap /deb/sdb5 -U оригинальный UUID от старой файловой системы (посмотреть можно с помощью blkid)
6) Копируем содержимое корневой системы на новую - rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* /path/to/backup/folder
Здесь важно понимать что это не снапшот. Система должна быть максимально пассивной в момент копирования, все важные и сложные программы и базы данных нужно останавливать иначе есть шанс кривого восстановления этих самых программ.
7) Назначаем новой корневой системе UUID старой - tune2fs /dev/sda1 -U оригинальный UUID от старой файловой системы (посмотреть можно с помощью blkid)
8) Останавливаем систему.
9) Изымаем старый диск.
10) Загружаемся и проверяем.
Метки (редактировать) debian, rsync
7 ноября 2015
Debian: Полное удаление ПО
Для полного удаления ВСЕГО чо связано с ПО и его конфигурациями можно воспользоваться следующим способом:
Пример MySQL
apt-get remove --purge mysql\*
apt-get clean
updatedb
MySQL хранит дефолтную БД по адресу /var/lib/mysql, соответственно
rm -r /var/lib/mysql
Так же всегда помогает
find / -name *bareos* например.
Метки (редактировать) debian
6 сентября 2015
Прокси за 5 минут.
apt-get update ; apt-get install squid
#Конфигурационный файл представляет из себя мини-энциклопедию по Squid, работать с ним неудобно, хотя и чиать его надо, там много полезного, поэтому:
cp /etc/squid/squid.conf /etc/squid/squid.conf.backup
nano /etc/squid/squid.conf:
Настройки по-умолчанию выставлены разумными и требуется только лёгкая корректировка под условия базового запуска, в моём случае мне удобно считаь базовым - базовую аутентификацию всех пользователей со всех сетей:
Для этого нужны всего три шага:
1) Раскомментируем и дополняем следующим образом директиву описывающую механизм аутентификации:
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwordfile
2) Раскомментируем ACL для дальнейшего использования в теле файла:
acl password proxy_auth REQUIRED
3) Перед финальной дирекивой запрета доступа всем - http_access deny all, указываем что пропускаем любого, у кого есть пароль :)
http_access allow password
Далее содаём файл пользователей/паролей с помощью утилиты из комплекта Apache2:
apt-get install apache2-utils
htpasswd -c -d /etc/squid/passwordfile user
Опция -d отвечает за использование в создании файла хэш-функци crypt которая абсолютно необходима воркеру ncsa_auth, он другой не поймёт и аутентификация всегда будет завершаться ошибкой.
Опция -с отвечает за автоматическое создание файла, если его нет по пути.
/etc/init.d/squid restart
Метки (редактировать) squid
6 сентября 2015
Почта за 5 минут
apt-get update ; apt-get instal postfix
cp /usr/share/postfix/main.cf.dist /etc/postfix/main.cf
nano /etc/postfix/main.cf:
#Большую часть нужно просто раскомментировать
mail_owner = postfix
myhostname = mail.xcvx.tk
mydomain = xcvx.tk
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#Настройка ящиков по UNIX-аккаунтам системы
local_recipient_maps = unix:passwd.byname $alias_maps
mynetworks = 127.0.0.0/8, если есь LAN её надо указать, через запятую, если нет - игнорируем.
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
sendmail_path = /usr/sbin/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
#Комментируем всё это, т.к. это украшительства.
#html_directory =
#manpage_directory =
#sample_directory =
#readme_directory =
newaliases
/etc/init.d/postfix start
Базовая настройка и доведение сервера до функционаьного состояния закончены.
Почтовые ящики UNIX-пользователей внутри их домашних каталогов, в папке Maildir.
Впереди работы по защите от спама, который обязательно хлынет.
Метки (редактировать) postfix
6 сентября 2015
FTP за 1 минуту.
1) apt-get update ; apt-get install vsftpd
2) nano /etc/vsftpd.conf:
write_enable=YES # Разрешение команд записи
3) /etc/init.d/vsftpd restart
Комментарий:
Даная конфигурация обеспечивает локальным пользователям доступ ко всему содержимому сервера согласно их правам на уровне файловой системы.
Если пользователя нет, то напомню, что его можно быстро создать командой:
adduser username
Метки (редактировать) debian, ftp, vsftpd
22 августа 2015
Windows 7 + samba: Быстрый обмен файлами.
Быстрый шаринг происходит так:
Устанавливаем пакет samba. В моём случае это уже samba 3. В дефолтном конфиге сверяемрабочую группу, она должны быть такой же как у вин-машинки и добавляем конфиг шары в конец файла:
[public]
browsable = yes
path = /data/pub указываем свой путь, не зажатый сильно пермишшенами.
public = yes
writable = yes
guest ok = yes
Подключаемся из виндузов. Шара точно работает.
Метки (редактировать) samba, windows
8 августа 2015
Работа с соединениями в Linux
Для просмотра соединений подходит netstat. У неё много параметров я упомяну самы еполезные:
-a Просмотр в том числе и открытых сокетов (LISTENING)
-4 Просмотр информации по IPv4 (без unix-сокетов)
-t Просмотр информации по TCP-соединениям
-u Просмотр информации по UDP-датаграммам
Для сброса соединений хорошо подходит несколько средств:
Единичное воздействие - conntrack -D -s адрес (возможна большая детализация, для справки набрать conntrack)
Перманентное воздействие ip r a blackhole адрес. (быстро написать, легко запомнить, делает маршрут до хоста несуществующим соответственно ни удалённый хост ни локальный не смогут отправить друг другу пакетов)
Перманентное воздействие iptables -A INPUT -s адрес -j DROP (Более чстная и точная подстройка с указанием всего что только возможно, надо знать iptables для реализации всего потенциала, наиболее адекватный вариант)
Данные перманентные решения в случае если результатом их работы стала катастрофа(потеря доступа к серверу :) ) - лечатся перезагрузкой. Но ноужно иметь доступ к перезагрузке :) Большинство нормальных VPS эту возможность дают. Т.е. резетнуть сервер легко.
Метки (редактировать) ip, linux
8 августа 2015
Linux: conntrack Манипуляции с соединениями
В Debian есть пакет conntrack который содержит юзерспэйсовую улититу conntrack для операций с подсистемой отслеживания состояний соединений Linux.
С помощью неё можно делать очень многое, например разрывать конкретное TCP-соединение.
Для работы утилиты требуется установить пкет conntrack.
Проверить были ли указаны ли необходимые опиции ядра при его компиляции:
Вывод спика параметров:
cat /boot/config-`uname -r`
На данный момент необходимыми являются:
СONFIG_NF_CONNTRACK=m
CONFIG_NF_CONNTRACK_IPV4=m
CONFIG_NF_CONNTRACK_IPV6=m (if your setup supports IPv6)
CONFIG_NETFILTER_NETLINK=m
ONFIG_NF_CT_NETLINK=m
CONFIG_NF_CONNTRACK_EVENTS=y
Проверить загружены ли нужные модули ядра:
nf_conntrack
nf_conntrack_ipv4
nf_conntrack_netlink
Вывести список загруженных модулей:
lsmod
Если какой-то модуль отсутствует(у меня небыл загружен nf_conntrack_ipv4) его можно загрузить:
modprobe nf_conntrack_ipv4
Если программу планируется использовать постоянно, нужно внести модуль в список автоматической загрузки:
nano /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
nf_conntrack_ipv4
Метки (редактировать) ip, linux
7 августа 2015
debian: systemd, ошибка при закгрузке без съёмного диска
Такая ошибка может возникать если прописать автомонтирование в fstab с дефолтными настройками.
Лечится указанием опций nofail и nobootwait
21 июля 2015
Разделение файлов на части
Чтобы разделить файл удобно воспользоваться программой split
split -b размер_кусков -a разрядность_имён имя_разделяемого_файла
Это удобно для создания большого количества файлов в тестовых целях, а так же для отправки файлов по частям через Интернет/Почту.
Собрать файл обратно можно командой
cat x* > _желаемое_имя_конечного_файла
Метки (редактировать) linux
15 июля 2015
debian как задать время на сервере
date -s "2 OCT 2006 18:00:00"
Метки (редактировать) date, debian
14 июля 2015
Hyper-V Debian 8 и framebuffer
Дефолтные настро фрэймбуфера могут оказаться настолько неоптимальными что вы просто не будете видеть часть консоли и придётся скроллить её.
Так не пойдёт.
изменить ситуацию может опция для ядра, передаваемая ему загрузчиком, к делу:
nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet hyperv_fb:1024x768"
update-grub
reboot
Метки (редактировать) framebuffer, hyper-v, linux
18 июня 2015
Sparse file (Разреженный файл)
# dd if=/dev/zero of=/home/apollo.img bs=1 count=0 seek=10G
# yes | mkfs.ext3 /home/apollo.img
This will create a sparse, zero filled file, meaning it will be 0bytes on disk and allocate space, up to 10G, as data is stored to it.
Метки (редактировать) dd file
17 июня 2015
Aptitude установка без рекомендованных пакетов
Создаём или прафим файл: /etc/apt/apt.conf
// Recommends are as of now still abused in many packages
APT::Install-Recommends "0";
APT::Install-Suggests "0";
Метки (редактировать) aptitude
17 июня 2015
EXT4 интересные опции
data=journal - указывает сначала записывать метаданные и только затем сами данные. Упрощает восстановление по журналу после прерывания операций. Повышает надежность работы ФС.
error=continue - указывает что файловая система должна игнорировать ошибки. опасно тем, что повышает риски ухудшения ситуации и потери данных. Должен испорльзоваться только при обеспечении способности оперативно реагировать на ошибки. В конечном счёте повышает стабильность работы системы даже при возникновении исправимых аппаратных ошибк - например временное отключение AoE-нода из LVM на котором базируется EXT4.
https://www.kernel.org/doc/Documentation/filesystems/ext4.txt
информация о состоянии файловой системы tune2fs -l /dev/имя_устройства-носителя_файловой_системы
Метки (редактировать) ext4
15 июня 2015
AoE (VBLADE) Низкая скорость передачи
Если таргет vblade запускать без ключа -b 16384 (указание максимального размера буфера для сборки данных из фрэймов), то производительность будет в 4, а-то и более раз меньше, чем возможная.
Без этого параметра AoE на Virtualbox c локальной скоростью записи ~50МБ/с показывал передачу в 7МБ/с.
С ней 48.7 МБ/с.
А так же серия очень важных, ключевых советов по повышению производительности и скорости работы AoE:
There are a few things you can do to help:
1. Make sure you are using a good switch. Cisco, HP, I hear Juniper is good
too. Anything else is likely to be crap. Netgear, Linksys, Dell are all right
out.
1. Make sure you use hardware flow control on the switch.
2. Double check that you really have mtu 9000 on both ends.
3. I always run vblade with the -b 16384 option as without it performance was
significantly less.
4. Adding these to /etc/sysctl.conf helps a bit too:
# Optimizations to increase speed for AoE
net.core.rmem_default = 278528
net.core.rmem_max = 278528
net.core.wmem_default = 278528
net.core.wmem_max = 278528
net.core.netdev_max_backlog=10000
P.S.
The only time you should not use flow
control is if you are using one of either VLAN tagging or bonding, I forget
which and why.
upd
Протестировано что отключение MTU=9000 даёт четырёхкратное снижение производительности при прочих равных.
Метки (редактировать) aoe, san
19 апреля 2015
NTP-клиент: Автоматическая синхронизация при загрузке
Резактируется /etc/ntp.conf
server 192.168.0.254
server 192.168.0.250
Метки (редактировать) ntp
19 апреля 2015
KERBEROS: Простейшая конфигурация
Устанавливается пакет krb5-user - aptitude install krb5-user
Редактируется /etc/krb5.conf:
[libdefaults]
default_realm = DOMAINNAME.LOCAL
[realms]
DOMAINNAME.LOCAL = {
kdc = primarydc.domainname.local
kdc = secondarydc.domainname.local
}
ОБЯЗАТЕЛЬНО нужно проконтролировать, что большие буквы в разделе [libdefaults] ссылаются на такие же большие буквы в [realms]
kdc = secondarydc.domainname.local - опционально для владельцев вторичных контроллеов домена.
Метки (редактировать) kerberos
17 апреля 2015
SAMBA: Простейшая конфигурация
[global]
realm = DOMAINNAME.LOCAL
workgroup = DOMAINNAME
security = ads
dns proxy = no (самба не пытается использовать DNS если не получилось разрешить NetBIOS-имя)
domain master = no (самба не становится PDC)
local master = no (самба не становится мастер-браузером)
os level = 0 (самба не выигрывает выборы)
idmap config * : range = 10000 - 20000
idmap config * : backend = tdb
winbind enum groups = yes
winbind enum users = yes
template shell = /bin/bash
winbind refresh tickets = yes
winbind use default domain = yes
нюансы:
1- По умолчанию любая шара ro. директива writeable/writable - забагованная, используется read only = no.
2- не имеет значения какие права выставлены на точку монтирования до самого монтирования. После произведения монтирования хозяином точки станет root с разрешениями 700. Соответственно будет невозможно работать внутри у любого пользователя не будет ни на что прав. нужно менять права на точку монтирования после произведения монтирования.
3 - Группа с правами менять разрешения admin users = "@имя группы хоть на русском и хоть с пробелами"
4 - такие параметы как admin users и readonly полностью перекрывают любые права на каталоги. Вообще параметры декларируемые в настройках шары как правило приорететнее разрешений файловой системы.
Для того чтобы самба эфективно форсила группу родительской папки новым папкам и файлам к группе родительской папки стоит добавить set gid бит. chmod g+s /mnt/folder
Метки (редактировать) samba
18 апреля 2015
DEBIAN: Установка поддержки русского языка в консоли
1 - Установка русской локали:
dpkg-reconfigure locale
Выбирается ru_RU.UTF-8
Для применения изменений достаточно перелогиниться. Но делать этого не стоит. Оформление системы сменится на русское с невозможностью на данном этапе отображать русские символы.
2 - Установка пакета руссификации консоли. То, что делает возможным отображение русских символов в консоли:
aptitude install console-cyrillic
Для повторонй настройки:
dpkg-reconfigure console-cyrillyc
Важен выбор шрифта. Если шрифт не поддерживает русские символы, то результат от установки пакета будет нулевым. Ничего не изменится. Шрифт, гарантированно поддерживающий русские символы - Unicyr.
Для применения изменений /etc/init.d/console-cyrillic start
Настройки хранятся в файле /etc/console-cyrillic
Метки (редактировать) localization
|
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment