Управление пользователями в Linux. Linux: создание группы и добавление пользователя в систему Поиграемся с группами

Управление пользователями в Linux. Linux: создание группы и добавление пользователя в систему Поиграемся с группами

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

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

Как я уже сказал группы в Linux появились еще в самом начале разработки этой операционной системы. Они были разработаны для того, чтобы расширить возможности управления правами. Разберем небольшой пример, возьмем организацию в которой есть только один компьютер, у нас есть администраторы и пользователи. У каждого человека свой аккаунт на нашем компьютере. Администраторы могут настраивать систему, пользователям же лучше не давать воли, чтобы что-то не сломали. Поэтому администраторы объединяются в группу admin, и ей дается доступ ко всему оборудованию, реально же ко всем файлам в каталоге dev, а пользователи, объеденные в группу users, и этой группе дается возможность читать и записывать файлы в общий каталог, с помощью которого они могут обмениваться результатами своей работы. Мы могли бы назначать права для каждого пользователя отдельно разрешая ему доступ к тому или иному файлу, но это слишком неудобно. Поэтому и были придуманы группы. Говорите, да ничего, можно назначить? Ну а теперь представьте что наши пользователи - это процессы. Вот тут вся краса групп выходит на передний план, группы используются не столько для обеспечения доступа для пользователей, сколько для управления правами программ, особенно их доступом к оборудованию. Для сервисов создаются отдельные группы и пользователь, от имени которого запущен он, сервис может состоять в нескольких группах, что обеспечивает ему доступ к определенным ресурсам.

А теперь давайте рассмотрим как посмотреть группы linux.

Группы в Linux

Все группы, созданные в системе, находятся в файле /etc/group. Посмотрев содержимое этого файла, вы можете узнать список групп linux, которые уже есть в вашей системе. И вы будете удивлены.

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

Давайте подробнее рассмотрим каждую из групп, чтобы лучше понимать зачем они нужны:

  • daemon - от имени этой группы и пользователя daemon запускаютcя сервисы, которым необходима возможность записи файлов на диск.
  • sys - группа открывает доступ к исходникам ядра и файлам include сохраненным в системе
  • sync - позволяет выполнять команду /bin/sync
  • games - разрешает играм записывать свои файлы настроек и историю в определенную папку
  • man - позволяет добавлять страницы в директорию /var/cache/man
  • lp - позволяет использовать устройства параллельных портов
  • mail - позволяет записывать данные в почтовые ящики /var/mail/
  • proxy - используется прокси серверами, нет доступа записи файлов на диск
  • www-data - с этой группой запускается веб-сервер, она дает доступ на запись /var/www, где находятся файлы веб-документов
  • list - позволяет просматривать сообщения в /var/mail
  • nogroup - используется для процессов, которые не могут создавать файлов на жестком диске, а только читать, обычно применяется вместе с пользователем nobody.
  • adm - позволяет читать логи из директории /var/log
  • tty - все устройства /dev/vca разрешают доступ на чтение и запись пользователям из этой группы
  • disk - открывает доступ к жестким дискам /dev/sd* /dev/hd*, можно сказать, что это аналог рут доступа.
  • dialout - полный доступ к серийному порту
  • cdrom - доступ к CD-ROM
  • wheel - позволяет запускать утилиту sudo для повышения привилегий
  • audio - управление аудиодрайвером
  • src - полный доступ к исходникам в каталоге /usr/src/
  • shadow - разрешает чтение файла /etc/shadow
  • utmp - разрешает запись в файлы /var/log/utmp /var/log/wtmp
  • video - позволяет работать с видеодрайвером
  • plugdev - позволяет монтировать внешние устройства USB, CD и т д
  • staff - разрешает запись в папку /usr/local

Теперь, когда вы знаете зачем использовать группы в linux и какие они есть по умолчанию, рассмотрим управление группами LInux.

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

Управлять группами можно и с помощью графического интерфейса. В KDE есть программа Kuser специально предназначенная для этого, в Gnome это выполняется с помощью настроек системы. Кроме того, в популярных дистрибутивах есть отдельные инструменты, такие как YaST в OpenSUSE или Настройки Ubuntu. Но с графическим интерфейсом я думаю вы разберетесь. А мы рассмотрим управление группами linux через терминал. Сначала разберемся с файлами, а уже потом с пользователями.

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

Здесь вы можете видеть, что владелец всех папок sergiy и группа тоже sergiy. Правильно, так как эти пользователи были созданы мной. Но давайте пойдем дальше:

Здесь мы видим что дисковым устройствам sd* назначена группа disk, а это все значит, что пользователь, состоящий в этой группе, может получить к ним доступ. Или еще пример:

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

chgrp имя_группы имя_файла

Например создадим файл test:

И изменим для него группу:

Если вы хотите создать группу linux, это можно сделать командой newgrp:

sudo groupadd test

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

Управление группами Linux для пользователя выполняется с помощью команды usermod. Рассмотрим ее синтаксис и опции:

$ usermod опции имя_пользователя

  • -G - дополнительные группы, в которые нужно добавить пользователя
  • -g изменить основную группу для пользователя
  • -R удалить пользователя из группы.

Добавить пользователя в группу можно командой usermod:

sudo usermod -G -a имя_группы имя_пользователя

Можно добавить пользователя в группу linux временно, командой newgrp. Откроется новая оболочка, и в ней пользователь будет иметь нужные полномочия, но после закрытия все вернется как было:

sudo newgrp имя_группы

Для примера давайте добавим нашего пользователя в группу disk, чтобы иметь прямой доступ к жестким дискам без команды sudo:

sudo usermod -G -a disk sergiy

Теперь вы можете монтировать диски без команды sudo:

mount /dev/sda1 /mnt

Посмотреть группы linux, в которых состоит пользователь можно командой:

Также можно использовать команду id. В первом случае мы просто видим список групп linux, во втором дополнительно указанны id группы и пользователя. Чтобы включить пользователя в группу Linux, для основной группы используется опция -g.

Создание новой группы в системе
Этой командой можно создать новую группу пользователей (далее группу) group в системе:

Добавление нового пользователя в систему
Нового пользователя user можно добавить командой :


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

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

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

useradd -g groupname user

Эта группа для пользователя будет являться основной.

Задание пароля пользователю
Пароль для пользователя user задается командой:


Эта команда попросит ввести пароль дважды. Никогда не оставляйте пользователя без пароля!
Иногда необходимо запретить пользователю вход в систему. Например если нужен доступ только к сетевому общему ресурсу. (Подробнее об этом .) Для этого следует изменить файл passwd следующей командой:

В поле пароля добавляю символ звездочки "*" перед самим паролем (подробнее этот файл описан в конце статьи). Сохраняем сделанные изменения и выходим клавишами Ctrl+X , клавишей Y подтверждаем наш выбор.Для большей безопасности этот файл можно отредактировать командой vipw . Чтобы выйти из редактора с сохранением изменений требуется выполнить :wq . Для выхода без сохранения изменений прописываем :q или :q! , если были произведены какие либо изменения.

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

. Обычно для добавления и редактирования пользователя достаточно выше приведенных команд.
Вся информация о пользователях системы и о группах хранится в следующих файлах:
- /etc/passwd в этом файле содержится весь список пользователей, о которых известно системе. Каждая строка этого файла описывает пользователя и содержит семь полей, в которых указана пользовательская информация. Поля разделены двоеточиями.
1.
2. Шифрованный пароль пользователя (никогда не оствляйте это поле пустым);
3. Идентификатор пользователя (UID);
4. Идентификатор группы (GID);
5. Поле GECOS, в котором можно указать полное имя пользователя, рабочий домашний телефон, место работы и прочее;
6. Путь к домашнему каталогу;
7. Регистрационная оболочка.

- /etc/shadow здесь хранятся пароли в зашифрованном виде. Этот файл доступен суперпользователю только для чтения. Каждая строка соответствует одному пользователю. В нем содержится девять полей, разделенных двоеточиями:
1. Регистрационное имя пользователя;
2. Зашифрованный пароль пользователя;
3. Дата последнего изменения пароля;
4. Минимальное число дней между изменениями пароля;
5. Максимальное число дней между изменениями пароля;
6. Количество дней до предупреждения об окончании действия пароля;
7. Количество дней до окончания действия пароля;
8. Срок действия учетной записи;
9. Зарезервированное пустое поле, которое не используется.
Поля дат в данном файле заполняются числом дней, прошедших от 1 января 1970 года. Обязательно заполнены должны быть первые два поля!

