Что такое команда mkdict и что она делает? (Она есть в дистрибутиве, но у неё нет man-страницы или помощи)

Вопрос или проблема

При использовании автозаполнения для mkdir я обнаружил существующий бинарный файл под названием mkdict. Но я не могу найти страницу man или другие детали. Поиск в Google дает только информацию о библиотеке Python с таким названием, но я не думаю, что эта команда может быть этой. Что это такое?

Я работаю на Oracle Linux 8 в виртуальной машине без графического интерфейса (только командная строка). Вот некоторые результаты команд, которые я попробовал для получения информации:

Местоположение:

$ which mkdict
/usr/sbin/mkdict

Пытаюсь найти что-то:

$ whatis mkdict
mkdict: ничего подходящего.

$ man mkdict
Нет записи о мануале для mkdict

$ help mkdict
-bash: help: нет тем помощи, соответствующих 'mkdict'

$ mkdict --help
-d, --decrompressdecompress

$ dnf info mkdict*
Ошибка: Нет подходящих пакетов для отображения

Если я попытаюсь его запустить, ничего действительно не происходит. Возможно, он ждет ввода. Терминал просто зависает, пытаясь его запустить, пока я не нажму Ctrl-Break.

Поиск в Google mkdict + linux дает только результаты по пакету Python с тем же названием, по крайней мере, в результатах, которые я просмотрел. Но маловероятно, что это тот пакет, поскольку, похоже, у него мало загрузок с PyPI.

Что такое mkdict и для чего он предназначен?

Поиск по /usr/sbin/mkdict (потому что действительно интересно, что он в sbin, а не bin) находит этот отчет об ошибке

Не найдены страницы man для /usr/sbin/mkdict и /usr/sbin/packer. Эти бинарные файлы являются частью пакета RPM cracklib-dicts, но в пакет RPM не включены страницы man.

из Red Hat, что подходит для Oracle Linux.

Cracklib действительно имеет порт для Python, но изначально был на C и, по-видимому, может быть использован для проверки паролей, отклоняя те, которые могут быть легко взломаны. Начало оригинального README звучит так:

CrackLib – это библиотека, содержащая функцию на C (на самом деле много функций, но вам нужно использовать только одну из них), которая может быть использована в программе, подобной “passwd”.

Идея проста: попытаться предотвратить выбор пользователями паролей, которые могут быть угаданы с помощью “Crack”, фильтруя их на входе.

CrackLib является ответвлением программного обеспечения версии 5 “Crack” и содержит значительное количество идей, заимствованных из нового программного обеспечения.

На момент написания Crack 5 неполон (все еще ожидаю покупки своего домашнего компьютера) – но я подумал, что могу поделиться этим с вами.

[ Кстати, если бы Dell или кто-то еще хотел “подарить” линукс-подходящий 486DX2-66MHz компьютер (EISA/16Mb RAM/640MB HD/AHA1740) в качестве платформы для разработки Crack, я был бы более чем признателен услышать от вас. 😎 ]

Должно быть, легко выяснить, использует ли Oracle Linux порт Python или оригинальный.

В моей системе /usr/sbin/mkdict является символической ссылкой на cracklib-format, который, как указано в комментариях, является простым оболочным скриптом. Он короткий, чтобы опубликовать его здесь.

#!/bin/sh
#
# Этот скрипт предварительно обрабатывает набор списков слов в подходящую форму для ввода
# в cracklib-packer
#
LC_ALL=C
export LC_ALL
gzip -cdf "$@" |                 # объединить входные файлы, разархивируя, если необходимо
    grep -v '^\(#\|$\)' |        # Удалить строки, которые пустые или начинают с '#'
    tr '[:upper:]' '[:lower:]' | # преобразовать все буквы в строчные
    tr -cd '\n[:graph:]' |       # удалить всё, кроме новых строк и печатаемых символов
    sort -u                      # сортировать в алфавитном порядке, удалить дубликаты

Я добавил комментарии к скрипту. По сути, он просто берет набор (возможно, сжатых) файлов со списком слов и выводит отсортированный список строчных слов.

Примечание: существует более новая версия скрипта, которую можно увидеть на Github.

Ответ или решение

Команда mkdict — это бинарный файл, находящийся по пути /usr/sbin/mkdict, который изначально является символической ссылкой на другой исполняемый файл, называемый cracklib-format. Этот компонент входит в пакет cracklib-dicts, который предназначен для работы с библиотекой Cracklib. Cracklib используется для проверки безопасности паролей, отклоняя те, которые могут быть легко угаданы.

К сожалению, mkdict не имеет мануальных страниц или справочной информации, что может создавать трудности для пользователей, пытающихся понять его функциональность. Однако, анализируя сам бинарный файл, можно выявить его назначение.

Содержимое mkdict — это простой скрипт на оболочке (shell-скрипт), который выполняет следующие операции:

  1. Объединяет входные файлы (принимая их как аргументы командной строки), распаковывая их, если они сжаты (например, в формате gzip).
  2. Удаляет пустые строки и строки, начинающиеся с символа #, что позволяет игнорировать комментарии.
  3. Преобразует все буквы в нижний регистр.
  4. Удаляет все символы, оставляя только новые строки и печатаемые символы.
  5. Сортирует результаты в алфавитном порядке и удаляет дубликаты.

Эти операции приводят к созданию отсортированного списка уникальных слов в нижнем регистре, который может быть использован в последующих проверках паролей через библиотеку Cracklib.

В общем, mkdict применяется для подготовки наборов слов для использования в системах, проверяющих надежность паролей, и не предназначен для непосредственного взаимодействия с пользователем. При запуске скрипта без аргументов он просто ждет ввода данных, что объясняет поведение, обнаруженное вами при попытке его запустить.

Таким образом, mkdict представляет собой полезный инструмент в контексте управления безопасностью паролей, а его отсутствие документации может быть преодолено через анализ самого скрипта и его содержимого.

Оцените материал
Добавить комментарий

Капча загружается...