Перейти к содержанию

9.1 Пользователи и группы в Linux (Understanding Linux Users and Groups)

Для управления доступом к системе Linux и хранящимся в ней данным необходимо выполнить два условия:

  • Пользователи должны предъявлять учётные данные (credentials) перед получением доступа к системе.
  • После входа в систему должны действовать средства управления доступом, определяющие, что конкретный пользователь вправе делать с файлами и каталогами в файловой системе.

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

  • Учётные записи пользователей Linux
  • Группы Linux

Начнём с рассмотрения принципа работы учётных записей пользователей Linux.

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

Одна из ключевых проблем, описанных в начале этой главы, — отсутствие индивидуальных учётных записей в системе Windows 3.1. Любой, кто садился перед компьютером и включал его, получал полный доступ ко всем данным на жёстком диске без ввода пароля — будь то я, коллега, начальник, ночной уборщик или (что более опасно) корпоративный шпион конкурента. Это было серьёзной уязвимостью той операционной системы.

Чтобы устранить эту проблему, мне была нужна рабочая операционная система с поддержкой полноценных учётных записей пользователей. К счастью, эпоха «безучётных» операционных систем практически ушла в прошлое. Большинство современных операционных систем включают ту или иную систему аутентификации на основе учётных записей. Linux справляется с этой задачей особенно хорошо. В данной части главы мы рассмотрим следующие вопросы:

  • Как работают учётные записи пользователей Linux
  • Где хранятся учётные записи пользователей Linux
  • Создание учётных записей и управление ими из командной строки

Начнём с принципа работы учётных записей пользователей Linux.

Принцип работы учётных записей пользователей Linux

Как вы, вероятно, заметили при выполнении упражнений в этой книге, перед началом работы с системой Linux необходимо выполнить вход. Этот процесс называется аутентификацией (authentication). Для аутентификации требуется предъявить следующие учётные данные:

  • Имя пользователя
  • Пароль

Примечание

Для систем Linux существует широкий выбор методов аутентификации. Вместо ручного ввода имён пользователей и паролей можно настроить Linux на использование смарт-карт, бесконтактных карт, биометрических считывателей и других средств. Это стало возможным благодаря тому, что Linux использует подключаемые модули аутентификации (Pluggable Authentication Modules, PAM) для управления аутентификацией в системе. PAM делает аутентификацию Linux исключительно гибкой.

После входа в систему создаётся уникальная пользовательская среда. На рис. 9-2 показан вход пользователя ksanders в локальную систему. Загружены её персональные настройки рабочего стола, и предоставлен доступ к её домашнему каталогу /home/ksanders.

Если в ту же систему войдёт другой пользователь, будут загружены его настройки, а не настройки ksanders. Этому пользователю также будет предоставлен доступ к его домашнему каталогу. Важно помнить, что файлы, сохранённые в домашнем каталоге конкретного пользователя, защищены от всех остальных пользователей системы. Например, если ksanders сохранит файлы в /home/ksanders, пользователь hsaez не сможет получить к ним доступ.

Рис. 9-2. Среда рабочего стола пользователя ksanders.

Рис. 9-2. Среда рабочего стола пользователя ksanders.

По умолчанию все домашние каталоги пользователей создаются и хранятся в каталоге /home. Например, на рис. 9-3 в системе Linux созданы две учётные записи пользователей: hsaez и ksanders.

Для обоих пользователей созданы домашние каталоги в /home. Из этого правила, однако, есть одно исключение. Вспомните, что во всех системах Linux есть учётная запись суперпользователя root. Обратите внимание на рис. 9-3: в /home нет домашнего каталога для учётной записи root. Означает ли это, что root «бездомный»? Нет. У учётной записи root тоже есть домашний каталог, только он находится не в /home, а в /root. Это домашний каталог root, и, разумеется, доступ к нему имеет только root.

Рис. 9-3. Учётные записи пользователей в /home.

Рис. 9-3. Учётные записи пользователей в /home.

Просмотреть информацию о любой учётной записи пользователя в системе можно с помощью команды finger имя_пользователя из командной строки. Например, чтобы просмотреть информацию об учётной записи ksanders, нужно ввести finger ksanders. В результате отобразится полезная информация об учётной записи ksanders:

