Useradd с использованием генерации пароля шифрования

Я работаю над тем, что, по моему мнению, было очень простым script для динамического создания пользователя FTP с использованием "useradd". Есть несколько частей этого процесса, с которыми я не знаком, и целый день исследования не заставили меня слишком далеко, Вот что я имею:

password="pass"
pass=$(perl -e 'print crypt($ARGV[0], "wtf")' $password)
useradd -d HOME_DIR -s /bin/bash -g GROUP -p $pass -f -1 testing

Примечания

  • HOME_DIR и GROUP являются заполнителями.
  • У меня нет проблем с функцией home/base_dir (-d, -b) или группы (-g) 'useradd'

Тема:

  • Почему мои попытки генерации пароля не работают?
  • есть /bin/ bash правильная оболочка для использования исключительно для пользователя FTP, или я буду использовать /bin/false или другую оболочку?
  • По умолчанию useradd отключает учетную запись, пока не предоставит свой собственный пароль, как мне обойти это?
  • Я не хочу использовать утилиту passwd, так как она калечит мою способность автоматически генерировать учетные записи FTP, я нашел решение для этого здесь, но я не понимаю решение

Сообщите мне, если я собираюсь сделать все это неправильно, или если то, что я пытаюсь сделать, невозможно, или если я дезинформирован о чем-либо, что я сказал здесь. Спасибо за любую помощь, которую вы можете предоставить.: D

Ответы

Ответ 1

Относительно генерации пароля:

32.3 Шифрование паролей

  • Функция: char * crypt (const char * ключ, const char * соль)

    Функция crypt принимает пароль, ключ в виде строки и массив символов солей, который описан ниже, и возвращает печатную строку ASCII, которая начинается с другой соли. Считается, что, учитывая выход функции, лучший способ найти ключ, который будет производить этот вывод, - угадать значения ключа до тех пор, пока не будет найдено исходное значение ключа.

    Параметр соли делает две вещи. Во-первых, он выбирает, какой алгоритм используется, MD5-based или DES-based. Во-вторых, это делает жизнь сложнее для тех, кто пытается угадать пароли в отношении файла, содержащего много паролей; без соли, злоумышленник может сделать предположение, запустить crypt на нем один раз и сравнить результат со всеми паролями. С солью злоумышленник должен проходить crypt один раз для каждой различной соли.

    Для алгоритма на основе MD5 соль должна состоять из строки $1$, за которой следует до 8 символов, заканчивается либо другим $, либо концом строки. Результатом склепа будет соль, а затем $, если соль не заканчивается на одну, а затем 22 символа из алфавита ./0-9A-Za-z, всего до 34 символов. Каждый символ в ключе значим.

    Для алгоритма на основе DES соль должна состоять из двух символов из алфавита ./0-9A-Za-z, а результатом crypt будут те два символа, за которыми следуют еще 11 из того же алфавита, всего 13. Значимы только первые 8 символов в ключе.

    Алгоритм, основанный на MD5, не имеет ограничений на полезную длину используемого пароля и немного более безопасен. Поэтому предпочтительнее алгоритм, основанный на DES.

    Когда пользователь вводит свой пароль в первый раз, соль должна быть установлена ​​на новую строку, которая является достаточно случайной. Чтобы проверить пароль на результат предыдущего вызова в crypt, передайте результат предыдущего вызова как соль.

В зависимости от вашей системы также может быть Blowfish или семейство SHA-2 crypt, и, возможно, традиционный DES может быть отключен для обеспечения безопасности. PAM также может добавить свои собственные осложнения.

     ID       |    Method
  -------------------------------
     1        |  MD5 (Linux, BSD)
     2a       |  Blowfish (OpenBSD)
     md5      |  Sun MD5
     5        |  SHA-256 (Linux, since glibc 2.7)
     6        |  SHA-512 (Linux, since glibc 2.7)

При этом

root# useradd -d / -g users -p $(perl -e'print crypt("foo", "aa")') -M -N foo
user$ su - foo
Password: foo
foo$ ^D
root# userdel foo

отлично работает в моей системе.


Относительно оболочки:

/sbin/nologin является традиционным для пользователей с отключенным доступом. Вам нужно будет дважды проверить конфигурацию вашего FTP-сервера, чтобы убедиться, что это исключает их из FTP-доступа.


Относительно отключенной учетной записи:

Как видно выше, работает для меня, как и ожидалось, если задан рабочий пароль.


О другом решении:

Что вы не понимаете в альтернативном решении? Мне кажется очень понятным.

Просто соедините "username:password" с "chpasswd".


Если вы хотите FTP-пользователей, я бы рекомендовал использовать FTP-демон, который поддерживает виртуальных пользователей, таких как glftpd, Pure-FTPd, ProFTPD, vsftpd,... на самом деле кажется, что все общие. Таким образом, учетная запись FTP не требует реальной учетной записи системы.

Ответ 2

Если вы хотите создать пользователей только "FTP", вы должны посмотреть rssh Установите rssh для своего дистрибутива и установите оболочку для пользователя "FTP only" в "/usr/bin/rssh"

Хорошо работает