Etc passwd linux команда
Местоположение домашней директории определяется администратором при "создании" пользователя, а почтовые ящики все расположены в одной директории, имя которой зависит от типа ОС -- например, во FreeBSD это /var/mail/ .
Каждому пользователю также могут быть назначены дисковые квоты, но здесь мы этот вопрос рассматривать не будем.
Кроме того, при использовании сетевых информационных систем NIS или NIS+ часть содержимого файлов /etc/passwd и /etc/group может быть распределена по сети.
Необходимым и достаточным условием "существования" пользователя в системе является его наличие в файле /etc/passwd .
Это текстовый файл, в каждой строке которого находится информация об одном пользователе. Каждая строка состоит из 7 полей, разделенных двоеточиями:
Поля имеют следующий смысл: account Имя пользователя. encpassword Зашифрованный пароль. UID Числовой идентификатор пользователя (User IDentifier). GID Числовой идентификатор первичной группы этого пользователя (Group IDentifier). GECOS Информация о пользователе -- полное имя, телефон, комната и т.д. homedir Домашняя директория. shell Интерпретатор команд -- программа, запускаемая для данного пользователя при входе в систему.
В "свежеустановленной" системе всегда есть пользователь " root " и некоторое количество псевдопользователей, необходимых для работы системы -- " bin ", " mail ", " daemon " и т.д. У специальных пользователей UID всегда меньше 100.
| Во многих ОС информация из /etc/passwd "размазана" по нескольким файлам (в том числе в Linux -- /etc/shadow ), поэтому просто редактировать /etc/passwd "руками" нельзя! |
Зашифрованный пароль. При записи паролей в Unix применяется необратимое шифрование по алгоритму DES. Поэтому даже имея доступ к зашифрованному паролю, нельзя узнать сам пароль. Система же, когда надо проверить пароль, зашифровывает строку, введенную пользователем и сравнивает ее с той, что содержится в /etc/passwd .
Однако эта схема не защищает от так называемых "словарных атак" (dictionary attacks), когда берется, например словарь, и все слова из него последовательно зашифровываются и сравниваются с тем, что записано в /etc/passwd .
Поэтому в большинстве современных систем применяются так называемые "теневые файлы паролей" (shadow passwords) -- в /etc/passwd вместо пароля стоит "*" или "x", а сам шифрованный пароль содержится в файле /etc/shadow или подобном, доступ к которому есть только у пользователя " root ".
Linux также поддерживает /etc/shadow (стабильная поддержка в RedHat есть с версии 5.0, в 4.2 она несколько "кривая"), но это при необходимости надо отдельно включить, один раз выполнив команду pwconv .
Если шифрованный пароль (при наличии /etc/shadow -- в нем, иначе -- в /etc/passwd ) начинается с символа "*", то он не соответствует никакому реальному паролю. Поэтому такой пароль означает "вход пользователя заблокирован" -- такие пароли стоят, к примеру, у псевдопользователей " bin ", " mail ", " daemon " и т.д.
Числовые идентификаторы -- UID и GID. В ядре Unix для идентификации пользователя служит не имя, а 16-битное число -- так называемый UID.
Имя же может быть практически любым -- оно используется только при входе в систему, а также тогда, когда нужно именно имя пользователя (в адресах электронной почты, в finger , talk ) и в программах rsh , rlogin , ssh и им подобных.
Пользователь с UID=0 -- супервизор, он имеет имя " root ".
В принципе, ничто не мешает создать нескольких пользователей с разными именами, паролями и home-директориями, но с одинаковыми UID -- у всех у них будут одинаковые права. Но при создании Unix этот фокус не предусматривался, так что некоторые программы могут работать не совсем корректно.
Аналогично группа пользователя определяется числовым идентификатором GID. Но, в отличие от UID, один и тот же GID может быть присвоен нескольким пользователям -- все они будут принадлежать к одной группе.
UID и GID должны совпадать на всех машинах. Аналогично тому, как имена пользователей используются в протоколах RLOGIN и SSH, и должны совпадать у одного пользователя на разных машинах, числовые идентификаторы используются сетевой файловой системой NFS. И если в rlogin и т.п. можно указать другое имя пользователя, в NFS такой возможности нет.
Поэтому для того, чтобы пользователь " vasya " на машине Bobby считался "эквивалентом" пользователя " vasya " на машине Garry, и имел по NFS доступ с правильными правами, числовые идентификаторы на обеих машинах должны совпадать . (Что интересно, одинаковость имен для NFS неважна.)
Поскольку каждый пользователь в ИЯФ "существует" на машине Sky (информация на которой берется из общеинститутской базы данных), лучше всего на всех компьютерах использовать идентификаторы оттуда.
Файл /etc/group по формату очень похож на /etc/passwd , но в нем перечислен список групп, существующих на машине, и пользователи, к ним принадлежащие.
Для работы с ним служат команды groupadd , groupdel и groupmod .
Манипуляции с пользователями
Хотя в принципе пользователей можно создавать "руками", путем редактирования файла /etc/passwd и еще некоторых действий, этого никогда не надо делать.
В разных ОС (и даже в разных версиях одной ОС) для манипуляций с пользователями зачастую служат разные команды. Пожалуй, единственной "универсальной" командой является passwd . Поэтому рассмотрим команды, используемые в RedHat Linux 5.2.
Создание пользователя. Для создания пользователя служит команда useradd . Самый простой вариант -- useradd имя , при этом будут подобраны "первые попавшиеся" UID и GID, а в качестве home-директории и shell будут уставлены значения по умолчанию.
Лучше же всегда пользоваться такой формой команды:
Это позволяет создать пользователя "с нужными свойствами".
Ключ " -m " указывает useradd , что надо создать home-директорию данного пользователя (по умолчанию она может быть прописана в /etc/passwd , но не создана на диске) и сделать его ее владельцем. В нее будут скопированы файлы из директории /etc/skel/ ("скелет" home-директории).
| В случае, если домашняя директория имеет вид " /home/group/user ", то директория /home/group/ должна уже существовать -- useradd делает только саму home-директорию, а все промежуточные директории (в данном случае /home и /home/group ) должны уже существовать. |
Удаление пользователя. Для удаления служит команда userdel . Ей надо указать имя пользователя и ключ " -r " (для удаления home-директории). Пример:
Изменение "свойств" пользователя. Первое, что надо сделать после создания пользователя -- назначить ему пароль. Для этого служит команда passwd .
Будучи запущена без параметров, она позволяет сменить пароль запустившего ее пользователя (предварительно спросив текущий пароль):
Root же может сменить пароль любого пользователя, что и надо сделать сразу после его создания:
| Используя команду passwd из-под root, надо не забывать указать имя пользователя -- иначе будет изменен пароль пользователя " root ". Это довольно распространенная ошибка. |
Изменить shell пользователя можно командой chsh , которая спросит полное имя shell (с директорией). В Linux и BSD-системах пользователь может сам менять свой shell, а в ОС клона SystemV -- только супервизор. Примеры:
Пользователь не может поставить в качестве своего shell произвольную программу -- только одну из тех, что перечислены в файле /etc/shells .
Где еще брать информацию о работе с пользователями
Следует посмотреть man-страницы passwd(5), group(5), useradd(8), userdel(8), usermod(8), groupadd(8), groupdel(8), groupmod(8), passwd(1), chsh(1), shells(5), chfn(1) .
Кроме того, много полезной информации содержится в главах 3, 5 и 6 книги "UNIX: руководство системного администратора" .
Пароли и аутентификация – это понятия, с которыми сталкивается каждый пользователь, работающий в среде 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 полей:
- Root: имя пользователя;
- х: место для информации о паролях; пароль можно найти в файле «/etc/shadow».
- 0: ID пользователя. Каждый пользователь имеет уникальный идентификатор, благодаря которому система распознает его. ID root-пользователя всегда 0;
- 0: ID группы. Каждая группа имеет уникальный идентификатор. По умолчанию у каждого пользователя есть главная группа. Опять же, ID root-группы всегда 0;
- root: поле для примечаний. Данное поле можно использовать для описания пользователя или его функций. Оно может содержать что угодно, начиная от контактной информации пользователя и заканчивая описанием сервисов, для которых была создана учетная запись;
- /root: домашний каталог. Для обычных пользователей домашним каталогом является «/home/username», для root-пользователя это «/root»;
- /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» содержит следующие поля:
- daemon: имя пользователя;
- *: соль и хешированный пароль; данное поле можно просмотреть, войдя как root. Как указано выше, звездочка значит, что данная учетная запись не может быть использована для входа в систему.
- 15455: последнее изменение пароля. Данное значение ограничивается датой начала «Unix-эпохи» (1 января 1970).
- 0: допустимое количество дней для смены пароля. 0 в данном поле значит, что таких ограничений нет.
- 99999: количество дней до необходимости смены пароля. Значение 99999 указывает на то, что ограничения на продолжительность использования одного пароля не установлены.
- 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.
Итоги
При помощи этих простых инструментов можно изменить регистрационную информацию системы.
После внесения изменений важно проверить, можете ли вы войти в систему. Также необходимо проверить права на идентификационные файлы, чтобы сохранить функциональность сервера и обеспечить ему безопасность.
Главное меню » Linux » Понимание файла /etc/passwd
/etc/passwd представляет собой простую текстовую базу данных, которая содержит информацию обо всех учетных записях пользователей в системе. Она принадлежит пользователю root и имеет разрешение 644. Файл может быть изменен только пользователем root или пользователями с правами sudo и доступен для чтения всем пользователям системы.
Следует избегать изменения файла /etc/passwd вручную, если вы не знаете, что делаете. Всегда используйте команду, которая предназначена для этой цели. Например, чтобы изменить учетную запись пользователя, используйте команду usermod, а для добавления новой учетной записи пользователя используйте команду useradd.
Формат /etc/passwd
Файл /etc/passwd представляет собой текстовый файл с одной записью в строке, представляющей учетную запись пользователя. Чтобы просмотреть содержимое файла, используйте текстовый редактор или например, команду cat:
Обычно первая строка описывает пользователя root, за которым следуют системные и обычные учетные записи пользователей. Новые записи добавляются в конец файла.
Каждая строка файла /etc/passwd содержит семь полей, разделенных запятыми:
Читать Как настроить автоматические обновления ядра в LinuxВывод
Файл /etc/passwd ведет список всех пользователей системы.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Вы когда-нибудь хотели перечислить всех пользователей в вашей системе Linux или подсчитать количество пользователей в системе? Есть команды для создания пользователя, удаления пользователя, вывода списка пользователей, вошедших в систему, но какова команда для вывода списка всех пользователей в Linux?
Это руководство покажет вам, как посмотреть список пользователей в системах Linux.
Список всех пользователей Linux с помощью файла /etc/passwd
Информация о локальных пользователях хранится в файле /etc/passwd. Каждая строка в этом файле представляет информацию для входа в систему для одного пользователя. Чтобы открыть файл, вы можете использовать cat или less:
Каждая строка в файле содержит семь полей, разделённых двоеточиями, которые содержат следующую информацию:
- Имя пользователя.
- Зашифрованный пароль (x означает, что пароль хранится в файле /etc/shadow).
- Идентификационный номер пользователя (UID).
- Идентификационный номер группы пользователя (GID).
- Полное имя пользователя (GECOS).
- Домашний каталог пользователя.
- Оболочка входа (по умолчанию /bin/bash).
Если вы хотите отображать только имя пользователя, вы можете использовать команды awk или cut для печати только первого поля, содержащего имя пользователя:
Получение списка всех пользователей с помощью команды getent
Команда getent отображает записи из баз данных, настроенных в файле /etc/nsswitch.conf, включая базу данных passwd, которую можно использовать для запроса списка всех пользователей.
Чтобы получить список всех пользователей Linux, введите следующую команду:
Как видите, вывод такой же, как и при отображении содержимого файла /etc/passwd. Если вы используете LDAP для аутентификации пользователей, getent будет отображать всех пользователей Linux как из файла /etc/passwd, так и из базы данных LDAP.
Вы также можете использовать awk или cut для печати только первого поля, содержащего имя пользователя:
Аналогичный результат можно получить с помощью команды compgen:
Как проверить, существует ли пользователь в системе Linux
Теперь, когда мы знаем, как составить список всех пользователей, чтобы проверить, существует ли пользователь в нашем Linux-сервере, мы можем просто отфильтровать список пользователей, передав его по конвейеру команде grep.
Например, чтобы узнать, существует ли в нашей системе Linux пользователь с именем mial, мы можем использовать следующую команду:
Если пользователь существует, приведённая выше команда распечатает краткую информацию о нём. Если нет вывода, что означает, что пользователя не существует.
Мы также можем проверить, существует ли пользователь, не используя команду grep, как показано ниже:
Как и раньше, если пользователь существует, команда отобразит информацию для входа в систему.
Если вы хотите узнать, сколько учётных записей пользователей у вас в системе, передайте вывод getent passwd команде wc:
Как видно из вывода выше, на удалённом сервере Linux 510 учётных записи пользователей.
Системные и обычные пользователи
Технической разницы между системой и обычными пользователями нет. Обычно пользователи системы создаются при установке ОС и новых пакетов. В некоторых случаях вы можете создать системного пользователя, который будет использоваться некоторыми приложениями.
Обычные пользователи — это пользователи, созданные пользователем root или другим пользователем с привилегиями sudo. Обычно у обычного пользователя есть настоящая оболочка входа в систему и домашний каталог.
У каждого пользователя есть числовой идентификатор пользователя, называемый UID. Если не указан при создании нового пользователя с помощью команды useradd, UID будет автоматически выбран из файла /etc/login.defs в зависимости от значений UID_MIN и UID_MIN.
Чтобы проверить значения UID_MIN и UID_MIN в вашей системе, вы можете использовать следующую команду:
Из выходных данных выше мы видим, что все обычные пользователи должны иметь UID от 1000 до 60000. Знание минимального и максимального значения позволяет нам запрашивать список всех обычных пользователей в нашей системе.
Команда перечислит всех обычных пользователей в нашей системе Linux:
Значения UID_MIN и UID_MIN вашей системы могут отличаться, поэтому более общая версия приведённой выше команды будет:
Если вы хотите распечатать только имена пользователей, просто направьте вывод в команду cut:
Как показать пользователей, имеющих оболочки входа
Чтобы вывести список только пользователей с оболочками входа, используйте одну из следующих команд:
Обратите внимание, что эти команды не равнозначны.
Как вывести всех пользователей, имеющих домашний каталог
Если вы хотите составить список пользователей, у которых есть своя папка в директории /home, то используйте следующую команду:
Заключение
В этом руководстве вы узнали, как составлять список и фильтровать пользователей в вашей системе Linux, а также каковы основные различия между системными и обычными пользователями Linux.
Те же команды применимы для любого дистрибутива Linux, включая Ubuntu, CentOS, RHEL, Debian, Linux Mint, Arch Linux и Manjaro.
Читайте также: