Какие поля содержатся в файле etc shadow и etc passwd

Обновлено: 04.07.2024

Файлы /etc/passwd и /etc/ group в Solaris имеют такой же формат, как и в других системах UNIX , а файл /etc/ shadow одинаков для всех систем ветви System V. Рассмотрим примеры файлов (для этого потребуется посмотреть содержимое упомянутых файлов командой cat или командой more ):

Учетные записи пользователей

Файл состоит из записей, каждая из которых описывает одного пользователя и занимает одну строку. Поля записей разделяются двоеточиями.

Первое поле – имя пользователя в системе. Это имя пользователь вводит для входа в систему . Имя в Solaris должно иметь длину от 2 до 8 символов и содержать только латинские буквы и цифры. Имя пользователя в Solaris может содержать прописные латинские буквы, однако из соображений совместимости с другими системами UNIX рекомендуется использовать только строчные (маленькие) буквы.

Второе поле – признак наличия пароля. Пустое поле означает отсутствие пароля. Для фактического отсутствия пароля у пользователя необходимо, кроме того, чтобы второе поле в файле /etc/ shadow в описании этого пользователя имело значение NP .

Третье поле – идентификатор пользователя , UID .

Четвертое поле – идентификатор главной группы пользователя , GID .

Пятое поле (иногда его называют GECOS) – описание пользователя. Обычно оно содержит полное имя пользователя (имя и фамилию) и координаты для связи с ним – номер офиса, адрес, телефон или пейджер .

Шестое поле – домашний каталог пользователя . При интерактивном входе в систему пользователь попадает именно в этот каталог сразу после успешного входа. Кроме этого, некоторые сетевые службы (например, ftpd ) требуют, чтобы у каждого пользователя, пытающегося получить доступ к сетевой службе , был "честный", т.е. на самом деле существующий и доступный для пользователя домашний каталог .

Седьмое поле – командный процессор , который будет запущен для пользователя при интерактивном входе в систему . Некоторые сетевые службы (например, ftpd ) требуют, чтобы у каждого пользователя, пытающегося получить доступ к сетевой службе , был существующий в системе на самом деле командный процессор . Файл /etc/shells описывает доступные в системе командные процессоры , которые следует назначать пользователям. Сразу после установки системы файл /etc/shells не существует. Системный администратор должен создать его вручную, если он требуется для каких-то программ в системе, например, для ftpd .

Относительно содержания поля GECOS следует сделать несколько замечаний.

Поле GECOS часто называют полем комментария, и это верно: в нем следует записывать контактную информацию о пользователе. Системному администратору ничего не скажет строка в файле протокола , которая свидетельствуюет о проблеме, вызванной работой пользователя ikonst34. Кто это? Иван Константинович из планового отдела или Илья Константинов из технического? Или это Иконников Станислав из филиала 34? Чтобы не мучаться ассоциациями, навеянными именем пользователя, а точно знать, кто скрывается за лаконичным username , следует заполнять поле комментария.

Каждый элемент этого поля (например, полное имя , номер комнаты в офисе, контактный телефон) принято отделять от других запятой, но это необязательное требование. В настоящее время, к сожалению, не существует строго определенного правила заполнения поля комментария. Хорошим стилем является указание в этом поле следующей информации:

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

Не всегда требуется указывать всю эту информацию. На деле достаточно иметь ровно столько сведений, сколько требуется системному администратору для однозначной идентификации владельца учетной записи. Пожалуйста, только имейте в виду – не одному-единственному конкретному системному администратору , а любому администратору , которому придется управлять созданной вами системой. Вдруг нынешний системный администратор уволится или уедет в отпуск? Сможет ли его преемник или заместитель быстро разобраться в записях в /etc/passwd ? Делайте записи в поле комментария полезными сведениями, а не отписками.

Например, можно ожидать нечто вроде следующих записей в /etc/passwd :

Последнее, что следует сказать о поле GECOS: почему оно так называется.

В свое время компания General Electric владела компьютером, операционной системой которого была GECOS ( General Electric Comprehensive Operating System ). Компьютеры под управлением UNIX использовались для подготовки задач печати для этого компьютера. Изначальным назначением поля комментария было хранение идентификационной информации для задач, которые были предназначены для системы GECOS.

Этот файл тоже описывает пользователей. В нем хранятся зашифрованные пароли пользователей. Формат файла таков:

  • первое поле – имя пользователя ;
  • второе поле – зашифрованный пароль, *LK* означает, что учетная запись заблокирована ( locked ), а NP – что пароль отсутствует (no password );
  • третье поле – число дней между 1 января 1970 года и датой последнего изменения пароля;
  • четвертое поле – минимальное количество дней, которое должно пройти от одной смены пароля до другой;
  • пятое поле – максимальное количество дней, которое пароль считается действительным; по истечении этого количества дней система попросит ввести новый пароль, так как старый утратит силу;
  • шестое поле – количество дней, за которое система предупредит пользователя о необходимости смены пароля;
  • седьмое поле – количество дней, которое пользователь может не работать в системе и считаться активным; по истечении этого количества дней учетная запись автоматически блокируется;
  • восьмое поле – дата, до которой учетная запись считается действительной; после этой даты пользователь не сможет войти в систему;
  • девятое поле зарезервировано и сейчас не используется.

