Относительно генерации пароля:
Функция: 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 не требует реальной системной учетной записи.