Ответ 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 не требует реальной учетной записи системы.