- /etc/group содержит список групп и имена пользователей, входящие в эти группы. Подобно предыдущим файлам каждая строка соответствует одной группе и имеет четыре поля, которые разделены двоеточиями:
1. Имя группы;
2. Зашифрованный пароль или символ x указывающий на использование файла gshadow (когда для подключения пользователя к группе с помощью утилиты newgrp нужно ввести пароль);
3. Идентификатор группы (GID);
4. Список членов данной группы, которые разделены запятой.

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

Как создать новую группу в Linux

Если вы хотите создать новую группу в своей системе, используйте команду groupadd , заменив new_group на имя группы, которую вы хотите создать. Вам также нужно будет использовать sudo с этой командой (или в дистрибутивах Linux, которые не используют sudo , вам нужно будет запустить команду su , чтобы получить повышенные разрешения перед запуском команды).

Sudo groupadd new_group

Добавление существующей учетной записи пользователя в группу

Чтобы добавить существующую учетную запись пользователя в группу в вашей системе, используйте команду usermod , заменив group_name на имя группы, в которую вы хотите добавить пользователя, в user_name на имя пользователя, которого хотите добавить.

Usermod -a -G group_name user_name

Например, для добавления пользователя mial в группу sudo , используйте следующую команду:

Usermod -a -G sudo mial

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

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

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

Usermod -g group_name user_name

Обратите внимание здесь на -g . Когда вы используете маленькую g , вы назначаете главную группу. Когда вы используете заглавную -G , как в примерах выше, вы назначаете вторичную группу.

Как узнать, в какие группы входит пользователь

Чтобы просмотреть группы, которым назначена текущая учетная запись пользователя, выполните команду groups . Вы увидите список групп.

Чтобы просмотреть числовые идентификаторы, связанные с каждой группой, выполните команду id :

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

Groups user_name

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

Id user_name

Первой группой в списке групп или группой, показанной после «gid= » в списке идентификаторов, является первичная группа учетной записи пользователя. Другие группы - это вторичные группы. Итак, на скриншоте ниже основной группой учетной записи пользователя является mial .

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

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

Useradd -G group_name user_name

Например, чтобы создать новую учетную запись пользователя с именем jsmith и назначить эту учетную запись группе ftp , вы должны запустить:

Useradd -G ftp jsmith

Конечно, вы захотите назначить пароль для этого пользователя:

Passwd jsmith

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

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

Usermod -a -G group1,group2,group3 user_name

Например, чтобы добавить пользователя с именем mial в группы ftp , sudo и example , вы должны запустить:

Usermod -a -G ftp,sudo,example mial

Вы можете указать столько групп, сколько хотите - просто разделите их все запятой.

Как просмотреть все группы в системе

Если вы хотите просмотреть список всех групп в вашей системе, вы можете использовать команду getent :

Getent group

Этот вывод также покажет вам, какие учетные записи пользователей являются членами групп. Итак, на скриншоте ниже мы видим, что учетные записи пользователей syslog и mial являются членами группы adm .

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

Создадим пользователя vivek и добавим его в группу developers. Залогиньтесь как пользователь root:

Например добавим пользователя vivek :

useradd -g users -G admins,ftp,www,developers -s /bin/bash -p xxxx -d /home/ghost -m vivek

  • -d домашний каталог
  • -s задать стартовую оболочку (/bin/sh) - после можно изменить в файле /etc/passwd
  • -p пароль
  • -g основная группа, к которой приписывается пользователь (Группа должна существовать)
  • -G другие группы к которой приписывается пользователь
  • -m создать для пользователя домашний каталог
  • xxxx символьный пароль пользователя

Убедимся что группа developers существует:

# grep developers /etc/group

Если группы нет, используйте команду groupadd для создания новой группы developers:

Теперь с помощью команды usermod добавим пользователя vivek в группу developers:

# adduser vivek developers && newgrp developers

Убедимся что пользователь добавлен в группу developers:

# id vivek
Output:
uid=1122(vivek) gid=1125(vivek) groups=1125(vivek),1124(developers)

Установим/изменим пароль пользователю vivek:

Поиграемся с группами

Укажим пользователю vivek участие только в группе developers

usermod -G developers vivek

Укажим пользователю vivek участие только в группах admins, ftp, www, developers, введя:

# usermod -G admins,ftp,www,developers vivek

Удалим пользователя vivek из некоторых групп (переназначим ему группы):

