Вопрос или проблема
При использовании автозаполнения для 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-скрипт), который выполняет следующие операции:
- Объединяет входные файлы (принимая их как аргументы командной строки), распаковывая их, если они сжаты (например, в формате gzip).
- Удаляет пустые строки и строки, начинающиеся с символа
#
, что позволяет игнорировать комментарии. - Преобразует все буквы в нижний регистр.
- Удаляет все символы, оставляя только новые строки и печатаемые символы.
- Сортирует результаты в алфавитном порядке и удаляет дубликаты.
Эти операции приводят к созданию отсортированного списка уникальных слов в нижнем регистре, который может быть использован в последующих проверках паролей через библиотеку Cracklib.
В общем, mkdict
применяется для подготовки наборов слов для использования в системах, проверяющих надежность паролей, и не предназначен для непосредственного взаимодействия с пользователем. При запуске скрипта без аргументов он просто ждет ввода данных, что объясняет поведение, обнаруженное вами при попытке его запустить.
Таким образом, mkdict
представляет собой полезный инструмент в контексте управления безопасностью паролей, а его отсутствие документации может быть преодолено через анализ самого скрипта и его содержимого.