Насколько вероятно, что вы порекомендуете FirstVDS своим друзьям?
  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
×
ВЫ ПОСТАВИЛИ НАМ 8 ИЗ 10
×

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

Любая работа в Linux выполняется от имени какого-то пользователя, зарегистрированного и авторизованного в системе.

В Linux существуют три типа пользователей: 

  • Администраторы — привилегированные пользователи с полным доступом к системе. По умолчанию на Linux-сервере после установки операционной системы всегда есть один такой пользователь — root.
  • Локальные пользователи — непривилегированные пользователи. Их учётные записи создаёт администратор. Особенность таких аккаунтов в ограниченном доступе к серверу — они не могут пользоваться некоторыми системными утилитами, могут работать только с теми файлами и папками, к которым им открыт доступ. Тем не менее, можно повысить привилегии локального пользователя — ниже расскажем как. 
  • Системные пользователи — учётные записи, автоматически создаваемые системой для работы внутренних процессов и служб. Например, после установки веб-сервера Apache, который входит в состав стека LAMP, на сервере появляется пользователь www-data (на CentOS apache), от имени которого потом работает веб-сервер. Такие пользователи нужны для повышения безопасности. 

Каждый пользователь имеет свой уникальный идентификатор пользователя, UID. Он отличается в зависимости от типа пользователя: 

  • администратор — 0
  • обычный пользователь — от 100
  • системный пользователь — от 1 до 100

Чтобы упростить процесс настройки прав для новых пользователей, их объединяют в группы. Каждая группа имеет свой набор прав и ограничений. Любой пользователь, создаваемый или добавляемый в такую группу, автоматически их наследует. Если при добавлении пользователя для него не указать группу, то у него будет своя, индивидуальная группа — с именем пользователя. Один пользователь может одновременно входить в несколько групп.

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

test-user:x:1000:1000::/home/test-user:/bin/bash

 

test-user

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

x

говорит о том, что пароль зашифрован (хранится в /etc/shadow)

1000:1000

идентификатор пользователя (UID) и идентификатор группы (GID), к которой он принадлежит

::

тут может быть ваша реклама комментарий к пользователю и его контакты. Например, имя сотрудника или название службы. Т.н. GECOS-поле

/home/test-user

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

/bin/bash

указывает, что пользователь имеет доступ к командной оболочке сервера

 

Если вам известно имя пользователя и вы хотите узнать о нём побольше, необязательно читать /etc/passwd. Всё то же самое в человекочитаемом виде можно посмотреть с помощью команды pinky -l :

pinky -l test-user

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

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

Узнать UID пользователя можно с помощью команды id :

id test-user

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

  • Имя пользователя может содержать только английские буквы [a-z] в верхнем и нижнем регистре, цифры, символ «_», тире «-» и точку; 
  • Имя пользователя может оканчиваться символом «$»;
  • Имя пользователя не может начинаться с тире, содержать только цифры или состоять из «.» или «..»;
  • Не рекомендуется использовать точку в начале имени пользователя;
  • Имя пользователя может включать до 32 символов.

Теперь перейдём непосредственно к управлению пользователями.

Создание пользователей

Процесс добавления пользователя состоит из двух шагов: создания пользователя и настройки пароля. 

На первом шаге используется команда useradd c набором опций для настройки нового пользователя и его именем (логином):

useradd [как создать] [как назвать]

Эта команда имеет ряд настроек по умолчанию, которые задаются с помощью файлов /etc/default/useradd и /etc/login.defs Увидеть основные можно с помощью команды:

useradd -D

GROUP

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

HOME

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

INACTIVE

указывает время до блокировки пользователя, когда его пароль станет недействителен. Значение «-1» отключает опцию

EXPIRE

дата, до которой действителен аккаунт. По умолчанию не установлена — то есть без ограничений

SHELL

используется для настройки доступа к командной оболочке

SKEL

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

CREATE_MAIL_SPOOL

определяет, нужно ли создать папку для писем этого пользователя в /var/spool/mail/


Все эти настройки применяются, если использовать самый простой вариант команды создания пользователя без параметров:

useradd test-user

Но обычно нам требуется добавить пользователя со специфическими настройками — для этого используется расширенный вариант этой команды. Перечислим основные опции:

-m

создаёт указанную домашнюю директорию, если она ещё не существует

-d /home/test-user

устанавливает /home/test-user в качестве домашней директории

-c "Евграф Шматкунос"

добавляет комментарий. Например, с именем пользователя

-g test

указывает группу, в которую попадёт пользователь после создания. Можно использовать с GID или именем группы. Указанная группа должна существовать. Используется в сочетании с ключом -N (отменяет автоматическое создание группы с именем пользователя)

