воскресенье, 22 декабря 2019 г.

Что-то не захотели вместе жить KVR16N11S8/4 и HX316C10F/8 на ASUS H81M-R.
Что ж, буду знать.

среда, 27 ноября 2019 г.

Я, кажется, носом клюю над альбомом
Своих фотографий. А так берегла!
Куда ж их девать? Разослать по знакомым?
Пусть вспомнят: такая жила да была…
И будут валяться застывшие «миги»,
Пока молодые не вычистят дом,
Чтоб новые вещи, и новые книги,
И новые фото расставить кругом.
Знакомая мамы… А около – папа,
А шляпка-то, шляпка! Комичный наряд,
Такие носили лет сорок назад.
И все эти даты, событья, этапы,
А с ними же платья, причёски и шляпы –
В камин полетят.
(Ларисса Андерсен)

пятница, 13 сентября 2019 г.

linux: команда ping и административные привилегии

Заинтересовал исходный код команды ping. Быстро нашелся работающий пример, но насторожило, что работает этот пример только с правами администратора.

Выяснилось, что дело в конструкции socket(AF_INET, SOCK_RAW, IPPROTO_ICMP). Оказывается, непривилегированным пользователям не позволено открывать raw-сокеты. Сделано это, как я понял, из соображений безопасности: raw-сокеты относятся к третьему уровню модели OSI, и могут ничего не знать о портах и прочих прелестях TCP, UDP и т.д., отдавая обработку IP-пакетов целиком на откуп программисту.

Однако возникает закономерный вопрос: команда ping же как-то работает без sudo. Подобное поведение возможно благодаря хитрым правам, розданным файлу /bin/ping. Если у нас есть файл /home/huh-muh/myprog, и мы хотим сделать его таким же крутым, этого можно достигнуть двумя путями.

1. Выполнить последовательность команд:
# chown root:root /home/huh-muh/myprog
# chgrp u+s /home/huh-muh/myprog

2. Либо воспользовавшись capabilites:
#filecap /home/huh-muh/myprog net_raw net_admin

или

#setcap cap_net_raw,cap_net_admin=eip /home/huh-muh/myprog

Посмотреть, какие права даны программе, можно командой:

#getcap /home/huh-muh/myprog

понедельник, 3 июня 2019 г.

ssh: аутентификация с помощью сертификатов

Пусть есть сервер с именем myServer, на котором создана учетная запись myUser, и есть клиентская машина, с которой мы хотим получить доступ по ssh под этой учетной записью, авторизовавшись с помощью сертификатов.

Будем считать, что машины "чистые", т.е., в каталогах ~/.ssh нет никаких файлов id_rsa.*

1. На клиенте: Переходим в каталог ~/.ssh и создаём там пару приватный ключ-открытый ключ командой:
ssh-keygen -t rsa
в результате в каталоге ~/.ssh образуются два файла: id_rsa (приватный ключ) и id_rsa.pub (открытый ключ).

2. На клиенте: Закидываем открытый ключ на сервер командой:
scp ~/.ssh/id_rsa.pub myUser@myServer:~/.ssh/

3. На сервере: Добавляем открытый ключ в файл authorized_keys командой:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/.ssh/id_rsa.pub

После этого можно пробовать заходить на сервер myServerс помощью сертификата:
ssh myUser@myServer

В приниципе, эти ключи необязательно должны иметь имя id_rsa.* и храниться в папке ~/.ssh. Можно при подключении явно указывать имя файла, содержащего приватный ключ:
ssh myUser@myServer -i ~/myCustom_id_rsa

среда, 15 мая 2019 г.

Windows: Установка принтера по умолчанию через реестр

Чтобы указать принтер, используемый по умолчанию, не через папку "Устройства и принтеры", а через реестр, надо сделать следующее:

1. Посмотреть доступные принтеры в разделе:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices

2. Поправить параметр:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device
(он должен выглядеть примерно так: "myPrinter,winspool,Ne03:")

Говорят, еще можно это сделать из командной строки:
rundll32 printui.dll,PrintUIEntry /y /q /n "myPrinter"

Литература:

https://helpdesk.win2pdf.com/index.php?/Knowledgebase/Article/View/63/0/set-default-printer-from-registry

воскресенье, 28 апреля 2019 г.

Windows 2008: Hyper-V и дилетанты

Предположим, возникла ситуация: жил-был Windows2008-сервер с Hyper-V, на котором работала виртуальная машина, и этот сервер в один не очень прекрасный момент приказал долго жить. К счастью, виртуальная машина лежала на отдельном диске и не пострадала. Возникает две задачи: 1) как добраться до файлов на виртуальном жестком диске и 2) как эту виртуальную машину поднять на другом сервере?

Тут надо сделать небольшой экскурс в структуру файлов, в которых хранится виртуальная машина (пусть её имя QUQU). Выглядит эта структура примерно так:
C:
└─ProgramData
  └─Microsoft
    └─Windows
      └─Hyper-V
        ├─Snapshots
        │ └─22222222-2222-2222-2222-222222222222.xml   <- символическая ссылка на конфигурацию фотографии ВМ
        └─Virtual Machines
          └─11111111-1111-1111-1111-11111111111.xml    <- символическая ссылка на конфигурацию ВМ
...
D:                                                     <- диск для хранения виртуальных машин
└─QUQU
  ├─Snapshots                                          <- папка для хранения фотографий ВМ
  │ ├─22222222-2222-2222-2222-222222222222             <- фотография виртуальной машины
  │ │ ├─22222222-2222-2222-2222-222222222222.bin
  │ │ └─22222222-2222-2222-2222-222222222222.vsv
  │ └─22222222-2222-2222-2222-222222222222.xml         <- конфигурация фотографии ВМ
  ├─Virtual Machines
  │ ├─11111111-1111-1111-1111-11111111111              <- пустая папка, не знаю, зачем
  │ └─11111111-1111-1111-1111-11111111111.xml          <- конфигурация ВМ
  ├─QUQU-c.vhd                                         <- образ диска С: виртуальной машины
  └─QUQU-c_33333333-3333-3333-3333-333333333333.avhd   <- изменения на диске С: виртуальной машины

Насколько я понял, система функционирует следующим образом. До создания фотографий виртуальная машина работает с образом диска - файлом QUQU-c.vhd. При создании фотографии этот файл "замораживается", и создается файл *.avhd, в котором накапливаются дифференциальные изменения диска С: виртуальной машины. И так далее.

Таким образом, чтобы можно было добраться до файлов виртуальной машины, надо как-то скомбинировать файлы дифференциальных накоплений и исходного состояния диска С: виртуальной машины. Говорят, штатным образом это как-то делатся на сервере в гипервизоре Hyper-V, но и без гипервизора можно обойтись.

Оказывается, к решению первой задачи (доступ к файлам ВМ) приводит следующая последовательность действий:

1. Чтобы не порушить структуру ВМ, копируем все QUQU-c.vhd и QUQU-c_33333333-3333-3333-3333-333333333333.avhd в какую-нибудь папку (например, D:\temp)

2. Запускаем с правами администратора утилиту DISKPART.

3. В командной строке diskpart-а выполняем команду:
select vdisk file=D:\temp\QUQU-c_33333333-3333-3333-3333-333333333333.avhd
эта команда нацелит diskpart на последний файл дифференциального накопления.

4. В командной строке diskpart-а выполняем команду:
merge vdisk depth=1
эта команда скомбинирует файлы дифференциального накопления (тут у нас один файл, поэтому depth=1) с исходным файлом и выдаст в QUQU-c.vhd самый свежий образ диска C: виртуальной машины.

5. Этот образ при помощи оснастки "Управление дисками" (например, так: с правами администратора команда mmc -> меню "Файл" - > пункт "Добавить или удалить оснастку...") подцепляем к системе: меню "Действие" -> пункт "Присоединить виртуальный жесткий диск".

Вторая задача (по переносу виртуальной машины) решается тоже несложно:

1. Останавливаем сервис Hyper-V:
net stop vmms

2. Создаём символические ссылки на конфигурацию виртуальной машины и всех её фотографий в рабочей папке Hyper-V нового сервера:
mklink "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\11111111-1111-1111-1111-11111111111.xml" "D:\QUQU\Virtual Machines\11111111-1111-1111-1111-11111111111.xml"

mklink "C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\22222222-2222-2222-2222-222222222222.xml" "D:\QUQU\Snapshots\22222222-2222-2222-2222-222222222222.xml"

3. Раздаём этим символическим ссылкам нужные права:
icacls "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\11111111-1111-1111-1111-11111111111.xml" /grant "ВИРТУАЛЬНАЯ МАШИНА NT\11111111-1111-1111-1111-11111111111":F /T /L

icacls "C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\22222222-2222-2222-2222-222222222222.xml" /grant "ВИРТУАЛЬНАЯ МАШИНА NT\11111111-1111-1111-1111-11111111111":F /T /L
(если операционная система англоязычная, то "ВИРТУАЛЬНАЯ МАШИНА NT" меняем на "NT VIRTUAL MACHINE").

4. Запускаем сервис Hyper-V:
net start vmms
и отправляемся настраивать сетевые адаптеры на восстановленной виртуальной машине.

Литература:

http://itexpertclub.blogspot.com/2015/02/how-to-merge-vhd-and-avdh-files-using.html

http://pyatilistnik.org/kak-vosstanovit-virtualnyie-mashinyi-hyper-v-pri-kopirovanii-na-drugoy-host-v-windows-server-2008r2/

http://forum.oszone.net/thread-214658.html