Данный формат /etc/ shadow характерен как для Solaris , так и для других подобных System V систем UNIX, например, для Linux.

В /etc/ shadow обязательно присутствуют только первые три поля в каждой записи, остальные могут отсутствовать – все или часть из них. Рекомендуется не вносить исправления в /etc/ shadow вручную, а делать это с помощью программ smc , usermod, useradd, passwd . Однако, в одном случае – если вы забыли пароль root – придется исправлять /etc/ shadow в текстовом редакторе .

Пользовательские файлы конфигурации

У каждого пользователя в домашнем каталоге есть несколько файлов конфигурации. Обычно присутствуют файлы конфигурации командного процессора . Если в системе используется несколько командных процессоров , имеет смысл сделать такие файлы конфигурации для каждого из них; о разных файлах конфигурации командных процессоров см. лекцию 11. Кроме них, могут быть файлы конфигурации графической среды (.Xsession и другие), файлы конфигурации почтовой системы (.elm, . forward и другие), файлы с историей команд (. history , .bash_history) и прочие. Их объединяет то, что их имена практически всегда начинаются с символа "." (точка). Можно увидеть их в списке файлов каталога, если дать команду

Пользовательские файлы конфигураций создаются заранее системным администратором . Стандартные пользовательские файлы конфигураций по умолчанию поставляются вместе с операционной системой и в Solaris располагаются в /etc/skel (от слова skeleton – скелет, т.е. основа). При создании нового пользователя они автоматически копируются из каталога /etc/skel в домашний каталог нового пользователя. При создании нового пользователя или модификации существующей учетной записи можно указать другой каталог с файлами конфигурации, чтобы копировать не файлы по умолчанию, а другие файлы. Их предварительно следует создать и модифицировать в соответствии с желаемыми настройками для новых пользователей.

Модификация файлов в каталоге /etc/skel повлияет только на настройки новых пользователей, которые будут созданы после модификации этих файлов.

Мы будем далее называть /etc/skel каталогом базовых пользовательских файлов конфигурации. После того, как пользователь войдет в систему, он может изменить настройки, сделанные для него в файлах конфигурации, или добавить новые, если системный администратор не запретил ему запись в файлы конфигурации.

Группы пользователей

Группы, определенные в системе, перечислены в файле /etc/ group . В системе могут быть определены и другие группы, если для аутентификации и авторизации помимо файлов /etc/passwd и /etc/ group используются и другие источники (например, каталог LDAP – см. лекцию 8 курса "Системное администрирование ОС Solaris 10").

Первое поле – имя группы .

Второе поле – зашифрованный пароль; это устаревшее поле – в настоящее время нет команды, которая бы позволила установить пароль на группу, и обычно нет необходимости это делать. Если все же такая необходимость появится, то можно установить требуемый пароль какому-нибудь пользователю с помощью программы passwd, а затем копировать поле пароля из /etc/ shadow в /etc/ group . Пароль группы используется в Solaris только программой newgrp . Эта программа требуется для изменения эффективного группового идентификатора пользователя в ходе его интерактивной работы. Если группа, которой соответствует новый групповой идентификатор, имеет пароль, то программа newgrp его запросит.

Третье поле – идентификатор группы ( GID ). Этот идентификатор должен быть уникальным в пределах системы, а в случае использования общих файлов групп и паролей – в пределах всей сети организации. Номера от 0 до 99 и от 60001 до 60002 зарезервированы для системных групп. Создавайте свои группы с идентификаторами от 100 до 60000 включительно.

Четвертое поле – список пользователей через запятую; для этих пользователей данная группа будет являться дополнительной. В Solaris принято по умолчанию, что один пользователь может принадлежать не более чем к 15 дополнительным группам .

Немного обо всем и все о немногом, или практический опыт системного администратора.

Октябрь 2009
Пн Вт Ср Чт Пт Сб Вс
« Сен Ноя »
1234
567891011
12131415161718
19202122232425
262728293031

Лекция №10 Пользователи, группы. Файлы passwd, shadow, group.

Calendar

28 октября 2009, 17:40

На этой лекции мы поговорим о пользователях (учетных записях) и группах пользователей. Как я уже неоднократно говорил операционная система Linux является многопользовательской системой в которой может одновременно существовать достаточно большое число пользователей, которых можно объединять в группы.
Все пользователи локальной системы перечислены в файле /etc/passwd. Давайте посмотрим содержимое этого файла с помощью команды less /etc/passwd. Каждая строка файла /etc/passwd описывает одну учетную запись. Несмотря на то, что у вас может быть всего два пользователя в системе (root и вы сами), строчек в файле /etc/passwd гораздо больше. Дело в том, что для большинства служб операционной системы Linux существует своя собственная учетная запись с правами необходимыми для нормального функционирования этой службы. Такой подход позволяет повысить безопасность системы. Каждая строка состоит из семи полей разделенных двоеточием. Давайте рассмотрим эти поля. Для примера возьмем следующую строку: igor:x:1000:1000:igor. /home/igor:/bin/bash.