openSUSE:~/Desktop # finger ksanders
Login: ksanders                    Name: Kimberly Sanders
Directory: /home/ksanders          Shell: /bin/bash
Last login Thu Mar 10 16:44 (MST) on :0 from console
No Mail.
No Plan.

Обратите внимание, что finger выводит следующую информацию об учётной записи ksanders:

  • Login — имя пользователя, используемое для аутентификации в системе.
  • Name — полное имя пользователя.
  • Directory — домашний каталог пользователя.
  • Shell — оболочка, которая будет запускаться по умолчанию.
  • Last Login — дата и место последнего входа пользователя в систему.

Помимо домашнего каталога и назначенной оболочки по умолчанию, каждой учётной записи при создании присваивается уникальный идентификатор пользователя (user ID, UID). В системе не может быть двух учётных записей с одинаковым UID. Для просмотра UID конкретной учётной записи используется команда id имя_пользователя. Например, чтобы просмотреть информацию об учётной записи hsaez, можно ввести id hsaez в командной строке. Результат выполнения этой команды:

openSUSE:~ # id hsaez
uid=1003(hsaez) gid=100(users) groups=100(users)

В данной системе учётной записи hsaez присвоен UID 1003. В SUSE Linux первой создаваемой стандартной учётной записи всегда присваивается UID 1000. Следующей учётной записи присваивается UID 1001 и так далее.

Однако другие дистрибутивы могут использовать иную схему нумерации UID. Например, в Fedora UID начинаются с 500, а не с 1000. Как видно далее, пользователь rtracy в системе Fedora имеет UID 500, поскольку это была первая созданная стандартная учётная запись:

[root@fs3 ~]# id rtracy
uid=500(rtracy) gid=500(rtracy) groups=500(rtracy)

Обратите внимание, что в предыдущих абзацах речь шла о UID стандартных учётных записей. А как насчёт root? Учётной записи root во всех дистрибутивах Linux почти без исключений присваивается UID 0:

openSUSE:~ # id root
uid=0(root) gid=0(root) groups=0(root)

Именно UID операционная система использует для управления доступом к файлам и каталогам в файловой системе. Сейчас нам необходимо обсудить, где в системе хранятся учётные записи пользователей Linux.

Где хранятся учётные записи пользователей Linux

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

  • Локальный (Local) — учётные записи хранятся в файле /etc/passwd. Это конфигурация, применяемая в системах Linux по умолчанию на протяжении многих лет.

  • LDAP — метод, который всё шире применяется администраторами Linux. Вместо хранения учётных записей в файле на диске они размещаются в службе каталогов, доступ к которой осуществляется по протоколу облегчённого доступа к каталогам (Lightweight Directory Access Protocol, LDAP). В отличие от локальной аутентификации, хранящей учётные записи в простом плоском файле, служба каталогов имеет иерархическую структуру, позволяющую сортировать и организовывать учётные записи по местоположению, функциям или подразделениям. База данных каталога может также реплицироваться между несколькими системами Linux, обеспечивая отказоустойчивость. Ключевое преимущество этого варианта — возможность поддерживать единый набор учётных записей для аутентификации во многих системах Linux.

Примечание

По существу, вариант LDAP переводит Linux в том же направлении, что и другие серверные операционные системы, использующие службы каталогов, — например, Microsoft Active Directory.

  • NIS — этот вариант расшифровывается как Network Information Service (служба сетевой информации). NIS также предназначен для централизованного управления учётными записями при наличии нескольких систем, которым нужны одни и те же учётные записи. С этой целью NIS настраивает все системы на использование общего файла passwd и файла shadow.

  • Windows Domain (Домен Windows) — если в сети есть контроллер домена Windows (или сервер Linux под управлением Samba), можно настроить систему Linux на использование учётных записей домена для аутентификации в локальной системе.

Совет к экзамену

На экзамене LPIC-1/Linux+ вам нужно знать локальный вариант. Все дистрибутивы Linux могут использовать файлы /etc/passwd и /etc/shadow для аутентификации.

Какой из этих вариантов лучший? Это зависит от задач системы. Если система является автономной рабочей станцией, как правило, достаточно локального варианта. При желании можно также воспользоваться LDAP.

