Что значит вход в аккаунт linux

Обновлено: 05.07.2024

Глава 26. Управление учетными записями пользователей

Прочитав данную главу, вы научитесь использовать утилиты useradd , usermod и userdel для создания, модификации и удаления учетных записей пользователей.

Вам понадобятся привилегии пользователя root в системе Linux для выполнения действий, описанных в данной главе.

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

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

Другим вариантом является использование таких инструментов с интерфейсом командной строки , как useradd, usermod, gpasswd, passwd и других. Администраторы серверов с большой вероятностью используют именно эти инструменты, так как они им знакомы, а также поставляются в неизменном виде в составе различных дистрибутивов. В данной главе будут рассматриваться именно эти инструменты с интерфейсом командной строки.

Третий довольно радикальный способ управления учетными записями пользователей заключается в непосредственном редактировании локальных файлов конфигурации с помощью текстового редактора vi (или vipw/vigr). Не пытайтесь делать это при работе системами, находящимися в промышленной эксплуатации, в том случае, если вы не обладаете соответствующими знаниями!

Файл /etc/passwd

Локальная база данных учетных записей пользователей в Linux (и в большинстве систем Unix) расположена в файле /etc/passwd .

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

Дополнительная информация о данном файле может быть найдена на странице руководства, для получения доступа к которой может использоваться команда man 5 passwd .

Пользователь root

Учетная запись пользователя root , также называемого суперпользователем , является наиболее привилегированной учетной записью вашей системы Linux. Данный пользователь может делать практически все, включая создание учетных записей других пользователей. Пользователь root всегда имеет идентификатор, равный 0 (вне зависимости от имени учетной записи).

Утилита useradd

Вы можете добавлять учетные записи пользователей в базу данных с помощью утилиты useradd . В примере ниже показана методика добавления учетной записи пользователя с именем yanina (последний параметр) с одновременным созданием домашней директории пользователя (-m), установкой имени этой домашней директории (-d) и добавлением описания учетной записи (-c).

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

Файл /etc/default/useradd

Как в дистрибутиве Red Hat Enterprise Linux, так и в дистрибутивах Debian/Ubuntu имеется файл /etc/default/useradd , который содержит некоторые стандартные параметры пользовательского окружения. Помимо команды cat, вы можете использовать команду useradd -D для ознакомления с содержимым данного файла.

Утилита userdel

Вы можете удалить учетную запись пользователя yanina с помощью утилиты userdel . Параметр -r утилиты userdel позволяет также удалить домашнюю директорию пользователя.

Утилита usermod

Вы можете модифицировать параметры учетной записи пользователя с помощью утилиты usermod . В данном примере утилита usermod используется для изменения описания учетной записи пользователя harry.

Создание домашних директорий пользователей

Простейший способ создания домашней директории пользователя заключается в передаче параметра -m утилите useradd (вполне вероятно, что данный параметр передается по умолчанию в вашем дистрибутиве Linux).

Менее простой способ заключается в самостоятельном создании домашней директории с помощью команды mkdir , что также подразумевает необходимость установки владельца и прав доступа к данной директории с помощью утилит chmod и chown (обе утилиты подробно обсуждаются в другой главе).

Директория /etc/skel/

В случае использовании параметра -m утилиты useradd содержимое директории /etc/skel/ копируется в создаваемую домашнюю директорию пользователя. В директории /etc/skel/ находятся некоторые (обычно скрытые) файлы, которые содержат стандартные параметры профиля пользователя и значения параметров приложений. Таким образом, директория /etc/skel/ выступает в роли шаблона домашней директории и стандартного профиля пользователя.

Удаление домашних директорий пользователей

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

Командная оболочка, используемая для входа в систему

В файле /etc/passwd содержится информация о командной оболочке, используемой для входа пользователя в систему . Как вы можете увидеть в примере ниже, пользователь annelies будет использовать для входа в систему командную оболочку /bin/bash , а пользователь laura - командную оболочку /bin/ksh . Вы можете использовать команду usermod для изменения командной оболочки пользователя.

Утилита chsh

Пользователи могут изменять используемую для входа в систему командную оболочку с помощью утилиты chsh . В примере ниже пользователь laura в первую очередь получает список доступных командных оболочек (также данный список может быть получен с помощью команды cat /etc/shells ), после чего изменяет свою командную оболочку на Korn shell (/bin/ksh). При следующем входе в систему пользователю laura по умолчанию будет предоставлена командная оболочка Korn shell вместо bash.

Учтите, что в дистрибутиве Debian не существует параметра -l упомянутой утилиты, а также в данном примере предполагается, что командные оболочки ksh и csh установлены в системе.

В примере ниже показано, как пользователь laura может изменить свою стандартную командную оболочку (которая будет активирована при следующем входе в систему).

Практическое задание: управление учетными записями пользователей

1. Создайте учетную запись пользователя с именем serena и описанием (или комментарием) "Serena Williams" , а также домашнюю директорию этого пользователя. Выполните необходимые действия в рамках одной команды.

2. Создайте учетную запись пользователя с именем venus , указанием на необходимость использования командной оболочки bash и описанием "Venus Williams" , а также домашнюю директорию этого пользователя с помощью одной команды.

3. Убедитесь в том, что обоим пользователям соответствуют корректные записи в файлах /etc/passwd , /etc/shadow и /etc/group .

4. Проверьте корректность создания домашних директорий пользователей.

5. Создайте учетную запись пользователя с именем einstime и утилитой /bin/time в качестве стандартной командной оболочки.

6. Что случится, если вы войдете в систему под именем пользователя einstime ? Можете ли вы сделать предположение о реальной ситуации, в которой было бы полезно заменить стандартную командную оболочку пользователя на приложение?

7. Создайте файл с именем welcome.txt и убедитесь в том, что каждый новый пользователь будет обнаруживать данный файл в своей домашней директории.

8. Проверьте корректность размещения созданного файла в файловой системе, создав (и удалив) тестовую учетную запись пользователя.

9. Измените стандартную командую оболочку для входа в систему пользователя serena на командную оболочку /bin/bash . Осуществите необходимые проверки перед изменением командной оболочки и после него.

Корректная процедура выполнения практического задания: управление учетными записями пользователей

1. Создайте учетную запись пользователя с именем serena и описанием (или комментарием) "Serena Williams" , а также домашнюю директорию этого пользователя. Выполните необходимые действия в рамках одной команды.

2. Создайте учетную запись пользователя с именем venus , указанием на необходимость использования командной оболочки bash и описанием "Venus Williams" , а также домашнюю директорию этого пользователя с помощью одной команды.

3. Убедитесь в том, что обоим пользователям соответствуют корректные записи в файлах /etc/passwd , /etc/shadow и /etc/group .

4. Проверьте корректность создания домашних директорий пользователей.

5. Создайте учетную запись пользователя с именем einstime и утилитой /bin/time в качестве стандартной командной оболочки.

6. Что случится, если вы войдете в систему под именем пользователя einstime ? Можете ли вы сделать предположение о реальной ситуации, в которой было бы полезно заменить стандартную командную оболочку пользователя на приложение?

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

7. Создайте файл с именем welcome.txt и убедитесь в том, что каждый новый пользователь будет обнаруживать данный файл в своей домашней директории.

8. Проверьте корректность размещения созданного файла в файловой системе, создав (и удалив) тестовую учетную запись пользователя.

9. Измените стандартную командую оболочку для входа в систему пользователя serena на командную оболочку /bin/bash . Осуществите необходимые проверки перед изменением командной оболочки и после него.

Тема: Учётные записи в Linux .

Вид занятия: лекция, практическое занятие.

1. Понятие учетной записи и аутентификации. Файлы

/etc/passwd и /etc/group, /etc/shadow и /etc/gshadow.

2. Учетная запись root .

3. Пароли в Linux .

4. Команды login, su, newgrp, passwd, gpasswd, chage.

5. Создание и удаление учетных записей.

1. Робачевский А.М. Операционная система Unix . - СПб.:

БВХ - Санкт-Петербург, 1999. - 528 с., ил.

2. Армстронг (мл.) Джеймс. Секреты Unix : 2-е изд.: Пер. с

англ.: Уч. пос. - М.: Издательский дом Вильямс, 2000. - 1072

с.: ил. - Парал. тит. англ.

3. Паркер Тим. Linux 5.2. Энциклопедия пользователя: Пер. с

англ. - К.: Издательство ДиаСофт, 1999. - 688 с.

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

Учетная запись пользователя - это необходимая для системы информация о пользователе, хранящаяся в специальных файлах. Информация используется Linux для аутентификации пользователя и назначения ему прав доступа.

Аутентификация - системная процедура, позволяющая Linux определить, какой именно пользователь осуществляет вход.

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

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

Настоящее имя пользователя

имя пользователя - имя, используемое пользователем на все приглашения типа login при аутентификации в системе.

зашифрованный пароль - обычно хешированный по необратимому алгоритму MD5 пароль пользователя.

UID - числовой идентификатор пользователя. Система использует его для распределения прав файлам и процессам.

GID - числовой идентификатор группы. Имена групп расположены в файле /etc/group. Система использует его для распределения прав файлам и процессам.

Настоящее имя пользователя - используется в административных целях, а также командами типа finger ( получение информации о пользователе через сеть ) .

Домашний каталог - полный путь к домашнему каталогу пользователя.

Оболочка - командная оболочка, которую использует пользователь при сеансе. Для нормальной работы она должна быть указана в файле регистрации оболочек /etc/shells.

/etc/group - этот файл содержит информацию о группах, к которым принадлежат пользователи:

project : $1$QydTRu2w$Cm5gk.6w6nmNdUjerh5pu:1 00:r oot,bin,daemon

Пользователи, включенные в несколько групп

Имя группы - имя, используемое для удобства использования таких программ, как newgrp.

Шифрованный пароль - используется при смене группы командой newgrp. Пароль для групп может отсутствовать.

GID - числовой идентификатор группы. Система использует его для распределения прав файлам и процессам.

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

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

Файл shadow хранит защищенную информацию о пользователях, а также обеспечивает механизмы устаревания паролей и учетных записей. Вот структура файла shadow:

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

б) шифрованный пароль - применяются алгоритмы хеширования, как правило MD5

в) число дней последнего изменения пароля, начиная с 1 января 1970 года, последнего изменения пароля

г) число дней, перед тем как пароль может быть изменён

д) число дней, после которых пароль должен быть изменён

е) число дней, за сколько пользователя начнут предупреждать, что пароль устаревает

ж) число дней, после устаревания пароля для блокировки учётной записи

з) дней, отсчитывая с 1 января 1970 года, когда учётная запись будет заблокирована

и) зарезервированное поле

Файл gshadow так же накладывает дополнительную функциональность, вкупе с защищенным хранением паролей групп. Он имеет следующую структуру:

Имя группы - имя, используемое для удобства использования таких программ, как newgrp.

Шифрованный пароль - используется при смене группы командой newgrp. Пароль для групп может отсутствовать.

Администратор грыппы - пользователь, имеющий право изменять пароль с помощью gpasswd.

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

2. В Linux , кроме обычных пользователей, существует один (и только один) пользователь с неограниченными правами. Идентификаторы UID и GID такого пользователя всегда 0. Его имя, как правило, root . Для пользователя root права доступа к файлам и процессам не проверяются системой. При работе с использованием учетной записи root необходимо быть предельно осторожным, т.к. всегда существует возможность уничтожить систему.

3. В Linux используется развитая система распределения прав пользователям. Но для точного опознания пользователя одного имени недостаточно с точки зрения безопасности. Именно поэтому используется и пароль - произвольный набор символов произвольной длины, обычно ограниченной лишь используемыми методами шифрования.

Сегодня в большинстве версий Linux пароли шифруются по алгоритмам 3 DES и MD5. Когда алгоритм 3DES является обратимым, то есть такой пароль можно расшифровать, MD5 - это необратимое преобразование.

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

Учитывая ежедневно увеличивающиеся требования к безопасности, в Linux есть возможность использовать скрытые пароли. Файлы /etc/passwd и /etc/group доступны для чтения всем пользователям, что является довольно большой брешью в безопасности системы. Именно поэтому в современных версиях Linux предпочтительнее использовать скрытые пароли. Такие пароли располагаются в файлах /etc/shadow и /etc/gshadow , для паролей пользователей и групп соответственно. Подробно мы не будем рассматривать формат этих файлов, но скажем только, что они доступны для чтения только пользователю root.

4. Команда login используется при входе в систему. Она проверяет правильность ввода имени и пароля пользователя, меняет каталог на домашний, выстраивает окружение и запускает командный интерпретатор. Команду login нельзя запускать из командной строки - это вызовет ошибку и может привести к завершению сеанса.

Команда su позволяет сменить идентификатор пользователя уже в процессе сеанса. Синтаксис ее прост: su username , где username - имя пользователя, которое будет использоваться. После этого программа запросит пароль. При правильно введенном пароле, su запустит новый командный интерпретатор с правами пользователя, указанного su и присвоит сеансу его идентификаторы. Если имя пользователя опущено, то команда su использует имя root.

[ student @ns student ] $ su root

При использовании команды su пользователем root она никогда не запрашивает пароль.

Команда newgrp аналогична по своим возможностям su с той разницей, что происходит смена группы. Пользователь должен быть включен в группу, которая указывается в командной строке newgrp . При использовании команды newgrp пользователем root она никогда не запрашивает пароль. Синтаксис команды аналогичен синтаксису команды su: newgrp groupname, где groupname - имя группы, на которую пользователь меняет текущую.

Команда passwd является инструментом для смены пароля в Linux. Для смены своего пароля достаточно набрать в командной строке passwd:

[student@ns student]$ passwd

Changing password for student

(current) UNIX password:

Retype new password:

passwd: all authentication tokens updated successfully

Для смены пароля группы и управления группой используется команда gpasswd Для смены пароля достаточно набрать в командной строке g passwd GROUPNAME. Сменить пароль вам удастся только если Вы являетесь администратором группы. Если пароль не пустой,то для членов группы вызов newgrp пароля не требует, а не члены группы должны ввести пароль. Администратор группы может добавлять и удалять пользователей с помощью параметров -a и -d соответственно. Администраторы могут использовать параметр -r для удаления пароля группы. Если пароль не задан, то только члены группы с помощью команды newgrp могут войти в группу. Указав параметр -R можно запретить доступ в группу по паролю с помощью команды newgrp (однако на членов группы это не распространяется). Системный администратор (root) может использовать параметр -A, чтобы назначить группе администратора.

Команда chage управляет информацией об устаревании пароля и учетной записи. Обычный пользователь (не root) может использовать команду только для просмотра своих параметров устаревания пароля:

gserg@ADM:/$ chage -l gserg

Last password change : Май 03, 2007

Password expires : never

Password inactive : never

Account expires : never

Minimum number of days between password change : 0

Maximum number of days between password change : 99999

Number of days of warning before password expires : 7

Суперпользователь же может использовать также иные параметры, такие как:

-d дата (в формате системной даты, например ДД.ММ.ГГГГ) - устанавливает дату последней смены пароля пользователем.

-E дата - установить дату устаревания учетной записи пользователя

-I N - установить количество дней неактивности N с момента устаревания пароля перед тем как учетная запись будет заблокирована

-m N - задает минимальное количество дней (N) между сменами пароля

-M N - задает максимальное количество дней (N) между сменами пароля

-W N - задает количество дней, за которые будет выдаваться предупреждение об устаревании пароля.

Как вы понимаете, в ответ на это приглашение необходимо ввести имя пользователя, а потом, по запросу, и пароль для входа в систему. Если это первый вход в систему после ее установки, то входить надо под именем 'root'. Это единственный пользователь, для которого обязательно заводится счет или бюджет (account) во время инсталляции. Этот пользователь является полным хозяином системы (как сейчас, так и в последующем), то есть имеет неограниченный доступ к ее ресурсам, может заводить и удалять других пользователей, останавливать систему и т. д. Неосторожное поведение пользователя с такими правами легко может привести к печальным последствиям, вплоть до полного краха системы. Поэтому обычно под этим именем входят в систему только для выполнения административных задач. Но у нас сейчас как раз такой случай, так что в ответ на приглашение login: вводим "root" и нажимаем клавишу ‹Enter› (или ‹Return›). Система выдаст запрос на ввод пароля:

Очевидно, что в ответ надо вводить пароль того пользователя, имя которого было введено ранее. При первой загрузке надо ввести тот пароль, которой был задан для пользователя root в процессе инсталляции, и нажать ‹Enter›. Заметим, что если после ввода имени очень долго не вводить пароль, то система снова вернется к запросу имени пользователя. После ввода пароля вы увидите примерно такую надпись:

Такая строка называется приглашением. Появление приглашения означает, что система готова воспринять и выполнить вашу команду. Сейчас это свидетельствует о том, что вы успешно вошли в систему. Вы видите черный экран и приглашение системы к вводу команды - то, что в MS-DOS или Windows принято называть режимом командной строки. Мы будем называть этот режим текстовым (в отличие от графического режима, предоставляемого системой X Window).

В приведенном примере приглашение включает в себя указание имени пользователя (root), имени системы (localhost) и тукущего каталога (/root). Вид приглашения тоже можно изменить. Во всех последующих примерах мы будем использовать приглашение, состоящее только из имени пользователя.

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

Первая команда, которую стоит ввести - команда useradd. После имени команды надо ввести пробел и имя пользователя, например, jim:

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

New UNIX password:

Вводите пароль. После того, как вы завершите ввод нажатием клавиши ‹Enter›, система попросит ввести его повторно:

Retype new UNIX password:

Таким образом, вы познакомились с первыми двумя командами системы Linux: useradd и passwd. Следующая команда, о которой нужно знать каждому пользователю любой UNIX-системы - это команда man. Команда man - это система встроенной помощи системы Linux. Вводить ее надо с параметром - именем другой команды или ключевым словом, например,

В ответ вы получите описание соответствующей команды или информацию по теме, обозначенной ключевым словом. Поскольку информация обычно не помещается на одном экране, при просмотре можно пользоваться клавишами ‹PageUp› и ‹PageDown›, а также клавишей пробела. Нажатие клавиши ‹Q› в любой момент приводит к выходу из режима просмотра и возврату в режим ввода команд. Попробуйте просмотреть информацию по рассмотренным уже командам login и passwd. Заметим, что точно также можно получить информацию по самой команде man. Введите

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

Вы можете попробовать вводить еще некоторые команды и понаблюдать за реакцией системы. Попробуйте, например, команды, перечисленные в табл. 3.1 (вводите их с приведенными в таблице параметрами).

Таблица 3.1. Простейшие команды Linux.

Команда Краткое описание whoami Сообщает имя, с которым вы вошли в систему в данном сеансе работы w или who Сообщает, какие пользователи работают в данный момент в системе pwd Сообщает имя текущего каталога ls -l Выдает список файлов и подкаталогов текущего каталога cd ‹имя_каталога› Осуществляет смену текущего каталога ps ax Выдает список выполняющихся процессов

Просмотрите описания этих команд с помощью команды man.

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

(8.22) Почему локальные пользователи (в т.ч. Гости!) могут изменять локальную политику безопасности? Они могут даже запретить администратору вход в систему!

(8.22) Почему локальные пользователи (в т.ч. Гости!) могут изменять локальную политику безопасности? Они могут даже запретить администратору вход в систему! Это возможно только в том случае, если вы используете файловую систему FAT32. W2k хранит политику безопасноти не в реестре,

