Библиотека сайта 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. Профили пользователей |