Изучаем Linux. Шаг 3. Пользователи Linux
Пользователи – важная часть любой операционной системы, и Linux тут не исключение. Распределение прав, обеспечение безопасности базируется на концепции пользователей и их способности, с одной стороны, полноценно работать и выполнять свои задачи, с другой – шаловливыми ручками не залезать туда, куда не просят. Пользователи Linux – тема сегодняшнего разговора.
Типы пользователей в Linux
Для всех своих действий продолжим использовать терминал, знакомство с которым мы начали в предыдущем уроке.
Разновидностей типов пользователей всего три:
- Суперпользователь (root) – он же привилегированный пользователь, он же главный администратор, он же… Называйте, как хотите. Чаще всего root включен по умолчанию, хотя в некоторых системах он изначально не активирован. Пользователь root имеет полный доступ ко всей системе и ее возможностям.
- Системные пользователи. Специализированные пользователи, которые управляют работой системы. Нам они интересны скорее, как информация, что такие пользователи существуют.
- Обычные пользователи, т. е. мы с вами. При установке системы мы задали уже пользователя, от имени которого начали знакомиться с системой, с терминалом.
Следует сказать, что хотя пользователи и обычные, но все же различаются. Среди равных есть те, которые «равнее». Все как в жизни. И в данном случае это отнюдь не упрек, но об этом чуть дальше.
Лучше давайте займемся изучением информации о пользователях, попрактикуемся в их создании, удалении, конфигурировании.
Сведения о пользователях
Работать будем, как и прежде, в терминале. Для начала изучим доступную нам информацию о нас же самих. В моем случае это пользователь «andrew». У вас кто-то иной, о чем и докладывает приглашение командной строки.
Введем следующую команду в терминал:
whoami
В ответ получим имя пользователя – в моем случае «аndrew». Собственно, это мы и так знали, и в данном контексте команда совершенно бесполезная, и все же в ряде случаев наверняка может оказаться нужной.
Чуть расширим горизонты познания командой:
id
Теперь полученная информация более развернута и интересна. В частности, помимо и так известного нам имени пользователя, получаем данные о его/ее:
- user id (uid) – в данном случае 1000. Все создаваемые обычные пользователи нумеруются, начиная с 1000. Насколько знаю, в некоторых дистрибутивах нумерация может начинаться с других значений.
- ID группы (gid) – при создании пользователя создается и группа, на данный момент мы состоим в собственной группе (пока в одиночестве) с тем же номером 1000.
- Группы, в которых данный пользователь состоит. Через запятую перечисляются группы данного пользователя. Сейчас на всех останавливаться не будем.
Можно получить информацию по другому пользователю, но т. к. на данный момент в системе помимо пользователя root есть только мы, то сделаем это чуть позже.
Root и все остальные
Создать нового пользователя от имени того аккаунта, под которым мы сейчас работаем, нельзя, система доложит, что таких прав у нас нет. В действительности есть, но пока не об этом.
Создавать новых пользователей разумнее всего от имени root. Для этого нам надо сменить текущего пользователя на главного администратора. Сделать это можно командой:
su
В ответ я получил строку:
su: Authentication failure
или, если установлен русский язык:
su: Сбой при проверке подлинности
Помнится, при инсталляции системы мы задавали имя и пароль пользователя, а вот про root вроде бы нас и не спрашивали. Так и есть, этот пользователь сейчас неактивен, у него нет пароля. Исправим ситуацию командой:
sudo passwd root
Система попросит нас ввести пароль нашего пользователя, а потом пароль суперпользователя, который потом надо будет еще и продублировать для подтверждения. Надеюсь, вы понимаете, что пароль root должен отличаться от пароля какой-либо другой учетной записи.
Вот теперь можно смело вводить команду:
su
затем вводим только что созданный пароль пользователя root, и строка терминала изменяет вид на:
У вас имя хоста будет иным.
Создание пользователя
Вот теперь можно создавать, удалять, изменять данные пользователей, для чего переключимся на суперпользователя (если еще не сделали этого). Сейчас один обычный пользователь у нас есть (у меня это «аndrew»). Давайте введем команду для добавления (add user) пользователя в систему:
adduser test_adm
Выведется сообщение, что будет создан пользователь «test_adm», группа с тем же именем, создан его корневой каталог и т. п. надо ввести пароль этого пользователя, подтвердить его и, при желании, добавить дополнительные данные.
Если мы теперь заглянем в каталог /home командой
ls /home
то мы увидим, что появился новый каталог с именем только что созданного пользователя.
Создадим еще одного пользователя:
adduser test_noadm
Выполним уже знакомые действия, если угодно, убеждаемся, что в /home появился еще один каталог. При желании можно попрактиковаться в переключении с одного пользователя на другого командой:
su user_name
В которой «user_name» надо заменить на имя того или иного пользователя. А мы же теперь поговорим о равенстве равных, т. е. обычных пользователей.
Хочу быть админом
Давайте переключимся на пользователя root (если мы еще не сделали этого) и выполним следующую команду:
usermod -aG sudo test_adm
Вызовем информацию о пользователе «test_adm»:
id test_adm
Результат на скриншоте:
Думаю, вы сразу заметили, что в списке групп появилась новая, под номером 27(sudo). Для выполнения команд от имени администратора надо использовать команду «sudo». О ней и поговорим.
Ранее мы ее уже использовали, когда активировали и завели пароль пользователю root. Этот пользователь имеет полный контроль над системой, и, хотя вполне можно работать под ним, делать это крайне нежелательно. Оставьте кесарю кесарево, а остальным то, что им полагается.
Что делать, если нам нужно выполнить какое-то действие, которое доступно только администратору? Каждый раз переключаться на этого пользователя или просить кого-либо сделать то-то и то-то? Не обязательно, если мы сами имеем возможность выполнить нужную операцию от имени администратора.
Именно для этого и требуется включение пользователя в группу «sudo». Если, находясь в системе под своим пользователем («andrew» в моем случае) ввести, например, команду
apt update
то получим сообщения в отказе доступа.
Если же мы модифицируем команду таким образом:
sudo apt update
то на экране побегут буквы-цифры и спустя несколько секунд появится сообщение:
Reading package lists... Done
или
Чтение списка пакетов… Готово
Эта команда обновляет список пакетов, установленных в нашей системе. Используется она часто, но более подробно о ней мы поговорим в другом материале.
Теперь переключимся на недавно созданного пользователя «test_adm» и выполним те же действия.
su test_adm
sudo apt update
Все работает так же.
Не поленимся и переключимся на еще одного пользователя, который у нас на данный момент должен быть, «test_noadmin». Пытаемся выполнить команду обновления пакетов. Какое сообщение мы получили? Нам сообщают, что пользователю «test_noadmin» запрещено выполнять команды от имени root.
Помните команду «usermod –aG sudo test_adm»? С ее помощью мы изменили параметры (user modify) пользователя «test_adm» и предоставили ему права администратора, а вот для «test_noadm» мы этого не делали.
Таким образом, пользователь «test_adm» позволит нам выполнять команды от имени администратора, а вот «test_noadm» - это самый что ни на есть обычный пользователь.
Утилита sudo позволяет выполнять действия от имени другого пользователя, как правило это нужно для получения прав суперпользователя. Она сработает при условии, что данный пользователь получил разрешения на ее использование.
При помощи команды «sudo» мы можем создавать пользователей, раздавать им права, удалять и выполнять другие действия. Именно поэтому я выше говорил, что, хотя это забота администратора управлять пользователями, все же данные действия доступны и другим учетным записям. Правда, не всем.
Если вернуться к команде «usermod», раз уж мы ею воспользовались, то познакомимся с ней. Помните, как вызвать на экран доступные параметры этой команды? Правильно, просто набираем:
usermod -h
или
usermod --help
Параметров у команды много, можно создать пользователя с ограничением по времени существования («-e»), принудительно назначить первичную группу («-g») и ряд других, но на данном этапе большинство из них нам не нужны. Более актуальными являются параметры:
- -a – добавление пользователя в группы, указанные в параметре «-G» (помните про регистр(!) букв)
- -G – список групп, в которые помещается пользователь
Теперь команда «usermod -G sudo test_adm» становится совсем понятной: пользователя «test_adm» мы включили в группу (в данном случае она одна) «sudo».
Удаление пользователя
Чтобы удалить ненужного пользователя используется команда «userdel» (user delete). Она имеет несколько параметров, среди которых следует указать:
- -f – принудительно удаляет пользователя, даже если открыты файлы или выполняются какие-то действия от его имени.
- -r – удаление домашнего каталога пользователя. Без указания этого параметра пользователь будет удален, но домашний каталог останется на месте.
Давайте удалим пользователя «test_adm». Вводим команду:
sudo userdel –r test_adm
Убедимся, что все удалено правильно, введем:
ls /home
В списке корневых директорий пользователей на данный момент должны остаться только две, принадлежащие пользователям «andrew» (у меня) и «test_noadm».
Где хранится информация о пользователях
Прежде чем переходить к модификациям пользователей, стоит ознакомиться с тем, где хранятся данные по всем учетным записям. Первоначально для хранения информации о пользователях использовались файлы /etc/passwd и /etc/group. Эти файлы используются и сейчас, но только собственно паролей, естественно, в зашифрованном виде, здесь теперь нет.
Для этого применяются два дополнительных файла, /etc/shadow и /etc/gshadow. Называется это все механизмом теневых паролей. Если к первым двум файлам есть доступ у всех пользователей, то посмотреть содержимое второй пары не так просто.
Давайте знакомиться с пациентами.
/etc/password
Выводим на экран содержимое файла, при помощи любого редактора или просмотрщика файлов, например nano, cat, less и т. п. Я воспользуюсь командой less, которая отображает длинный файл более удобно - с возможностью листания, и не захламляет окно терминала:
less /etc/passwd
У меня этот файл довольно длинный, начинается он с записи root:
, и заканчивается созданными нами пользователями.
Рассмотрим чуть подробнее что мы получили. Каждая запись состоит из семи полей, разделенных двоеточием:
- Логин пользователя. Должен быть уникальным.
- Пароль. Когда-то тут действительно хранился в зашифрованном виде пароль, но сейчас стоит символ «x», что указывает на то, что пароль теперь надо искать в файле /etc/shadow.
- User ID. Суперадминистратор имеет значение 0, первый пользователь, который был создан (в моем случае «аndrew») имеет ID равный 1000. Созданный пользователь «test_noadm» получил ID 1001.
- Идентификатор группы. По умолчанию создается новая группа вместе с пользователем: если не указана принадлежность к какой-либо существующей группе. В нашем случае значения те же, что и у User ID.
- Дополнительная информация пользователя, которая у нас запрашивалась при его создании – имя, телефон и т. п. Для пользователя «аndrew» я вводил только значение имени («Andrew»), а для «test_noadm» никаких дополнительных сведений не предоставлял. Это хорошо видно на скриншоте - пустые поля, разделенные запятыми.
- Каталог пользователя. Обычно это домашний каталог, создаваемый при появлении нового пользователя. Тем не менее, можно указать произвольное место, если выдаваемое по умолчанию по какой-то причине не устраивает. В домашнем каталоге хранятся конфигурационные файлы, файлы с данными пользователя, изображения, медиафайлы, документы и т. п.
- Оболочка пользователя. Указывает, какая оболочка или команда будут использоваться при входе пользователя в систему. По умолчанию используется bash. Можно менять, но на данном этапе это нам не очень нужно.
/etc/group
Структура файла с описанием групп проще:
less /etc/group
Имеется всего четыре поля, разделенные двоеточием:
- Наименование группы.
- Пароль. Тут опять видим символ «x», который отсылает к теневой базе.
- Числовой идентификатор группы.
- Список пользователей, входящих в данную группу.
Например, в моем случае в группу 4 (adm) входят пользователи «syslog» и «andrew». Вы можете внимательнее рассмотреть свой файл.
Чуть более подробно о группах в следующей главе.
/etc/shadow
База теневых паролей. Это также текстовый файл, в котором действительно хранятся пароли учетных записей. Давайте прочитаем этот файл. Если вы выполняете эту команду не от имени пользователя «root», то получите отказ в доступе. Надо выполнить команду от имени администратора:
sudo less /etc/shadow
Файл состоит из девяти полей, разделенных двоеточием, но последнее поле сейчас не используется:
- Логин пользователя. Должен быть уникальным.
- Пароль в зашифрованном виде.
- Дата последнего изменения пароля. Значение вычисляется, начиная с 1 января 1970 года.
- Минимальный срок действия пароля в днях. Изменить пароль нельзя до окончания этого периода. Значение «0» означает отсутствие ограничений.
- Максимальный срок действия пароля. Значение по умолчанию «99999» означает бессрочное действие пароля.
- Период в днях до окончания срока действия пароля, в течение которого будет выдавать предупреждение о необходимости поменять пароль.
- Количество дней, прошедших после окончания действия пароля, в течение которых учетная запись еще не будет заблокирована.
- Дата отключения учетной записи. Вычисляется от 01.01.1970.
- Поле зарезервировано на будущее.
/etc/gshadow
sudo less /etc/gshadow
Второй файл из базы теневых паролей. Содержит информацию о группах. Состоит из четырех полей, разделенных двоеточием:
- Название группы.
- Пароль группы. Если он установлен, то хранится в зашифрованном виде, если же нет, то в этом поле могут стоять символы «x», «!» или «!!».
- Список администраторов группы, разделенных запятыми.
- Список членов групп, разделенных запятыми.
Все эти файл доступны для редактирования, хотя в случае с shadow и gshadow это могут сделать не все. В любом случае, трогать эти файлы крайне не рекомендуется. Для любой необходимой корректировки параметров пользователя есть команды, а правка непосредственно в этих файлах чревата тем, что одно неловкое движение, и решать возникшие проблемы придется уже более серьезно.
Группы пользователей
Закончим этот беглый разговор про пользователей разъяснением, что же такое группы, о которых шла речь. Продолжаем работать от имени пользователя «root».
Чтобы наглядно разобраться с этим вопросом, выполним следующие команды:
id andrew
и
id test_noadm
Предполагается, что эти пользователи у нас были ранее созданы, и до сих пор существуют. У вас могут быть иные имена учетных записей. Результаты работы команды на моей системе следующие.
Посмотрим более внимательно. Пользователь «andrew» (у вас имя иное) состоит в первичной (собственной) группе с тем же ID, как и у пользователя (1000 у меня), а также еще в ряде групп: 4(adm), 24(cdrom), 27(sudo) и т. д.
Список второго пользователя гораздо короче. Кроме собственной первичной группы (1002), больше «test_noadm» нигде не состоит, никуда не привлекался, не вступал. Соответственно, и прав и возможностей у него меньше. Вспомните, выполнить команду от имени администратора (sudo …) у него не получается.
И это только права на выполнение тех или иных функций. А есть еще доступ к каталогам, файлам (более подробно об этом в следующем материале). Настраивать все для каждого пользователя долго и нудно.
Можно поступить проще, включить пользователя «test_noadm» в группу пользователя «andrew». Тем самым, все, что разрешено в группе этого пользователя, становится доступным и новому пользователю.
Выполняется это командой:
usermod -aG список_групп user_name
В этой команде используются параметры:
-a – мы указываем, что добавляем группы к уже существующим у пользователя. Если не указать этот параметр, то список групп, в которых состоит редактируемый пользователь, заменяется на новый. А нам этого сейчас не надо.
-G – список групп, разделенных запятыми, добавляемых к первичной
Например, сделаем так:
usermod -aG cdrom,adm test_noadm
Если вы работаете от имени своего пользователя (не root), то скорее всего у вас отобразилось сообщение об отсутствии прав на выполнение операции. Наверное, вы уже догадались, что надо просто-напросто поставить спереди «sudo», т. е. выполнить команду от имени администратора, и все будет в порядке.
Действительно, проблема решится. И все же такие операции - это задача администратора, и хорошим тоном будет выполнение их от имени пользователя «root».
Переключимся на суперпользователя («su», пароль, изменится приглашение терминала) и выполняем команду выше.
Теперь все сработало, а чтобы убедиться в успешности, опять выведем информацию по пользователю «test_noadm». Видите, к его первичной группе с ID=1002 добавились еще две: 4(adm) и 24(cdrom).
Аналогично можно подключить иную группу, в том числе, первичную группу другого пользователя, например, «andrew» в моем случае. Можно даже заменить первичную группу одного пользователя первичной группой другого. Для этого надо использовать параметр «-g» в той же команде usermod.
Попрактикуемся, заменим первичную группу «test_noadm» на аналогичную от пользователя «andrew». Вводим:
usermod -g andrew test_noadm
Убедимся, что у нас что-то поменялось:
id test_noadm
ID пользователя остался тем же (1002), а вот первичная группа теперь имеет ID = 1000 (andrew). Пожалуй, вернем все обратно как было, пока никто не заметил:
usermod -g test_noadm test_noadm
Если мы хотим удалить пользователя из группы, то используем команду:
deluser test_noadm cdrom
В данном случае мы удалили пользователя «test_noadm» из группы 24(cdrom). Убедимся:
id test_noadm
Все так и есть!
Другим вариантом включения пользователя в группу является команда adduser. Давайте вернем пользователю «test_noadm» доступ к группе 24(cdrom):
adduser test_noadm cdrom
Как проверить, что эта группа теперь есть у данного пользователя, вы уже знаете.
Заключение. Пользователи Linux
Итак, сегодня мы кратко поговорили о пользователях, научились получать о них информацию (команда «id»), добавлять их (команда «adduser»), модифицировать («usermod»), удалять («userdel»), получили первое представление о группах.
Теперь самое время перейти к знакомству с файловой системой Linux и поговорить о доступе к каталогам, файлам. Об этом следующий материал.