По поводу генерации пароля:
Функция: 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