Useradd с использованием генерации крипто-пароля

Я работаю над тем, что я считал очень простым скриптом для динамического создания 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

Примечания

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

Темы:

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

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


person Sandwich    schedule 19.06.2009    source источник


Ответы (2)


По поводу генерации пароля:

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

  • Функция: char * crypt (const char *key, const char *salt)

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

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

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

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

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

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

В зависимости от вашей системы также могут быть crypt семейства Blowfish или SHA-2, и возможно, что традиционный 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 не требует реальной системной учетной записи.

person ephemient    schedule 20.06.2009
comment
Извините, я так и не поблагодарил вас за ответ 7 месяцев назад. Ваше решение сработало, спасибо :) - person Sandwich; 11.02.2010
comment
Вы также можете: useradd -p $(echo -n PASSWORD | openssl passwd -crypt -stdin) и passwd имеет флаг stdin, поэтому я не пробовал, но echo -n пароль | Пользователь passwd --stdin может работать. - person jgmjgm; 09.04.2015
comment
что такое aa? - person chovy; 31.08.2016

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

Работает очень хорошо

person Mandar Vaze    schedule 24.11.2009
comment
Спасибо! На самом деле это не сработает для того, что я делал 7 месяцев назад, но сработает для того, над чем я работаю сейчас. :D - person Sandwich; 11.02.2010