# usermod -G ftp,www vivek

теперь vivek не входит в группы admins и developers.

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

userdel — удалить пользователя

Например удалим пользователя vivek:

  • -r удалить пользователя вместе с домашним каталогом

Подробный СИНТАКСИС

useradd [-u идентификатор [-o] [-i]] [-g группа ] [-G группа [[,группа ] . . .]] [-d каталог ] [-s shell ] [-c комментарий ] [-m [-k skel_dir ]] [-f inactive ] [-e expire ] [-p passgen ] [-a событие [, . . .]] рег_имя

Подробное ОПИСАНИЕ

Вызов useradd обычно добавляет новую запись о пользователе в файлы данных системы идентификации и проверки идентичности (Identification and Authentication - I&A). Исключением являются пользователи сетевой информационной службы (Network Information Service или, сокращенно, NIS). Она также позволяет задать принадлежность к дополнительным группам для пользователя (опция -G ) и создать для него начальный каталог (опция -m ). Новое регистрационное имя блокируется до тех пор, пока не будет выполнена команда passwd .

Сразу после установки стандартные значения для различных параметров указаны в файле /etc/default/useradd . Стандартные значения для тех из перечисленных ниже опций, которые предполагают использование стандартных значений, можно изменить с помощью команды defadm .

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

Поддерживаются следующие опции:

-u идентификатор Идентификационный номер пользователя (UID). Этот номер должен быть неотрицательным целым числом, не превосходящим MAXUID , определенный в sys/param.h . По умолчанию используется следующий доступный (уникальный) не устаревший UID, больший 99. Эта опция игнорируется, если новое регистрационное имя будет администрироваться сетевой информационной службой (NIS). Подробнее об этом см. ниже в разделе "Регистрационные имена сетевой информационной службы".
-o Эта опция позволяет сдублировать UID (сделать его не уникальным). Поскольку защита системы в целом, а также целостность контрольного журнала (audit trail) и учетной информации (accounting information) в частности, зависит от однозначного соответствия каждого UID определенному лицу, использовать эту опцию не рекомендуется (чтобы обеспечить учет действий пользователей).
-i Позволяет использовать устаревший идентификатор UID.
-g группа Целочисленный идентификатор или символьное имя существующей группы. Эта опция задает основную группу (primary group) для нового пользователя. По умолчанию используется стандартная группа, указанная в файле /etc/default/useradd
-G группа[[,группа] . . .] Один или несколько элементов в списке через запятую, каждый из которых представляет собой целочисленный идентификатор или символьное имя существующей группы. Этот список определяет принадлежность к дополнительным группам (supplementary group membership) для пользователя. Повторения игнорируются. Количество элементов в списке не должно превосходить NGROUPS_MAX- 1 , поскольку общее количество дополнительных групп для пользователя плюс основная группа не должно превосходить NGROUPS_MAX . Эта опция игнорируется, если новое регистрационное имя будет администрироваться сетевой информационной службой (NIS). См. раздел "Регистрационные имена сетевой информационной службы" ниже.
-d каталог Начальный каталог (home directory) нового пользователя. Длина этого поля не должна превосходить 256 символов. По умолчанию используется HOMEDIR/рег_имя , где HOMEDIR - базовый каталог для начальных каталогов новых пользователей, а рег_имя - регистрационное имя нового пользователя.
-s shell Полный путь к программе, используемой в качестве начального командного интерпретатора для пользователя сразу после регистрации. Длина этого поля не должна превосходить 256 символов. По умолчанию это поле - пустое, что заставляет систему использовать стандартный командный интерпретатор /usr/bin/sh . В качестве значения shell должен быть указан существующий выполняемый файл.
-c комментарий Любая текстовая строка. Обычно, это краткое описание регистрационного имени и используется сейчас для указания фамилии и имени реального пользователя. Эта информация хранится в записи пользователя в файле /etc/passwd . Длина этого поля не должна превосходить 128 символов.
-m Создает начальный каталог нового пользователя, если он еще не существует. Если каталог уже существует, добавляемый пользователь должен иметь права на доступ к указанному каталогу.
-k skel_dir Копирует содержимое каталога skel_dir в начальный каталог нового пользователя, вместо содержимого стандартного "скелетного" каталога, /etc/skel . Каталог skel_dir должен существовать. Стандартный "скелетный" каталог содержит стандартные файлы, определяющие среду работы пользователя. Заданный администратором каталог skel_dir может содержать аналогичные файлы и каталоги, созданные для определенной цели.
-f inactive Максимально допустимое количество дней между использованиями регистрационного имени, когда это имя еще не объявляется недействительным. Обычно в качестве значений используются положительные целые числа.
-e expire Дата, начиная с которой регистрационное имя больше нельзя будет использовать; после этой даты никакой пользователь не сможет получить доступ под этим регистрационным именем. (Эта опция удобна при создании временных регистрационных имен.) Вводить значение аргумента expire (представляющего собой дату) можно в любом формате (кроме Julian date). Например, можно ввести 10/6/99 или October 6, 1999 .
-p passgen Указывает, что поле FLAG в файле /etc/shadow должно быть установлено в указанное значение. К этому полю обращается команда passwd , чтобы определить, действует ли для данного пользователя генератор паролей. Если опция -p явно не задана, проверяется запись FORCED_PASS в файле /etc/default/useradd , чтобы определить значение для соответствующего поля в /etc/shadow . Если записи FORCED_PASS нет в /etc/default/useradd , в соответствующем поле записи в /etc/shadow значения не будет. Если значение FORCED_PASS равно 1, запись в /etc/shadow получает значение 1. Если значение passgen не пустое и не является печатным символом ASCII, выдается диагностическое сообщение.
-a событие Список типов или классов событий через запятую, образующих маску аудита (audit mask) для пользователя. Сразу после установки системы стандартной маски аудита для пользователя нет, но ее можно задать в файле /etc/default/useradd с помощью команды defadm . Эту опцию можно использовать, только если установлены утилиты аудита (Auditing Utilities). (Чтобы узнать, какие пакеты установлены в системе, выполните команду pkginfo .)
рег_имя Строка печатных символов, задающая регистрационное имя для нового пользователя. В ней не должно быть двоеточий (: ) и символов перевода строки (\n ). Она также не должна начинаться с прописной буквы.