-G users,wheel

указывает список дополнительных групп пользователя. Они перечисляются через запятую без пробелов

-s /bin/bash

позволяет настроить доступ к shell

-r

создаёт системного пользователя. Используется, когда вам нужно настроить службу на работу из-под конкретного пользователя. По умолчанию данные таких пользователей не вносятся в /etc/shadow, для них не создаётся домашняя папка

-u

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

-e 2021-01-01

указывает дату, до которой аккаунт будет активен. Дата задаётся в формате YYYY-MM-DD

-f 3

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

 

В итоге получится вот такая сборная солянка из настроек:

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 [что поменять] [для какого пользователя]

Набор параметров расширен дополнительными опциями:

-m

создаёт новую директорию, указанную в качестве домашней (если её не существует), и переносит туда данные из старой

-d /home/users/new-test-user

меняет домашнюю директорию пользователя на /home/users/new-test-user

-c "Чак Норрис"

меняет комментарий к пользователю

-a -G users,wheel

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

-s /bin/bash

меняет командную оболочку пользователя

-u 100500

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

-e 2060-01-01

меняет дату, до которой аккаунт будет активен

-f 7

меняет количество дней до блокировки пользователя, когда его пароль станет недействителен

-l new-test-user

меняет имя пользователя на new-test-user

-L

блокирует аккаунт пользователя. Для этого в файле /etc/shadow перед хэшем пароля пользователя ставится символ «!»

-U

снимает блокировку с аккаунта (удаляет символ «!» из пароля в /etc/shadow)

 

То есть если мы захотим отредактировать данные пользователя 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 [что удаляем] [кого удаляем]

Основных параметра два: 

-r

удаляет папки пользователя: домашнюю директорию, почтовую очередь

-f

отключает механизм защиты. При использовании этой опции пользователь будет удалён даже при наличии запущенных процессов и пр. Используется на свой страх и риск, так как может привести к сбою системы

 

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

Группы пользователей

Информация о группах хранится в файле /etc/group. Работа с группами пользователей куда проще. 

Группы применяются для делегирования прав доступа на определённые файлы, папки, скрипты сразу нескольким пользователям. Живой пример: работа с FTP-сервером. Вы выбираете какую-то директорию для работы с файлами, создаёте группу пользователей и присваиваете ей выбранную папку. Теперь вам не нужно отдельно настраивать права каждому новому пользователю — достаточно добавить его в эту группу, и он автоматически получит доступ к FTP-каталогу.

Создание

Для создания групп используется команда groupadd:

groupadd new-group

Из параметров можно выделить следующие:

-f

если группа с указанным именем или GID уже существует, опция прерывает выполнение команды без соответствующей ошибки

-g 100500

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

-r

создаёт системную группу

-p p@ssw0rd

Устанавливает для группы пароль p@ssw0rd. Пароль запрашивается системой при попытке входа в группу с помощью команды newgrp.

Не рекомендуется к использованию из-за проблем с безопасностью. Настроенный таким образом пароль можно увидеть в истории команд.

Редактирование

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

-g 100500

меняет GID группы на 100500

-n another-name

меняет имя группы на another-name

 

Например, если нам нужно изменить имя группы test-group на имя named-group, команда будет выглядеть так:

groupmod -n named-group test-group

Удаление

Нельзя удалить группу, если она указана в качестве основной для какого-то существующего пользователя. Сначала нужно предварительно удалить этого пользователя из группы.

Само удаление группы выполняется одной командой:

groupdel test-group

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

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

Базовым инструментом для управления группами является утилита gpasswd. Она имеет несколько параметров, но с одной особенностью — в отличие от предыдущих примеров, здесь большинство параметров (кроме -A и -M) не сочетаются. То есть в команде может быть только один параметр за раз.

Структура команды проста:

gpasswd [что сделать] [в какой группе]

Рассмотрим опции команды подробнее: 

-a new-user

Добавляет пользователя new-user в группу

-d bad-user

Удаляет пользователя bad-user из группы

-A user1,user2,...

Доступна для использования привилегированным пользователям (с правами root). Назначает список пользователей-администраторов группы

-M user1,user2,...

Доступна для использования привилегированным пользователям. Назначает список участников группы

-r

Отключает пароль группы. После этого только члены группы смогут использовать команду newgrp для подключения к группе

-R

Отключает внешний доступ к группе. После этого только члены группы смогут использовать команду 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) должен настроить права доступа к файлам и папкам, которые понадобятся этому пользователю. Рассмотрим этот вопрос подробнее.

Права доступа к файлам и папкам