1. igor - мнемоническое представление учетной записи. Хотя система работает только с числовыми именами пользователей, нам проще запоминать имена именно в таком виде.

2. х - раньше в этом поле был пароль. Теперь он находится в другом месте, но поле осталось и сейчас там находится просто символ х.

3. 1000 - цифровое обозначение учетной записи. Его UID.

4. 1000 - числовое обозначение основной группы пользователя (GID). Каждый пользователь может принадлежать нескольким группам, но только одна из групп является для пользователя - основной. Именно та которая указана в четвертом поле файла /etc/passwd. Также пользователь должен обязательно принадлежать хотя бы одной группе. Как правило при создании нового пользователя создается одноименная группа для этого пользователя, которая и является основной.

5. igor. - В этом поле может содержаться описание пользователя, что позволяет администратору более полно описать того или иного пользователя или службу. Данное поле имеет стандартный формат о котором мы поговорим позднее, когда рассмотрим программу создания нового пользователя в системе.

6. /home/igor - путь к домашнему каталогу пользователя.

7. /bin/bash - командный интерпретатор пользователя. Если вы посмотрите на седьмое поле других учетных записей, то заметите, что /bin/bash является интерпретатором по умолчанию для обычных пользователей, /bin/sh - является интерпретатором для различных служб. Если службе для своей работы не нужен командный интерпретатор, то можно встретить запись /bin/false или /bin/nologin. Обе эти строчки не позволяют регистрироваться в системе, с той лишь разницей, что последняя записывает в журнал попытки входа.

Теперь рассмотрим файл в котором хранятся пароли пользователей. Данный файл называется /etc/shadow. В нем по аналогии с файлом /etc/passwd каждая строка описывает одного пользователя и имеет 9 полей разделенных двоеточием. Для просмотра этого файла нужны права администратора. Давайте рассмотрим поля данного файла на примере строки: root. 14438:0:99999:7.

1. root - мнемоническое имя пользователя к которому относится данная строка.

2. ! - в этом поле хранится пароль, а точнее его хеш (хеш пароля). Что такое хеш пароля? Хеш пароля это некая последовательность символов, которая получается после определенных необратимых преобразований над паролем пользователя. Необратимых потому, что обратная процедура: получение исходного вида пароля из хеша пароля представляет собой сложную математическую задачу невыполнимую в определенном заданном промежутке времени (обычно десятилетия и более). Когда вы каждый раз регистрируетесь в системе, то с вашим паролем каждый раз проводится операция (назовем ее хешированием) вычисления хеша пароля и сравнения его с хешем пароля из файла /etc/shadow. Если хеши паролей совпали - пользователь проходит аутентификацию.

По умолчанию в большинстве дистрибутивов применяется алгоритм хеширования md5. Но ничего не мешает вам заменить этот алгоритм на еще более стойкие версии (например md6). Правда в рамках лекции мы этот вопрос рассматривать не будем. Вернемся ко второму полю файла /etc/shadow. В примере вы видите там символ ! (восклицательный знак). Это в данном примере не хеш пароля. Хеш пароля выглядит примерно так: $1$4vN1osMk$EWywQfrBWxCtK45.4ARgc. Первые три символа являются одинаковыми для определенного алгоритма хеширования и позволяют его (алгоритм идентифицировать). В примере $1$ - это идентификатор алгоритма md5. Если перед любым хешем пароля в файле /etc/shadow поставить символ ! или *, то такой пароль будет признан недействительным и учетная запись будет заблокирована.

Пример когда вместо хеша пароля стоит ! характерен для дистрибутива Ubuntu где пользователь root действительно по умолчанию не может зарегистрироваться в системе. Таким образом если вы хотите заблокировать учетную запись пользователя, достаточно перед хешем пароля установить символ !, а чтобы разблокировать учетную запись нужно убрать этот символ.

Поля 3-7 содержат временные параметры пароля. Подробнее смотрите в
man shadow.

Поле 8 - это дата до которой учетная запись будет считаться действительной. По достижении указанного времени запись будет заблокирована. Если поле пустое, то время действия не ограничено.

Поле 9 - это зарезервированное поле.

Группы. Информация о группах хранится в файле /etc/group. Принцип тот же: строка описывает одну группу, есть несколько полей. Полей всего 4-е. Рассмотрим пример строки: shara:x:1002:igor,test.

1. shara - мнемоническое имя группы.

2. х - пароль для группы.

3. 1002 - цифровой код группы.

4. igor,test - пользователи, которые входят в группу. Перечисляются через запятую.

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



