Любая работа в Linux выполняется от имени какого-то пользователя, зарегистрированного и авторизованного в системе.
В Linux существуют три типа пользователей:
- Администраторы — привилегированные пользователи с полным доступом к системе. По умолчанию на Linux-сервере после установки операционной системы всегда есть один такой пользователь — root.
- Локальные — непривилегированные пользователи. Их учётные записи создаёт администратор. Особенность таких аккаунтов в ограниченном доступе к серверу — они не могут пользоваться некоторыми системными утилитами, могут работать только с теми файлами и папками, к которым им открыт доступ. Тем не менее, можно повысить привилегии локального пользователя — ниже расскажем как.
- Системные  — учётные записи, автоматически создаваемые системой для работы внутренних процессов и служб. Например, после установки веб-сервера Apache, который входит в состав стека LAMP, на сервере появляется пользователь www-data(на CentOSapache), от имени которого потом работает веб-сервер. Такие пользователи нужны для повышения безопасности.
Каждый пользователь имеет свой уникальный идентификатор, UID. Он отличается в зависимости от типа пользователя: 
- администратор — 0
- обычный — от 100
- системный — от 1 до 100
Чтобы упростить процесс настройки прав для новых пользователей, их объединяют в группы. Каждая группа имеет свой набор прав и ограничений. Любой пользователь, создаваемый или добавляемый в такую группу, автоматически их наследует. Если при добавлении пользователя для него не указать группу, то у него будет своя, индивидуальная группа — с его именем. Один пользователь может одновременно входить в несколько групп.
Информацию о каждом пользователе сервера можно посмотреть в файле /etc/passwd. Они в нём перечислены в следующем формате:
test-user:x:1000:1000::/home/test-user:/bin/bash
| 
 | имя пользователя | 
| 
 | говорит о том, что пароль зашифрован (хранится в  | 
| 
 | идентификатор пользователя ( | 
| 
 | тут может быть  | 
| 
 | домашняя папка | 
| 
 | указывает, что пользователь имеет доступ к командной оболочке сервера | 
Если вам известно имя пользователя и вы хотите узнать о нём побольше, необязательно читать /etc/passwd. Всё то же самое в человекочитаемом виде можно посмотреть с помощью команды pinky -l :
pinky -l test-user
 
 Эта же команда без аргументов покажет вам всех авторизованных в текущий момент пользователей сервера, включая информацию о времени и источнике входа:
 
 В качестве альтернативы можно использовать команду w — она тоже показывает всех авторизованных в текущий момент пользователей, включая создаваемую ими нагрузку на сервер: 
 
 Узнать UID можно с помощью команды id :
id test-user
Для именования пользователей в Linux есть набор стандартных правил:
- может содержать только английские буквы [a-z]в верхнем и нижнем регистре, цифры, символ«_», тире«-»и точку;
- может оканчиваться символом «$»;
- не может начинаться с тире, содержать только цифры или состоять из «.»или«..»;
- Не рекомендуется использовать точку в начале имени;
- может включать до 32 символов.
Теперь перейдём непосредственно к управлению пользователями.
- Создание пользователей
- Изменение данных
- Удаление
- Группы пользователей
- Привилегии суперпользователя. Sudo
Создание пользователей
Процесс добавления пользователя состоит из двух шагов: создание и настройка пароля.
На первом шаге используется команда useradd c набором опций для настройки нового пользователя и его именем (логином):
useradd [как создать] [как назвать]
Эта команда имеет ряд настроек по умолчанию, которые задаются с помощью файлов /etc/default/useradd и /etc/login.defs Увидеть основные можно с помощью команды:
useradd -D
 
 | 
 | 
 | 
| 
 | базовый каталог, в котором будет размещена директория | 
| 
 | указывает время до блокировки пользователя, когда его пароль станет недействителен. Значение  | 
| 
 | дата, до которой действителен аккаунт. По умолчанию не установлена — то есть без ограничений | 
| 
 | используется для настройки доступа к командной оболочке | 
| 
 | содержит путь к директории, в которой хранятся файлы по умолчанию. После создания пользователя они будут автоматически скопированы в его домашнюю папку | 
| 
 | определяет, нужно ли создать папку для писем этого пользователя в  | 
Все эти настройки применяются, если использовать самый простой вариант команды создания пользователя без параметров:
useradd test-user
Но обычно нам требуется добавить пользователя со специфическими настройками — для этого используется расширенный вариант этой команды. Перечислим основные опции:
| 
 | создаёт указанную домашнюю директорию, если она ещё не существует | 
| 
 | устанавливает  | 
| 
 | добавляет комментарий | 
| 
 | указывает группу, в которую попадёт пользователь после создания. Можно использовать с  | 
| 
 | указывает список дополнительных групп. Они перечисляются через запятую без пробелов | 
| 
 | позволяет настроить доступ к  | 
| 
 | создаёт системного пользователя. Используется, когда вам нужно настроить службу на работу из-под конкретного пользователя. По умолчанию данные таких пользователей не вносятся в  | 
| 
 | позволяет указать свой  | 
| 
 | указывает дату, до которой аккаунт будет активен. Дата задаётся в формате  | 
| 
 | указывает количество дней до блокировки пользователя, когда его пароль станет недействителен | 
В итоге получится вот такая сборная солянка из настроек:
useradd -m -u 666 -d /home/users/test-user -c "Тестовый пользователь" -e 2060-01-01 -s /bin/bash test-user
В примере мы создаём тестового пользователя test-user с идентификатором 666, домашней папкой в /home/users/test-user, комментарием «Тестовый пользователь» и доступом к командной оболочке. Учётная запись будет действительна до конца света по Ньютону.
Более подробную информацию о доступных опциях для useradd можно увидеть с помощью команды man useradd.
Очень важно также настроить для пользователя надёжный пароль. Для этого нужно ввести следующую команду:
passwd test-user
 
 Система предложит ввести и подтвердить пароль. На этом процесс создания пользователя можно считать завершённым.
Изменение данных пользователей
Смена настроек для активного пользователя может привести к сбою системы. Поэтому перед изменением данных важно убедиться, что в текущий момент редактируемый пользователь не авторизован, под ним отсутствуют запущенные процессы, редактируемые файлы. Посмотреть список запущенных процессов пользователя user можно следующим образом: 
pgrep -l -u user
Проверить, авторизован ли пользователь, можно с помощью уже известной команды:
pinky user
Отредактировать данные существующего пользователя можно с помощью команды usermod. По структуре она похожа на предыдущую команду:
usermod [что поменять] [для какого пользователя]
Набор параметров расширен дополнительными опциями:
| 
 | создаёт новую директорию, указанную в качестве домашней (если её не существует), и переносит туда данные из старой | 
| 
 | меняет домашнюю директорию пользователя на  | 
| 
 | меняет комментарий к пользователю | 
| 
 | добавляет пользователя в дополнительные группы | 
| 
 | меняет командную оболочку пользователя | 
| 
 | изменяет  | 
| 
 | меняет дату, до которой аккаунт будет активен | 
| 
 | меняет количество дней до блокировки пользователя, когда его пароль станет недействителен | 
| 
 | меняет имя пользователя на  | 
| 
 | блокирует аккаунт. Для этого в файле  | 
| 
 | снимает блокировку с аккаунта (удаляет символ  | 
То есть если мы захотим отредактировать данные пользователя test-user, созданного в примере выше, это будет выглядеть так:
usermod -l new-test-user -m -d /home/new-test-user -c "Чак Норрис" -u 100500 -e 3000-01-01 -f -1 test-user
В примере мы меняем логин — имя на new-test-user, изменяем домашнюю папку на /home/new-test-user с копированием файлов, меняем комментарий, UID, срок жизни аккаунта и отменяем блокировку в случае устаревания пароля.
При изменении данных пользователя система предпримет попытку автоматически указать новые данные для всех файлов и папок. Тем не менее, после редактирования нужно всё перепроверить и исправить права доступа, где они не изменились автоматически.
Удаление пользователей
Как и в случае с редактированием, перед удалением нужно убедиться, что под ним отсутствуют активные процессы, не редактируются файлы. Иначе существует риск сбоя системы. В программу встроен механизм защиты, поэтому она не позволит удалить пользователя, если он авторизован или под ним работают какие-то службы.
Для удаления пользователей используется команда userdel. Её структура аналогична предыдущим:
userdel [что удаляем] [кого удаляем]
Основных параметра два:
| 
 | удаляет папки пользователя: домашнюю директорию, почтовую очередь | 
| 
 | отключает механизм защиты. При использовании этой опции пользователь будет удалён даже при наличии запущенных процессов и пр. Используется на свой страх и риск, так как может привести к сбою системы | 
После удаления пользователей важно вручную проверить, что на сервере не осталось файлов или директорий, принадлежащих удалённому пользователю.
Группы пользователей
Информация о группах хранится в файле /etc/group. Работа с группами пользователей куда проще. 
Группы применяются для делегирования прав доступа на определённые файлы, папки, скрипты сразу нескольким пользователям. Живой пример: работа с FTP-сервером. Вы выбираете какую-то директорию для работы с файлами, создаёте группу пользователей и присваиваете ей выбранную папку. Теперь вам не нужно отдельно настраивать права каждому новому пользователю — достаточно добавить его в эту группу, и он автоматически получит доступ к FTP-каталогу.
Создание
Чтобы создать группу используется команда groupadd:
groupadd new-group
Из параметров можно выделить следующие:
| 
 | если группа с указанным именем или GID уже существует, опция прерывает выполнение команды без соответствующей ошибки | 
| 
 | позволяет назначить свой GID для создаваемой группы | 
| 
 | создаёт системную группу | 
| -p p@ssw0rd | Устанавливает для группы пароль  Не рекомендуется к использованию из-за проблем с безопасностью. Настроенный таким образом пароль можно увидеть в истории команд. | 
Редактирование
Для редактирования групп используется команда groupmod. Список изменений задаётся с помощью параметров:
| 
 | меняет  | 
| 
 | меняет имя группы на  | 
Например, если нам нужно изменить имя группы test-group на имя named-group, команда будет выглядеть так:
groupmod -n named-group test-group
Удаление
Нельзя удалить группу, если она указана в качестве основной для какого-то существующего пользователя. Сначала нужно предварительно удалить этого пользователя из группы.
Само удаление группы выполняется одной командой:
groupdel test-group
Как и в случае удаления пользователей, нужно вручную проверить, что на сервере не осталось данных, принадлежащих удалённой группе.
Управление пользователями в группе
Базовым инструментом для управления группами является утилита gpasswd. Она имеет несколько параметров, но с одной особенностью — в отличие от предыдущих примеров, здесь большинство параметров (кроме -A и -M) не сочетаются. То есть в команде может быть только один параметр за раз.
Структура команды проста:
gpasswd [что сделать] [в какой группе]
Рассмотрим опции команды подробнее:
| 
 | Добавляет new-user в группу | 
| 
 | Удаляет bad-user из группы | 
| 
 | Доступна для использования привилегированным пользователям (с правами root). Назначает список пользователей-администраторов группы | 
| 
 | Доступна для использования привилегированным пользователям. Назначает список участников группы | 
| 
 | Отключает пароль группы. После этого только члены группы смогут использовать команду newgrp для подключения к группе | 
| 
 | Отключает внешний доступ к группе. После этого только члены группы смогут использовать команду newgrp для подключения к группе | 
Как добавить пользователя в группу
Если нам потребуется добавить пользователя в новую группу, достаточно будет использовать следующую команду:
gpasswd -a new-user test-group
Также для добавления пользователей в новую группу используется описанная выше команда usermod. Следующий пример добавляет пользователя test-user в группу new-group: 
usermod -a -G new-group test-user
Или, если нужно указать группу new-group в качестве основной группы пользователя test-user:
usermod -g new-group test-user
Помимо этого, любой пользователь может сам авторизоваться и добавиться в новую группу с помощью команды:
newgrp new-group
Эта команда позволяет переключить группу пользователя в рамках текущей сессии, а также автоматически добавляет запрошенную группу в список групп пользователя.
Привилегии суперпользователя. Sudo
Итак, мы знаем, что на сервере есть три типа пользователей: администраторы (корневой пользователь root), локальные (люди, которым мы предоставляем учётные записи для работы с сервером) и системные (сущности, от имени которых запускаются те или иные процессы). То есть реально для управления системой используются только первые два типа пользователей. Их основное различие — в объёме прав доступа.
По умолчанию после установки операционной системы на сервере присутствует только один пользователь — администратор root. Он имеет полные права доступа ко всем процессам и данным сервера.
Если создать локального пользователя, по умолчанию он будет иметь доступ только к тем файлам и каталогам, которые принадлежат ему либо группе пользователей, в которую он входит. Помимо прочего, при работе в командной оболочке ему будет закрыт доступ к ряду системных инструментов, необходимых для расширенной настройки или диагностики сервера. При попытке выполнить их под непривилегированным пользователем вы будете видеть ошибки, намекающие, что для работы с этими инструментами требуются права повыше:
 
 Тем не менее, основная часть работы с конечными данными на сервере происходит именно под локальным пользователем — например, загрузка и изменение файлов сайтов. Если вы загрузите на сервер файл под root-ом, файл будет принадлежать ему, а не пользователю, в папку которого загружен. Соответственно, потом это может привести к ошибкам, если вручную не изменить владельца загруженного файла.
Когда вы полностью настроите ваш сервер, работа под root-ом вообще может стать опасной. Случайная ошибка в команде на удаление папки может запросто скосить все ваши труды по разворачиванию системы. Да и в целом сам факт наличия пользователя root на сервере при неправильном подходе к безопасности может стать фатальным — если злоумышленник получит к нему доступ, он получит неограниченный контроль над всем содержимым сервера. 
С учётом всего этого при администрировании оптимальной считается следующая практика: пользователь root как он есть отключается, а его привилегии делегируются узкому кругу локальных пользователей. Это даёт сразу несколько преимуществ:
- повышается уровень внешней безопасности (отсутствие rootотсекает часть автоматических попыток взлома);
- ограничивается объём административных прав — повышение привилегий используется для конкретных рабочих операций и действует ограниченное время.
Для делегирования прав суперпользователя локальные пользователи добавляются в специальную группу. Способ настройки отличается в зависимости от используемой операционной системы:
- 
	Ubuntu и Debian: Для предоставления прав пользователи добавляются в группу sudo:usermod -a -G sudo test-user 
- 
	CentOS: Для предоставления прав пользователи добавляются в группу wheel:usermod -a -G wheel test-user 
Можно делегировать права пользователям по отдельности — через файл /etc/sudoers Для работы с ним нужно вызвать специальный редактор: 
visudo
 
 В этом файле можно тонко настроить объём делегируемых прав — вплоть до списка команд, которые пользователям разрешено вызывать от имени администратора.
Проверить, может ли пользователь использовать sudo, можно с помощью команды: 
sudo -l -U test-user
 
 В примере пользователь test-user может выполнять через sudo любые команды (ALL:ALL — символизирует, что команды могут исполняться от имени любых пользователей и групп, третий аргумент символизирует список доступных команд — в примере ALL, не ограничен)
Чтобы выполнить ту или иную команду с правами суперпользователя, перед ней вызывается команда sudo:
sudo groupadd newgroup
Для подтверждения система запросит ввести пароль текущего пользователя (символы при вводе пароля не отображаются — введите пароль «вслепую» или скопируйте и вставьте кликом правой кнопки мыши). После ввода команда будет отправлена на исполнение. Также в течение пяти следующих минут (по умолчанию) вы сможете запускать команды от имени суперпользователя без использования sudo и повторного ввода пароля. 
Количество времени, которое действуют права суперпользователя после вызова sudo, можно изменить через настройки в  /etc/sudoers. Запрос пароля можно отключить там же.
Если вам нужно выполнить сразу несколько операций с повышенными привилегиями, можно временно войти в режим суперпользователя:
sudo -s
С управлением пользователями разобрались, идём дальше. Как было сказано выше, чтобы локальный пользователь мог начать работу на сервере, администратор (root или пользователь c привилегиями sudo) должен настроить права доступа к файлам и папкам, которые понадобятся этому пользователю. Рассмотрим этот вопрос подробнее.
 
    