Если система будет участвовать в сети, к которой необходим доступ многим различным пользователям, стоит рассмотреть аутентификацию через LDAP, NIS или домен Windows.

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

  • /etc/passwd — файл содержит сведения об учётных записях пользователей системы.
  • /etc/shadow — файл содержит пароли учётных записей пользователей.
  • /etc/group — файл содержит группы системы. (Группы мы рассмотрим далее в этой главе.)

Начнём с файла /etc/passwd.

Файл /etc/passwd

Если в системе настроена локальная аутентификация, файл /etc/passwd содержит учётные записи пользователей. Каждая учётная запись представлена одной строкой файла, как показано в следующем примере:

openSUSE:~ # cat /etc/passwd
...
root:x:0:0:root:/root:/bin/bash
wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false
hsaez:x:1003:100:Heather Saez:/home/hsaez:/bin/bash
ksanders:x:1002:100:Kimberly Sanders:/home/ksanders:/bin/bash
rtracy:x:1001:100:Robb Tracy:/home/rtracy:/bin/bash

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

Имя_пользователя:Пароль:UID:GID:Полное_имя:Домашний_каталог:Оболочка_по_умолчанию

Пример:

ksanders:x:1002:100:Kimberly Sanders:/home/ksanders:/bin/bash

Содержимое полей:

  • Имя_пользователя (Username) — имя пользователя, которое он вводит при входе в систему. В данном примере это ksanders.
  • Пароль (Password) — устаревшее поле. Когда-то пароль пользователя хранился в зашифрованном виде в этом поле файла passwd. Однако по соображениям безопасности пароль был перенесён из /etc/passwd в /etc/shadow (этот файл мы рассмотрим подробнее далее). Поэтому в данном поле отображается только символ x.
  • UID — идентификатор пользователя. Мы обсуждали UID ранее в этой главе. В данном примере UID учётной записи ksanders равен 1002.
  • GID — это поле содержит номер идентификатора группы (group ID, GID) группы пользователя по умолчанию. В данном примере GID учётной записи ksanders равен 100. Как вы увидите далее, это соответствует группе users.
  • Полное_имя (Full_Name) — содержит полное имя пользователя. В данном примере — Kimberly Sanders.
  • Домашний_каталог (Home_Directory) — путь к домашнему каталогу пользователя. В данном примере — /home/ksanders.
  • Оболочка_по_умолчанию (Default_Shell) — оболочка, используемая по умолчанию. Для ksanders это /bin/bash (оболочка Bourne-Again SHell).

В файле /etc/passwd любой системы Linux содержится много учётных записей, даже если вы создали лишь одну-две. Все остальные учётные записи — системные. Три образца системных учётных записей:

sshd:x:495:494:SSH daemon:/var/lib/sshd:/bin/false
uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false

Системные учётные записи не используются для интерактивного входа. Они используются службами, работающими в системе. Когда одной из этих служб требуется что-либо сделать в файловой системе Linux, она действует от имени своей учётной записи из /etc/passwd. Обратите внимание, что UID системных учётных записей значительно меньше, чем у стандартных. UID от 0 до 499 обычно зарезервированы для системных учётных записей (в зависимости от дистрибутива).

Например, предположим, что я подключился к FTP-службе в моей системе Linux как анонимный пользователь и загрузил файл. Этот файл необходимо записать в каталог FTP-службы по умолчанию. При записи служба действует от имени пользователя ftp. Таким образом, с помощью прав доступа (которые будут обсуждаться далее в главе) можно управлять тем, что конкретная служба вправе или не вправе делать.

Файл /etc/shadow

В большинстве дистрибутивов Linux с локальной аутентификацией пароли пользователей хранятся в зашифрованном виде в файле /etc/shadow. Этот файл связан с уже рассмотренным файлом /etc/passwd. Для каждой учётной записи из /etc/passwd в /etc/shadow имеется соответствующая запись, как показано в следующем примере:

openSUSE:~ # cat /etc/shadow
...
root:$2a$05$h03HfGFSi2i8GlotOYgreeBelUlHc.z/2KxyQQF7RSo./TdLOrDJa:15035::::::
sshd:*:14796:0:99999:7:::
uucp:*: 16015::::::
wwwrun:*: 16015::::::
hsaez:$6$JbgjOmU1SXu1$ON0iVUmsrzvVxd7D2AeYbriZ1gDRS/W/
xnoeXVzcBkZIeNSJMAKFWfMvl4RvWki0HIQLrfV6bkNIAk6vCEOyP0:16392:0:99999:7:::
ksanders:$2a$05$KL1DbTBqpSEMiL.2FoI3ue4bdyR.eL6GMKs7MU6.nZl5SCC7/
REUS:15043:0:99999:7:::
rtracy:$6$L58Cq/vWQJaM$u7.1.UmlGVquz6qQ0LaHXQzbTgc6kC6uc1sR/GgelNjbF/
FqJUkwmhVdxO3Qxs3HgXQJLIptYJ4HD7bvMoxbd0:16392:0:99999:7:::

Как и в /etc/passwd, каждая учётная запись представлена отдельной строкой. Каждая запись состоит из следующих полей, разделённых двоеточием:

Имя_пользователя:Пароль:Дата_смены:Мин_дней:Макс_дней:Предупреждение:Дней_до_блокировки:Дата_истечения

Например, запись для ksanders выглядит так:

ksanders:$2a$05$KL1DbTBqpSEMiL.2FoI3ue4bdyR.eL6GMKs7MU6.nZl5SCC7/
REUS:15043:0:99999:7:::

Содержимое полей:

  • Имя_пользователя (Username) — имя пользователя для входа из /etc/passwd.
  • Пароль (Password) — пароль пользователя в зашифрованном виде. В приведённом примере пароль ksanders — M3linux273. Однако для предотвращения несанкционированного доступа к паролям он хранится в зашифрованном виде. Обратите внимание, что у всех системных учётных записей в этом поле стоит звёздочка (*). Это означает, что данные учётные записи не могут использоваться для входа в систему. Например, попытка войти в систему под именем ftp будет отклонена, даже если учётная запись ftp существует.
  • Дата_смены (Last_Modified) — количество дней с 1 января 1970 года, прошедших с момента последней смены пароля. В данном примере — 15 043 дня.
  • Мин_дней (Min_Days) — минимальное количество дней, которое должно пройти до следующей смены пароля. В данном примере — 0 дней.
  • Макс_дней (Max_Days) — максимальное количество дней до обязательной смены пароля. В данном примере — 99 999 дней, то есть смена пароля фактически не требуется.
  • Предупреждение (Days_Warn) — количество дней до истечения срока действия пароля, за которое пользователь получит предупреждение. В данном примере — 7 дней.
  • Дней_до_блокировки (Disabled_Days) — количество дней после истечения срока действия пароля, по истечении которых учётная запись будет заблокирована. В данном примере значение пустое.
  • Дата_истечения (Expire) — количество дней с 1 января 1970 года, после которого учётная запись будет отключена. В данном примере значение пустое, то есть учётная запись не имеет срока действия.

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

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

Для проверки файлов /etc/passwd и /etc/shadow можно использовать команду pwck из командной строки. Эта утилита проверяет каждую строку обоих файлов на допустимость. Все ошибки выводятся на экран, как показано в следующем примере:

openSUSE:/ # pwck
Checking '/etc/passwd'
User 'pulse': directory '/var/lib/pulseaudio' does not exist.
User 'usbmux': directory '/var/lib/usbmuxd' does not exist.
Checking '/etc/shadow'.

Как видим, pwck обнаружил, что домашние каталоги, указанные для системных учётных записей pulse и usbmux, не существуют. Всё остальное прошло проверку. Если по каким-либо причинам файлы /etc/passwd и /etc/shadow вышли из синхронизации, можно воспользоваться командой pwconv для их восстановления: эта утилита добавит в /etc/shadow учётные записи, отсутствующие в нём, но присутствующие в /etc/passwd.

Создание учётных записей и управление ими из командной строки

Как и при работе с многими другими задачами, рассмотренными в этой книге, управлять учётными записями пользователей в системе Linux можно как с помощью графических утилит, так и из командной строки. Например, в openSUSE для управления учётными записями предусмотрен модуль YaST «Управление пользователями и группами», показанный на рис. 9-4.