В этом разделе мы познакомимся с механизмом управления аккаунтами в 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/shadow», а также такие инструменты для настройки проверки подлинности, как команды «passwd» и «adduser».

Для демонстрации примеров используется выделенный сервер Ubuntu 12.04 , но любой современный дистрибутив Linux работает таким же образом.

Что такое файл «/etc/passwd»?

Для начала нужно рассмотреть файл под названием «/etc/passwd», который на самом деле не содержит паролей.

Когда-то этот файл хранил хешированные пароли всех пользователей в системе. Тем не менее, по соображениям безопасности позже эта ответственность была перенесена в отдельный файл.

Итак, что же находится в файле «/etc/passwd»?

less /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
. . .

Первое, на что стоит обратить внимание: этот файл доступен для непривилегированных пользователей.

То есть, любой пользователь системы может читать данный файл. Вот почему все пароли были перенесены в другой файл.

Рассмотрим формат файла.

Чтение файла «/etc/passwd»

Каждая строка файла содержит информацию о входе всех пользователей системы. Некоторые из этих пользователей могут быть созданы для работы демонов и фоновых служб.

Чтобы объяснить, какая именно информация содержится в строках данного файла, нужно подробно рассмотреть одну строку.

Поля информации разделяются двоеточием (:). Каждая строка типичного Linux-файла «/etc/passwd» содержит 7 полей:

  1. Root: имя пользователя;
  2. х: место для информации о паролях; пароль можно найти в файле «/etc/shadow».
  3. 0: ID пользователя. Каждый пользователь имеет уникальный идентификатор, благодаря которому система распознает его. ID root-пользователя всегда 0;
  4. 0: ID группы. Каждая группа имеет уникальный идентификатор. По умолчанию у каждого пользователя есть главная группа. Опять же, ID root-группы всегда 0;
  5. root: поле для примечаний. Данное поле можно использовать для описания пользователя или его функций. Оно может содержать что угодно, начиная от контактной информации пользователя и заканчивая описанием сервисов, для которых была создана учетная запись;
  6. /root: домашний каталог. Для обычных пользователей домашним каталогом является «/home/username», для root-пользователя это «/root»;
  7. /bin/bash: оболочка пользователя. Данное поле содержит оболочку, которая будет создана, или команды, которые будут выполняться при входе пользователя в систему.

По мере добавления пользователей с помощью таких команд, как «adduser» и «useradd», или с установкой большего количества сервисов этот файл будет расти. Информация о новом пользователе будет добавлена в конце данного файла.

В большинстве случаев этот файл не нужно редактировать вручную, так как для управления ним существуют специальные инструменты, обеспечивающие использование правильного синтаксиса.

Что такое «/etc/shadow»?

Фактические данные о паролях хранятся в файле с именем «/etc/shadow».

Данный файл на самом деле не содержит паролей в виде простого текста. Вместо этого, он использует функцию выведения ключей для создания случайных данных. Вот что хранится в данном файле.

Функция выведения ключей – это алгоритм, создающий при вводе одних и тех же данных определенный хэш. Такой же алгоритм выполняется на пароль, который дается в процессе аутентификации, и это значение сравнивается со значением в этом файле.

Имейте в виду, данный файл, в отличие от файла «/etc/passwd», не доступен дл прочтения непривилегированными пользователями.

Пользователь root имеет привилегии читать и писать в файлах; группа «shadow», содержащая пользователей, которым необходима аутентификация, имеет права на чтение.

Чтение файла «/etc/shadow»

Чтобы открыть файл «/etc/shadow», введите:

sudo less /etc/shadow
root:$6$mJD3Rsj4$xUa7jru6EEGTXnhwTfTT26/j8M5XiQvUl6UH32cfAWT/6W9iSI5IuIw5OOw4khwrsOHPyMwfCLyayfYiVdhAq0:15952:0:99999:7.
daemon:*:15455:0:99999:7.
bin:*:15455:0:99999:7.
sys:*:15455:0:99999:7.
sync:*:15455:0:99999:7.
games:*:15455:0:99999:7.
man:*:15455:0:99999:7.
. . .

Как и в файле «/etc/passwd», каждая строка содержит информацию об отдельном пользователе, а каждое поле отделяется символом двоеточия.

Примечание: символ звездочки (*) во втором поле строк значит, что данная учетная запись не может войти в систему. Обычно это используется для сервисов.

Для примера можно рассмотреть одну строку данного файла:

Файл «/etc/shadow» содержит следующие поля:

  1. daemon: имя пользователя;
  2. *: соль и хешированный пароль; данное поле можно просмотреть, войдя как root. Как указано выше, звездочка значит, что данная учетная запись не может быть использована для входа в систему.
  3. 15455: последнее изменение пароля. Данное значение ограничивается датой начала «Unix-эпохи» (1 января 1970).
  4. 0: допустимое количество дней для смены пароля. 0 в данном поле значит, что таких ограничений нет.
  5. 99999: количество дней до необходимости смены пароля. Значение 99999 указывает на то, что ограничения на продолжительность использования одного пароля не установлены.
  6. 7: количество дней до предупреждения об истечении срока использования пароля. Если требуется сменить пароль, пользователь будет извещен о данной необходимости за указанное количество дней.
  7. [blank]: последние три поля нужны для того, чтобы указать количество дней до деактивации учетной записи. Последнее поле не используется.

