Библиотека сайта rus-linux.net
Фундаментальные основы Linux. Часть VII. Управление локальными учетными записями пользователей
Оригинал: Linux FundamentalsАвтор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 22 декабря 2014 г.
Глава 27. Пароли пользователей
Данная глава содержит дополнительную информацию о паролях локальных пользователей.
В главе подробно описаны три метода установки паролей; с использованием утилиты passwd, с использованием реализации алгоритма шифрования passwd из библиотеки openssl, а также с использованием функции crypt в программе на языке C.
Кроме того, в данной главе обсуждаются параметры паролей и методики отключения, аннулирования или блокировки учетных записей пользователей.
Утилита passwd
passwd. При смене паролей пользователям придется предоставлять утилите свои старые пароли перед двукратным вводом новых паролей.
[tania@centos7 ~]$ passwd Изменяется пароль пользователя tania. Смена пароля для tania. (текущий) пароль UNIX: Новый пароль : НЕУДАЧНЫЙ ПАРОЛЬ: В пароле должно быть не меньше 8 символов Новый пароль : НЕУДАЧНЫЙ ПАРОЛЬ: Пароль является палиндромом Новый пароль : НЕУДАЧНЫЙ ПАРОЛЬ: Пароль слишком схож с предыдущим passwd: Использовано максимальное число попыток, заданное для службы
root не должен выполнять эти правила (хотя он и будет видеть предупреждения). Также пользователь root не должен вводить старый пароль перед двукратным вводом нового пароля.
root@debian7:~# passwd tania Новый пароль : Повторите ввод нового пароля : passwd: все данные аутентификации успешно обновлены.
Файл shadow
/etc/shadow. Файл /etc/shadow доступен только для чтения и может читаться исключительно пользователем root. В разделе, посвященном правам доступа к файлам, мы поговорим о том, как пользователям удается изменять свои пароли. На текущий момент вам нужно знать лишь о том, что пользователи могут изменять свои пароли с помощью утилиты /usr/bin/passwd.
[root@centos7 ~]# tail -4 /etc/shadow paul:$6$ikp2Xta5BT.Tml.p$2TZjNnOYNNQKpwLJqoGJbVsZG5/Fti8ovBRd.VzRbiDSl7TEq\ IaSMH.TeBKnTS/SjlMruW8qffC0JNORW.BTW1:16338:0:99999:7::: tania:$6$8Z/zovxj$9qvoqT8i9KIrmN.k4EQwAF5ryz5yzNwEvYjAa9L5XVXQu.z4DlpvMREH\ eQpQzvRnqFdKkVj17H5ST.c79HDZw0:16356:0:99999:7::: laura:$6$glDuTY5e$/NYYWLxfHgZFWeoujaXSMcR.Mz.lGOxtcxFocFVJNb98nbTPhWFXfKWG\ SyYh1WCv6763Wq54.w24Yr3uAZBOm/:16356:0:99999:7::: valentina:$6$jrZa6PVI$1uQgqR6En9mZB6mKJ3LXRB4CnFko6LRhbh.v4iqUk9MVreui1lv7\ GxHOUDSKA0N55ZRNhGHa6T2ouFnVno/0o1:16356:0:99999:7::: [root@centos7 ~]#
Файл /etc/shadow содержит таблицу с девятью разделенными двоеточиями столбцами. Эти девять столбцов (слева направо) содержат имя пользователя, зашифрованный пароль, время последнего изменения пароля (первый день соответствует 1 января 1970 года), количество дней, в течение которых пароль должен оставаться неизменным, день истечения срока действия пароля, количество дней перед истечением срока действия пароля, в течение которых должно выводиться предупреждение, количество дней после истечения срока действия пароля, по прошествии которых учетная запись должна быть отключена, а также день, когда учетная запись была отключена (также с начала 1970 года). Последнее поле пока не имеет значения.
Все пароли в примере выше являются хэшами фразы hunter2.
Шифрование ключевых фраз с помощью утилиты passwd
crypt. Простейший (и рекомендованный) способ добавления пользователя с заданным паролем в систему заключается в добавлении пользователя в систему с помощью команды useradd -m имя_пользователя с последующей установкой пароля с помощью утилиты passwd.
[root@RHEL4 ~]# useradd -m xavier [root@RHEL4 ~]# passwd xavier Изменяется пароль пользователя xavier. Новый пароль : Повторите ввод нового пароля : passwd: все данные аутентификации успешно обновлены. [root@RHEL4 ~]#
Шифрование ключевых фраз с помощью утилиты openssl
Другой способ создания учетных записей пользователей с паролями заключается в использовании параметра -p утилиты useradd, но в случае использования данного параметра утилите необходимо передавать уже зашифрованный пароль. Вы можете зашифровать пароль с помощью команды openssl passwd.
openssl passwd позволяет сгенерировать несколько отдельных хэшей для одного и того же пароля, причем для этой цели используется значение salt.
paul@rhel65:~$ openssl passwd hunter2 86jcUNlnGDFpY paul@rhel65:~$ openssl passwd hunter2 Yj7mDO9OAnvq6 paul@rhel65:~$ openssl passwd hunter2 YqDcJeGoDbzKA paul@rhel65:~$
salt может быть выбрано произвольным образом и будет отображаться в виде двух первых символов хэша.
paul@rhel65:~$ openssl passwd -salt 42 hunter2 42ZrbtP1Ze8G. paul@rhel65:~$ openssl passwd -salt 42 hunter2 42ZrbtP1Ze8G. paul@rhel65:~$ openssl passwd -salt 42 hunter2 42ZrbtP1Ze8G. paul@rhel65:~$
root@rhel65:~# useradd -m -p $(openssl passwd hunter2) mohamed
Помните о том, что после выполнения данной команды ваш пароль в открытом виде будет сохранен в файле истории команд командной оболочки!
Шифрование ключевых фраз с помощью функции crypt
paul@rhel65:~$ cat MyCrypt.c
#include <stdio.h>
#define __USE_XOPEN
#include <unistd.h>
int main(int argc, char** argv)
{
if(argc==3)
{
printf("%s\n", crypt(argv[1],argv[2]));
}
else
{
printf("Использование: MyCrypt $пароль $salt\n" );
}
return 0;
}
gcc с помощью команды, аналогичной следующей:
paul@rhel65:~$ gcc MyCrypt.c -o MyCrypt -lcrypt
/etc/shadow.
paul@rhel65:~$ ./MyCrypt hunter2 42 42ZrbtP1Ze8G. paul@rhel65:~$ ./MyCrypt hunter2 33 33d6taYSiEUXI
Обратили ли вы внимание на то, что первые два символа зашифрованного пароля являются значением salt?
md5, который может быть распознан по начальным символам значения salt $1$.
paul@rhel65:~$ ./MyCrypt hunter2 '$1$42' $1$42$7l6Y3xT5282XmZrtDOF9f0 paul@rhel65:~$ ./MyCrypt hunter2 '$6$42' $6$42$OqFFAVnI3gTSYG0yI9TZWX9cpyQzwIop7HwpG1LLEsNBiMr4w6OvLX1KDa./UpwXfrFk1i...
md5 может достигать восьми символов. Значения salt хранятся в открытом виде в строках файла /etc/shadow между вторым и третьим символами $, поэтому никогда не используйте строку пароля в качестве значения salt!
paul@rhel65:~$ ./MyCrypt hunter2 '$1$hunter2' $1$hunter2$YVxrxDmidq7Xf8Gdt6qM2.
Файл /etc/login.defs
/etc/login.defs содержит некоторые стандартные значения параметров паролей пользователей, таких, как период устаревания паролей или ограничения длины паролей. (Там же вы можете обнаружить числовые ограничения идентификаторов пользователей и идентификаторов групп, а также указание на то, должна ли создаваться домашняя директория пользователя по умолчанию).
root@rhel65:~# grep ^PASS /etc/login.defs PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7
root@debian7:~# grep PASS /etc/login.defs # PASS_MAX_DAYS Максимальное количество дней, в течение которых может использоваться пароль. # PASS_MIN_DAYS Минимальное количество дней, которые должны пройти между изменениями паролей. # PASS_WARN_AGE Количество дней, в течение которых будут выводиться предупреждения об истечении строка действия пароля. PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_WARN_AGE 7 #PASS_CHANGE_TRIES #PASS_ALWAYS_WARN #PASS_MIN_LEN #PASS_MAX_LEN # NO_PASSWORD_CONSOLE root@debian7:~#
Утилита chage
chage может использоваться для установки даты истечения срока действия пользовательской учетной записи (-E), установки минимального (-m) и максимального (-M) срока действия пароля, даты истечения срока действия пароля, а также установки количества дней, в течение которых выводятся предупреждения об истечении срока действия пароля. Многие из этих функций реализованы также и в рамках утилиты passwd. Параметр -l утилиты chage позволяет ознакомиться с текущими значениями этих параметров для указанного пользователя.
root@rhel65:~# chage -l paul Последний раз пароль был изменён : мар 27, 2014 Срок действия пароля истекает : никогда Пароль будет деактивирован через : никогда Срок действия учётной записи истекает : никогда Минимальное количество дней между сменой пароля : 0 Максимальное количество дней между сменой пароля : 99999 Количество дней с предупреждением перед деактивацией пароля : 7 root@rhel65:~#
Блокировка учетных записей
Пароли из файла /etc/shadow не могут начинаться с символа восклицательного знака. Если второе поле в строке из файла /etc/passwd начинается с символа восклицательного знака, пароль не может использоваться.
Использование данной особенности обычно называется блокировкой, деактивацией или отключением пользовательской учетной записи. Помимо текстового редактора vi (или vipw) вы можете использовать утилиту usermod для этой цели.
laura из файла /etc/shadow. Следующая команда позволяет деактивировать пароль пользователя laura, после чего Laura не сможет пройти фазу аутентификации при условии использования данного пароля.
root@debian7:~# grep laura /etc/shadow | cut -c1-70 laura:$6$JYj4JZqp$stwwWACp3OtE1R2aZuE87j.nbW.puDkNUYVk7mCHfCVMa3CoDUJV root@debian7:~# usermod -L laura
root@debian7:~# grep laura /etc/shadow | cut -c1-70 laura:!$6$JYj4JZqp$stwwWACp3OtE1R2aZuE87j.nbW.puDkNUYVk7mCHfCVMa3CoDUJ root@debian7:~#
su посредством sudo) все так же будут иметь возможность использовать команду su для работы с учетной записью пользователя laura (так как в этом случае пароль пользователя не требуется). Кроме того, следует учитывать тот факт, что Laura все еще сможет войти в систему в том случае, если она заранее настроила доступ по ssh без использования пароля!
root@debian7:~# su - laura laura@debian7:~$
usermod -U.
root@debian7:~# usermod -U laura root@debian7:~# grep laura /etc/shadow | cut -c1-70 laura:$6$JYj4JZqp$stwwWACp3OtE1R2aZuE87j.nbW.puDkNUYVk7mCHfCVMa3CoDUJV
Следует подходить с осторожностью к работе и учитывать различия параметров интерфейса командной строки утилит passwd, usermod и useradd в различных дистрибутивах Linux. Проверяйте содержимое локальных файлов при использовании таких возможностей, как "деактивация, отключение или блокировка" учетных записей пользователей и их паролей.
Редактирование локальных файлов
/etc/passwd или /etc/shadow, располагая информацией о командах для управления паролями, используйте утилиту vipw вместо непосредственного использования текстового редактора vi(m). Утилита vipw осуществляет корректную блокировку данного файла.
[root@RHEL5 ~]# vipw /etc/passwd vipw: the password file is busy (/etc/ptmp present)
Практическое задание: пароли пользователей
-
1. Установите пароль
hunter2для пользователяserena. -
2. Также установите пароль для пользователя
venus, после чего заблокируйте учетную запись пользователяvenusс помощью утилитыusermod. Проверьте наличие признаков блокировки в файле/etc/shadowдо и после осуществления блокировки. -
3. Используйте команду
passwd -dдля деактивации пароля пользователяserena. Проверьте наличие строки для пользователяserenaв файле/etc/shadowдо и после осуществления деактивации. -
4. Каковы различия между операцией блокировки пользовательской учетной записи и операцией деактивации пароля пользовательской учетной записи, которые мы только что осуществляли с помощью команд
usermod -Lиpasswd -d? -
5. Попытайтесь изменить пароль serena на пароль serena as serena.
-
6. Сделайте так, чтобы пользователь
serenaбыл обязан изменять пароль через каждые 10 дней. -
7. Сделайте так, чтобы каждый новый пользователь был обязан изменять свой пароль через каждые 10 дней.
-
8. Воспользуйтесь учетной записью пользователя root для создания резервной копии файла
/etc/shadow. Используйте текстовый редакторviдля копирования хэша пароляhunter2из строки пользователяvenusв строку пользователяserena. Может ли после этого пользовательserenaвойти в систему с паролемhunter2? -
9. В каких случаях следует использовать утилиту
vipwвместоvi? Какая проблема может возникнуть при использовании текстового редактораviилиvimдля редактирования файла паролей? -
10. Используйте команду
chshдля вывода списка доступных командных оболочек (данная команда будет работать исключительно в дистрибутивах RHEL/CentOS/Fedora) и сравните вывод с выводом командыcat /etc/shells. -
11. Какой параметр утилиты
useraddпозволяет установить имя домашней директории пользователя? -
12. Как можно определить, заблокирован или разблокирован пароль пользователя
serena? Предложите решение на основе утилитыgrep, а также решение на основе утилитыpasswd.
Корректная процедура выполнения практического задания: пароли пользователей
-
1. Установите пароль
hunter2для пользователяserena. -
root@debian7:~# passwd serena Изменяется пароль пользователя serena. Новый пароль : Повторите ввод нового пароля : passwd: все данные аутентификации успешно обновлены.
-
2. Также установите пароль для пользователя
venus, после чего заблокируйте учетную запись пользователяvenusс помощью утилитыusermod. Проверьте наличие признаков блокировки в файле/etc/shadowдо и после осуществления блокировки. -
root@debian7:~# passwd venus Изменяется пароль пользователя venus. Новый пароль : Повторите ввод нового пароля : passwd: все данные аутентификации успешно обновлены. root@debian7:~# grep venus /etc/shadow | cut -c1-70 venus:$6$gswzXICW$uSnKFV1kFKZmTPaMVS4AvNA/KO27OxN0v5LHdV9ed0gTyXrjUeM/ root@debian7:~# usermod -L venus root@debian7:~# grep venus /etc/shadow | cut -c1-70 venus:!$6$gswzXICW$uSnKFV1kFKZmTPaMVS4AvNA/KO27OxN0v5LHdV9ed0gTyXrjUeM
Обратите внимание на то, что в результате выполнения команды
usermod -Lперед хэшем пароля добавляется символ восклицательного знака. -
3. Используйте команду
passwd -dдля деактивации пароля пользователяserena. Проверьте наличие строки для пользователяserenaв файле/etc/shadowдо и после осуществления деактивации. -
root@debian7:~# grep serena /etc/shadow | cut -c1-70 serena:$6$Es/omrPE$F2Ypu8kpLrfKdW0v/UIwA5jrYyBD2nwZ/dt.i/IypRgiPZSdB/B root@debian7:~# passwd -d serena Удаляется пароль для пользователя serena. passwd: Успех root@debian7:~# grep serena /etc/shadow serena::16358:0:99999:7::: root@debian7:~#
-
4. Каковы различия между операцией блокировки пользовательской учетной записи и операцией деактивации пароля пользовательской учетной записи, которые мы только что осуществляли с помощью команд
usermod -Lиpasswd -d? -
Блокировка предотвратит вход пользователя в систему с использованием установленного пароля благодаря добавлению символа ! перед хэшем пароля в файле
/etc/shadow.Деактивация с помощью утилиты
passwdприведет к удалению хэша пароля из файла/etc/shadow. -
5. Попытайтесь изменить пароль serena на пароль serena as serena.
-
Войдите в систему с именем пользователя
serena, после чего выполните команду:passwd serena... Исполнение команды должно завершиться неудачей! -
6. Сделайте так, чтобы пользователь
serenaбыл обязан изменять пароль через каждые 10 дней. -
chage -M 10 serena
-
7. Сделайте так, чтобы каждый новый пользователь был обязан изменять свой пароль через каждые 10 дней.
-
vi /etc/login.defs (и измените значение переменной PASS_MAX_DAYS на 10)
-
8. Воспользуйтесь учетной записью пользователя root для создания резервной копии файла
/etc/shadow. Используйте текстовый редакторviдля копирования хэша пароляhunter2из строки пользователяvenusв строку пользователяserena. Может ли после этого пользовательserenaвойти в систему с паролемhunter2? -
Да, может.
-
9. В каких случаях следует использовать утилиту
vipwвместоvi? Какая проблема может возникнуть при использовании текстового редактораviилиvimдля редактирования файла паролей? -
Утилита
vipwвыведет предупреждение в том случае, если кто-либо еще в данный момент редактирует данный файл (с помощью утилитыvipw). -
10. Используйте команду
chshдля вывода списка доступных командных оболочек (данная команда будет работать исключительно в дистрибутивах RHEL/CentOS/Fedora) и сравните вывод с выводом командыcat /etc/shells. -
chsh -l cat /etc/shells
-
11. Какой параметр утилиты
useraddпозволяет установить имя домашней директории пользователя? -
-d
-
12. Как можно определить, заблокирован или разблокирован пароль пользователя
serena? Предложите решение на основе утилитыgrep, а также решение на основе утилитыpasswd. -
grep serena /etc/shadow passwd -S serena
| Предыдущий раздел: | Оглавление | Следующий раздел: |
| Глава 26. Управление учетными записями пользователей | Глава 28. Профили пользователей |
