Group это в линукс

Обновлено: 02.07.2024

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 при этом заблокирован, после завершения сеанса в системе не останется ни одного привилегированного пользователя.

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

Группы Linux

Пользователь может принадлежать к двум типам групп:

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

Есть несколько способов узнать, к каким группам принадлежит пользователь.

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

Использование команды groups

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

Как и раньше, первая группа является первичной.

Используя команду id

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

Например, чтобы получить информацию о пользователе linuxize вы должны ввести:

Команда покажет идентификатор пользователя ( uid ), основную группу пользователя ( gid ) и вторичные группы ( groups ) пользователя.

Чтобы напечатать только имена вместо чисел, используйте параметр -n . Опция -g выведет только основную группу и -G все группы.

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

Список всех участников группы

Чтобы getent group список всех членов группы, используйте команду getent group за которой следует имя группы.

Например, чтобы узнать членов группы с именем « developers , воспользуйтесь следующей командой:

Если группа существует, команда напечатает группу и всех ее членов:

Если нет вывода, это означает, что группа не существует.

Список всех групп

Чтобы просмотреть все группы, присутствующие в системе, просто откройте файл /etc/group . Каждая строка в этом файле представляет информацию для одной группы.

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

Вывод такой же, как при отображении содержимого файла /etc/group . Если вы используете LDAP для аутентификации пользователя, getent отобразит все группы как из файла /etc/group и из базы данных LDAP.

Вы также можете использовать awk или cut для печати только первого поля, содержащего имя группы:

Выводы

В этом руководстве вы узнали, как найти группы, членом которых является пользователь. Те же команды применимы для любого дистрибутива Linux, включая Ubuntu, CentOS, RHEL, Debian и Linux Mint.

Учетные записи пользователей системы могут объединяться в рамках групп . Концепция групп пользователей позволяет устанавливать права доступа на уровне групп пользователей вместо установки аналогичных прав доступа для каждого отдельного пользователя.

В каждом дистрибутиве Unix или Linux имеется инструмент с графическим интерфейсом для управления группами пользователей. Пользователям, не имеющим опыта работы с данными системами, рекомендуется использовать именно эти инструменты. Более опытные пользователи могут использовать инструменты с интерфейсом командной строки для управления учетными записями пользователей, проявляя при этом осторожность: некоторые дистрибутивы не позволяют работать одновременно с инструментами для управления группами пользователей с графическим интерфейсом и интерфейсом командной строки (примером может служить инструмент YaST из состава дистрибутива Novell Suse). Опытные системные администраторы могут осуществлять непосредственное редактирование соответствующих файлов с помощью текстового редактора vi или утилиты vigr .

Утилита groupadd

Группы пользователей могут создаваться с помощью утилиты groupadd . В примере ниже показана методика создания пяти групп (без добавления в них пользователей).

Файл group

Пользователи могут состоять в нескольких группах. Членство пользователей в группах описывается в файле /etc/group .

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

Команда groups

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

Утилита usermod

Членство пользователя в группах может быть изменено с помощью утилиты useradd или usermod .

Проявляйте осторожность при использовании утилиты usermod для добавления пользователей в группы. По умолчанию утилита usermod будет удалять пользователя из всех групп, в которых он состоял, если имена данных групп не были переданы в составе команды! Использование параметра -a (append - дополнение) позволяет избежать данного поведения.

Утилита groupmod

Вы можете изменить имя группы пользователей с помощью утилиты groupmod .

Утилита groupdel

Вы можете навсегда удалить группу пользователей с помощью утилиты groupdel .

Утилита gpasswd

Также вы можете делегировать функции контроля над членством в определенной группе пользователей другому пользователю с помощью утилиты gpasswd . В примере ниже мы делегируем права на добавление пользователей в группу sports и удаление их из нее пользователю serena. После этого мы используем команду su для добавления пользователя harry в группу sports от лица пользователя serena. Администраторы групп пользователей не обязаны быть членами этих групп. Они могут удалить свои учетные записи из администрируемых ими групп пользователей и это никак не повлияет на их возможности добавления пользователей в эти группы или удаления пользователей из них. Информация об администраторах групп пользователей хранится в файле /etc/gshadow . Для удаления всех учетных записей администраторов из группы пользователей следует использовать утилиту gpasswd с параметрами для задания пустого списка администраторов.

Утилита newgrp

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

Утилита vigr

По аналогии с утилитой vipw, утилита vigr может использоваться для редактирования файла /etc/group в ручном режиме, так как она осуществляет корректную блокировку этого файла в процессе редактирования. Текстовый редактор vi или утилита vigr может использоваться для управления группами пользователей исключительно опытными системными администраторами.

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

1. Создайте группы пользователей tennis, football и sports.

2. С помощью одной команды сделайте пользователя venus членом групп tennis и sports.

3. Переименуйте группу пользователей fotball в foot.

4. Используйте текстовый редактор vi для добавления пользователя serena в группу пользователей tennis.

5. Используйте команду id для того, чтобы убедиться, что пользователь serena состоит в группе пользователей tennis.

6. Сделайте кого-либо из пользователей ответственным за управление членством пользователей в группах foot и sports. Проверьте работоспособность использованного механизма.

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

1. Создайте группы пользователей tennis, football и sports.

2. С помощью одной команды сделайте пользователя venus членом групп tennis и sports.

3. Переименуйте группу пользователей fotball в foot.

4. Используйте текстовый редактор vi для добавления пользователя serena в группу пользователей tennis.

5. Используйте команду id для того, чтобы убедиться, что пользователь serena состоит в группе пользователей tennis.

6. Сделайте кого-либо из пользователей ответственным за управление членством пользователей в группах foot и sports. Проверьте работоспособность использованного механизма.

Contents

Обзор

Под пользователем понимается любой, кто работает с компьютером. Как правило, для каждого пользователя в системе создаётся отдельный аккаунт, которому присваивается специальное имя. В качестве имени пользователя можно использовать как реальные имена, вроде Mary или Bill, так и псевдонимы — Dragonlady, Pirate и т.п. С помощью имени пользователь получает доступ к своему аккаунту и, в конечном счёте, к системе. Некоторые системные службы запускаются либо привилегированными аккаунтами, либо строго определёнными аккаунтами пользователей.

Механизм пользователей был разработан по соображениям безопасности, для ограничения доступа к различным частям системы. Суперпользователь (root) имеет полный доступ к операционной системе и её настройкам. Этот аккаунт используется только для целей системного администрирования; обычные пользователи могут временно повысить уровень своих прав командами su и sudo.

Один человек может создать несколько аккаунтов с разными именами. Некоторые специфические имена, вроде того же "root", зарезервированы и запрещены к использованию.

Пользователи часто объединятся в "группы". Добавление пользователя в определённую группу обычно даёт ему дополнительные права, связанные с этой группой.

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

Права и владельцы

В операционной системе UNIX были сформулированы некоторые общие идеи и принципы, которые оказали в дальнейшем сильное влияние на её архитектуру, пользовательский интерфейс, культуру и развитие. В частности, один из основополагающих принципов выражается мантрой "всё есть файл", которую часто называют определяющим пунктом UNIX в целом. Суть данного принципа заключается в создании унифицированного способа доступа к широкому диапазону ресурсов ввода/вывода: к документам, каталогам, жёстким дискам, дискам CD-ROM, модемам, клавиатурам, принтерам, мониторам, терминалам и даже межпроцессным и сетевым взаимодействиям. Цель — предоставление универсальной абстракции для каждого из этих объектов, названных отцами-оснвоателями UNIX общим термином "файл". Поскольку доступ к файлу осуществляется с помощью одного и того же API, стало возможно использовать одинаковый набор базовых команд для чтения и записи таких разнородных устройств, как диск, клавиатура, документ или сетевой интерфейс.

Абстракция файла, существующая в операционной системе UNIX и совместимых с ней системах, является основополагающей и всеобъемлющей. Любая системная служба и интерфейс устройства теперь могут реализовываться так, чтобы предоставлять другим приложениям метафору файла или файловой системы. Это открывает новые способы их использования и значительно расширяет возможности существующих приложений — простые инструменты, разработанные для решения узких задач, теперь, вооружившись абстракцией файла UNIX, могут использоваться совершенно по-новому. Небольшая утилита вроде cat, предназначенная для считываения одного или нескольких файлов и вывода их содержимого на стандартный поток вывода, теперь может выполнять чтение с устройств ввода-вывода с помощью специальных файлов устройств, как правило расположенных в каталоге /dev . С другой стороны, во многих системах запись и проигрываение звука теперь выполняется всего лишь командами " cat /dev/audio > myfile " и " cat myfile > /dev/audio " соответственно.

В GNU/Linux каждый файл принадлежит какому-то пользователю и группе. Существует три типа прав доступа — чтение, запись и исполнение. Права доступа задаются по отдельности для владельца-пользователя, владельца-группы, и для прочих пользователей, которые не входят в первые две категории. Владельцев файла и права доступа можно узнать с помощью "длинного" формата команды ls:

Первая колонка содержит права доступа к файлу (например, правами файла initramfs-linux.img являются -rw-r--r-- ). Третья и четвёртая колонки содержат соответственно пользователя и группу, которым принадлежит файл. В этом примере все файлы принадлежат пользователю root и группе root.

В этом примере каталог sf_Shared принадлежит пользователю root и группе vboxsf. Владельца и права доступа можно также определить утилитой stat.

Права доступа отображаются тремя группами символов, которые являются правами соответственно пользователя, группы и всех остальных. Например, строка -rw-r--r-- говорит о том, что владелец файла имеет права на чтение и запись, но не на выполнение ( rw- ), а пользователи из группы-владельца и прочие пользователи имеют доступ только на чтение ( r-- и r-- ). С другой стороны, строка drwxrwx--- говорит о том, что у пользователя и группы права на чтение, запись и исполнение ( rwx и rwx ), а все остальные доступа к файлу не имеют вовсе ( --- ). Первый символ в строке означает тип файла.

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

Изменить владельцев файла можно командой chown, а права доступа меняются командой chmod:

Shadow

В Arch Linux инструменты для работы с пользователями, группами и паролями собраны в пакет shadow , который являеется зависимостью мета-пакета base .

Список файлов

Файл Назначение
/etc/shadow Безопасное хранение информации о пользователях
/etc/passwd Информация о пользователях
/etc/gshadow Скрытая информация о группах
/etc/group Принадлежность пользователей к группам

Управление пользователями

Список пользователей, которые в настоящий момент выполнили вход в систему, можно вывести командой who . Список хранящихся в базе данных аккаунтов и их характеристик можно вывести командой passwd -Sa с правами root. Описание формата вывода вы найдёте в руководстве passwd(1) .

Добавление нового пользователя выполняется командой useradd:

-m / --create-home указание создать домашний каталог пользователя по адресу /home/имя_пользователя . В каталоге создаётся набор стартовых файлов, владельцем которых назначается новый пользователь. -G / --groups список дополнительных групп, в которые должен войти новый пользователь. Группы в списке разделяются запятыми. По умолчанию новый пользователь добавляется только в начальную группу (см. ниже в этом разделе). -s / --shell путь к файлу оболочки входа (login shell) пользователя. Убедитесь, что пакет с необходимой оболочкой установлен, если указали что-то, отличное от Bash.

Группы в параметре -G задаются именами или номерами существующих групп. Если этот парамет не указан, то поведение useradd зависит от переменной USERGROUPS_ENAB в файле /etc/login.defs . Стандартное поведение ( USERGROUPS_ENAB yes ) — создать группу, название которой совпадает с именем нового пользователя.

Когда оболочка входа не нужна, например, если аккаунт пользователя создаётся для работы неинтерактивной службы, вместо обычной оболочки можно указать /usr/bin/nologin . В этом случае процедура входа будет корректно отклоняться (см. nologin(8) ).

Другие доступные параметры можно найти в руководстве useradd(8) .

Пример добавления пользователя

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

Совет: Узнать используемую по умолчанию оболочку входа можно командой useradd --defaults . Обычно в роли такой оболочки выступает Bash; чтобы это изменить, воспользуйтесь флагом -s / --shell . В файле /etc/shells перечислены доступные оболочки.

Хотя задавать пароль для защиты нового пользователя не обязательно, всё же рекомендуется это сделать:

Указанная выше команда useradd автоматически создаст группу archie и сделает её группой по умолчанию для пользователя archie . Считается правильным подходом создавать отдельную группу для каждого нового пользователя.

Флагом -g можно задать другую исходную группу, но объединять пользователей в одну группу (например, users ) в многопользовательских системах не рекомендуется. Причина в том, что для совместного доступа на запись для группы пользователей значение umask устанавливается на 002 ; в итоге все члены группы смогут перезаписывать ваши файлы. См. также User Private Groups. Если всё же необходимо добавить пользователя в какую-то группу, то при его создании укажите её как вспомогательную.

Если следовать рекомендованному подходу, т.е. создать группу, название которой совпадает с именем пользователя, то все файлы по умолчанию доступны на запись только создавшему их пользователю. Если вы хотите сделать некий каталог доступным на запись для всех членов определённой группы, то этому каталогу нужно установаить в правах доступа т.н. "бит setgid". Все создаваемые в этом каталоге файлы и подкаталоги получат в качестве группы-владельца группу родительского каталога, а не группу пользователя, их создавшего. Т.о. эти файлы будут доступны на запись для всех членов группы:

Временно изменить идентификатор группы GID пользователя можно командой newgrp. Например, после команды newgrp название_группы создаваемые пользователем файлы будут привязаны к идентификатору группы название_группы ; при этом заново выполнять вход не потребуется. Чтобы изменить GID обратно на исходный, выполните команду newgrp без аргументов.

Пример добавления системного пользователя

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

Команда ниже создаст системного пользователя без доступа к командной оболочке и без домашнего каталога (можно также указать флаг -U , чтобы создать группу, название которой совпадает с именем пользователя, и добавить пользователя в эту группу):

Если необходимо присвоить новому пользователю конкретные идентификаторы UID и GID, то укажите их флагами -u / --uid и -g / --gid :

Смена имени пользователя или домашнего каталога

Команда для изменения домашнего каталога пользователя:

Флаг -m нужен для автоматического создания нового каталога и переноса в него всего содержимого старого.

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

Обратите внимание, что в строке /старый/домашний/каталог отсутствует закрывающй символ / .

Команда для изменения имени пользователя:

Важно: При этом вы не лолжны быть залогинены пользователем, имя которого собираетесь изменить. Откройте новый терминал (например, комбинацией клавиш Ctrl+Alt+F6 ), после чего войдите либо в root-аккаунт, либо в аккаунт другого пользователя, повысив права до root. usermod не позволит по ошибке изменить имя "самого себя".

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

Также следует имейть в виду:

  • При использовании sudo убедитесь, что не забыли обновить файл /etc/sudoers , добавив в него нового пользователя (используйте для этого утилиту visudo с правами root).
  • Задачи crontab также необходимо отредактировать, переименовав файл пользователя в файле /var/spool/cron . Затем выполните crontab -e и отредактируйте пути к файлам и права доступа к ним.
  • Содержимое пользовательских файлов и каталогов Wine (вроде

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

Команда для добавления информации о пользователе (например, настоящего имени) в виде комментария GECOS:

(здесь chfn запускается в интерактивном режиме).

Либо же можно добавить более длинный GECOS-комментарий командой:

Следующая команда пометит пароль пользователя как истёкший и потребует от него при следующем входе создать новый:

Удаляются аккаунты пользователей командой userdel:

Флаг -r указывает на то, что домашний каталог и почтовый ящик тоже должны быть удалены.

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

База данных пользователей

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

  • account — имя пользователя. Это поле не может быть пустым. Применяются стандартные для *NIX правила именования.
  • password — пароль пользователя.

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

Смысл строки следующий: пользователь jack , пароль хранится в /etc/shadow , идентификатор пользователя — 1001, идентификатор его основной группы 1003. Полное имя — Jack Smith, также имеется некоторый комментарий. Домашний каталог /home/jack , используемая командная оболочка — Bash.

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

Автоматическая проверка целостности

Чтобы не запускать pwck / grpck вручную, можно воспользоваться таймером systemd shadow.timer из пакета shadow . Он по умолчанию включён и каждый день запускает службу shadow.service , которая, в свою очередь, будет запускать pwck(8) и grpck(8) для проверки целосности файлов групп и пользователей.

При обнаружении несоответствий группы можно отредактировать с помощью команды vigr(8) , а пользователей — командой vipw(8) . Эти утилиты предоставляют дополнительный слой безопасности, блокируя базы данных на время редактирования. В качестве редактора по умолчанию используется vi, но с помощью переменной окружения EDITOR можно выбрать любой другой.

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

В файле /etc/group перечислены существующие группы (подробнее см. group(5) ). Также существует файл gshadow , который используется достаточно редко (см. gshadow(5) ).

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

Если пользователь не указан, то будет выведен список групп текущего пользователя.

Команда id позволяет узнать дополнительные подробности, вроде UID и GID пользователя:

Команда для вывода списка существующих групп:

Команда для создания новой группы:

Также добавить пользователя в группы можно командой usermod (здесь доп_группы — список групп, разделённых запятыми без пробелов):

Важно: Если не указать флаг -a , то команда удалит пользователя из всех групп, кроме указанных в списке доп_группы . В итоге пользователь будет числиться только в группах из этого списка и ни в каких более.

Команда для изменения группы, например, переименования:

Примечание: Изменится название группы, но не численное значение GID. Файлы, принадлеживашие старой группе, будут теперь принадлежать новой.

Команда для удаления группы:

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

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

Проверить корректность базы данных групп можно командой grpck.

Список групп

В этом разделе объясняется назначение важнейших групп из пакета filesystem . Существует множество других групп, которые создаются при установке пакетов с присвоением корректного GID. Подробности вы найдёте на страницах руководств соответствующих программ.

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

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

Часто возникает необходимость добавить обычного (не root) пользователя в одну из групп, обеспечивающих доступ к периферийным устройствам или упрощающих системное администрирование:

Системные группы

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

Группа Файлы Назначение
dbus Используется в dbus
kmem /dev/port , /dev/mem , /dev/kmem
locate /usr/bin/locate , /var/lib/locate , /var/lib/mlocate , /var/lib/slocate См. locate.
lp /dev/lp8* , /dev/parport4* Доступ к устройствам параллельного порта (принтеры и прочие).
mail /usr/bin/mail
nobody Непривилегированная группа.
proc /proc/pid/ Группа для сбора информации о процессах. Должна быть задана явно опцией монтирования gid= , не работает, если смонтировать файловую систему proc с опцией hidepid=
root /* Полный доступ к администрированис и управлению системой (root, admin).
smmsp Группа sendmail.
tty /dev/tty , /dev/vcc , /dev/vc , /dev/ptmx
utmp /run/utmp , /var/log/btmp , /var/log/wtmp

Группы, существовавшие до перехода на systemd

Есть несколько важных исключений, которые требуют добавления пользователей в группы ниже — например, если вы хотите разрешить неавторизованным пользователям доступ к устройствам. Тем не мнее, имейте в виду, что это может стать причиной определённых проблем (например, группа audio мешает быстрому переключению между пользователями, а также даёт приложениям возможность блокировать програмное микширование).

Неиспользуемые группы

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

Прочие инструменты для работы с базами данных

Для просмотра отдельных записей можно использовать getent(1) :

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