Useradd с использованием генерации пароля шифрования - PullRequest
16 голосов
/ 20 июня 2009

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

Примечания * * 1004

  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

Ответы [ 2 ]

26 голосов
/ 20 июня 2009

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

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

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

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

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

    Для алгоритма на основе MD5 salt должен состоять из строки $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 не требует реальной системной учетной записи.

1 голос
/ 24 ноября 2009

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

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

...