Рис. 9-4. Управление учётными записями пользователей с помощью YaST.

Рис. 9-4. Управление учётными записями пользователей с помощью YaST.

Как и другие графические инструменты, эти утилиты вполне удобны в использовании. Признаюсь, что сам я пользуюсь ими в большинстве случаев. Тем не менее необходимо знать, как работать с утилитами управления пользователями из командной строки — как для эффективной работы администратором Linux, так и для сдачи экзамена LPIC-1/Linux+. Поэтому в данной главе мы сосредоточимся на инструментах командной строки. Освоив их, вы сможете по желанию экспериментировать с их графическими аналогами.

В этой главе мы рассмотрим следующие инструменты:

  • useradd
  • passwd
  • usermod
  • userdel

Начнём с useradd.

useradd

Как следует из названия, утилита useradd используется для добавления пользователей в систему Linux. Синтаксис: useradd параметры имя_пользователя. Например, чтобы создать учётную запись lmorgan с параметрами по умолчанию, достаточно ввести useradd lmorgan в командной строке:

openSUSE:/ # useradd lmorgan

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

  • /etc/default/useradd — этот файл содержит значения по умолчанию, используемые утилитой useradd. Пример:
openSUSE:/ # cat /etc/default/useradd
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

Обратите внимание: файл определяет, что группой по умолчанию для новых пользователей является группа с GID 100 (это группа users), а домашний каталог создаётся в /home. Параметр неактивной учётной записи установлен в –1, учётная запись не имеет срока действия. Оболочка по умолчанию — /bin/bash. Каталог-скелет — /etc/skel, для пользователя создаётся каталог почтового буфера. Как и любой конфигурационный файл Linux, при необходимости его можно отредактировать в текстовом редакторе.

Совет

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

  • /etc/login.defs — этот файл содержит значения GID и UID, используемые при создании учётных записей с помощью useradd, а также параметры по умолчанию для записей в /etc/shadow. Фрагмент файла:
openSUSE:/ # cat /etc/login.defs
#
# /etc/login.defs - Configuration control definitions for the shadow package.

...
UMASK                     022
PASS_MAX_DAYS            99999
PASS_MIN_DAYS           0
PASS_WARN_AGE           7
UID_MIN                          1000
UID_MAX                         60000
SYS_UID_MIN                       100
SYS_UID_MAX                       499

GID_MIN                          1000
GID_MAX                         60000
SYS_GID_MIN                       100
SYS_GID_MAX                       499

Обратите внимание: файл задаёт значения по умолчанию для полей, которые мы рассматривали ранее в /etc/shadow, а также параметры по умолчанию для назначения UID новым учётным записям. Ранее было отмечено, что в SUSE Linux UID начинаются с 1000, а в Fedora — с 500. Это поведение определяется именно данным файлом. Здесь же задаётся диапазон UID для системных учётных записей, а также указываются исполняемые файлы, запускаемые при вызове useradd или userdel. При необходимости значения по умолчанию можно изменить.

  • /etc/skel — при создании нового пользователя команда useradd копирует файлы из каталога-скелета (/etc/skel по умолчанию) во вновь созданный домашний каталог. Как правило, /etc/skel содержит несколько пользовательских конфигурационных файлов, таких как .bashrc и .profile. Пример:
openSUSE:~ # ls /etc/skel/
.bash_history .config .fonts                .local       .xim.template           bin
.bashrc        .emacs   .inputrc            .profile     .xinitrc.template       public_html

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

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

  • -c — указывает полное имя пользователя.
  • -e — задаёт дату отключения учётной записи. Формат даты: гггг-мм-дд.
  • -f — задаёт количество дней после истечения срока действия пароля, по истечении которых учётная запись будет отключена. Значение –1 отключает эту функцию (например, useradd -f -1 jmcarthur).
  • -g — указывает группу пользователя по умолчанию.
  • -G — задаёт дополнительные группы, в которые будет включён пользователь.
  • -M — создаёт учётную запись без домашнего каталога.
  • -m — задаёт домашний каталог пользователя.
  • -n — используется только в системах Red Hat и Fedora. По умолчанию при создании учётной записи эти дистрибутивы создают новую группу с тем же именем. Данный параметр отключает эту функцию.
  • -p — задаёт зашифрованный пароль пользователя. Для шифрования пароля используется команда openssl passwd -crypt. Запустите эту команду и, когда появится запрос, введите нужный пароль. Команда выведет его зашифрованный вариант, который можно затем передать параметру -p в командах useradd и usermod.
  • -r — указывает, что создаётся системная учётная запись.
  • -s — задаёт оболочку по умолчанию.
  • -u — вручную задаёт UID пользователя.

Например, предположим, что мне нужно создать учётную запись для пользователя Джеки МакАртур (Jackie McArthur) с именем jmcarthur, полным именем «Jackie McArthur», паролем tux123 и созданием домашнего каталога. Для этого сначала зашифруем пароль tux123 с помощью openssl passwd -crypt — команда возвращает 1k4LGDSCsTuQE в качестве зашифрованного варианта. Затем вводим:

openSUSE:~ # openssl passwd -crypt
Password:
Verifying - Password:
1k4LGDSCsTuQE
openSUSE:~ # useradd -c "Jackie McArthur" -m -p "1k4LGDSCsTuQE" -s "/bin/bash" jmcarthur
openSUSE:~ # cat /etc/passwd
...
jmcarthur:x:1005:100:Jackie McArthur:/home/jmcarthur:/bin/bash

Обратите внимание: useradd использовал параметры, указанные в командной строке. Для параметров, которые мы не задали (например, GID и UID), были применены значения по умолчанию из /etc/default/useradd.

passwd

Утилита passwd используется для смены пароля существующего пользователя. Например, ранее мы создали учётную запись lmorgan с помощью useradd, однако не использовали параметр -p, поэтому у lmorgan нет пароля и учётная запись заблокирована. Это можно проверить с помощью параметра -S утилиты passwd. Например, введём passwd -S lmorgan в командной строке:

openSUSE:/ # passwd -S lmorgan
lmorgan LK 03/14/2014 0 99999 7 -1

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

Такая учётная запись непригодна для использования. Чтобы активировать её, необходимо задать пароль. Для этого используется passwd. Синтаксис: passwd имя_пользователя. В нашем случае следует ввести passwd lmorgan (от имени root). После этого будет предложено ввести пароль для указанного пользователя:

openSUSE:~ # passwd lmorgan
New password:
Retype new password:
passwd: password updated successfully

Введите нужный пароль по запросу. После этого можно снова ввести passwd -S lmorgan, чтобы проверить статус учётной записи:

ws1:/ # passwd -S lmorgan
lmorgan P 03/14/2014 0 99999 7 -1

Обратите внимание: статус учётной записи изменился на P, что означает, что пароль установлен и действителен. При работе с passwd доступны следующие параметры:

  • -l — блокирует учётную запись пользователя. Пароль пользователя становится недействительным.
  • -u — разблокирует учётную запись пользователя.
  • -d — удаляет пароль пользователя.
  • -n — задаёт минимальное количество дней до следующей смены пароля.
  • -x — задаёт максимальное количество дней до обязательной смены пароля.
  • -w — задаёт количество дней до истечения срока действия пароля, за которое пользователь получит предупреждение.
  • -i — задаёт количество дней после истечения срока действия пароля, по истечении которых учётная запись будет отключена.

usermod

Время от времени может понадобиться изменить существующую учётную запись. Это можно сделать из командной строки с помощью утилиты usermod. Синтаксис очень схож с useradd: usermod параметры имя_пользователя. Параметры usermod также схожи с параметрами useradd:

  • -c — изменяет полное имя пользователя.
  • -e — устанавливает дату отключения учётной записи. Формат даты: гггг-мм-дд.
  • -f — задаёт количество дней после истечения срока действия пароля до отключения учётной записи. Значение –1 отключает эту функцию.
  • -g — задаёт группу пользователя по умолчанию.
  • -G — задаёт дополнительные группы для пользователя.
  • -l — изменяет имя пользователя.
  • -L — блокирует учётную запись пользователя. Пароль становится недействительным.
  • -m — задаёт домашний каталог пользователя.
  • -p — задаёт пароль пользователя. Как и в useradd, необходимо указывать зашифрованный пароль. Для его получения используйте openssl passwd -crypt.
  • -s — задаёт оболочку по умолчанию.
  • -u — задаёт UID пользователя.
  • -U — разблокирует учётную запись пользователя.