Учтите, что многие из стандартных значений для рассмотренных выше параметров можно изменить с помощью команды defadm , предназначенной для работы с файлом /etc/default/useradd . Эти стандартные значения применяются только для локальных пользователей. Для пользователей NIS стандартные значения задаются в базе данных сетевой информационной службы. Чтобы изменить стандартные значения NIS, необходимо задать опции в командной строке.

Регистрационные имена сетевой информационной службы

Если регистрационное имя начинается с символа + , (например, +chris ), определением пользователя будет управлять сетевая информационная служба (NIS). Значения по умолчанию будут определяться на основе базы данных NIS, а не файла /etc/defaults/useradd . Значения аргументов для опций -u , -g и -G будут молча проигнорированы, если эти опции заданы. Вместо этого, значения идентификатора пользователя и идентификатора группы будут взяты из базы данных NIS. Подробнее см. страницу справочного руководства passwd . Учтите, что при добавлении пользователя NIS регистрационное имя должно уже существовать в базе данных NIS. Например, чтобы добавить регистрационное имя chris как имя пользователя NIS, chris уже должен существовать в базе данных NIS. Затем необходимо вызвать useradd с регистрационным именем +chris , чтобы указать, что необходимо добавить пользователя chris как пользователя NIS, а не как локального пользователя.

ФАЙЛЫ

/etc/default/useradd
/etc/group
/etc/passwd
/etc/security/ia/ageduid
/etc/security/ia/audit (если установлены утилиты аудита - Auditing Utilties)
/etc/security/ia/index
/etc/security/ia/master
/etc/shadow
/etc/skel

ДИАГНОСТИКА

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


Неверный синтаксис командной строки.
The command line syntax was invalid.
В опции задан недопустимый аргумент.
An invalid argument was provided with an option.
Указанный в опции -u идентификатор уже используется, а опция -o не указана.
The uid specified with the -u option is already in use and the -o option was not specified.
Указанная в опции -g группа не существует.
The group specified with the -g option does not exist.
Указанное регистрационное имя не уникально.
The specified login is not unique.
Не удалось изменить /etc/group. Регистрационное имя добавлено в файл /etc/passwd, но не в файл /etc/group.
Cannot update /etc/group. The login was added to the /etc/passwd file but not to the /etc/group file.
Не удалось создать начальный каталог (в опции -m) или не удалось выполнить копирование skel_dir в начальный каталог.
Unable to create the home directory (with the -m option) or unable to complete the copy of skel_dir to the home directory.
Идентификатор недостаточно устарел. Выберите другой.
uid not aged sufficiently. Choose another.
Была указана недопустимая опция -a; системная служба не установлена.
An invalid option -a was specified; system service not installed.
Указан недопустимый тип или класс события аудита.
An invalid audit event type or class event was specified.

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

Linux - это многопользовательская операционная система. Каждый пользователь в Linux принадлежит одной основной группе и одной или нескольким дополнительным группам . В Linux, как и в большинстве других операционных системах работа с пользователями заключается в наборе следующих манипуляций: добавление пользователя/группы, удаление пользователя/группы, модификация настроек пользователя/группы . Данные манипуляции производятся с помощью команд: useradd, groupadd, userdel, groupdel, usermod, groupmod , а так же passwd, gpasswd, id . Более подробно: Существуют так же и графические средства администрирования пользователями, обычно они расположены в оболочке X в разделе Администрирование - Пользователи и группы .

Особенности управления пользователями в Linux

Пример добавления пользователя с помощью шелла:

User-add-server:~# groupadd test user-add-server:~# useradd -c "Test Test" -g test -m test user-add-server:~# passwd test Введите новый пароль UNIX: Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлён user-add-server:~# id test uid=1001(test) gid=1001(test) группы=1001(test) user-add-server:~# ls -ld /home/test/ drwxr-xr-x 2 test test 4096 Дек 16 10:24 /home/test/ user-add-server:~#

В примере мы добавляем группу для нового пользователя (groupadd), далее создаем нового пользователя с полным именем Test Test, имеющего основную группу test и логин test, далее задаем пароль для пользователя test (passwd test) и проверяем параметры созданного пользователя (id и созданный каталог пользователя /home/test/). В листинге видно, что UID и GID - более 1000. Данная особенность является признаком обычного пользователя . Значения ниже (меньше) 1000 (а в некоторых дистрибутивах - меньше 500) указывают на то, что пользователь является системным пользователем .

В соответствии с соглашением, системные пользователи обычно имеют id меньше, чем 100, а пользователь root имеет id, равный 0. Автоматическая нумерация обычных пользователей начинается со значения UID_MIN , установленного в файле /etc/login.defs , это значение обычно установлено в 500 или 1000.

Помимо учетных записей обычных пользователей и учетной записи пользователя root , обычно в системе бывает несколько учетных записей специального назначения для демонов, таких как FTP, SSH, mail, news и т.д. Такие учетные записи часто управляют файлами, но к ним невозможно получить доступ путем обычной регистрации в системе. Поэтому обычно они имеют login shell , определенный как /sbin/nologin или /bin/false , чтобы попытки зарегистрироваться в системе терпели неудачу.

В некоторых системах, команда(ы) добавления пользователей имеют расширенный функционал. То есть, для примера, команда useradd в дистрибутивах Fedora и Red Hat по умолчанию, для нового пользователя создает новую группу и для отмены данной функции, необходимо использовать опцию -n. Для уточнения таких вопросов, необходимо обратиться к документации дистрибутива.

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

User-add-server:~# userdel test user-add-server:~# groupdel test user-add-server:~# ls -ld /home/test/ drwxr-xr-x 2 1001 1001 4096 Дек 16 10:24 /home/test/ user-add-server:~# groupadd test123 user-add-server:~# useradd -c "Test Test" -g test123 -m test123 user-add-server:~# ls -ldn /home/test* drwxr-xr-x 2 1001 1001 4096 Дек 16 14:30 /home/test drwxr-xr-x 2 1001 1001 4096 Дек 16 14:29 /home/test123 user-add-server:~# ls -ld /home/test* user-add-server:~# ls -ld /home/test* drwxr-xr-x 2 test123 test123 4096 Дек 16 10:24 /home/test drwxr-xr-x 2 test123 test123 4096 Дек 16 14:25 /home/test123 user-add-server:~# passwd test123 Введите новый пароль UNIX: Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлён user-add-server:~# su -l test123 test123@user-add-server:~$ pwd /home/test123 test123@user-add-server:/home/mc-sim$ ls /home/ mc-sim test test123 test123@user-add-server:~$ cd /home/mc-sim/ test123@user-add-server:/home/mc-sim$ ls -la итого 24 drwxr-xr-x 2 mc-sim mc-sim 4096 Ноя 15 12:31 . drwxr-xr-x 6 root root 4096 Дек 16 14:25 .. -rw------- 1 mc-sim mc-sim 99 Ноя 15 13:45 .bash_history -rw-r--r-- 1 mc-sim mc-sim 220 Окт 1 17:42 .bash_logout -rw-r--r-- 1 mc-sim mc-sim 3116 Окт 1 17:42 .bashrc -rw-r--r-- 1 mc-sim mc-sim 675 Окт 1 17:42 .profile test123@user-add-server:/home/mc-sim$ rm /home/mc-sim/.bash_logout rm: удалить защищенный от записи обычный файл `/home/mc-sim/.bash_logout"? y rm: невозможно удалить `/home/mc-sim/.bash_logout": Отказано в доступе test123@user-add-server:/home/mc-sim$ rm /home/test/.bashrc test123@user-add-server:/home/mc-sim$

В приведенном примере мы удаляем пользователя и группу test , созданную ранее. При этом каталог данного пользователя остался не тронутым. Как видно из листинга, права у каталога остались для id 1001 . Далее мы создаем нового пользователя и группу , но уже с другим именем - test123 . Данному пользователю присваивается UID и GID - ранее существующего пользователя test . Посмотрев список каталогов, начинающиеся на /home/test * с ключом -n и без него, видим, что получилось - каталог пользователя test стал принадлежать пользователю test123 , о чем нам говорят права доступа -rw-r--r-- test123 test123 . Входим в систему под пользователем test123 и для проверки прав доступа, в каталоге /home/test пробуем удалить файл, а так же пробуем удалить файл из каталога третьего пользователя - mc-sim. Данный пример хорошо иллюстрирует, что в Linux все привязано к идентификаторам.

Управление базами данных пользователей и групп в Linux

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

/etc/passwd

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

/etc/shadow

файл теневых шифрованных паролей, содержащий зашифрованные пароли

/etc/group

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

/etc/gshadow

файл теневых групп, содержащий шифрованные пароли групп

Данные файлы редактировать обычным текстовым редактором крайне не рекомендуется. Они (файлы), обновляются при выполнении вышеуказанных команд, при этом при изменении - блокируются и синхронизируются.

Если все же есть острая необходимость в редактировании указанный файлов, то при помощи команды vipw можно безопасно редактировать файл /etc/passwd , а при помощи команды vigr безопасно редактировать файл /etc/group . Эти команды заблокируют необходимые файлы на то время, пока при помощи будут производиться изменения. Если вы вносите изменения в файл /etc/passwd , команда vipw подскажет, что необходимо проверить, не нужно ли обновить и файл /etc/shadow . Подобным образом, если вы обновляете файл /etc/group при помощи команды vigr, вы получите подсказку, что необходимо обновить и файл /etc/gshadow . Если необходимо удалить администраторов группы, необходимо использовать команду vigr , поскольку команда gpasswd позволяет только добавлять администраторов.

Обращаю внимание, что в современных системах, файлы passwd и group не хранят пароли в открытом виде. Это сделано из соображений безопасности. Сами файлы passwd и group должны быть доступными для чтения для всех, а зашифрованные пароли - недоступными для чтения для всех. Поэтому зашифрованные пароли хранятся в теневых файлах , и эти файлы доступны для чтения только пользователю root. Необходимый доступ для изменения аутентификационных данных обеспечивается при помощи suid-программы, которая имеет полномочия пользователя root, но может быть запущена любым пользователем.

Файл /etc/passwd

user-add-server:~# cat /etc/passwd root:x:0:0:root:/root:/bin/bash lp:x:7:7:lp:/var/spool/lpd:/bin/sh sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin test123:x:1001:1001:Test Test:/home/test123:/bin/sh

Файл /etc/passwd содержит одну строку для каждого пользователя системы. Каждая строка содержит семь полей, разделенных двоеточиями (:), описание полей на примере пользователя root:

поле значение описание
Имя пользователя root имя, используемое для входа в систему (логин)
Пароль x пароль пользователя (если зашифрован, используется символ - x)
id пользователя (UID) 0 Идентификатор пользователя
id группы (GID) 0 Идентификатор группы
просмотров