C++ программист @ 14:33
ОТ 25000 РУБЛЕЙ В МЕСЯЦ !!!!!
создание пакетов RPM
Из тарболов и прикладываемых к ним patch-ей из пакетов с исходниками (.SRC.RPM), создам бинарный RPM - т.е. такой RPM, в котором упакованы исполняемые пакеты. Причем, если RPM будет создан на текущей машине, он теоретически будет наилучшим образом подходить к текущей конфигурации пакетов (именно поэтому многие администраторы наиболее важные пакеты собирают из исходников заново на своей машине).
В результате установки пакета с исходниками:
- В директорию /usr/src/RPM/source помещу все необходимые тарболы (обычно один) и патчи (может быть много, а может быть и ни одного - все зависит от разработчика и составителя конкретного RPM).
- В директорию /usr/src/RPM/spec помещу установочный скрипт (файл с расширением spec) в котором разработчик RPM помещает все действия по установке пакета - разархивирование тарбола, накладывания патчей, транслирование и т.д.
Получу из установленного исходника соответствующий пакет с помощью команд rpm --rebuild *.src.rpm (самая простая команда) и rpm -ba paket..spec (см. RPM-HOWTO).
разработка консольных программ
настрою локаль методами setlocale
русифицирую под другой компиллятор программу
встрою аварийное прекращение работы программы
запаролю
разработка демонов/системных сервисов для ОС на базе ядра Linux
Изменю файловую маску при помощи функции umask()
Создам уникальную ID сессию с навым SID
Изменю рабочий каталог при помощи функции chdir()
Закрою стандартные файловые дескрипторы
Основной код демона обычно находится внутри бесконечного цикла. Технически это не бесконечный цикл конечно, но он организован как бесконечный
скимпилирую при помощи gcc и запущу на выполнение из командной строки
Для завершения выясню его PID и воспользуюсь командой kill.
Я также задействую подходящие заголовочные файлы для взаимодействия с syslog'ом, использование которого рекомендуется как минимум для записи в журнал информации о запуске/останове/паузе/завершении, в дополнение к использованию ваших собственных журналов через вызовы функций fopen()/fwrite()/fclose().
разработка сетевых приложений (клиентов и серверов, использующих стандартные и/или специально разработанные протоколы)
пользуюсь технологией socet()
На каждое соединение создам отдельный поток procedure socketthread
Определю размер буфера чтения для сокета vsize := sizeof(bufsize)
Выведу на парсение ShellExecute
Создам прослушивающий сокет vlistensocket
Переведу сокет в неблокирующий режим, используя функцию ioctlsocket(...), позволяющую контролировать режимы работа сокета.
получу сообщения окна function wsaasyncselect. При вызове этой функции, сообщения о соединении, чтении/записи данных в сокет и закрытии сокета можно обрабатывать в функции обработки сообщений от окна.
разработка/модернизация модулей ядра Linux
Определю структуру file_operations стандартом C99
Добавлю драйвер в систему вызовом функции register_chrdev(),
создам символьное устройство доступное только для чтения
возвращает сообщение, с указанием количества произведенных попыток чтения
из файла устройства.
Создам модуль для работы, с разными версиями ядра воспользовавшись директивами условной компиляции, основываясь на сравнении макроопределений LINUX_VERSION_CODE и KERNEL_VERSION
Создам файл в /proc способом struct proc_dir_entry *Our_Proc_File
создам файлы, доступные для записи в /proc
настрою работу с файлами устройств функцией device_write
настрою системные вызовы через extern void *sys_call_table[]
выполню блокировку процессов посредством static ssize_t module_output
Заменю printk через static void print_string(char *str)
запущу вспомогательные задачи по расписанию
настрою IRQ (аппаратное прерывание) через request_irq
разработка ПО с встроенными механизмами вычисления/проверки ЭЦП, ауетентифкации пользователей на основе ЭЦП/сертификатов открытых ключей - разработка ПО использующего openssl
Внедрю VBA-код
организую, цикл по всем прикрепленным к сообщению файлам: содержимое каждого файла шифруется и добавляется в архив (для чего имя файла передается в функцию интерфейсного модуля OLAddAttach), после чего прикрепленный файл удаляется из сообщения
разработка клиента/сервера TLS, HTTPS
выполню фрагментацию (или объединение однотипных) сообщений, предназначенных для передачи, в структуры TLSPlaintext размером не более 16384 байт посредством enum
и struct
выполню сжатие данных (естественно, без потери информации) через ContentType;
Вычислю ключевой блок в протоколе передачи записей посредством key_block
ключевой блок разделю на порции, служащие клиенту и серверу ключами хэш-функций и шифрования, а также начальным вектором
вычислю имитовставку функцией HMAC_hash
шифрую блок вместе с имитовставкой способом stream-ciphered struct
Напишу приветственное сообщение клиента, открывающее процесс формирования сеанса или соединения главное в котором - выбранные алгоритмы сжатия и криптографии
через ProtocolVersion server_version
Атака, рассмотренная Даниэлем Блайхенбахером (Daniel Bleichenbacher) [BLEI], может быть предпринята против TLS-сервера, который использует PKCS#1, закодированный с помощью RSA
Наилучшим способом избежать уязвимости от этой атаки является обработка некорректно форматированных сообщений точно так же, как и корректно сформатированных RSA-блоков. Таким образом, когда сервер получает некорректно сформатированный RSA-блок, он должен сформировать случайное 48-байтовое число и применять его в дальнейшем в качестве предмастерного секретного кода. Таким образом, сервер будет действовать идентично вне зависимости от того, является ли полученный RSA-блок корректным.
Настрою общедоступный Diffie-Hellman-ключ клиента
Настрою Верификацию сертификата
Настрою отправление сообщения finished, чтобы верифицировать процессы ключевого обмена и аутентификации
Вычислю мастерный секретный код
разработка программного обеспечения для дискретных вычислений, его оптимизация по производительности
напишу код прюфера. Кодирование/декодирование дерева через класс-контейнер матрицу
напишу симплекс-оптимизацию на Pascal
настрою быстрое преобразование фурье на С созданием плана
проектирование/документирование с использованием UML
составлю на StarUML UML-файлом диаграммы развертывания
архитектура большинства систем управления информацией трехуровневая, то есть пользовательский интерфейс, бизнес-логика и база данных физически отделены друг от друга
Идентифицирую устройства и процессоры, как и в отношении более простой клиент-серверной системы.
промоделирую коммуникационные устройства со степенью детализации, достаточной для такого рода оценок.
Настрою логическое группирование узлов
Смоделирую устройства и процессоры с помощью диаграмм развертывания. Всюду, где есть возможность, пользуюсь инструментальными средствами для раскрытия сетевой топологии системы
Если необходимо сфокусировать внимание на динамике системы, включу диаграммы прецедентов для специфицирования представляющих интерес видов поведения и раскрою их с помощью диаграмм взаимодействия
Смоделирую устройства и процессоры с помощью диаграмм развертывания. Всюду, где есть возможность, пользуюсь инструментальными средствами для раскрытия сетевой топологии системы.
Если необходимо сфокусировать внимание на динамике системы, включу диаграммы прецедентов для специфицирования представляющих интерес видов поведения и раскрою их с помощью диаграмм взаимодействия
Настрою обратное проектирование для полностью распределенных систем, которые постоянно изменяются
работа стека TCP/IP
Тестирую стек TCP/IP с помощью утилиты Ping
Выполню команду Ping с адресом обратной связи для того, чтобы проверить, что стек TCP/IP установлен правильно
Выполню команду Ping с IP-адресом вашего компьютера для проверки возможного дублирования IP-адресов
Выполню команду Ping с IP-адресом маршрутизатора по умолчанию
Выполню команду Ping с IP-адресом удаленного хоста, чтобы проверить, что вы можете осуществлять взаимодействие через маршрутизатор
Использую службу DHCP для автоматической конфигурации сети
Настрою многопротокольную маршрутизацию
Использую службу имен DNS и WINS в сетях Windows NT
Проверю работоспособность сервера WWW
Проверю работоспособность сервиса FTP
Проверю работоспособность стека TCP/IP
Установлю поддержку TCP/IP в службе удаленного доступа
архитектура ОС на базе ядра Linux
Интеграция кода ipset, позволяющего повысить эффективность работы пакетного фильтра с большими списками IP-адресов и подсетей
Ipset — компонент универсального фреймворка фильтрации и преобразования пакетов netfilter (последний является частью ядра linux). В его задачу входит хранение больших списков IP-адресов и подсетей, MAC-адресов, TCP/UDP-портов с возможностью быстрого поиска по ним. Этими списками можно управлять вручную (при помощи команды ipset), в пакетном режиме (чтение из файла) или автоматически согласно правилам netfilter (iptables -j SET), срабатывающим при прохождении определенных пакетов. Проверку адресов/портов на наличие в списках тоже можно проводить непосредственно из netfilter (iptables -m set). Таким образом, ipset позволяет, например, создавать и сопровождать блэк-листы адресов, уличенных в атаках или попытках сканирования служб.
Ключевые новшества пятой версии:
Полная поддержка семейства адресов IPv6 (предыдущие версии ipset поддерживали только IPv4).
Устранено ограничение для списков типа ipporthash, ipportiphash и ipportnethash, предписывавшее, что адреса в пределах одного списка должны принадлежать одному блоку /16.
Устранено ограничение для списков типа ipporthash и ipportnethash, запрещавшее сохранять в них адреса хоста, на котором работает ipset.
Для всех типов списков, сохраняющих номера портов, теперь поддерживается сохранение протокола (TCP/UDP/ICMP, в последнем случае вместо номера порта сохраняется пара значений тип/код ICMP).
Для всех типов списков реализована поддержка таймаутов. По истечении указанного количества секунд с момента добавления, запись автоматически удаляется из списка. (В предыдущей версии ipset 4.x таймауты поддерживались только в типе iptree.)
Поддерживается добавление/удаление нескольких записей в рамках одной транзакции.
Для связи ядро-userspace теперь используется протокол Netlink.
Алгоритм хэширования hash-типов значительно оптимизирован по потреблению памяти.
Улучшен синтаксис (например, вместо ipset -N foo macipmap --network 192.168.0.0/16 теперь можно написать ipset create foo bitmap:ip,mac range 192.168.0.0/16), при этом синтаксис предыдущих версий также поддерживается.
Интегрирован новый планировщик потока пакетов CHOKe (CHOose and Keep), разработанный с целью избавления сетевых подсистем от излишней буферизации, приводящей к возникновению дополнительных задержек и понижению пропускной способности
Расширение поддержки оборудования, около 65% всех изменений связаны с драйверами устройств;
Начало работы по унификации кода поддержки платформ m68k и m68knommu;
Добавлена поддержка новой архитектуры UniCore-32, разработанной в микропроцессорном центре Пекинского университета. Процессоры на базе архитектуры UniCore-32 активно используются в Китае;
Реализация новых системных вызовов name_to_handle и open_by_handle, позволяющих пользовательским приложениям сопоставить имя файла с внутренней структурой
file_handle или открыть файл, указав его handle. Нововведение может быть полезным для реализации серверов NFS и 9P на пользовательском уровне. Файловая система XFS уже поддерживает подобные механизмы, которые были реализованы через специализированные ioctl-вызовы FS_IOC_PATH_TO_HANDLE и XFS_IOC_OPEN_BY_HANDLE;
Реализация таймера CLOCK_BOOTTIME, позволяющего организовать автоматический выход системы из спящего режима в определенное время;
Добавление опции, заставляющей обработчики прерываний выполняться в виде нитей (threads);
Реализована новая подсистема " media controller", расширяющая возможности V4L2 в плане работы с устройствами аппаратной акселерации обработки мультимедиа-контента;
Реализация техники трансцендентного управления памятью (" Transcendent memory"), позволяющей улучшить поведение системы при работе с не представляющими важность данными (например, кэш) в условиях дефицита оперативной памяти. По сути Transcendent memory напоминает RAM-диск, имеющий ряд особенностей: размер RAM-диска не известен, запись данных не всегда может быть гарантирована и уже записанные данные могут быть очищены (удалены);
Улучшения DRM/KMS-модулей: Поддержка метода Page Flipping и Z-сжатия (Z-compression) для видеодрайвера Nouveau. Реализация в DRM/KMS-драйвере Radeon поддержки карт Radeon HD 6900 "Cayman", а также поддержка тайлинга (tiling, процесс обработки изображения по частям с последующей раздельной обработкой фрагментов) для карт r6xx/r7xx. Включение в состав ядра прототипа драйвера для карт Intel GMA 500 Poulsbo, который пока не поддерживает функции акселерации. Добавление DRM-модуля для видеокарт с интерфейсом USB и USB2VGA-переходников на базе чипов DisplayLink, позволяющих подключить дополнительный монитор через USB-порт; В DRM-драйвер для Xen Dom0 добавлена поддержка менеджера памяти TTM (Translation Table Maps);
Интегрированы недостающие сетевых бэкенды (xen-netback), необходимые для работы Xen Dom0;
Последний компонент ядра избавлен от использования глобальной блокировки (Big Kernel Lock, BKL).
процессы/нити
получу возвращаемое значение функции функцией: int pthread_join
нить могу отсоединить, вызвав в любой момент ее жизнь, если нас чем-то не устраивает возврат значения через pthread_join, например, нам необходимо получить данные в нескольких нитях
что бы начать использовать объект типа pthread_mutex_t по назначению, то есть для синхронизации, проведу ее инициализацию при помощи функции:
int pthread_mutex_init
после того как проинициализировал mutex, я его захвачу при помощи функции:
int pthread_mutex_lock
Для освобождения захваченного mutex'а предназначена функция:
int pthread_mutex_unlock
физическое/виртуальное адресное пространство ядра/прикладного процесса
адресное пространство разбивается на разделы их размер и назначение в какой-то мере зависят от конкретного ядра Windows. Особый интерес представляет
раздел для выявления нулевых указателей. Этот раздел адресного пространства резервируется для того, чтобы программисты могли выявлять нулевые указатели. Любая попытка чтения или записи в память по этим адресам вызывает нарушение доступа.
Настрою управление адресным пространством процесса
Настрою блокировку области и сниму блокировку
Выделю область по алгоритму allocreg
Присоединю область к процессу по алгоритму attachreg
Измененю размер области с помощью функции sbrk
Настрою загрузку области
Настрою освобождение области с помощью алгоритма iput
Настрою отсоединение области от процесса при помощи системных функций exec, exit и shmdt
Копирую содержимое области системной функцией fork
сетевая подсистема (сокеты, маршрутизация)
Передам статические маршруты в DHCP
Настрою IPv6 в Ubuntu Linux
Настрою IPv6 в Debian GNU/Linux
Подключу FreeBSD к IPv6 - подниму туннель через IPv4-сети провайдера
настрою ng_neflow для нескольких интерфейсов
настрою прозрачный редирект порта, используя xinetd и netcat
Изменю имя сетевого интерфейса в Linux
через dhcp настрою отдачу таблицы маршрутизации
Настрою беспроводную 80211 карту под FreeBSD
Настрою обобщение используемых моделей ввода/вывода
Настрою tcpdump для просмотра содержимого пакетов по определенным портам
Настрою в FreeBSD добавление/удаление алиас для сетевого интерфейса
Напишу калькулятор для расчета адресов в подсети и сетевых масок
Настрою PPPoE соединение в Debian/Ubuntu Linux
Объединю сетевые интерфейсы в Ubuntu Linux при помощи "bonding"
Превращу Cisco Catalyst 6500 в кабельный тестер
Настрою конфигурирование bonding для сетевых интерфейсов на RHEL/CentOS 5
Настрою конфигурирование VLAN в RHEL/CentOS/Fedora и Debian/Ubuntu
Восстановлю потерянный Ethernet линк в Linux
создам MAC-based dns лист
Объединю сетевые интерфейсы при помощи протокола LACP во FreeBSD 7
Настрою Linux как Wifi шлюз для КПК
протяну 802.1q tagged порт через ip-сеть
Сброшу счетчики ifconfig в Linux
Настрою привязку имени сетевого интерфейса к MAC адресу в Linux
настрою сетевой мост во FreeBSD
настрою управление дуплексным режимом и скоростью линка в различных ОС
настрою проброс трафика через Linux машину, используя Proxy ARP
выполню объединение сетевых интерфейсов под Linux
выполню привязку IP к MAC адресу
выполню объединение сетевых интерфейсов под FreeBSD 5.x
выполню включение Device Polling в FreeBSD
настрою смену скорости (10/100) и duplex (full/half) на сетевых картах Realtek-8139
ликвидирую потери пакетов и нестабильную работу ethernet карт
выставлю принудительно 100Mb FullDuplex для Intel EtherExpress Pro100
Объединеню сетевые интерфейсы в Gentoo Linux операция называется bonding
Выполню дублирование сервера с использованием VRRP
привяжу IP к MAC-адресу сетевой карты
создам сокет с заданными параметрами
напишу дескриптор к сокету
напишу код для обработки ошибок в вызове socket()
ликвирую не выполняющийся (мертвый) код
Подготовлю систему 'получатель' создав канал, объявлю канал как псевдоленту в файле конфигурации D3, загружу виртуальную машину D3 на системе 'получатель' , настрою сервер по умолчанию
Подготовлю систему 'отправитель'
управляю netgraph, применяя две утилиты: ngctl и nghook
Соединеню несколько сетей
Выполню подсчет трафика
С помощью ng_one2many объединю несколько сетевых интерфейсов (например, подключенных к разным провайдерам) в один узел, и трафик будет равномерно распределяться между интерфейсами. Для распределения нагрузки использую round-robin алгоритм. Как вариант, предлагаю дублирование пакетов от one на все many-интерфейсы
IPC
определю структуру сообщения и ключ очереди
Настрою обмен информацией между клиентом и сервером
Создам очередь сообщений при помощи функции msgget(2)
Удалю очередь
Настрою идентификатор очереди для программы клиента
Широко использую семафоры как средство синхронизации потоков и процессов
Получу доступ к разделяемой памяти, используя семафор
Удалю семафор
добавлю или обновлю значение переменной
возвращю переменную
создам или открою сегмент разделяемой памяти
Запишу данные в сегмент разделяемой памяти.
после завершения записи настрою уведомление об этом другие программы, используя семафор.
Синхронизация с использованием семафора необходима, поскольку использование ресурса разделяемой памяти практически аналогично использованию файлового ресурса, где временное блокирование и разблокирование доступа позволяет избежать потери данных
Тонкость заключается в том, что, поскольку семафоры могут блокировать и разблокировать ресурсы, они также могут блокировать друг друга
Отлажу вызыванные долгие задержки при ожидании доступа
работа с устройствами
получив список классов функцией CM_Enumerate_Classes
программно получу информацию о классе функцией SetupDiGetClassDescription
получу список устройств принадлежащих некоторому классу, используя функцию SetupDiGetClassDevs
имея список (вернее его хендл) перечислю все устройства находящиеся в нём функцией под названием SetupDiEnumDeviceInfo
получу имя устройства (или его описание) используя функцию SetupDiGetDeviceRegistryProperty
получу имя устройства по хендлу перечисления и структуре SP_DEVINFO_DATA.
получу список устройств по заданному GUID’у класса.
Напишу функцию, которая произведёт вывод сего списка устройств в компонент TreeView
Настрою включение и отключение устройств функцией SetupDiSetClassInstallParams
Удаленно включу/выключу сетевое подключение
настрою отслеживание изменений, в аппаратной конфигурации вызвав функцию RegisterDeviceNotification
Программно отключу диск по коду экземпляра устройства, остановлю драйвер, деинсталирую, обновлю драйвер, инсталирую, запущу снова, и снова подключаю к нему диск
Клавиатуру или мышь открою CreateFile, запрошу дескрипторы устройства, конечных точек и
настрою обмен данными
Настрою отправку запросов к HID- устройству что позволит хосту изменять дескрипторы HID- устройства
Напишу драйверы для HID-устройства, с помощью дескриптора устройства вызвав функцию createfile
Подключу HID-функции драйвера и использую их для выведения ошибок,
сформирую правильный буфер,
получу идентификатор изготовителя, идентификатор продукта, серийный номер.
Настрою работу с регистром USBCON: биты включения модуля USB, приостановки синхронизации, перидачи удаленного пробуждения, отключение от линии, резуме исходного потока, разрешения удаленного пробуждения, конфигарационный бит, разрешиния функции адресации,
Регистрами USBADDR. USBINT. USBIEN. UEPNUM. UEPCONX. UEPSTAX. UEPRST. UEPINT. UEPIEN. UEPDATX. UBYCTLX. UFNUML. UFNUMH.
Опишу константы для доступа к регистрам, типы, макросы для управления регистрами,
опишу USB-дескрипторы,
инициализирую внутренний генератор USB, включу интерфейс USB, инициирую процесс нумерации, конфигурирую нулевую конечную точку как управляющую, сброшу нулевую конечную точку (Reset), разрешу прерывание от нулевой конечной точки функцией usb_init и подключу к шине, при этом проконтролирую возникновение прерываний от конечных точек с помощью проверки регистра UEPINT
установлю флаг активности
введу описание делителей PLL в зависимости от используемого кварца
настрою отключение/подключение до начала нумерации
конфигурирую синхронизатор
настрою для формирования корректного ответа с FIFO-буфера нулевой конечной точки последовательное считывание всех полей и данных запроса, согласно конфигурационному пакету, и в соответствии с типом запроса выполнение действий
Если запрос не поддерживается устройством, то для него введу дополнительную процедуру отклонения STALL()
Выполню обработку запроса GET_DESCRIPTOR
Настрою передачу пакета на нулевую конечную точку
Выполню обработку запроса GET_CONFIGURATION и SET_ADDRESS
Выполню обработку запросов SET_CONFIGURATION и GET_STATUS
Настрою обработку запросов строковых дескрипторов
Напишу строки дескриптора на UNICODE
Добавлю конечные точки и их описаниетипа INTERRUPT IN
Создам дескриптор репорта
Добавлю в структуру usb_configuration HID-дескриптор
Напишу код для передачи данных в хост через конечную точку
В код функции usb_get_descriptor впишу обработку запроса дескриптра HID (код 0x21) и дескриптора REPORT (код 0x22)
Использую INPUT-репорты для доставки и обработки данных: Выделю данные в отдельный поток и использую асинхронные функции
Использую FEATURE-репорты для обмена данными
Для чтения данных с устройства получу его дескриптор с помощью функции CreateFile и получу имя устройства
Определю, какие репорты поддерживает устройство
Настрою HID-устройство с несколькими репортами одновременно создав между ними различия
многозадачность (планирование задач, механизмы сериализации)
Настрою обмен данными между процессами, используя clipboard, DLL, WM_COPYDATA, shared memory, DDE, RPC, ActiveX, pipes, sockets, mailslots, MSMQ
в режиме ядра
Настрою Wait-функции, события функцией CreateEvent(), ожидаемые таймеры функцией CreateWaitableTimer(), мьютексы функцией CreateMutex()
Настрою преобразование в последовательную форму и обратно -
Сериализацию что дает программисту возможность сохранения и восста-
новления объектов влияя на класс CObject с помощью макросов
поддержу версию при сериализации, используя функцию IMPLEMENT_SERIAL
что позволит изменять вид курсора при ожидании,
в случае если в приложении есть код, выполняемый более 4-5 минут заставлю окно нормально обновляться
преобразую приложение из обычного в MFC
изменю положение элементов управления,
когда размер окна изменяется, т.е., например, чтобы они выравнивались
по правому или нижнему краю
сохраню состояние текущего процесса, восстановлю следующий процесс и передам ему управление
введу структуру task_struct
Создам задачу пользователя
Системным вызовом pid_t fork() - создам дочерний процесс
создам дочерний поток при помощи системного вызова fork
создам вытесняющую многозадачность в рамках адресного пространства одного процесса
системным вызовом int clone
дочернему процессу создам свой стек параметром void *child_stack
настрою вытесняющую многозадачность, переключив контекст в ядре Linux/x86 функцией / void __switch_to
напишу вытесняющий планировщик с разделением времени на многопроцессорную машину Linux 2.5 полностью сохранив контекст процесса функцией 'schedule!)' на языке assembler
файловая система
восстановлю утерянные данные на жестком диске
исправлю файловую систему RAW
изменю тип файловой системы с FAT32 на NTFS без потери данных
запишу образ ISO или любой другой образ на USB Flash
создам и прочитаю множественные потоки данных с помощью перенаправления ввода – вывода
для запоминания даты установки программы, создания “файла ресурсов” для скрипта с хранением в нем всех надписей, выводимых на разных языках
Производительность приложения, в котором смешаны ввод, вычисления и вывод, можно повысить, запустив эти операции как три отдельных потока
Создам каталои в ОС Linux, установлю режим доступа к новым каталогам, создам промежуточные каталоги, если они не существуют,
удалю заданные каталоги и все промежуточные пустые каталоги
игнорирую отказ удаления непустых каталогов
настрою вывод сообщений по каждому удаленному каталогу
создам жесткие ссылки для библиотек dll, чтобы обезопасить программу от случайного удаления необходимого файла.
Заменю символические ссылки каталогами вместо ликвидации ссылок
Использую жесткие ссылки на каталоги
устанавлю сервер DNS
организую общий доступ к файловым системам для Windows-клиентов
автоматизирую копирование файлов, принудительное удаление, если надо, то с подачей запроса подтверждения пользователю перед удалением файлов
организую блокировку доступа к файлу, например, при одновременном доступе процессов к одному файлу на определенное время
размонтирую ранее подмонтированную файловую систему в каталоге /mnt
определю тип файлов
Вывод любой команды перенаправлю в файл
изменю права доступа к файлу или каталогу в ОС Linux
установлю специальные биты доступа, которые позволяют настраивать дополнительные ограничения на использование исполняемых файлов и каталогов
SUID бит устанавливается для исполняемых файлов, и позволяют изменить права пользователя на время выполнения соответствующих программ
SGID бит значение данного бита аналогично значению бита SUID в отношении группы
Sticky bit Установка данного бита для исполняемого файла позволяет сохранить такой файл в памяти после завершения его выполнения, что ускорит повторный запуск этого файла, если дополнительные данные, связанные с этим файлом, уже присутствуют в памяти. Установка данного бита для каталога дает возможность пользователю удалять только те файлы, владельцем которых он является
измененю владельца и группы, к которым принадлежит файл
настрою режимы работы механизма SELinux
в политике targeted настрою возможность веб-серверу Apache предоставлять доступ к файлам домашних каталогов пользователей
Использую утилиту SELinux Troubleshooting Tool для контроля над доступом к объектам файловой системы
Настрою аудит системных событий (auditd): 1. Установлю и настрою демон аудита (auditd) 2. Настрою правила аудита, удовлетворяющие заданным условиям. 3. Запущу, демон аудита (auditd). 4.Настрою анализ полученных данных и создам отчет аудита.
Настрою отслеживание за системными вызовами, за доступом к файлам и каталогам, системными вызовами
знания по архитектуре открытых ключей (PKI x 509)
функцией SEQUENCE настрою управление PKI
введу дополнительное имя владельца, чтобы расширить границы идентификации Владельца сертификата и предоставить набор дополнительной справочной информации о Владельце сертификата
Одним из перспективных направлений улучшения доступности и достоверности регистрационных данных является применения технологий, основанных на инфраструктуре открытых ключей - PKI (Public Key Infrastructure)
вызову функции OpenSSL функцией openssl и дам команды:
Работа с ключами
Работа с файлами сертификатов в формате PEM
Работа с файлами сертификатов в формате PKCS12
Работа со списком отозванных сертификатов
Отображу информацию о закрытом ключе
Отображу информацию о сертификате в формате PEM
Инсталлирую центр сертификации:
1. Установлю срок жизни сертификата и длину его ключа
2. Создам серверный и клиентский сертификат
3. Напишу серверный сертификат server.crt
4. Напишу закрытый ключ серверного сертификта server.key
5. подготовлю архив со всеми необходимыми файлами, и передать их системному администратору сервера
6. отзову сертификат
в сертификат впишу идентификатор AKID указывающий, каким сертификатом подписан рассматриваемый нами сертификат потому что:
1. в случае перевыпуска сертификата AKID однозначно идентифицирует искомый публичный ключ, поэтому исключена путаница между «старым» и «новым» сертификатами с одинаковым полем Subject
2. современный стандарт PKI предполагает специальное использование сертификатов, имеющих одинаковую ключевую информацию, но разные информационные поля, для установления сложных взаимоотношений доверия между иерархиями сертификации. Поэтому важно, чтобы мы могли идентифицировать сертификат именно по ключу и выбирать подходящий из нескольких вариантов.
Настрою CRL distribution points для использования URL, по которому можно получить список отозванных сертификатов, в данном случае - по протоколу HTTP.
Настрою заголовок транспортного уровня
использую следующую структуру: PKIProtection для защиты сообщения пользователя
В случае разделяемой секретной информации
Напишу сообщение запроса сертификата
Настрою защиту PKI сообщений для защиты их целостности
Настрою разделение секретной информации функцией PasswordBasedMac
Напишу сообщение ответа регистрации, ответ восстановления ключа,
Настрою запрос отмены сертификата и ответ на него
Настрою оповещение об изменении ключа
Настрою оповещение о существовании сертификатов
Настрою оповещение о выполнении центром сертифекации отмены или предположении отмены сертификата
Настрою оповещение о выпуске центром сертификации новых CRL
Настрою подтверждение PKI
Настрою общее сообщение PKI
Применю при использовании publicKeyMAC в POPOSigningKeyInput для доказательства аутентичности запроса алгоритм, использующий разделяемую секретную информацию для создания ключа МАС, и вычисляет MACs открытых ключей, с помощью данного ключа МАС для создания аутентифицирующего значения
Настрою управление pkiPublicationInfo необходимое подписчикам для управления опубликованием центром сертификации сертификата и установления архивирования закрытого ключа, соответствующего открытому ключу из запроса сертификата
В случае если конечный участник может получить один или более сертификатов от одного или более ценров сертификации использую атрибут userCertificate для представления этих сертификатов в записи каталога, относящейся к данному пользователю.
Сохраню самоподписанные сертификаты и сертификаты, выпущенные для данного центра сертификации центров сертификации из той же области, что и данный центр сертификации атрибутом cACertificate.
Для хранения всех сертификатов, выпущенных данным ценром сертификации за исключением самоподписанных сертификатов, использую Forward-элементы crossCertificatePair-атрибут записи каталога центра сертификации
Напишу класс объектов, для задействования точек распространения CRL и дельта CRLs используя функцию MAY CONTAIN
Настрою транспортные протоколы, позволяющие конечным участникам передавать друг другу PKI-сообщения.
Создам протокол управления на основе файла, на основе TCP, что соответствует случаям, когда конечный участник (или центр регистрации) инициирует транзакцию и может принимать результаты. По e-mail, по HTTP
По LDAP v2 для предоставления доступа к репозиториям PKI для получения информации и управления этой информацией настроив LDAP чтение репозитория операциями BindRequest (и BindResponse) SearchRequest (и SearchResponse) UnbindRequest
Настрою LDAP модификации репозитория для добавления, удаления и модификации PKI информации, в репозитории, используя функции BindRequest (и BindResponse), ModifyRequest (и ModifyResponse), AddRequest (и AddResponse)DelRequest (и DelResponse), UnbindRequest
создание пакетов RPM
разработка консольных программ
разработка демонов/системных сервисов для ОС на базе ядра Linux
разработка сетевых приложений (клиентов и серверов, использующих стандартные и/или специально разработанные протоколы)
разработка/модернизация модулей ядра Linux
разработка ПО с встроенным механизмами вычисления/проверки ЭЦП, ауетентифкации пользователей на основе ЭЦП/сертификатов открытых ключей - разработка ПО использующего openssl
разработка клиента/сервера TLS, HTTPS
разработка программного обеспечения для дискретных вычислений, его оптимизация по производительности
проектирование/документирование с использованием UML
работа стека TCP/IP
архитектура ОС на базе ядра Linux
процессы/нити
физическое/виртуальное адресное пространство ядра/прикладного процесса
сетевая подсистема (сокеты,маршрутизация)
IPC
работа с устройствами
многозадачность (планирование задач, механизмы сериализации)
файловая система
базовые знания по архитектуре открытых ключей (PKI x509)
технологии/инструменты
GNU Toolchain
gcc/g++
gdb
svn/mercurial
make
autotools
ltrace/strace
ldd/objdump
valgrind/callgring
tcpdump/wireshark/netcat
ssh (terminal & tunneling)
Shell/sed/awk
установка/настройка LInux
базовая настройка сетевой подсистемы, настройка маршрутизации, настройки пакетного фильтра
установка и настройка инструментов разработчика