systemctl — это утилита командной строки, используемая для управления системными службами. У нее есть множество опций для управления службой в Linux, таких как запуск службы, ее остановка, включение и деактивация. Существует еще один вариант, называемый mask.
Маскировка службы systemd означает, что служба отключена и не может быть включена даже системой или по команде вручную. Маскировка — более сильная форма отключения.
В этой статье мы расскажем вам, как замаскировать службу в Linux с помощью systemctl и как ее разоблачить. Более того, мы расскажем о ключевых различиях между замаскированной службой и отключенной службой.
Предупреждение: В Linux службы взаимозависимы. Поскольку маскировка службы отключает ее и запрещает любую активацию, поэтому используйте ее осторожно.
Прежде чем идти дальше, давайте сначала разберемся в механизме, лежащем в основе замаскированной службы.
Замаскированная служба — это постоянно отключенная служба, которая не позволяет системе или системному администратору включать ее. Системные администраторы обычно используют опцию mask для деактивации неисправных или конфликтующих служб. Однако рекомендуется использовать этот параметр с осторожностью, поскольку маскировка важной системной службы может создать препятствия при загрузке системы.
Чтобы составить список замаскированных служб в Linux, используйте опцию list-units с указанным замаскированным состоянием.
systemctl list-units --state=masked
sam@sam: $ systemctl list-units --state=masked UNIT LOAD ACTIVE SUB DESCRIPTION netscript.service masked inactive dead netscript.service LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 1 loaded units listed. sam@sam: $
Команда systemctl может использоваться для маскировки любой службы с помощью опции mask. Общий синтаксис команды приведен ниже.
sudo systemctl mask [Service-Name]
Опция mask в приведенном выше синтаксисе по сути создает символическую ссылку на службу в /etc/systemd/system.
Также может быть упомянута одна или несколько служб, разделенных пробелом.
Давайте замаскируем службу SSH, используя приведенный выше синтаксис.
sam@sam: $ sudo systemctl mask ssh.service [sudo] password for sam: Created symlink /etc/systemd/system/ssh.service ->/dev/null. sam@sam: $
Чтобы проверить состояние замаскированной службы, используйте опцию –state= с помощью systemctl list-units.
Если вы попытаетесь запустить службу, вы получите вывод о том, что устройство замаскировано.
sam@sam: $ sudo systemctl start ssh.service Failed to start ssh.service: Unit ssh.service is masked.
Примечание: Вы не можете замаскировать службу, созданную в каталоге /etc/systemd/system. Поскольку службы в этом каталоге необходимы для работы системы, их маскировка может нанести ущерб нормальной функциональности системы. Однако отключение этих служб равносильно их маскировке.
Служба может быть замаскирована до следующей загрузки с помощью опции –runtime .
sudo systemctl mask [Service-Name] --runtime
sam@sam: $ sudo systemctl mask ssh.service --runtime Created symlink /run/systemd/system/ssh.service ->/dev/null.
Она создает символическую ссылку на службу в каталоге /run/systemd/system. Если символическая ссылка службы уже присутствует в каталоге, то служба предназначена для временной маскировки.
Используйте команду systemctl с параметром снять маску, чтобы снять ограничения маски. Эта команда не принимает путь к службе, поэтому необходимо указывать только названия служб.
sudo systemctl снимает маску [Имя службы]
Возможно, вам потребуется перезагрузить систему после снятия маски с службы.
Отключенная служба может быть включена и запущена системой и с помощью ручных команд. Однако замаскированная служба не может быть включена ни системой, ни при ручном взаимодействии.
Когда служба отключается, символическая ссылка, созданная в каталоге /etc/systemd/system, удаляется, и служба не активируется при загрузке. Но она может быть активирована зависимыми службами.
С другой стороны, замаскированная служба связана с /dev/null, что делает ее постоянно непригодной для использования.
Обратите внимание, что каталог /dev содержит файлы блочных устройств. /dev/null — это виртуальное устройство, которое удаляет все, что на него записано. Обычно она используется для удаления выходных данных из stdout и stderr.
Если вы хотите отключить какую-либо службу навсегда, используйте команду systemctl mask . Замаскированную службу не может включить даже система. В этом руководстве я описал, как замаскировать службу постоянно и временно. Более того, мы также упомянули метод демаскирования службы и ключевые различия между замаскированной и отключенной службой.