По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Ну просто очень частый кейс: создается виртуальная машина на Linux ОС (Hyper-V или VMware, не важно), которая работает длительное время. Но в один прекрасный момент, память сервера переполняется и приходится расширять диск. В виртуализации (гипервизоре) это сделать очень просто - нарастить виртуальный диск с физического. А что делать внутри виртуалки, где живет Linux/CentOS?
В статье мы расскажем, как расширить пространство памяти (диск) на сервера под управлением Linux/CentOS, последовательно управляя PV (Physical Volume, физические тома), VG (Volume Group, группа томов) и LV (Logical Volume, логические разделы).
А вообще мы можем расширить диск или нужно создать новый?
Это очень важный пункт. Обязательно проверьте вот что: дело в том, что диск разделенный на 4 раздела более не сможет быть расширен. Проверить это легко. Подключаемся к серверу CentOS и вводим команду fdisk -l:
# fdisk -l
Disk /dev/sda: 187.9 GB, 187904819200 bytes
255 heads, 63 sectors/track, 22844 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 2636 20972857+ 8e Linux LVM
Если вывод команды у вас выглядит так, как показано выше - все хорошо. У вас пока только два раздела - /dev/sda1 и /dev/sda2. Можно создать еще два.
Однако, если вывод команды будет выглядеть вот так:
# fdisk -l
Disk /dev/sda: 187.9 GB, 187904819200 bytes
255 heads, 63 sectors/track, 22844 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 2636 20972857+ 8e Linux LVM
/dev/sda3 2637 19581 136110712+ 8e Linux LVM
/dev/sda4 19582 22844 26210047+ 8e Linux LVM
Это означает, что для решения задачи расширения памяти на сервере вам нужно создавать новый диск, а не расширять предыдущий. Мы рассматриваем первый вариант, когда у вас еще есть возможность создавать разделы. Погнали!
Создаем новую партицию
Проверяем что у нас на физических дисках командой fdisk -l
# fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 391 3036285 8e Linux LVM
Сервер видит 10.7 ГБ места на диске. Начинаем создавать новую партицию (раздел) командой fdisk /dev/sda. После запроса ввода команды, указываем n, чтобы создать новую партицию:
# fdisk /dev/sda
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): n
В следующем разделе конфигурации, указываем ключ p чтобы создать раздел. Тут будьте внимательны - самый первый пункт нашей статьи - у вас должно быть на этот момент строго меньше 4 партиций на диске!
Command action
e extended
p primary partition (1-4)
p
На следующем экране задаем номер для партиции. Так как у нас уже есть партиции /dev/sda1 и /dev/sda2, то следуя порядковому номеру, мы указываем цифру 3:
Partition number (1-4): 3
В следующем пункте, мы рекомендуем нажать Enter дважды, то есть принять предложенные по умолчанию значения:
First cylinder (392-1305, default 392):
Using default value 392
Last cylinder or +size or +sizeM or +sizeK (392-1305, default 1305):
Using default value 1305
Отлично. Теперь мы меняем типа нашего раздела. Для этого, в следующем меню нажимаем ключ t, указываем номер партиции, который только что создали (напомним, это был номер 3), 3, а в качестве Hex code укажем 8e, а дальше просто Enter:
Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 8e
Changed system type of partition 3 to 8e (Linux LVM)
Готово. Мы вернулись в основное меню утилиты fidsk. Сейчас ваша задача указать ключ w и нажать Etner, чтобы сохранить опции партиций на диске:
Command (m for help): w
После, что самое важное этого метода - перезагружать ничего не нужно! Нам просто нужно заново сканировать партиции утилитой partprobe:
# partprobe -s
Если команда выше не работает, то попробует сделать с помощью partx:
# partx -v -a /dev/sda
И если уже после этого у вас не появляется новая партиция - увы, вам придется согласовать время перезагрузки сервера и перезагрузить его. Успешным результатом этого шага будет вот такой вывод команды fdisk, где мы видим новую партицию:
# fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 391 3036285 8e Linux LVM
/dev/sda3 392 1305 7341705 8e Linux LVM
Расширяем логический раздел LV с новой партиции
Теперь наша задача следующая: создаем физический том (PV) из новой партиции, расширяем группу томов (VG) из под нового объема PV, а затем уже расширяем логический раздел LV. Звучит сложно, но поверьте, это легко!
Итак, по шагам: создаем новый физический том (PV). Важно: у вас может быть не /dev/sda3, а другая, 4, например, или вообще /dev/sdb3! Не забудьте заменять в командах разделы, согласно вашей инсталляции.
# pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created
Отлично. Теперь находим группу томов (VG, Volume Group). А точнее, ее название. Делается это командой vgdisplay:
# vgdisplay
--- Volume group ---
VG Name MerionVGroup00
...
Найдено. Наша VG называется MerionVGroup00. Теперь мы ее расширим из пространства ранее созданного PV командой vgextend:
# vgextend MerionVGroup00 /dev/sda3
Volume group "MerionVGroup00" successfully extended
Теперь расширяем LV из VG. Найдем название нашей LV, введя команду lvs:
# lvs
LV VG Attr LSize
MerionLVol00 MerionVGroup00
MerionLVol00 - найдено.Расширяем эту LV, указывая до нее путь командой lvextend /dev/MerionVGroup00/MerionLVol00 /dev/sda3:
# lvextend /dev/MerionVGroup00/MerionLVol00 /dev/sda3
Extending logical volume MerionLVol00 to 9.38 GB
Logical volume MerionLVol00 successfully resized
Почти у финиша. Единственное, что осталось, это изменить размер файловой системы в VG, чтобы мы могли использовать новое пространство. Используем команду resize2fs:
# resize2fs /dev/MerionVGroup00/MerionLVol00
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/MerionVGroup00/MerionLVol00 is mounted on /; on-line resizing required
Performing an on-line resize of /dev/MerionVGroup00/MerionLVol00 to 2457600 (4k) blocks.
The filesystem on /dev/MerionVGroup00/MerionLVol00 is now 2457600 blocks long.
Готово. Проверяет доступное место командой df -h. Enjoy!
Получаете ошибку в resize2fs: Couldn't find valid filesystem superblock
Если вы получили ошибку вида:
$ resize2fs /dev/MerionVGroup00/MerionLVol00
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/MerionVGroup00/MerionLVol00
Couldn't find valid filesystem superblock.
Это значит, что у вас используется файловая система формата XFS, вместо ext2/ext3. Чтобы решить эту ошибку, дайте команду xfs_growfs:
$ xfs_growfs /dev/MerionVGroup00/MerionLVol00
meta-data=/dev/MerionVGroup00/MerionLVol00 isize=256 agcount=4, agsize=1210880 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=4843520, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Как тебе такое, Илон Маск?
Что такое парадигмы программирования? Это не более, чем просто замысловатое название для популярных способов и стилей организации процесса написания программного кода.
Я постараюсь разбить эту тему на части и дать простое пояснение по каждой парадигме. Таким образом, вы сможете легко понять, о чем говорят люди, когда произносят такие слова, как «объектно-ориентированный», «функциональный» или «декларативный». Давайте начнем!
Что такое парадигма программирования?
Парадигмы программирования – это различные способы и стили, которые используются для организации программы или языка программирования. Каждая парадигма состоит из определенных структур, функций и взглядов на то, как следует решать известные задачи программирования.
Вопрос о том, почему существует так много различных парадигм программирования, схож с вопросом о том, почему существует так много языков программирования. Определенные парадигмы лучше подходят для определенных типов задач. Именно поэтому имеет смысл использовать разные парадигмы для разных типов проектов.
Кроме того, методики, которые составляют каждую парадигму, развивались с течением времени. Благодаря достижениям как в области программного, так и аппаратного обеспечения появились различные подходы к решению задач, которых раньше просто не было.
И последняя причина – я думаю, это просто творческое начало в человеке. По своей натуре, нам просто нравится создавать новые вещи, улучшать то, что другие когда-то создали, и адаптировать инструменты под себя и свои предпочтения или просто делать их более эффективными (в нашем понимании).
Все это привело к тому, что на сегодняшний день мы имеем огромное количество вариантов, которые могут помочь нам написать и структурировать ту или иную программу.
Чем парадигма программирования не является?
Парадигмы программирования – это не языки и не инструменты. Вы не сможете ничего «создать» с помощью парадигмы. Они больше похожи на некий набор образцов и руководящих принципов, о которых условились большое количество людей, которым они следовали и которые они подробно изложили.
Язык программирования не всегда привязан к определенной парадигме. Есть языки, которые были созданы с учетом определенной парадигмы и имеют функции, которые облегчают программирование в этом контексте больше, чем другие (хороший пример – Haskel и функциональное программирование).
Однако существуют и «многопарадигмальные» языки. Это означает, что вы можете адаптировать свой код, чтобы он подходил под какую-то из парадигм (хороший пример – JavaScript и Python).
При этом парадигмы программирования не являются взаимоисключающими в том смысле, что вы можете без каких-либо проблем использовать приемы из различных парадигм одновременно.
Популярные парадигмы программирования
Теперь, когда вы знаете, что такое парадигмы программирования, а что к ним не относится, давайте рассмотрим самые популярные из них, их характеристики и сравним их.
Имейте в виду, что этот список не полный. Существуют и другие парадигмы программирования, которые мы здесь рассматривать не будем. Здесь я расскажу вам только о самых популярных и широко используемых.
Императивное программирование
Императивное программирование – это набор подробных инструкций, которые даются компьютеру, чтобы тот выполнил их в заданном порядке. Этот тип программирования называется «императивным», потому что мы некоторым образом указываем компьютеру (как программисты), что он должен делать.
Императивное программирование концентрируется на описании того, как программа работает, шаг за шагом.
Допустим, вы хотите испечь торт. Ваша императивная программа для такого рода задачи может выглядеть следующим образом:
1- Pour flour in a bowl
2- Pour a couple eggs in the same bowl
3- Pour some milk in the same bowl
4- Mix the ingredients
5- Pour the mix in a mold
6- Cook for 35 minutes
7- Let chill
Воспользуемся конкретным примером и предположим, что мы хотим отфильтровать массив чисел так, чтобы остались только числа, которые больше 5. Наш императивный код тогда будет выглядеть следующим образом:
const nums = [1,4,3,6,7,8,9,2]
const result = []
for (let i = 0; i < nums.length; i++) {
if (nums[i] > 5) result.push(nums[i])
}
console.log(result) // Output: [ 6, 7, 8, 9 ]
Обратите внимание, что мы указываем программе, что нужно перебрать каждый элемент массива, сравнить каждый из них с 5 и, если элемент больше 5, то поместить его в конечный массив.
Наши инструкции предельно детализированы и конкретны, и именно это и является императивным программированием.
Процедурное программирование
Процедурное программирование – это производное от императивного программирования только с функциями (также известных как «процедуры» или «подпрограммы»).
Процедурное программирования предлагает пользователю разделить выполнение программы на функции, чтобы оптимизировать модульный принцип организации.
Вернемся к нашему примеру с тортом. Процедурная программа для этого примера будет выглядеть следующим образом:
function pourIngredients() {
- Pour flour in a bowl
- Pour a couple eggs in the same bowl
- Pour some milk in the same bowl
}
function mixAndTransferToMold() {
- Mix the ingredients
- Pour the mix in a mold
}
function cookAndLetChill() {
- Cook for 35 minutes
- Let chill
}
pourIngredients()
mixAndTransferToMold()
cookAndLetChill()
Как вы можете видеть, благодаря реализации функций, мы можем просто прочитать три вызова функций в конце файла и понять, что делает наша программа.
Такое упрощение и абстрактное представление является одним из преимуществ процедурного программирования. Однако внутри функций находится все тот же императивный код.
Функциональное программирование
Функциональное программирование продвигает концепцию создания функций немного дальше.
В функциональном программировании функции рассматриваются как «полноправные граждане». Это означает, что их можно присваивать переменным, передавать в качестве аргумента и возвращать в качестве результата других функций.
Еще одна ключевая концепция – это идея чистых функций. Чистая функций – это функция, которая, чтобы получить результат, полагается только на свои входные данные. И при одних и тех же входных данных всегда будет один и тот же результат. Кроме того, эти функции не имеют никаких побочных эффектов (то есть не вносят никаких изменений вне контекста функции).
С учетом всех этих концепций, функциональное программирование призывает писать программы с помощью функций. Оно также поддерживает идею о том, что модульность кода и отсутствие побочных эффектов облегчают определение и разделение обязанностей внутри кодовой базы. Таким образом, это облегчает сопровождение кода.
Вернемся к примеру с фильтрацией массива. В императивной парадигме мы можем использовать внешнюю переменную для хранения результата функции, что по сути может считаться побочным эффектом.
const nums = [1,4,3,6,7,8,9,2]
const result = [] // External variable
for (let i = 0; i < nums.length; i++) {
if (nums[i] > 5) result.push(nums[i])
}
console.log(result) // Output: [ 6, 7, 8, 9 ]
Для того, чтобы преобразовать это в функциональное программирование, мы можем сделать следующее:
const nums = [1,4,3,6,7,8,9,2]
function filterNums() {
const result = [] // Internal variable
for (let i = 0; i < nums.length; i++) {
if (nums[i] > 5) result.push(nums[i])
}
return result
}
console.log(filterNums()) // Output: [ 6, 7, 8, 9 ]
Это практически тот же самый код, но мы проворачиваем все итерации внутри функции, в которой мы также сохраняем и массив результатов. Таким образом, мы можем гарантировать, что функция не будет ничего менять за своими пределами. Она создает переменную только для обработки своей собственной информации, и после завершения своей работы удаляет ее.
Декларативное программирование
Декларативное программирование скрывает всю сложность и приближает языки программирования к человеческому языку и мышлению. Это абсолютная противоположность императивному программированию, хотя бы потому что программист дает инструкции не о том, как компьютеру следует решать задачу, а о том, какой требуется результат.
Будет намного понятнее, если мы приведем пример. Воспользуемся примером с фильтрацией массива. Декларативный подход здесь будет выглядеть следующим образом:
const nums = [1,4,3,6,7,8,9,2]
console.log(nums.filter(num => num > 5)) // Output: [ 6, 7, 8, 9 ]
Обратите внимание, что, используя функцию фильтрации filter, мы явно не указываем компьютеру перебирать массив или сохранять значения в отдельном массиве. Мы просто говорим о том, что мы хотим («filter») и условие, которое необходимо выполнить («num > 5»).
Что хорошего в таком подходе? Его легче читать и понимать, и зачастую он более емкий в записи. Хорошими примерами декларативного кода являются функции filter, map, reduce и sort в JavaScript.
Еще один хороший пример – современные фреймворки/библиотеки JS, такие как React. Посмотрите, например, на этот код:
<button onClick={() => console.log('You clicked me!')}>Click me</button>
Здесь у нас есть кнопка (button) с приемником событий, который запускает функцию console.log при нажатии кнопки.
Синтаксис JSX (то, что использует React) совмещает HTML и JS. Это упрощает и ускоряет написание приложений. Но это не то, что браузеры читают и выполняют. Код React позже преобразуются в обычный HTML и JS, а вот это уже то, с чем работают браузеры.
JSX является декларативным, поскольку его цель заключается в том, чтобы предоставить разработчикам более удобный и эффективный интерфейс для работы.
Здесь также важно отметить, что в декларативном программировании компьютер все равно обрабатывает информацию как императивный код.
Если снова вернуться к примеру с массивом, то компьютер по-прежнему выполняет итерацию по массиву, как в цикле for, но нам, как программистам, не нужно писать это напрямую. Декларативное программирование скрывает всю сложность от программиста.
Объектно-ориентированное программирование
Одной из самых популярных парадигм программирование является объектно-ориентированное программирование (ООП).
Основная концепция ООП заключается в разделении понятий на сущности, которые описываются как некие объекты. Каждая сущность группирует заданный набор информации (свойств) и действий (методов), которые может выполнять эта сущность.
ООП широко использует классы. Классы - это способ создания новых объектов с помощью макета или шаблона, который задает программист. Объекты, которые были созданы с помощью класса, называются экземплярами.
Вернемся к примеру с приготовлением пищи на псевдокоде. Предположим, что в нашей пекарне у нас есть главный повар (по имени Фрэнк) и помощник повара (по имени Энтони). У каждого их них есть определенные обязанности. Если бы мы использовали ООП, то наша программа бы выглядеть следующим образом:
// Create the two classes corresponding to each entity
class Cook {
constructor constructor (name) {
this.name = name
}
mixAndBake() {
- Mix the ingredients
- Pour the mix in a mold
- Cook for 35 minutes
}
}
class AssistantCook {
constructor (name) {
this.name = name
}
pourIngredients() {
- Pour flour in a bowl
- Pour a couple eggs in the same bowl
- Pour some milk in the same bowl
}
chillTheCake() {
- Let chill
}
}
// Instantiate an object from each class
const Frank = new Cook('Frank')
const Anthony = new AssistantCook('Anthony')
// Call the corresponding methods from each instance
Anthony.pourIngredients()
Frank.mixAndBake()
Anthony.chillTheCake()
Преимущество ООП заключается в том, что оно облегчает понимание программы за счет четкого разделения задач и обязанностей.
Итоги
Как мы увидели, парадигмы программирования – это различные способы решения задач программирования и организации нашего кода.
Одними из самых популярных и широко используемых на сегодняшний день парадигм являются императивная, процедурная, функциональная, декларативная и объектно-ориентированная. Знание о том, что они из себя представляют, полезно для общего развития, а также для лучшего понимания других тем, связанных с программированием.
Интернет может быть опасным. Спросите любого хорошего IT-специалиста, и он вам обязательно расскажет о важности обеспечения безопасности и компактности систем, чтобы можно было гарантировать, что новые системы смогут безопасно предоставлять требуемые услуги. И хотя автоматизация этого процесса имеет большое значение для сокращения времени адаптации, настоящим испытанием для системы является способность предоставлять услуги стабильно и без каких-либо пауз на постоянной основе.
Существуют автоматизированные средства, которые могут гарантировать, то ваши сервисы Windows будут такими же безопасными и будут безотказно работать также, как и в день их установки. Однако, поскольку все организации имеют разные потребности и разные бюджеты, то для них некоторые инструменты могут быть недоступны, например, такие как Microsoft System Center Configuration Manager. Но это не должно мешать IT-отделу использовать свою инфраструктуру для обеспечения правильной работы систем.
Ниже приведены несколько принципов управления, которые можно легко реализовать при любом уровне квалификации и любом бюджете, чтобы помочь вашему IT-отделу контролировать свои серверы Windows и убедиться, что они управляются эффективно и безопасно, а также что они оптимизированы для обеспечения максимально возможной производительности.
Аудит политики авторизации
Все серверы должны быть закрыты для всех локальных и интерактивных входов в систему. Это означает, что никто не должен входить на сервер физически и использовать его, как если бы это был рабочий стол, независимо от его уровня доступа. Такое поведение в какой-то момент в будущем может привести к катастрофе. Помимо контроля интерактивных входов в систему, IT-отдел должен иметь политику аудита и других типов доступа к своим серверам, включая, помимо прочего, доступ к объектам, права доступа и другие изменения, которые могут быть внесены в сервер с авторизаций и без нее.
Централизация журналов событий
Серверы Windows имеет множество возможностей ведения журналов, которые доступны по умолчанию. Существуют настройки, с помощью которых можно расширить или ограничить эти возможности ведения журналов, включая увеличение размеров файлов журналов, независимо от того, перезаписываются ли они или нет, даже в, казалось бы, свойственных для них моментах. Централизация всех этих различных журналов в одном месте упрощает доступ к ним и их просмотр для IT-персонала. Можно воспользоваться каким-либо сервером системных журналов и упростить эти журналы, обозначив категории для определенных записей, например, пометить все неудачные попытки авторизации. Также полезным может быть доступность поиска по журналу и возможность для сервера системного журнала иметь интеграцию с инструментами исправления для устранения любых обнаруженных проблем.
Контрольные и базовые показатели производительности
Мы все знаем, как определить, когда сервер или сервис совсем не работают. Но как ваш IT-отдел определяет, работает ли сервер или сервис должным образом? Вот почему полезно получить контрольные показатели ваших серверов и определить базовые показатели их работы с различными интервалами (пиковые и непиковые). Имея такую информацию, можно определить, как оптимизировать параметры программного и аппаратного обеспечения, как это влияет на работу сервисов в течение дня и какие ресурсы нужно добавить, удалить или просто переместить, чтобы обеспечить минимальный уровень обслуживания. Это также помогает определить вероятное направление атак или индикаторы компрометации при обнаружении аномалий, которые могут негативно отразиться на производительности.
Ограничение удаленного доступа
Как администраторы, все мы любим удаленный доступ, не так ли? Я это знаю, поскольку сам почти каждый день использовал протокол удаленного рабочего стола (RDP – remote desktop protocol) для устранения проблем в удаленных системах на протяжении десятков лет своей карьеры. И несмотря на то, что был пройден долгий путь по усилению безопасности за счет усиленного шифрования, факт остается фактом: RDP (как и любые другие приложения удаленного доступа), если их не контролировать, могут позволить злоумышленникам проникнуть на ваши серверы и, что еще хуже, на сеть компании. К счастью, доступ к серверам можно ограничить несколькими способами, например, настроить правила брандмауэра для ограничения доступа к серверам из удаленных подключений, установить требования для использования VPN-туннелирования для защиты связи между сетевыми ресурсами или настроить проверку подлинности на основе сертификатов с целью проверки того, что подключаемая система – как к, так и от – отвергнута или ей можно доверять.
Настройка сервисов
Прошло уже много времени с тех пор, как большинство ролей и сервисов были включены в Windows Server по умолчанию, независимо от того, нужны они организации или нет. Это, очевидно, представляет собой грубейшую ошибку безопасности и до сих пор остается проблемой, хотя и более контролируемой в современных версиях серверов. Тем не менее, ограничение поверхности атаки ваших серверов служит для устранения потенциальных направлений компрометации, и это хорошо. Оцените потребности вашей среды и зависимостей программного обеспечения и сервисов. Это может помочь разработать план по отключению или удалению ненужных сервисов.
Периодический контроль
Периодический контроль тесно связан с вашей сетью и угрозами безопасности. Вы должны следить за состоянием своего сервера, чтобы выявлять любые потенциальные проблемы до того, как они перерастут в серьезную угрозу для производительности устройств и услуг, которые они предоставляют. Такой контроль помогает IT-специалистам заранее определять, нуждаются ли какие-либо серверы в обновлении или ресурсах, или же отдел должен приобрести дополнительные серверы для добавления в кластер, чтобы, опять же, поддерживать работу сервисов.
Управление Patch-файлами
Эта рекомендация должна быть элементарной для всех, кто занимается IT, независимо от опыта и навыков. Если в этом списке и есть что-то, что нужно всем серверам, так это именно управление patch-файлами, или исправлениями. Настройка процесса обновления операционной системы и программного обеспечения имеет первостепенное значение, от простых обновлений, устраняющих ошибки, до корректирующих исправлений, закрывающих бреши в безопасности. Это на самом деле важно, поскольку в интегрированных средах, где используется несколько продуктов Microsoft, некоторые версии ПО и сервисов просто не будут работать до тех пор, пока базовая ОС Windows Server не будет обновлена до минимального уровня. Так что, имейте это в виду, когда будете планировать цикл тестирования и обновлений.
Технические средства контроля
Независимо от того, внедряете ли вы устройства безопасности, такие как система предотвращения вторжений в сеть, или вашим кластерным серверам нужны балансировщики нагрузки, используйте данные, полученные в ходе мониторинга, и базовые показатели для оценки потребностей различных серверов и предоставляемых ими услуг. Это поможет определить, какие системы требуют дополнительных элементов управления, таких как веб-сервер, на котором будет запущено корпоративное веб-приложение для HR-записи. Установка брандмауэра веб-доступа (WAF – web access firewall) предназначена для выявления известных веб-атак, таких как межсайтовый скриптинг (XSS-атаки) или атаки с использованием структурированного языка запросов (SQL-инъекции) на серверную часть базы данных SQL, которая обеспечивает ее работу.
Блокировка физического доступа
По личному опыту знаю, что большинство организаций, от средних до крупных, осознают, что свои серверы необходимо изолировать из соображений безопасности и ОВК. И это здорово! Однако нехорошо получается, когда небольшие компании просто оставляют свои серверы открытыми вместе с обычными рабочими столами. Это действительно ужасно, потому что в таком случае сервер и связи со сторонними устройствами могут быть подвержены множеству потенциальных атак и угроз. Большая просьба – размещайте серверы в хорошо охраняемых помещениях с достаточной вентиляцией и ограничьте доступ в это помещение, разрешите его только тем, кому это действительно необходимо.
Аварийное восстановление
Резервные копии… резервные копии… резервные копии! Эта тема уже настолько избита, но все же мы здесь. Мы по-прежнему знаем, что некоторые организации не принимают никаких надлежащих шагов для правильного и безопасного резервного копирования своих ценных данных. А когда происходит неизбежное – сервер падает, данные теряются, а помочь некому. Но помочь можно было бы, если бы существовал план аварийного восстановления, который бы определял, какие данные нужно защитить, как, когда и где следует создавать резервные копии, а также документированные шаги по их восстановлению. По сути это очень простой процесс: 3-2-1 – три резервные копии, два отдельных носителя и, по крайней мере, одна копия за пределами рабочего места.
Этот список ни в коем случае не позиционируется как исчерпывающий, и IT-специалисты должны самостоятельно изучить каждый пункт, чтобы определить, какие решения лучше всего подходят для их конкретных потребностей. Помимо этого, крайне желательно, чтобы IT-отдел советовался с высшим руководством по разработке политики проведения регулярных оценок рисков. Это поможет IT-отделу определить, где лучше всего размещать ресурсы (финансовые, технические и аппаратное/программное обеспечение), чтобы они использовались максимально эффективно.