Например, предположим, что пользователь jmcarthur вышла замуж и сменила фамилию на Sanders. Обновить её учётную запись можно командой usermod -l jsanders -c "Jackie Sanders" jmcarthur из командной строки. После её выполнения данные учётной записи обновятся в /etc/passwd:

openSUSE:~ # usermod -l jsanders -c "Jackie Sanders" jmcarthur
openSUSE:~ # cat /etc/passwd...
jsanders:x:1005:100:Jackie Sanders:/home/jmcarthur:/bin/bash

Совет

Если в имени есть пробел, его необходимо взять в кавычки при использовании usermod. Например, мы использовали команду jsanders -c "Jackie Sanders" jmcarthur для указания полного имени пользователя.

userdel

Время от времени может также понадобиться удалить учётную запись пользователя из системы Linux. Это выполняется из командной строки с помощью утилиты userdel. Для удаления пользователя введите userdel имя_пользователя. Например, чтобы удалить учётную запись lmorgan, введите userdel lmorgan.

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


Упражнение 9-1. Управление учётными записями пользователей из командной строки

В этом упражнении вы будете создавать и изменять учётные записи пользователей из командной строки вашей системы Linux. Для выполнения упражнения можно использовать виртуальную машину, прилагаемую к книге. Запустите снимок 9-1 для получения правильно настроенной среды.

VIDEO Посмотрите видео к упражнению 9-1 с демонстрацией выполнения данного задания.

Выполните следующее:

  1. Загрузите систему Linux и войдите в систему как пользователь student с паролем student.
  2. Откройте сеанс терминала и переключитесь на учётную запись root, введя su - в командной строке и указав пароль student.
  3. Создайте учётную запись для себя: a. Придумайте имя пользователя и пароль. Принятое соглашение — первая буква имени и фамилия. Зашифруйте пароль командой openssl passwd -crypt. b. В командной строке введите useradd -c "ваше_полное_имя" -m -p "ваш_зашифрованный_пароль" -s "/bin/bash" ваше_имя_пользователя. c. В командной строке введите tail /etc/passwd. Убедитесь, что новая учётная запись создана.
  4. Создайте учётную запись с параметрами по умолчанию: введите useradd dtracy в командной строке.
  5. В командной строке введите tail /etc/passwd. Убедитесь, что учётная запись создана. Обратите внимание, что у нового пользователя отсутствуют многие параметры. Добавьте их следующим образом: a. Укажите полное имя для учётной записи dtracy, введя usermod -c "Richard Tracy" dtracy. b. В командной строке введите tail /etc/passwd. Убедитесь, что полное имя добавлено в учётную запись dtracy. c. Задайте пароль для dtracy, введя passwd dtracy. d. При появлении запроса введите новый пароль для dtracy.

Группы Linux

Как и другие операционные системы, Linux использует группы (groups) для упрощения управления системой. В данной части главы мы рассмотрим следующие темы:

  • Принцип работы групп Linux
  • Управление группами из командной строки

Принцип работы групп Linux

Группы делают жизнь системного администратора проще! Чтобы понять почему, рассмотрим следующий сценарий. Предположим, в системе Linux работают семь пользователей, пятеро из которых нуждаются примерно в одинаковом уровне доступа к файлам. Без групп пришлось бы назначать необходимые права доступа каждой из пяти учётных записей по отдельности — то есть выполнять одно и то же действие пять раз. На первый взгляд это не так страшно. Но представьте, что у вас 100 пользователей с одинаковыми требованиями к доступу. Какая трата времени!

Вместо этого можно настроить группы. Права доступа назначаются группе, а затем все пользователи с одинаковыми требованиями включаются в эту группу. Это гораздо проще! Достаточно сделать одно назначение. Если требования к доступу изменятся, достаточно внести изменение один раз в группу, и все её участники автоматически получат новый уровень доступа.

Если в системе Linux настроена локальная аутентификация, группы определяются в файле /etc/group. Фрагмент этого файла:

openSUSE:~ # cat /etc/group
...
root:x:0:
rtkit:x:489:
scard:x:484:
shadow:x:15:
sshd:x:494:
svn:x:483:
sys:x:3:
systemd-journal:x:497:
tape:x:496:
tftp:x:492:dnsmasq,tftp
trusted:x:42:
tty:x:5:
utmp:x:22:
uucp:x:14:
video:x:33:gdm,hsaez,jsanders
wheel:x:10:
www:x:8:
xok:x:41:
users:x:100:

Как и в файлах /etc/passwd и /etc/shadow, каждая строка /etc/group — это отдельная запись, представляющая одну группу. Каждая запись состоит из четырёх полей:

Группа:Пароль:GID:Пользователи

Например, в приведённом выше примере запись для группы video выглядит следующим образом:

video:x:33:gdm,hsaez,jsanders
  • Группа (Group) — название группы. В данном примере — «video».
  • Пароль (Password) — пароль группы, если он задан.
  • GID — идентификатор группы. В данном примере GID группы video равен 33.
  • Пользователи (Users) — список участников группы. В данном случае членами группы video являются gdm, hsaez и jsanders.

В некоторых дистрибутивах для хранения паролей групп используется дополнительный файл. Так же как /etc/shadow хранит зашифрованные пароли пользователей, определённых в /etc/passwd, файл /etc/gshadow используется для хранения паролей групп, определённых в /etc/group. Пример файла /etc/gshadow:

[root@fs3 ~]# cat /etc/gshadow
root:::root
bin:::root,bin,daemon
...
nobody:::
users:::
...

Как и в /etc/shadow, каждая строка /etc/gshadow представляет запись для одной группы. Каждая запись состоит из следующих полей:

Имя_группы:Пароль:Администраторы_группы:Участники_группы

Управление группами из командной строки

Как и пользователями, группами можно управлять как с помощью инструментов командной строки, так и с помощью графических. Например, YaST и User Manager позволяют создавать, изменять и удалять группы в системе Linux, а также управлять учётными записями.

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

  • groupadd
  • groupmod
  • groupdel

groupadd

Как можно догадаться из названия, утилита groupadd используется для добавления групп в систему Linux. Синтаксис прост: groupadd параметры имя_группы. Например, чтобы добавить группу dbusers, введите groupadd dbusers в командной строке. При этом в /etc/group будет добавлена группа с параметрами по умолчанию из /etc/login.defs.

При использовании groupadd значения по умолчанию из /etc/login.defs можно переопределить с помощью следующих параметров:

  • -g — задаёт GID для новой группы.
  • -p — задаёт пароль группы. Как и в useradd, необходимо предварительно зашифровать пароль командой openssl passwd -crypt.
  • -r — указывает, что создаётся системная группа.

groupmod

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

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

  • -g — изменяет GID группы.
  • -p — изменяет пароль группы. Как и в usermod, необходимо предварительно зашифровать пароль командой openssl passwd -crypt.
  • -A — добавляет учётную запись пользователя в группу.
  • -R — удаляет учётную запись пользователя из группы.

Например, чтобы добавить ksanders в группу dbusers, введите groupmod -A "ksanders" dbusers в командной строке.

groupdel

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


Упражнение 9-2. Управление группами из командной строки

В этом упражнении вы будете создавать и изменять группы из командной строки вашей системы Linux. Для выполнения упражнения можно использовать виртуальную машину, прилагаемую к книге. Запустите снимок 9-2 для получения правильно настроенной среды.

VIDEO Посмотрите видео к упражнению 9-2 с демонстрацией выполнения данного задания.

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

  1. Убедитесь, что вы вошли в систему.
  2. При необходимости переключитесь на учётную запись root командой su -.
  3. Создайте новую группу research: a. В командной строке введите groupadd research. b. Добавьте свою учётную запись и учётную запись dtracy (созданную в предыдущем упражнении) в группу research: введите groupmod -A "dtracy,ваше_имя_пользователя" research. c. Убедитесь, что пользователи добавлены в группу, введя tail /etc/group. Результат должен быть следующим:
    research:!:1000:dtracy,rtracy