6.2.2. Доменный вход

6.2.2. Доменный вход Если вы настроили сервер Linux так, чтобы пользователи Windows могли входить в систему через smb, используя его как домен, то необходимо убрать комментарии с секции [netlogon]:; [netlogon]; comment = Network Logon Service; path = /usr/local/samba/lib/netlogon; guest ok = yes; writable = noВ этой секции так же

10.5.2. Компьютерам вход запрещен

10.5.2. Компьютерам вход запрещен Как говорит великая администраторская мудрость — на сетевой экран надейся, а сам не плошай. Firewall позволяет запретить доступ к серверу на определенные порты с конкретных компьютеров. Конфигурационный файл /etc/ftphosts выполняет схожие задачи —

Вторичный вход в систему

Вторичный вход в систему Служба реализует возможность запуска программ от имени другого пользователя. Если она будет остановлена, то вы не сможете воспользоваться командой runas (формат запуска программы от имени другого пользователя таков: runas / user:«пользователь»

Сетевой вход в систему

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

Автоматический вход в систему

Автоматический вход в систему Операционная система Windows Vista поддерживает механизм автоматического входа пользователей в систему. Существует несколько способов активирования этого механизма.Например, его можно активировать с помощью реестра. Для этого достаточно

Linux - начинающим. Часть 6. Управление пользователями и группами. Теория

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

Чтобы понять современную систему пользователей в Linux сделаем небольшой экскурс в историю. Как известно, Линус Торвальдс создавал ОС по образу и подобию UNIX и поэтому в основе Linux лежат многие простые и изящные решения этой системы. Одна из замечательных абстракций UNIX - это все есть файл, т.е. файлами также являются устройства, процессы, сетевые сокеты и т.д. и т.п. Это позволяет делать при помощи достаточно простых инструментов довольно сложные вещи, например, чтобы сделать образ диска достаточно просто скопировать файл блочного устройства в файл образа, а для работы с последовательным портом достаточно прочитать или записать что-либо в файл устройства ввода-вывода.

У каждого файла обязательно есть владелец и группа, которой он принадлежит. На этой схеме строится классическая система прав в Linux и UNIX: владелец, группа и остальные. Более подробно о ней вы можете прочитать в предыдущих частях нашего цикла:

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

Условно всех пользователей можно разделить на специальных, служебных и обычных, но повторимся еще раз - деление это условное, все различие между ними заключается в предоставляемых им правах и некоторых иных возможностях. Чтобы получить список пользователей системы откроем файл /etc/passwd:

linux-user-and-group-management-001.jpg

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

С именем пользователя все понятно, а вот второй параметр может вызвать некоторое недоумение. Когда-то давно пароли хранились в открытом виде, о чем намекает само название файла, но затем от этой практики отказались и современные системы не хранят пароли в каком-либо виде вообще, хранится только сформированный по специальному алгоритму хеш, такие пароли в Linux называются затененными ( shadow). Для такого пароля во втором поле всегда ставится символ x.

UID (User identifier) и GID (Group identifier) - числовые идентификаторы пользователя и группы. Важно понимать, что система различает пользователей именно по UID, а не по наименованиям и многие системы имеют возможность создать несколько пользователей с одинаковым UID, с точки зрения системы это будет один и тот же пользователь.

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

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

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

Следующие два поля указывают на домашнюю директорию пользователя и его командную оболочку. Разным пользователям можно назначить разные командные оболочки, скажем, ваш коллега предпочитает zsh, то вы можете без проблем назначить ему любимую оболочку.

Рассмотрение командных оболочек Linux выходит за рамки данной статьи, поэтому мы оставим эту тему, но расскажем о двух специализированных "оболочках", которые указывают, когда пользователю запрещен интерактивный вход в систему. Это обычно применяется для служб и пользователей от имени которых исполняются некоторые скрипты. Даже если такая учетная запись будет скомпрометирована войти в консоль с ней не удастся.

Обычно для этой цели используется:

В современных системах директория /sbin является символической ссылкой на /usr/sbin. Реже используется "оболочка":

linux-user-and-group-management-002.jpg

Как мы уже говорили выше, всех пользователей можно условно разделить на три группы. К специальным пользователям относятся root (суперпользователь) и nobody (с группами root и nogroup). Это практически полные противоположности, root имеет наименьшие UID и GID - 0 и является обладателем неограниченных прав, он имеет доступ к любому объекту системы и может выполнять любые настройки. В отличие от Администратора Windows, который максимально огражден от деструктивных действий, root может с легкостью уничтожить систему.

Мы думаем, что следующая команда известна каждому, а некоторым - печально известна:

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

Современные дистрибутивы по умолчанию блокируют выполнение явно деструктивных команд, но не запрещают их, все это выглядит как предупреждение: "так делать опасно, но если ты настаиваешь. "

linux-user-and-group-management-003.jpg

С учетом вышесказанного есть ряд сложившихся правил работы с этим пользователем. Во-первых, не следует выполнять из-под учетной записи суперпользователя повседневную работу. Для разовых действий используйте sudo, для административных работ допустимо временно повышать привилегии с последующим обязательным выходом. Во-вторых, доступ к данной учетной записи должен быть тщательно ограничен, потому как утеря контроля над root равносильно полной потере контроля над системой.

Хорошая практика - сделать учетную запись root недоступной для интерактивного входа (как в Ubuntu) используя для повышения прав исключительно sudo, особенно это касается серверов с доступом к SSH из сети интернет.

Пользователь nobody (никто) - имеет наибольший идентификатор - 65534 и не может являться владельцем ни одного файла в системе, не состоит ни в одной привилегированной группе и не имеет никаких полномочий кроме стандартных. Используется для запуска от его имени процессов с низким уровнем доверия, чтобы ограничить их доступ к системе в случае возможной компрометации. Фактически к nobody будут всегда применяться права для "остальных" и при стандартных наборах привилегий 644 на файлы и 755 на директории он будет иметь возможность исключительно чтения и просмотра содержимого каталогов. Для чувствительных конфигурационных файлов, ключей и сертификатов используются более ограниченные наборы прав 640 или 600, к таким файлам nobody доступа не имеет.

Следующая условная группа - системные пользователи, которые используются для запуска служб и доступа к устройствам, например, www-data для веб-сервера или systemd-network для управления сетью через systemd. Первоначально для них выделялись идентификаторы от 1 до 100, но в связи с большим количеством служб в современных системах этот диапазон расширен до 499 в RHEL и производных от него, и до 999 в системах основанных на Debian.

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

Кроме того, для многих стандартных пользователей идентификаторы зарезервированы, так во всех Debian и основанных на нем дистрибутивах www-data имеет UID и GID - 33, а proxy - 13. Это удобно, скажем вместо:

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

Многое стороннее ПО, например, сервер 1С и сборки PostgresPro занимают ближайшие свободные идентификаторы с верхнего конца диапазона: 999, 998 и т.д.

Из всего изложенного выше вы должны понимать, что система определяет пользователей по идентификаторам, а не по именам, а присвоение идентификаторов регулируется определенными правилами, но никакие из них, кроме двух специальных (0 для root и 65534 для nobody), не дают каких-либо дополнительных прав или привилегий.

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

Посмотреть список групп можно в файле /etc/group

linux-user-and-group-management-004.jpg

Он имеет следующий формат:

Большая часть полей аналогична записям в файле /etc/passwd и мы не будем подробно останавливаться на них. Разберем последний параметр - пользователи группы. При создании пользователя в Linux, если не указано иное, ему автоматически создается основная группа с повторяющим имя названием. Такой пользователь в последнем поле не указывается. Это хорошо видно на скриншоте выше. Но мы можем создать и отдельную группу, которая первоначально не содержит пользователей, и она будет иметь точно такой же вид записи с пустым последним полем.

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

linux-user-and-group-management-005.jpg

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

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

Теперь о паролях, как мы уже говорили, современные системы не хранят пароли в открытом виде, а используют для этого хеши - односторонние криптографические функции, при вводе пароля система вычисляет его хеш и сравнивает с уже сохраненным, если хеши совпадают - то пароль введен верно. Такие пароли в Linux называются "затененными" и хранятся в отдельных файлах. Для пользователей это файл /etc/shadow:

linux-user-and-group-management-006.jpg

Синтаксис этого файла предусматривает девять полей, содержащих следующую информацию:

  • Имя пользователя
  • Хеш пароля, если поле содержит ! или *, это означает, что учётная запись заблокирована и этот пользователь не сможет войти в систему.
  • Дата последней смены пароля -- Количество дней, прошедших с 1 января 1970 г.
  • Число дней, которое должно пройти до смены пароля -- Минимальный срок (в днях), который должен пройти, прежде чем пользователь сможет сменить пароль.
  • Число дней, после которого необходимо сменить пароль -- Максимальный срок (в днях), по истечении которого необходимо сменить пароль.
  • Число дней до предупреждения о необходимости смены пароля -- Число дней до истечения срока действия пароля, в течение которых пользователь получает предупреждение об окончании его срока действия.
  • Число дней до отключения учётной записи -- Число дней после окончания срока действия пароля до отключения учётной записи.
  • Дата отключения учетной записи -- Количество дней, прошедших с 1 января 1970 г.
  • Зарезервированное поле

Наибольший интерес представляет второе поле, содержащее хеш пароля, оно имеет структуру:

Где ID - применяемый тип шифрования, могут использоваться следующие значения:

  • $1 - MD5, самый слабый хеш, в настоящее время не используется
  • $2 - Blowfish, использовался в BSD-системах
  • $5 - SHA-256
  • $6 - SHA-512

В современных системах используется наиболее стойкий хеш SHA-512.

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

Соль позволяет исключить атаки при помощи заранее вычисленных значений и при ее случайном значении позволяет скрыть наличие у пользователей одинаковых паролей. На скриншоте выше пользователям ivan и maria были установлены одинаковые пароли, но за счет различной соли они имеют различный хеш.

Ну и наконец ENCRYPTED - это, собственно, хеш. Кроме того, данное поле может содержать спецсимволы: *, ! и !!. Все они обозначают, что учетная запись заблокирована для входа с паролем, но не запрещают иные варианты входа (по SSH-ключу). Символ * обычно используется для системных учетных записей, которым вход в систему запрещен, ! ставится для записей пользователей без пароля или заблокированных администратором (тогда ! ставится перед содержимым поля). Иногда используется символ !!, означающий что данной учетной записи никогда не присваивался пароль (также для такой записи может использоваться просто !).

Для групп используется аналогичный по назначению файл /etc/gshadow

linux-user-and-group-management-007.jpg

Его структура более проста, а поля имеют следующее назначение:

  • Имя группы
  • Хеш пароля, если пароль установлен, не члены группы могут войти в нее, выполнив команду newgrp и указав пароль. Если это поле содержит * или !, ни один пользователь не сможет войти в неё указав пароль.
  • Администраторы группы -- Перечисленные здесь (через запятую) члены группы могут добавлять или удалять членов группы с помощью команды gpasswd.
  • Члены группы -- Здесь перечисляются (через запятую) обычные члены группы, не администраторы.

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

Файлы shadow и gshadow содержат важную учетную информацию и должны быть хорошо защищены. Владельцами этих файлов является root:shadow и права доступа для них установлены как 640. Это означает, что вносить изменения в них может только владелец - root, а читать только члены специальной группы shadow. Это дополнительный уровень безопасности, позволяющий исключить доступ к этим файлам добавлением пользователя в группу root (что даст доступ на чтение к другим конфигурационным файлам).

linux-user-and-group-management-008.jpg

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

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

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