Изменение пароля

Для изменения паролей пользователей используется команда «passwd».

По умолчанию данная команда изменяет пароль текущего пользователя и не требует особых привилегий.

Чтобы изменить пароль другого пользователя, нужны привилегии администратора. Для этого используется следующий синтаксис:

sudo passwd username

Будет запрошен пароль для команды «sudo», затем можно будет ввести новый пароль и подтвердить его.

Если сравнить значение хэш в файле «/etc/shadow», можно увидеть, что после ввода команды passwd оно изменилось.

Создание нового пользователя

Нового пользователя можно создать при помощи нескольких команд.

Самый простой способ – использовать команду «adduser». В системах Ubuntu данная команда связана со скриптом «perl», который обрабатывает создание пользователя.

Команду можно вызвать следующим образом:

adduser demo
Adding user `demo' .
Adding new group `demo' (1000) .
Adding new user `demo' (1000) with group `demo' .
Creating home directory `/home/demo' .
Copying files from `/etc/skel' .
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for demo
Enter the new value, or press ENTER for the default
Full Name []: test
Room Number []: room
Work Phone []: work phone
Home Phone []: home phone
Other []: other
Is the information correct? [Y/n]

На данном этапе появится несколько вопросов, которые помогут внести необходимую информацию в файлы «/etc/passwd» и «/etc/shadow».

Можно просмотреть внесенную в файл «/etc/passwd» запись, введя:

tail -1 /etc/passwd
demo:x:1000:1000:test,room,work phoneme phone,other:/home/demo:/bin/bash

Как можно видеть, данная команда использует поле для примечаний в своих интересах. Остальные поля заполнены должным образом.

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

sudo tail -1 /etc/shadow
demo:$6$XvPCmWr4$HXWmaGSeU5SrKwK2ouAjc68SxbJgUQkQ.Fco9eTOex8232S7weBfr/CMHQkullQRLyJtCAD6rw5TVOXk39NAo/:15952:0:99999:7.

Итоги

При помощи этих простых инструментов можно изменить регистрационную информацию системы.

После внесения изменений важно проверить, можете ли вы войти в систему. Также необходимо проверить права на идентификационные файлы, чтобы сохранить функциональность сервера и обеспечить ему безопасность.

При развертывании нового приложения в продуктовой среде возникает множество нежданных ошибок, большая часть из них - ошибки прав доступа. Примерно полгода назад собрал информацию в данном по посте. Наконец-то дошли руки довести до ума, так что представляю на суд.

Основные правила управления доступом

Объекты (например, файлы и процессы) имеют владельцев. Владельцы обладают обширным (но необязательно неограниченным) контролем над своими объектами.

  • Вы являетесь владельцами новых объектов, создаваемых вами.
  • Пользователь root с особыми правами, известный как суперпользователь, может действовать как владелец любого объекта в системе.
  • Только суперпользователь может выполнять административные операции особого значения.

Владельцем файла всегда является один человек, тогда как в группу владельцев могут входить несколько пользователей. По традиции информация о группах хранилась в фай­ле /etc/group .

Основное

Пользователь - это любой кто пользуется компьютером.

Под каждого пользователя, создается свой каталог, пользователю назначается командная оболочка (командный интерпретатор, используемый в операционных системах семейства UNIX). Например: /bin/bash, /bin/zsh, /bin/sh и другие.

Каждому пользователю назначается идентификационный номер (User ID). Сокращенно номер обозначается как UID, является уникальным идентификатором пользователя. Операционная система отслеживает пользователя именно по UID, а не по их имени.

Также, каждому пользователю назначается пароль для входа в систему.

Каждый пользователь принадлежит минимум к одной или нескольким группам.

Помимо пользователей, существуют группы. Так же как и пользователь, группа обладает правам доступа к тем или иным каталогам, файлам, периферии. Для каждого файла определён не только пользователь, но и группа. Группы группируют пользователей для предоставления одинаковых полномочий на какие-либо действия.

Каждой группе назначается идентификационный номер (group ID). Сокращённо GID, является уникальный идентификатором группы. Принадлежность пользователя к группе устанавливается администратором.

Управление пользователями

Просмотр

Вся информация о пользователях хранится в файле /etc/passwd .

Каждый аккаунт занимает одну строку, в формате account:password:UID:GID:GECOS:directory:shell

  • account — имя пользователя.
  • password — зашифрованный пароль пользователя.
  • UID — идентификационный номер пользователя.
  • GID — идентификационный номер основной группы пользователя.
  • GECOS — необязательное поле, используемое для указания дополнительной информации о пользователе (например, полное имя пользователя).
  • directory — домашний каталог ($HOME) пользователя.
  • shell — командный интерпретатор пользователя (обычно /bin/sh).

Получение информации о пользователях

  • w – вывод информации (имя пользователя, рабочий терминал, время входа в систему, информацию о потребленных ресурсах CPU и имя запущенной программы) о всех вошедших в систему пользователях.
  • who – вывод информации (имя пользователя, рабочий терминал, время входа в систему) о всех вошедших в систему пользователях.
  • who am i или whoami или id – вывод вашего имени пользователя.
  • users – вывод имен пользователей, работающих в системе.
  • id <имя_пользователя> – вывод о идентификаторах пользователя: его uid, имя_пользователя, gid и имя первичной группы и список групп в которых состоит пользователь
  • groups <имя_пользователя> – вывод списка групп в которых состоит пользователь.

Добавление пользователя

Добавление пользователя осуществляется при помощи команды useradd.

sudo useradd vasyapupkin

  • -b Базовый каталог. Это каталог, в котором будет создана домашняя папка пользователя. По умолчанию /home.
  • -с Комментарий. В нем вы можете напечатать любой текст.
  • -d Название домашнего каталога. По умолчанию название совпадает с именем создаваемого пользователя.
  • -e Дата, после которой пользователь будет отключен. Задается в формате ГГГГ-ММ-ДД. По умолчанию отключено.
  • -f Количество дней, которые должны пройти после устаревания пароля до блокировки пользователя, если пароль не будет изменен (период неактивности). Если значение равно 0, то запись блокируется сразу после устаревания пароля, при -1 - не блокируется. По умолчанию -1.
  • -g Первичная группа пользователя. Можно указывать как GID, так и имя группы. Если параметр не задан будет создана новая группа название которой совпадает с именем пользователя.
  • -G Список вторичных групп в которых будет находится создаваемый пользователь
  • -k Каталог шаблонов. Файлы и папки из этого каталога будут помещены в домашнюю папку пользователя. По умолчанию /etc/skel.
  • -m Ключ, указывающий, что необходимо создать домашнюю папку. По умолчанию домашняя папка не создается.
  • -p Зашифрованный пароль пользователя. По умолчанию пароль не задается, но учетная пользователь будет заблокирован до установки пароля.
  • -s Оболочка, используемая пользователем. По умолчанию /bin/sh.
  • -u Вручную задать UID пользователю.

Если при создании пользователя не указываются дополнительные ключи, то берутся настройки по умолчанию. Посмотерть настройки по-умолчанию можно с помощью команды useradd -D .

Если вас не устраивают такие настройки, вы можете поменять их выполнив sudo useradd -D -s /bin/bash , где -s это ключ из таблицы выше.

Изменение пользователя

Изменение параметров пользователя происходит с помощью утилиты usermod. Пример использования:

sudo usermod -c "Эта команда поменяет комментарий пользователю" vasyapupkin

Изменить пароль пользователю можно при помощи утилиты passwd.

sudo passwd vasyapupkin

Утилита passwd может использоваться и обычным пользователем для смены пароля.

Основные ключи passwd:

  • -d Удалить пароль пользователю. После этого пароль будет пустым, и пользователь сможет входить в систему без предъявления пароля.
  • -e Сделать пароль устаревшим. Это заставит пользователя изменить пароль при следующем входе в систему.
  • -i Заблокировать учетную запись пользователя по прошествии указанного количества дней после устаревания пароля.
  • -n Минимальное количество дней между сменами пароля.
  • -x Максимальное количество дней, после которого необходимо обязательно сменить пароль.
  • -l Заблокировать учетную запись пользователя.
  • -u Разблокировать учетную запись пользователя.

Установка пустого пароля пользователя

Супер пользователь с помощью утилит командной строки passwd и usermod или путем редактирования файла /etc/shadow может удалить пароль пользователь, дав возможность входить в систему без указания пароля.

sudo passwd -d vasyapupkin или sudo usermod -p "" vasyapupkin

После этого имеет смысл принудить пользователя установить себе новый пароль при следующем входе в систему.

sudo passwd -e vasyapupkin

Удаление пользователя

Для того, чтобы удалить пользователя воспользуйтесь утилитой userdel.

sudo userdel vasyapupkin

  • -f Принудительно удалить пользователя, даже если он сейчас работает в системе.
  • -r Удалить домашний каталог пользователя.

Управление группами

Создание группы

Программа groupadd создаёт новую группу согласно указанным значениям командной строки и системным значениям по умолчанию.

sudo groupadd testgroup

  • -g Установить собственный GID.
  • -p Пароль группы.
  • -r Создать системную группу.

Изменение группы

Сменить название группы, ее GID или пароль можно при помощи groupmod.

  • -g Установить другой GID.
  • -n Новое имя группы.
  • -p Изменить пароль группы.

Удаление группы

Утилита groupdel не имеет никаких дополнительных параметров.

sudo groupdel testgroup

Управление пользователями группы

Для управления пользователями группы используется утилита gpasswd. Чтобы занести пользователя в группу:

gpasswd -a [user] [group]

Вывод пользователя из группы:

gpasswd -d [user] [group]

Файлы конфигурации

/etc/passwd

В файле /etc/passwd, который упоминался ранее, хранится вся информация о пользователях кроме пароля. Одна строка из этого файла соответствует описанию одного пользователя. Примерное содержание строки таково:

Строка состоит из нескольких полей, каждое из которых отделено от другого двоеточием. Значение каждого поля:

  1. vasyapupkin Имя пользователя для входа в систему.
  2. x Необязательный зашифрованный пароль.
  3. 1000 Числовой идентификатор пользователя (UID).
  4. 1000 Числовой идентификатор группы (GID).
  5. Vasya Pupkin Поле комментария
  6. /home/vpupkin Домашний каталог пользователя.
  7. /bin/bash Оболочка пользователя.

Второе и последнее поля необязательные и могут не иметь значения.

/etc/group

В /etc/group, как очевидно из названия хранится информация о группах. Она записана в аналогичном /etc/passwd виде:

Строка состоит из нескольких полей, каждое из которых отделено от другого двоеточием. Значение каждого поля:

  1. vasyapupkin Название группы
  2. x Необязательный зашифрованный пароль.
  3. 1000 Числовой идентификатор группы (GID).
  4. vasyapupkin,petya Список пользователей, находящихся в группе.

В этом файле второе и четвертое поля могут быть пустыми.

/etc/shadow

Файл /etc/shadow хранит в себе пароли, по этому права, установленные на этот файл, не дают считать его простому пользователю. Пример одной из записей из этого файла:

  1. vasyapupkin Имя пользователя для входа в систему.
  2. xxx Необязательный зашифрованный пароль.
  3. 15803 Дата последней смены пароля.
  4. 0 Минимальный срок действия пароля.
  5. 99999 Максимальный срок действия пароля.
  6. 7 Период предупреждения о пароле.
  7. [пусто] Период неактивности пароля.
  8. [пусто] Дата истечения срока действия учётной записи.

Sudo и su

Зная чей-либо пароль, можно непосредственно зарегистрироваться в системе под его именем, введя команду su имя_пользователя .

Программа su служит для выполнения от имени указанного пользователя (по умолчанию — root) указанной команды/программы (по умолчанию — той программы, что определена в качестве оболочки (shell) для указанного пользователя) и запрашивает она пароль указанного пользователя.

О программе sudo можно сказать почти то же самое, за двумя исключениями:

  • Нет «программы по умолчанию». для запуска оболочки, определённой для указанного пользователя, надо передать программе опцию -i.
  • По умолчанию запрашивается не пароль указанного пользователя, а пароль пользователя, выполняющего программу sudo. какому пользователю, какие программы и от чьего имени можно запускать, определяется содержимым конфигурационного файла /etc/sudoers (редактируется с помощью программы visudo).

Управление доступом

У каждого объекта в Linux есть свой идентификатор, а так же права доступа, применяемые к данному идентификатору. Идентификатор есть у пользователя - UID, у группы - GID, у файла - inode.

Собственно inode является, как идентификатором файла/каталога, так и сущностью, которая содержит в себе информацию о файле/каталоге. Например такую, как: принадлежность к владельцу/группе, тип файла и права доступа к файлу.

Для каждого объекта файловой системы в модели полномочий Linux есть три типа полномочий:

  • Полномочия чтения (r от read).
  • Записи (w от write).
  • Выполнения (x от execution).

В полномочия записи входят также возможности удаления и изменения объекта. Право выполнения можно установить для любого файла. Потенциально, любой файл в системе можно запустить на выполнение, как программу в Windows. В Linux является ли файл исполняемым или нет, определяется не по его расширению, а по правам доступа. Кроме того, эти полномочия указываются отдельно для владельца файла, членов группы файла и для всех остальных.

Собрав вышесказанное в кучу, то есть представив 3 правила (rwx) для трех групп (владелец, группа, остальные) запись прав доступа будет выглядеть вот так: rwx rwx rwx . Пример прав директории:

Кроме указанного представления полномочий доступа (символьного), существует так же и числовое представление. Для общего понимания, приведу таблицу соответствия числового (двоичного и десятичного) значения прав доступа и буквенного:

владелец группа остальные
буквенное rwx r-x r–
двоичное 111 101 100
двоичное в десятичных 421 401 400
десятичное 7 5 4

Управление правами доступа

Управление правами доступа происходит с помощью команды chmod, управление владельцем файла происходит с помощью команды chown. Синтаксис команд следующий:

chmod [к_какой_группе_прав][что_сделать_с_правами][какие_права] <над_каким_объектом>

chmod [права] <над_чем>

  • [к_какой_группе_прав] может быть:
    • u (от user) - владелец-пользователь.
    • g (от group) - владелец-группа.
    • o (от other) - остальные пользователи.
    • a (от all) - все вышеперечисленные группы вместе.
    • + - добавить.
    • - - убрать.
    • = - присвоить указанное.
    • r - чтение.
    • w - запись.
    • x - выполнение.

    Использование команды chown выглядит следующим образом: chown user:group file (-R рекурсивно)

    Права доступа к символьным ссылкам

    Если посмотреть на права символьных ссылок, то они всегда выглядят так: rwxrwxrwx. Дело в том, что права на символьную ссылку не имеют особого значения. При использования ссылки драйвер файловой системы пересчитывает реальный путь к файлу и применяет права доступа, определенные для реального пути уже без учета символьной ссылки.

    Специальные атрибуты

    • Sticky bit - бит закрепления в памяти.

    Сегодня sticky bit используется в основном для каталогов, чтобы защитить в них файлы. В такой каталог может писать ЛЮБОЙ пользователь. Из такой директории пользователь может удалить только те файлы, владельцем которых он является. Примером может служить директория /tmp , в которой запись открыта для всех пользователей, но нежелательно удаление чужих файлов.

    Атрибут исполняемого файла, позволяющий запустить его с правами владельца. В Unix-подобных системах приложение запускается с правами пользователя, запустившего указанное приложение. Это обеспечивает дополнительную безопасность так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например /etc/passwd, который принадлежит суперпользователю root. Если на исполняемый файл установлен бит suid, то при выполнении эта программа автоматически меняет “эффективный userID” на идентификатор того юзера, который является владельцем этого файла. То есть, не зависимо от того - кто запускает эту программу, она при выполнении имеет права хозяина этого файла.

    • SGID - он же Set Group ID. Аналогичен SUID, но относится к группе. При этом, если для каталога установлен бит SGID, то создаваемые в нем объекты будут получать группу владельца каталога, а не пользователя.

    Хотелось бы так же провести аналогию с ОС Windows. В указанной операционной системе права регулируются на основе списков ACL. В Linux тоже такое возможно, это реализуется с помощью пакета acl, но данный вопрос в текущей теме я рассматривать не буду. Еще одно важное замечание! В Windows можно определить права доступа на каталог, и они автоматически распространяются на все файлы и поддиректории (если вы явно не указали иного). В Linux права доступа сохраняются в inode файла, и поскольку inode у каждого файла свой собственный, права доступа у каждого файла свои. Так же, права доступа пользователя и группы не суммируются, как в Windows. Если программа выполняется с правами пользователя и группы, которым принадлежит файл — работают только права хозяина файла.

    Исполняемый файл с установленным атрибутом suid является “потенциально опасным”. Без установленного атрибута, файл не позволит обычному пользователю сделать то, что выходит за пределы прав пользователя (пример, программа passwd позволяет пользователю изменить только собственный пароль). Но, даже незначительная ошибка в такой программе может привести к тому, что злоумышленник сможет заставить её выполнить ещё какие-нибудь действия, не предусмотренные автором программы. Стоит очень осторожно относиться к данным атрибутам! Как найти в системе файлы с атрибутом SIUD и др.

    При создании новой директории в директории с уже установленным SGID-битом, у созданной директории SGID-бит устанавливается автоматически!

    Обозначение атрибутов Sticky, SUID, SGID

    Специальные права используются довольно редко, поэтому при выводе программы ls -l символ, обозначающий указанные атрибуты, закрывает символ стандартных прав доступа. Пример: rwsrwsrwt, где s - SUID, s - SGID, t - Sticky. В приведенном примере не понятно, rwt — это rw- или rwx? Определить, стоит ли символ стандартных прав доступа под символами s и t - просто. Если t маленькое, значит x установлен. Если T большое, значит x не установлен. То же самое правило распространяется и на s.

    В числовом эквиваленте данные атрибуты определяются первым символом при четырехзначном обозначении (который часто опускается при назначении прав), например в правах 1777 - символ 1 обозначает sticky bit. Остальные атрибуты имеют следующие числовое соответствие:

    • 1 - sticky bit
    • 2 - SGID
    • 4 - SUID

    Права доступа по-умолчанию для вновь создаваемых объектов файловой системе.

    В Linux, при создании какого-либо файла или каталога предоставляемые права определяются по определенному алгоритму (формуле). Не вдаваясь в подробности и для большего понимания сути скажу, что есть исходные права доступа:

    • 0666 - для файлов.
    • 0777 - для каталогов.

    Есть такая штука как umask, которая задана для каждого пользователя и хранится в виде строчки umask <значение_umask> в файле .bash_profile. Итого, у вновь создаваемого каталога будут права равные исходным правам доступа - umask.

    Узнать текущий umask можно, введя команду umask без параметров. Пример:

    Как видно из примера, umask установлен 0022, исходные права доступа равны 0666 - для файлов и 0777 - для каталогов. В результате получаем:

    Читайте также: