Формат файла etc shadow
Главное меню » Linux » Понимание файла /etc/shadow
Формат /etc/shadow
Файл /etc/shadow содержит одну запись в каждой строке, каждая из которых представляет собой учетную запись пользователя. Вы можете просмотреть содержимое файла с помощью текстового редактора или команды, такой как cat:
Как правило, первая строка описывает пользователя root, затем системные и обычные учетные записи пользователей. Новые записи добавляются в конец файла.
Каждая строка файла /etc/shadow содержит девять полей, разделенных запятыми:
Если поле пароля содержит звездочку ( *) или восклицательный знак ( !), пользователь не сможет войти в систему с использованием аутентификации по паролю. Другие методы входа, такие как аутентификация на основе ключей или переключение на пользователя, по-прежнему разрешены
Файл /etc/shadow не стоит редактировать вручную, если вы не знаете, что вы делаете. Всегда используйте команду, которая предназначена для этой цели. Например, чтобы изменить пароль пользователя, используйте команду passwd, а для изменения информации об устаревании пароля используйте команду chage.
Пример записи
Давайте посмотрим на следующий пример:
Запись выше содержит информацию о пароле пользователя andreyex:
Вывод
Файл /etc/shadow хранит запись о паролях зашифрованы пользователями, а также других паролях связанной с ними информацию.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
В этом разделе мы познакомимся с механизмом управления аккаунтами в Linux и начнем с файла /etc/passwd, в котором определены все пользователи, которые существуют в системе. Вы можете посмотреть свой файл /etc/passwd, набрав команду less /etc/passwd. Каждой строкой в /etc/passwd определяется аккаунт пользователя. Вот пример из моего /etc/passwd:
drobbins:x:1000:1000:Daniel Robbins:/home/drobbins:/bin/bash
Как видите, в одной строке не так уж много информации. Каждая из них содержит несколько полей, разделённых ":". Первое поле отвечает за имя пользователя (drobbins), второе поле содержит «x». На устаревших Linux-системах второе поле содержало зашифрованных пароль для аутентификации, но фактически, сейчас все Linux-системы хранят эту информацию в другом файле. Третье поле отвечает за числовой пользовательский идентификатор, связанный с конкретным пользователем, а четвертое поле ассоциирует этого пользователя с конкретной группой; скоро мы увидим, где определена группа 1000. Пятое поле содержит текстовое описание аккаунта, в нашем случае это имя пользователя. Шестое поле определяет домашний каталог пользователя, седьмое — устанавливает стартовую оболочку пользователя, которая будет автоматически запускаться когда пользователь входит в систему.
/etc/passwd, советы и хитрости
Вы вероятно заметили, что в системе намного больше пользовательских аккаунтов, которые определены в /etc/passwd, чем тех, которые логинятся в систему на самом деле. Всё это потому, что различные компоненты Linux используют некоторые аккаунты для повышения безопасности. Обычно, такие системные аккаунты имеют идентификатор (uid) меньший 100, и у многих из них в качестве стартовой оболочки установлена /bin/false. Так как эта программа ничего не делает, кроме как выходит и возвращает код ошибки, это эффективно препятствует использованию этих аккаунтов в качестве обычных аккаунтов для логина — т.е. они предназначены только для внутрисистемного пользования.
/etc/shadow
Итак, сами пользовательские аккаунты определены в /etc/passwd. Системы Linux вдобавок к /etc/passwd содержат его файл-компаньон /etc/shadow. Он, в отличие от /etc/passwd, доступен для чтения только суперпользователю и содержит зашифрованную информацию о паролях. Взглянем на образец строки из /etc/shadow:
drobbins:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0
Каждая строка определяет информацию о пароле конкретного аккаунта, поля в ней разделены знаком ":". Первое поле определяет конкретный пользовательский аккаунт, которому соответствует данная «теневая» запись. Во втором поле содержится зашифрованный пароль. Оставшиеся поля описаны в таблице ниже:
поле 3 — количество дней с 01.01.1970 до момента, когда пароль был изменен
поле 4 — количество дней до того, как будет разрешено сменить пароль («0» — «менять в любое время»)
поле 5 — количество дней до того, как система заставит пользователя сменить пароль ("-1" — «никогда»)
поле 6 — количество дней до истечения срока действия пароля, когда пользователь получит предупреждение об этом ("-1" — «не предупреждать»)
поле 7 — количество дней после истечения срока действия пароля, по прошествии которых аккаунт будет автоматически отключен системой ("-1" — «не отключать»)
поле 8 — количество дней, прошедшее с момента отключения этого аккаунта ("-1" — «этот аккаунт включен»)
поле 9 — зарезервировано для будущего использования
/etc/group
Теперь взглянем на файл /etc/group, который определяет группы в системе Linux. Вот примерная строка из него:
drobbins:x:1000:
Формат полей файла /etc/group следующий: первое поле определяет имя группы, второе поле — это поле остаточного пароля, которое сейчас просто зарезервировано x, и третье поле определяет числовой идентификатор для конкретной группы. Четвертое поле (которое пусто в примере выше) определяет всех членов группы.
Вспомните, что в нашем образце строки из /etc/passwd есть «ссылка» на группу с идентификатором 1000. Мы сможем поместить пользователя drobbins в группу drobbins, даже несмотря на отсутствие имени drobbins в четвертом поле /etc/group.
Примечания о группах
Замечание насчет соответствия пользователей с группами: на некоторых системах каждый новый логин-аккаунт связан с группой, имеющей то же имя (и обычно идентификатор). На других системах все логин-аккаунты будут принадлежать к одной группе пользователей. Какой из этих методов выбрать зависит от вас. Создание соответствующей группы для каждого пользователя имеет преимущество в том, что позволяет им более легко контролировать их собственный доступ просто помещая доверенных друзей в свою личную группу.
Ручное создание пользователей и групп
Теперь, я покажу как создать аккаунты для пользователя и группы. Лучший путь узнать как это сделать это добавить нового пользователя в систему вручную. Для начала убедитесь что вашей переменной окружения EDITOR соответствует ваш любимый редактор:
Редактирование /etc/passwd
Итак, у вас уже есть готовый файл /etc/passwd, добавьте теперь следующую строку:
testuser:x:3000:3000:LPI tutorial test user:/home/testuser:/bin/false
Мы только что добавили пользователя «testuser» с идентификатором 3000. Мы определили его в группу с таким же идентификатором, которую еще не создали. Но мы можем добавить его к уже имеющейся группе пользователей, если нужно. У этого пользователя установлен комментарий, гласящий «LPI tutorial test user», домашний каталог установлен как "/home/testuser", а командная оболочка — как "/bin/false", в целях безопасности. Если бы мы создавали не тестовый аккаунт, мы бы установили командную оболочку как "/bin/bash". Отлично, теперь сохраните файл и выходите.
Редактирование /etc/shadow
Сейчас нам нужно добавить запись в /etc/shadow для этого пользователя. Для этого наберите vipw -s. Вас как всегда встретит ваш любимый редактор в котором уже открыт файл /etc/shadow. Теперь скопируйте строку существующего пользовательского аккаунта (того, у которого есть пароль и запись которого длиннее стандартных записей системных аккаунтов)
drobbins:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0
Замените имя пользователя в скопированной строке на имя вашего пользователя и убедитесь что все поля (особенно старый пароль) установлены как вам надо:
testuser:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0
Теперь сохраните и закройте.
Установка пароля
Вы вернетесь к командной строке. Теперь, самое время задать пароль для вашего нового пользователя.
Редактирование /etc/group
Теперь /etc/passwd и /etc/shadow готовы и самое время как следует настроить /etc/group. Для этого, наберите:
testuser:x:3000:
Теперь сохраните и закройте.
Создание домашней директории
Мы почти закончили. Выполните следующие команды для создания домашнего каталога testuser'а:
Утилиты администрирования учетных записей
Вы уже знаете как вручную добавить новые аккаунты и группы, давайте же теперь рассмотрим различные, экономящие время, утилиты для управления аккаунтами под Linux. Из-за некоторых ограничений мы не будем рассматривать множество деталей, описывающих эти команды. Запомните — вы всегда можете получить больше информации о какой-либо команде если посмотрите её man-страничку. Если вы планируете сдавать LPIC 101 экзамен, вам следует провести побольше времени на ознакомление с каждой из этих команд.
newgrp — По умолчанию, любой файл, который создает пользователь, сразу же присваивается к группе, в которой он состоит, определенной в /etc/passwd. Если пользователь принадлежит к другим группам, он или она может набрать newgrp thisgroup чтобы стать членом группы thisgroup. Затем, любые новые созданные файлы унаследуют членство в thisgroup.
chage — Команда chage используется для просмотра и изменения настроек срока действия паролей, сохраненных в /etc/shadow.
gpasswd — Основная утилита управления группами
groupadd/groupdel/groupmod — Используются для добавления/удаления/изменения групп в /etc/group
useradd/userdel/usermod — Используются для добавления/удаления/изменения пользователей в /etc/passwd. Эти команды могут выполнять и другие полезные функции. Смотрите man для получения дополнительной информации.
pwconv/grpconv — Используются для преобразования passwd и group файлов старого образца в новые shadow passwords. Фактически, все Linux системы уже используют shadow passwords, так что вам никогда не придется использовать эти команды.
Продолжение следует.
Об авторах
Daniel Robbins
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
В этом разделе мы познакомимся с механизмом управления аккаунтами в Linux и начнем с файла /etc/passwd, в котором определены все пользователи, которые существуют в системе. Вы можете посмотреть свой файл /etc/passwd, набрав команду less /etc/passwd. Каждой строкой в /etc/passwd определяется аккаунт пользователя. Вот пример из моего /etc/passwd:
drobbins:x:1000:1000:Daniel Robbins:/home/drobbins:/bin/bash
Как видите, в одной строке не так уж много информации. Каждая из них содержит несколько полей, разделённых ":". Первое поле отвечает за имя пользователя (drobbins), второе поле содержит «x». На устаревших Linux-системах второе поле содержало зашифрованных пароль для аутентификации, но фактически, сейчас все Linux-системы хранят эту информацию в другом файле. Третье поле отвечает за числовой пользовательский идентификатор, связанный с конкретным пользователем, а четвертое поле ассоциирует этого пользователя с конкретной группой; скоро мы увидим, где определена группа 1000. Пятое поле содержит текстовое описание аккаунта, в нашем случае это имя пользователя. Шестое поле определяет домашний каталог пользователя, седьмое — устанавливает стартовую оболочку пользователя, которая будет автоматически запускаться когда пользователь входит в систему.
/etc/passwd, советы и хитрости
Вы вероятно заметили, что в системе намного больше пользовательских аккаунтов, которые определены в /etc/passwd, чем тех, которые логинятся в систему на самом деле. Всё это потому, что различные компоненты Linux используют некоторые аккаунты для повышения безопасности. Обычно, такие системные аккаунты имеют идентификатор (uid) меньший 100, и у многих из них в качестве стартовой оболочки установлена /bin/false. Так как эта программа ничего не делает, кроме как выходит и возвращает код ошибки, это эффективно препятствует использованию этих аккаунтов в качестве обычных аккаунтов для логина — т.е. они предназначены только для внутрисистемного пользования.
/etc/shadow
Итак, сами пользовательские аккаунты определены в /etc/passwd. Системы Linux вдобавок к /etc/passwd содержат его файл-компаньон /etc/shadow. Он, в отличие от /etc/passwd, доступен для чтения только суперпользователю и содержит зашифрованную информацию о паролях. Взглянем на образец строки из /etc/shadow:
drobbins:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0
Каждая строка определяет информацию о пароле конкретного аккаунта, поля в ней разделены знаком ":". Первое поле определяет конкретный пользовательский аккаунт, которому соответствует данная «теневая» запись. Во втором поле содержится зашифрованный пароль. Оставшиеся поля описаны в таблице ниже:
поле 3 — количество дней с 01.01.1970 до момента, когда пароль был изменен
поле 4 — количество дней до того, как будет разрешено сменить пароль («0» — «менять в любое время»)
поле 5 — количество дней до того, как система заставит пользователя сменить пароль ("-1" — «никогда»)
поле 6 — количество дней до истечения срока действия пароля, когда пользователь получит предупреждение об этом ("-1" — «не предупреждать»)
поле 7 — количество дней после истечения срока действия пароля, по прошествии которых аккаунт будет автоматически отключен системой ("-1" — «не отключать»)
поле 8 — количество дней, прошедшее с момента отключения этого аккаунта ("-1" — «этот аккаунт включен»)
поле 9 — зарезервировано для будущего использования
/etc/group
Теперь взглянем на файл /etc/group, который определяет группы в системе Linux. Вот примерная строка из него:
drobbins:x:1000:
Формат полей файла /etc/group следующий: первое поле определяет имя группы, второе поле — это поле остаточного пароля, которое сейчас просто зарезервировано x, и третье поле определяет числовой идентификатор для конкретной группы. Четвертое поле (которое пусто в примере выше) определяет всех членов группы.
Вспомните, что в нашем образце строки из /etc/passwd есть «ссылка» на группу с идентификатором 1000. Мы сможем поместить пользователя drobbins в группу drobbins, даже несмотря на отсутствие имени drobbins в четвертом поле /etc/group.
Примечания о группах
Замечание насчет соответствия пользователей с группами: на некоторых системах каждый новый логин-аккаунт связан с группой, имеющей то же имя (и обычно идентификатор). На других системах все логин-аккаунты будут принадлежать к одной группе пользователей. Какой из этих методов выбрать зависит от вас. Создание соответствующей группы для каждого пользователя имеет преимущество в том, что позволяет им более легко контролировать их собственный доступ просто помещая доверенных друзей в свою личную группу.
Ручное создание пользователей и групп
Теперь, я покажу как создать аккаунты для пользователя и группы. Лучший путь узнать как это сделать это добавить нового пользователя в систему вручную. Для начала убедитесь что вашей переменной окружения EDITOR соответствует ваш любимый редактор:
Редактирование /etc/passwd
Итак, у вас уже есть готовый файл /etc/passwd, добавьте теперь следующую строку:
testuser:x:3000:3000:LPI tutorial test user:/home/testuser:/bin/false
Мы только что добавили пользователя «testuser» с идентификатором 3000. Мы определили его в группу с таким же идентификатором, которую еще не создали. Но мы можем добавить его к уже имеющейся группе пользователей, если нужно. У этого пользователя установлен комментарий, гласящий «LPI tutorial test user», домашний каталог установлен как "/home/testuser", а командная оболочка — как "/bin/false", в целях безопасности. Если бы мы создавали не тестовый аккаунт, мы бы установили командную оболочку как "/bin/bash". Отлично, теперь сохраните файл и выходите.
Редактирование /etc/shadow
Сейчас нам нужно добавить запись в /etc/shadow для этого пользователя. Для этого наберите vipw -s. Вас как всегда встретит ваш любимый редактор в котором уже открыт файл /etc/shadow. Теперь скопируйте строку существующего пользовательского аккаунта (того, у которого есть пароль и запись которого длиннее стандартных записей системных аккаунтов)
drobbins:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0
Замените имя пользователя в скопированной строке на имя вашего пользователя и убедитесь что все поля (особенно старый пароль) установлены как вам надо:
testuser:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0
Теперь сохраните и закройте.
Установка пароля
Вы вернетесь к командной строке. Теперь, самое время задать пароль для вашего нового пользователя.
Редактирование /etc/group
Теперь /etc/passwd и /etc/shadow готовы и самое время как следует настроить /etc/group. Для этого, наберите:
testuser:x:3000:
Теперь сохраните и закройте.
Создание домашней директории
Мы почти закончили. Выполните следующие команды для создания домашнего каталога testuser'а:
Утилиты администрирования учетных записей
Вы уже знаете как вручную добавить новые аккаунты и группы, давайте же теперь рассмотрим различные, экономящие время, утилиты для управления аккаунтами под Linux. Из-за некоторых ограничений мы не будем рассматривать множество деталей, описывающих эти команды. Запомните — вы всегда можете получить больше информации о какой-либо команде если посмотрите её man-страничку. Если вы планируете сдавать LPIC 101 экзамен, вам следует провести побольше времени на ознакомление с каждой из этих команд.
newgrp — По умолчанию, любой файл, который создает пользователь, сразу же присваивается к группе, в которой он состоит, определенной в /etc/passwd. Если пользователь принадлежит к другим группам, он или она может набрать newgrp thisgroup чтобы стать членом группы thisgroup. Затем, любые новые созданные файлы унаследуют членство в thisgroup.
chage — Команда chage используется для просмотра и изменения настроек срока действия паролей, сохраненных в /etc/shadow.
gpasswd — Основная утилита управления группами
groupadd/groupdel/groupmod — Используются для добавления/удаления/изменения групп в /etc/group
useradd/userdel/usermod — Используются для добавления/удаления/изменения пользователей в /etc/passwd. Эти команды могут выполнять и другие полезные функции. Смотрите man для получения дополнительной информации.
pwconv/grpconv — Используются для преобразования passwd и group файлов старого образца в новые shadow passwords. Фактически, все Linux системы уже используют shadow passwords, так что вам никогда не придется использовать эти команды.
Продолжение следует.
Об авторах
Daniel Robbins
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
В этом кратком руководстве объясняется, как правильно редактировать файлы /etc/passwd и /etc/group с помощью команд vipw и vigr в Linux.
Почему мы не можем просто отредактировать их с помощью текстового редактора, такого как Vi или nano, и покончить с этим?
Хорошо, представьте себе этот сценарий.
Файл /etc/passwd в настоящее время редактируется пользователем root с помощью Vi или некоторых других текстовых редакторов.
В то же время другой пользователь пытается изменить свой пароль, пока пользователь root редактирует файл /etc/passwd.
Таким образом, изменение пароля в этом файле может не обновляться, и пользователь может не иметь возможности войти в систему.
Именно в таком случае команды vipw и vigr приходят на помощь.
Команды vipw и vigr используются для безопасного редактирования файлов /etc/passwd и /etc/group в системах Linux.
Они будут устанавливать соответствующие блокировки при редактировании файлов /etc/passwd и /etc/group, чтобы другие пользователи не могли вносить в них изменения и избежать повреждения файлов.
Когда вы запускаете эти команды с флагом -s, они будут редактировать shadow версии этих файлов, то есть /etc/shadow и /etc/gshadow соответственно.
Правильный способ редактирования файлов /etc/passwd и /etc/group с помощью команд vipw и vigr
Чтобы безопасно отредактировать файл /etc/password, просто запустите:
Чтобы безопасно отредактировать файл /etc/group, запустите:Теперь команды vipw и vigr заблокируют файлы /etc/passwd и /etc/group и не позволят другим пользователям вносить какие-либо изменения.
Чтобы убедиться в этом, откройте два окна терминала.
Запустите «sudo vipw» в одном окне и попробуйте изменить пароль пользователя в другом окне.
Пароль не будет обновлен, пока вы не закроете команду vipw.
Поэтому другие пользователи не cмогут случайно или намеренно внсти какие-либо изменения в файл /etc/passwd, пока вы редактируете их от пользователя root.
После закрытия /etc/passwd пароль будет успешно обновлен.
Вы также можете войти как обычный пользователь и попытаться изменить пароль пользователя в другом окне терминала.
Пароль не изменится, пока вы не закроете команду vipw.
Вы даже не сможете создавать новых пользователей при редактировании /etc/passwd командой vipw.
Читайте также: