Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Защита паролей.

Рубрика: Безопасность -> Основные меры защиты Linux
Метки: | |
Вторник, 31 марта 2009 г.
Просмотров: 7139

Многие операционные системы для предоставления доступа пользователя к системе используют аутентификацию по имени пользователя и паролю, и Linux не является исключением.

     В данный момент рассмотрим механизм /etc/passwd и все, что связано с паролями.

     Файл /etc/passwd

     Сердцем Linux-безопасности является файл /etc/passwd, в котором содержатся детали всех пользователей, зарегистрированных в системе. Чтобы пользователь мог войти в систему, он должен быть зарегистрирован в этом файле. Ранние версии Linux использовали следующий формат этого файла (поля разделяются двоеточием):


  • Имя пользователя (логин).
  • Зашифрованный или хэшированный пароль (зависит от используемого криптографического метода).
  • UID (User ID) — идентификатор пользователя.
  • GID (Group ID) — идентификатор группы.
  • Поле, содержащее личную информацию о пользователе — его настоящее имя и фамилию, номер телефона и т.д.
  • Домашний каталог пользователя.
  • Оболочка пользователя по умолчанию — эта оболочка будет запущена сразу после входа пользователя в систему.

     Посмотрим на типичный пример файла /etc/passwd:

root: $l$9R6CkJpT$6mglIAM00eFwYWmJLLuLz:0:0:root:/root:/bin/bash

bin:*:1:1:bin:/bin:/bin/sh

daemon:*:2:2:daemon:/sbin:/bin/sh

adm:*:3:4:adm:/var/adm:/bin/sh

lp:*:4:7:Ip:/var/spool/lpd:/bin/sh

sync:*:5:0:sync:/sbin:/bin/sync

shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown

halt:*:7:0:halt:/sbin:/sbin/halt

     Если пользователь входит в систему, введенный пароль шифруется (или хэшируется) и сравнивается со значением второго поля. Если значения совпадают, пользователю разрешается доступ. Если вместо пароля стоит звездочка, то этот пользователь не сможет войти в систему (при попытке войти в систему под таким именем пользователя вы получите сообщение password incorrect).

     Теневые пароли.

     Все хорошо, если бы файл /etc/passwd не был доступен для чтения любому пользователю. Любой пользователь может скопировать этот файл, а позже, используя brute-force атаку (перебор пароля), «вычислить» пароли остальных пользователей. Для этого есть много программ, самой популярной является John Ripper, дающая возможность за пару дней взломать пароли всех пользователей.

     Для решения этой проблемы в современных версиях Linux используются теневые пароли. Механизм теневых паролей следующий: файл /etc/passwd по-прежнему используется, но все пароли из него «переехали» в файл /etc/shadow, который доступен для чтения лишь пользователю root (и программам, запущенным от его имени). Вместо паролей и звездочек во втором поле файла /etc/passwd в настоящее время находится символ х. Посмотрим на такой файл /etc/passwd:

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/bin/sh

daemon:x:2:2:daemon:/sbin:/bin/sh

adm:x:3:4:adm:/var/adm:/bin/sh

lp:x:4:7:lp:/var/spool/lpd:/bin/sh

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:б:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

     Соответствующий ему файл /etc/shadow выглядит так:

root: $l$9R6CkJpT$6mglIAM00eFwYWmJLLuLz/ : 12 937 : 0 : 99999 : 7.: : :

bin:*:12937:0:99999:7:::

daemon:*:12 937:0:99999:7:::

adm:*:12937:0:99999:7:::

lp:*:12937:0:99999:7:::

sync:*:12 937:0:99999:7:::

shutdown:*:12937:0:99999:7: : :

halt:*:12937:0:99999:7:::

     Здесь второе поле — это закодированный пароль, все остальные поля используются для следующих целей:

  • Имя пользователя.
  • Зашифрованный пароль.
  • Дата смены пароля — указывается как количество дней с 01.01.1970.
  • Количество дней, на протяжении которых нельзя изменять пароль.
  • Через сколько дней нужно изменить пароль.
  • За сколько дней предупреждать пользователя о смене пароля.
  • Через сколько дней после истечения срока действия пароля учетная запись будет блокирована (если пользователь не изменил пароль вовремя).
  • Зарезервировано для последующего использования.

     Если вместо пароля указана звездочка (*) или два восклицательных знака (!!), это означает, что учетная запись блокирована. Значение -1 (или пустое поле) говорит о том, что данная функция выключена, к примеру, если поле 5 пустое, то это означает, что пользователь может вообще не менять свой пароль.

     Включение теневых паролей.

     Теперь наверное нет Linux-систем, которые не поддерживают теневые пароли. Но может попасться дистрибутив, в котором поддержка теневых паролей есть, но не включена по умолчанию. Для ее включения надо использовать команду pwconv (также не забудьте выполнить команду grpconv для преобразования файла /etc/grpconv).

     Программа Chage.

     Если у вас включены теневые пароли, то все равно остаются дыры в безопасности. Существенно уменьшить риск взлома учетной записи позволяют правильные правила изменения паролей, то есть нужно установить значения для всех полей файла /etc/shadow. Но запомнить назначение каждого поля трудно.

     Для упрощения этой задачи можно использовать программу chage, входящую в состав Shadow Suite. Синтаксис ее такой:

chage [-m mindays] [-M maxdays] [-d lastday] [-1 inactive] [-E expiredate] [-W warndays] пользователь

     где:

  • -m - минимальный срок действия пароля;
  • -М - максимальный срок действия пароля;
  • -W - за сколько дней до последнего дня предупредить пользователя;
  • -Е - дата окончания действия пароля.

     Просмотреть правила для конкретной учетной записи можно с помощью опции -l:

# chage -l  seram

Minimum: 0

Maxmimum: 99999

Warning: 7

Inactive: -1

Last Change: Apr 30, 2007

Password Expires: Never

Password Inactive: Never

Account Expires: Never

     Рекомендуется установить минимальную длину пароля, равную 8 символам, и заставить пользователей изменять свои пароли каждые 6-7 недель. Более полный контроль над правилами изменения паролей можно получить с помощью файла /etc/login.defs.