Сбор хешей имен пользователей и паролей из /etc/security/passwd

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

У меня есть список имен пользователей, для которого мне нужно синхронизировать пароли на новом сервере.

Как я могу извлечь имя пользователя и хэш пароля из файла /etc/security/passwd в приведённом ниже формате

username:MGURSj.F056Dj

Файл passwd в формате stanza

username:
  password = MGURSj.F056Dj
  lastupdate = 623078865

Вы можете проанализировать файл с помощью awk:

awk '
  /^[[:alnum:]]*:/ {
        user=substr($0, 1, index($0, ":") - 1)
        }
  /^ *password *=/ {
        split($0, elements, " *= *");
        print user ":" elements[2]
        }' \
  /etc/security/passwd

Идея скрипта заключается в том, чтобы сначала найти строку имени пользователя — одну, начинающуюся с алфавитно-цифровых символов, за которыми следует двоеточие — и извлечь это имя пользователя с помощью функции “substr”. В строках, которые начинаются с нуля или более пробелов, за которыми следует строка “password“, за которой следуют ноль или более пробелов и знак равенства, мы разбиваем строку по знаку равенства и выводим сохраненное имя пользователя с частью пароля текущей строки.

В случае системы AIX я бы использовал более простой способ, такой как:

grep -p $USERNAME /etc/security/passwd | awk '/password/ {print $3}'

Конечно, поиск по “password” можно сделать ещё более строгим.

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

Для извлечения имен пользователей и хешей паролей из файла /etc/security/passwd, который находится в формате стана, можно воспользоваться инструментом awk. Ниже приведен скрипт на awk, который позволяет получить данные в нужном формате:

awk '
  /^[[:alnum:]]*:/ {
        user=substr($0, 1, index($0, ":") - 1)
        }
  /^ *password *=/ {
        split($0, elements, " *= *")
        print user ":" elements[2]
        }' /etc/security/passwd

Объяснение работы скрипта:

  1. Сначала мы ищем строки, которые начинаются с алфавитно-цифровых символов и содержат двоеточие. При нахождении такой строки извлекаем имя пользователя с помощью функции substr.
  2. Затем ищем строки, начинающиеся с нуля или более пробелов, за которыми следует строка «password», и равенство с некоторым содержимым. Эти строки содержат хеш пароля.
  3. Используя команду split, разбиваем строку по символу равенства и выводим имя пользователя в формате username:password_hash.

Если вы работаете в среде AIX, можно использовать более простой способ с комбинацией команд grep и awk. Например, для поиска определенного пользователя, можно воспользоваться следующей командой:

grep -p $USERNAME /etc/security/passwd | awk '/password/ {print $3}'

Объяснение:

  • Команда grep -p $USERNAME ищет строки, связанные с конкретным пользователем.
  • Затем awk извлекает часть строки, содержащую хеш пароля, выводя результат в формате username:password_hash.

Используя вышеуказанные инструменты, вы сможете эффективно извлекать информацию о пользователях и их паролях в требуемом формате для дальнейшей синхронизации на новом сервере.

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

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