Пользователи в Linux. Типы пользователей, управление пользователями.
Сегодня я хочу поговорить о пользователях в Linux. Мы познакомимся с типами пользователей и узнаем в каких файлах хранится связанная с ними информация. Изучим команды позволяющие управлять пользователями и изменять их данные. Рассмотрим примеры создания пользователей с различными параметрами и последующим изменениям пользовательских настроек.
Типы пользователей
В ОС Linux существует три типа пользователей:
root (от англ. root — корень) — суперпользователь, аккаунт в UNIX-подобных системах, владелец которого имеет право на выполнение всех операций без исключения. Присутствует в системе по умолчанию.
Системные пользователи — системные процессы у которых есть учетные записи для управления привилегиями и правами доступа к файлам и каталогам. Создаются системой автоматически.
Обычные пользователи — учетные записи пользователей, допущенных к управлению системой. Создаются системным администратором.
Каждый пользователь помимо имени имеет числовой идентификатор пользователя UID (User IDentificator). Пользователь root имеет идентификатор 0. Системные пользователи имеют идентификаторы от 1 до 100. Обычные пользователи имеют UID от 100.
Пользователи могут объединяться в группы. Каждый пользователь обязательно входит в ту или иную группу. Группы имеют числовой идентификатор группы GID (Group IDentificator).
Информация пользователей
В системе присутствует следующая информация о каждом пользователе:
- Имя пользователя (user name) — в рамках системы имя должно быть уникальным. В именах должны использоваться только английские буквы, числа и символы _ и . (точка).
- Идентификационный номер пользователя (UID) — является уникальным идентификатором пользователя в системе. Система отслеживает пользователей по UID, а не по именам.
- Идентификационный номер группы (GID) — обозначает группу, к которой относится пользователь. Каждый пользователь может принадлежать к одной или нескольким группам. Принадлежность пользователя к группе устанавливает системный администратор, чтобы иметь возможность ограничивать доступ пользователей к тем или иным ресурсам системы.
- Пароль (password) — пароль пользователя в зашифрованном виде.
- Полное имя (full name) — помимо системного имени может присутствовать полное имя пользователя, например фамилия и имя.
- Домашний каталог (home directory) — каталог, в который попадает пользователь после входа в систему. Подобный каталог имеется у каждого пользователя, все пользовательские каталоги хранятся в директории /home.
- Начальная оболочка (login shell) — командная оболочка, которая будет запускаться при входе в систему. Например, /bin/bash.
Вся информация о пользователях хранится в следующих файлах:
passwd (etc/passwd) — содержит информацию о пользователях, имеет следующий формат записи — «user_name:password:UID:GID:full_name:home_directory:login_shell». Элементы записи должны разделяться символом — «:» (двоеточие) и записываются без пробелов. Если пароль хранится в зашифрованном виде в файле /etc/shadow, то вместо пароля указывается — «x».
group (etc/group) — информация о группах, формат — «group_name:password:GID:user1,user2,user3». Элементы записи должны разделяться символом — «:» (двоеточие) записываются без пробелов. Имена пользователей записываются через запятую.
У файлов /etc/passwd и /etc/group всегда определенные права доступа: чтение и запись для root, для остальных только чтение.
shadow (etc/shadow) — в этом файле хранятся так называемые «теневые пароли», информация о паролях пользователей в зашифрованном виде. Cделано это для безопасности, так как файл /etc/passwd может читаться кем угодно, а файл /etc/shadow может прочитать только root.
gshadow (etc/gshadow) — то же самое что и shadow, только для паролей групп.
Помимо основных, в системе присутствуют дополнительные файлы.
useradd (etc/default/useradd) — файл задающий свойства «по умолчанию» для всех добавляемых пользователей. Можно просмотреть командой — useradd -D.
login.defs (/etc/login.defs) — содержит настройки для создания новых пользователей.
/etc/skel — каталог с дефолтными файлами, которые копируются в домашний каталог каждого пользователя при его создании.
Команды управления
Для управления пользователями используются следующие команды:
useradd или adduser — добавить нового пользователя.
passwd — задать пароль для пользователя.
usermod — изменить параметры учетной записи пользователя.
userdel или deluser — удалить учетную запись пользователя.
Для управления группами используются следующие команды:
groupadd — добавляет новую группу.
gpasswd — устанавливает пароль группы.
groupmod — изменение параметров группы.
groupdel — удаление группы.
Обычное добавление пользователя
При создании нового пользователя автоматически указываются несколько параметров. В файле /etc/passwd, заводится запись с указанием имени пользователя, домашнего каталога, UID, GID. В каталог помещаются файлы инициализации командной оболочки. Все можно указать вручную, при помощи дополнительных опций. Список опций можно просмотреть командой useradd —help или useradd -h.
Для создания пользователя достаточно выполнить команду useradd и указать его имя.
Синтаксис команды: useradd options username
Теперь нужно задать пароль для созданного пользователя. Пароль задается командой passwd с указанием имени пользователя.
Можно задать пароль для пользователя сразу при создании, например так:
Проверим с какими параметрами был создан пользователь:
Подобным образом команда useradd работает в CentOS и других подобных ему системах, но в Debian или Ubuntu она просто создаст голого пользователя, а все остальное придется добавлять потом вручную.
Чтобы создать пользователя с подобными параметрами в Debian & Ubuntu команда useradd должна выглядеть следующим образом.
Поэтому в Ubuntu & Debian удобнее пользоваться утилитой adduser, при ее использовании нужно будет ответить на несколько вопросов, в процессе ее выполнения будут видны все шаги по созданию нового пользователя.
Проверим как создался пользователь.
Пользователь создался как и в CentOS, за исключением того, что там мы не указывали полного имени «Techlist. «, через запятые должны были быть указаны номера комнаты и телефонов, которые мы пропустили нажав на <Enter>.
Создание пользователя с домашней директорией, отличной от дефолтной директории
По умолчанию команда useradd создает домашний каталог пользователя в директории /home, имя домашнего каталога всегда совпадает с именем пользователя. Например при создании пользователя techlist, создается домашняя директория /home/techlist.
Допустим что возникла необходимость задать пользователю домашний каталог с размещением и именем отличающимися от стандартных настроек. При использовании опции -d можно задать свой каталог для пользователя.
Как можно видеть, пользователь techlist создался с домашним каталогом в /opt/tech.
Создание пользователя с определенным UID и GID
Каждому пользователю при его создании присваивается UID, присвоение идет по порядку: 1000, 1001 и т.д. При использовании опции -u пользователю можно задать определенный UID. Для примера создадим пользователя techlist c UID равным 777.
Пользователь создался с UID равным 777, но GID был задан дефолтный — 1001, для того чтобы это исправить можно поступить следующим образом.
Сначала создадим группу techlist c GID равным 777.
Обратите внимание, группа создана но пользователей в нет, теперь можно создать пользователя с UID=777 и указать его принадлежность к группе techlist с помощью опции -g и указания GID 777.
Создание пользователя с указанием принадлежности к нескольким группам
Если пользователь должен принадлежать сразу к нескольким группам, то указывается опция -G, после чего через запятую указываются группы к которым будет принадлежать пользователь.
Допустим что новый пользователь techlist должен принадлежать к следующим группам: group_1, group_2 и group_3.
Создание пользователя без домашнего каталога
Иногда пользователю не требуется домашний каталог, для этого используется опция -M.
Создание пользователя с истекающим сроком действия аккаунта
По умолчанию каждый пользователь не имеет срока действия аккаунта. Срок действия можно установить задав дату истечения аккаунта. Для этого следует использовать опцию -e после которой указывается дата истечения аккаунта в формате YYYY-MM-DD. Создадим пользователя techlist с истечением аккаунта в 2017-05-01, по достижении даты аккаунт будет недействителен.
Создание пользователя с истекающим сроком действия пароля
Чтобы установить срок истечения пароля пользователя, можно выполнить следующую команду.
Создание пользователя с указанием доп. информации
Иногда может возникнуть необходимость указать примечание для пользователя, в виде краткой заметки или указания имени и фамилии пользователя. Для этого можно воспользоваться опцией -c. Создадим пользователя vasek, с указанием имени и фамилии Vasya Pupkin.
Создание пользователя с указанием командной оболочки
Для того чтобы указать командную оболочку для пользователя используется опция -s
Приведенные выше опции необязательно указывать по одной, их можно комбинировать друг с другом, в зависимости от того, что нужно указать при заведении нового пользователя.
Изменение существующего пользователя
Иногда может потребоваться внести некоторые изменения в аккаунт пользователя. Сделать это можно при помощи команды usermod.
Синтаксис команды: usermod options username
Команда usermod имеет дополнительные опции, посмотреть список доступных опций можно командой usermod -h.
Рассматривать применение команды будем на примере пользователя techlist.
Пользователь был создан с дефолтными настройками.
Добавление доп. информации пользователю
Для начала добавим имя и фамилию пользователя, опцией -c.
Изменение домашнего каталога пользователя
По умолчанию домашним каталогом пользователя techlist является /home/techlist. Изменим его на каталог /opt/techlist, при помощи опции -d и опцией -m перенесем в новый каталог все содержимое старого.
Установка даты истечения срока аккаунта
Назначим дату истечения действия аккаунта, аккаунт будет действовать до 2017-05-01, дата задается опцией -e.
Изменение группы пользователя
Изменим группу пользователя techlist. Сначала посмотрим к каким группам он принадлежит.
Добавим пользователя techlist к группе group_1, используя опцию -g.
Как можно увидеть группа изменилась, если раньше была 1001(techlist), то теперь стала 1002(group_1).
Как добавить пользователя к новой группе без удаления из предыдущей? Для этого существует опция -G.
Теперь пользователь принадлежит одновременно к двум группам 1002(group_1) и 1003(group_2).
Добавление пользователя в дополнительные группы
Для добавления пользователя в одну из дополнительных групп, одновременно используются две опции -a и -G. В качестве дополнительной группы будет выступать группа wheel.
Теперь пользователь techlist относится к дополнительной группе wheel, что может наделить его привилегиями выполнять root-команды.
Изменение имени пользователя
Существующему пользователю можно изменить имя, изменим имя пользователя techlist на techlist_admin, делается это опцией -l.
Блокировка аккаунта пользователя
Для блокировки аккаунта пользователя достаточно выполнить команду с опцией -L.
Разблокировка аккаунта пользователя
Для того чтобы разблокировать аккаунт пользователя, достаточно выполнить команду с опцией -U.
Изменение командной оболочки пользователя
Чтобы изменить командную оболочку пользователя, надо выполнить следующую команду с опцией -s. Изменим пользовательскую оболочку для techlist_admin с /bin/bash/ на /bin/sh/.
Изменение UID и GID пользователя
Для изменения UID пользователя используется опция -u.
Для изменения GID пользователя используется опция -g.
Таким образом можно управлять пользователями и изменять их по своему усмотрению.
Удаление пользователей
Для удаления пользователей в Linux существуют две команды userdel и deluser, команда userdel используется в RedHat — подобных системах, а deluser в Debian и производных системах. Помимо deluser в Debian можно использовать и userdel.
userdel
синтаксис команды: userdel options username
Для того чтобы удалить пользователя, выполняем команду userdel. Команда userdel не удаляет пользователя если он работает в системе, сначала необходимо завершить все связанные с ним процессы. Для просмотра дополнительных опций команды userdel, используется ключ -h.
-f — позволяет удалить залогиненного т.е. работающего в системе пользователя. Рекомендуется использовать только в самых крайних случаях, данная опция может привести к краху системы.
deluser
синтаксис команды: deluser options username
Для просмотра справки используется команда deluser -h.
Настройки команды находятся в файле /etc/deluser.conf, здесь задается поведение утилиты при удалении пользователя.
Правильное удаление пользователя
Под правильным удалением пользователя нужно понимать определенную последовательность команд позволяющих удалить пользователя не оставив мусора и не обрушив систему.
Блокировка пользователя
Удаляемый пользователь не должен быть залогинен в системе и использовать какие либо файлы или программы.
Блокировку пользователя мы рассматривали выше.
Убить все пользовательские процессы
Если пользователь залогинен, то его нужно выкинуть из системы. Для этого найдем все процессы запущенные от его имени и завершим их.
Узнаем что это за процессы используя их pid.
Hичего серьезного нет, можно завершать все. Завершение всех процессов вышвырнет пользователя из системы, а заново войти он не сможет, ибо был заранее заблокирован.
Users, Groups and Permissions in Linux
So here I am, in my journey to mastery, documenting how I learnt to create users, groups and permissions in Linux in the form of a mini-tutorial.
We’ll be working with Ubuntu installed on a local virtual server — but most commands used will apply to any other Linux distribution. This article also assumes a basic knowledge of Linux commands.
The Linux operating system allows multi-user functionality. This means that multiple users can use the operating system concurrently and independently while sharing system resources.
In this mini-tutorial, we will create 3 groups and 15 users and assign these users across the 3 groups. We will also ensure that users in one group cannot access files in another group unless they are added to that group.
But first, let’s take a look at the different types of user accounts in Linux.
Types of user accounts
There are three basic types of Linux user accounts:
- Root user(administrative): This user account has full access to system-wide resources, in addition to the permission to create, modify and delete users and groups.
- Regular user accounts: These are user accounts with a login shell and home directory that perform tasks for personal use — usually common application tasks that are isolated to the user’s home directory.
- Service accounts: These are accounts assigned to applications but with limited access in order to protect the application from potential attacks while still performing essential functions. They usually will not have a home directory.
Create users
We will need admin privileges to create users — however, using the root user context is generally avoided, for security reasons.
First, create a regular user using the useradd command following this syntax:
TIP: To learn more about a Linux command, run man <command> , for example, man useradd to display a full description of the command.
And then, assign admin privileges to this user as follows:
Now, this admin user has superuser privileges and will not need to type in a password with the sudo command.
Let’s switch to the admin superuser using the following command:
And then create more users with the useradd command:
Do this for the number of users you need to create — 15 users in this case.
View users
All users in the system are stored in the /etc/passwd directory. To view all users, run the following command:
This should output something similar to the following:
Each entry has the following features:
- the username: user1
- the encrypted password: x
- the unique identifier (UID) for the user: 100x
- the user group ID (GID): 100x
- the General Electric Comprehensive Operating Supervisor (GECOS) field — which is empty in this case. (This field contains general information as a string of comma-delimited attributes, for example, full name; phone number; etc)
- the user home directory: /home/user1
- the default login shell for the user: /bin/sh
Delete users
To delete a user, run the command:
This removes all related user data, along with all the files in the user’s home directory -f, —force .
Add users to a group
To add the 15 users to groups, let’s create three different groups — a group for team leads leads , one for developers developers and another for the site reliability engineering team sre — and then add the users to the groups.
Use the groupadd command to create a group with the following syntax:
So for our case, we will create three different groups like so:
Next, add the already created users to each group assuming each user fits the group role, using the gpasswd command with the following syntax:
The gpasswd command allows you to manage the creation of groups and members of groups — the -A flag defines group administrators and the -M flag defines the members of the group as a comma-separated list (see the man pages for more details).
View groups
All groups in the system are stored in the /etc/groups directory. To view all groups, run the following command:
This should give an output similar to:
Next, let’s define the level of access allowed for each group.
Permissions and Ownership
The reason Linux so elegantly supports a multi-user system is as a result of permissions. Permissions grant users the right to access files and directories within the system. In Linux, the basic permissions are:
- Read : the right to open and view the contents of files and directories. Represented by r
- Write: the right to modify the content of a file and to add, remove and rename files within a directory. Represented by w
- Execute: the right to run a script or application. Represented by x
Let’s demonstrate the significance of file permissions; create 3 separate files using the following command:
Run the following command to view the files and the current permissions on each file:
The output of this command should be similar to this:
The parts of the above output relevant to the level of access are the following:
- The first ten characters -rw-r—r— symbolize the file access permissions:
- the first character refers to the file type, where — means a regular file. Other notations are d for a directory, l for a symbolic link, and so on.
- the other nine characters define access permissions to the file type — the first three characters rw- are user permissions, the next three r— are group permissions while the last three r— are permissions for all other users.
- root: the user that owns (created) the file
- root : the group that owns the file
With the above information in mind, we will assign a specific group to its related file.
Assign Group Ownership
We want each file to belong to its own group. To do this, let’s assign group ownership using the chgrp (short for change group) command. The syntax for this command is:
So, for our example, we’ll run the following commands:
Now, when we run the ls -l command, we should get the following output:
Each file now belongs to its respective group. This means that only members of the group that owns the file can have whatever permissions specified; that is, read permission (as demonstrated by the middle three characters r— ). However, all other users outside of the group also have read permissions (as demonstrated by the last three characters r— ).
So, considering we want to restrict file access to only members belonging to the file group, let’s change that.
Modifying permissions
To set or change permissions, use the chmod (short for change mode) command (see the man pages for more details).
When using this command, we specify the following:
- Whom to change permissions for: u for the user(owner), g for thegroup and o for all other users.
- How to change permission: + (plus sign) to add permissions, — (minus sign) to remove permissions or = (equal sign) to leave as is.
- What permission to change: r for read, w for write, x for execute.
Using the information above, let’s take away the read permission for users outside the group and add write and execute permissions to the group as follows:
Run the ls -l command to view the modified permissions. The output should be:
To demonstrate that files belonging to one group cannot be accessed by another group, login as a different user; for example, user5 (who belongs to the developers group), using the following command:
Now, let’s attempt to read a file that does not belong to the developers group. Run the following command to view the leads.txt file:
You should get a warning that says:
This is expected because user5 does not have the permission to read the contents of the leads.txt file since the file belongs to the leads group, and not the developers group.
Conclusion
The information shared in this mini-tutorial is by no means exhaustive of the topic of managing users, groups and permissions in Linux. But this should get any beginner, such as myself, up and running with working in Linux.
PS: I decided to have some fun while learning bash scripting, and wrote scripts create_users.sh and delete_users.sh to automate creating and deleting the users described above. See them here.
— — — — — — — — — Thank you for reading! — — — — — — — — —
Пользователи и группы. Управление пользователями
В операционной системе Linux существуют три типа пользователей:
- — пользователь root
- — системные (фиктивные) пользователи
- — обычные пользователи
Информация о пользователях хранится в файлах:
Файл | Описание |
/etc/passwd | пользователи |
/etc/group | группы пользователей |
/etc/shadow | зашифрованные пароли пользователей |
/etc/gshadow | зашифрованные пароли групп |
Дополнительная информация располагается в файлах:
Файл | Описание |
/etc/default/useradd | свойства по умолчанию для новых пользователей |
/etc/login.defs | настройки новых пользователей |
/etc/skel/ | каталог, файлы из которого копируются в домашний каталог нового пользователя |
Файл /etc/passwd имеет следующий текстовый формат:
Все элементы записи разделяются символом : (двоеточие) и пишутся без пробелов. В случае, если пароль хранится в зашифрованном виде в файле /etc/shadow , то вместо пароля указывается символ x (икс).
Файл /etc/group имеет следующий текстовый формат:
Все элементы записи разделяются символом : (двоеточие) и пишутся без пробелов. Список пользователей группы разделяется символом , (запятая).
К файлам /etc/passwd и /etc/group должны быть заданы права доступа: чтение и запись для пользователя root и только чтение — для всех остальных (644).
Управление пользователями и группами
Для управления пользователями служат команды.
Команда | Описание |
useradd | добавить нового пользователя |
passwd | установить пароль пользователя |
usermod | измененить параметры учетной записи пользователя |
userdel | удалить учетную запись пользователя |
Для управления группами служат команды.
Команда | Описание |
groupadd | создать новую группу |
gpasswd | установить пароль группы |
groupmod | измененить параметры группы |
groupdel | удалить группу |
Управление правами доступа к файлам и каталогам
Каждому файлу на диске соответствует один индексный дескриптор файла, где содержится служебная информация о файле. Первые два байта дискриптора файла служат для хранения информации о типе и правах доступа к файлу. Слово данных (два байта) можно отобразить в виде последовательности шестнадцати бит:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
тип файла | SUID | SGID | T-бит | права владельца | права группы | права всех остальных |
Первые четыре бита отвечают за тип файла:
Двоичный код | Десятичный код | Тип файла |
1010 | 10 | сокет |
1100 | 12 | символическая ссылка |
1000 | 8 | обычный файл |
0110 | 6 | блочное устройство |
0100 | 4 | каталог |
0010 | 2 | символьное устройство |
0001 | 1 | именованный канал |
Далее следуют три бита, значение которых будет рассмотрено в следующем пункте.
Затем следуют три группы по три бита каждая. Первые три бита управляют правами доступа к файлу владельца этого файла, следующие три бита задают права группы, к которой принадлежит файл и, наконец, последние три бита — права всех остальных.
Первый бит задает право на чтение файла, второй бит право на запись в файл и третий бит право на выполнение файла. Из трех бит всего возможны восемь комбинаций, определяющих права доступа к файлу:
Двоичный код | Восьмеричный код | Права доступа к файлу |
100 | 4 | чтение (r) |
010 | 2 | запись (w) |
001 | 1 | выполнение (x) |
110 | 6 | чтение и запись (rw) |
101 | 5 | чтение и выполнение (rx) |
011 | 3 | запись и выполнение (wx) |
111 | 7 | чтение, запись и выполнение (rwx) |
000 | 0 | нет доступа |
Для управления правами доступа к файлам служит команда:
chmod [uga] [+-=] [rwx] имя_файла
Например, для того, чтобы позволить владельцу файла и группе читать и редактировать файл test.txt необходимо выполнить команду:
chmod ug=rw test.txt
Эта же команда может быть записана с использованием восьмеричных значений прав доступа:
chmod 660 test.txt
Для изменения владельца и группы, к которым принадлежит файл служат команды.
Команда | Описание |
chown владелец имя_файла | изменить владельца файла |
chgrp группа имя_файла | изменить группу, к которой принадлежит файл |
Выполнение команд от имени другого пользователя
Биты 11, 10, 9 в первом слове дескриптора файла определяют дополнительные свойства файла.
Бит 9 указывается для каталогов и показывает возможность удаления файлов в этом каталоге только владельцем файлов. Например, для защиты от удаления файлов из каталога test всеми остальными установить этот T-бит (бит защищенности) в значение 1 с помощью команды:
Бит 11 (бит SUID) позволяет любому пользователю выполнять исполняемый файл с правами владельца этого файла.
Бит 10 (бит SGID) позволяет любому пользователю выполнять исполняемый файл с правами группы этого файла.
Например, может быть задана возможность исполнения скрипта script.sh кем угодно с правами владельца и группы с помощью команды:
chmod ug+s script.sh
И, наоборот, для отмены такой возможности:
chmod ug-s script.sh
Для поиска файлов с установленными битами SUID и SGID можно выполнить команду:
find / -type f -perm /6000
Для каждого найденного файла можно выполнить команду. Например, для отображения информации о файлах с установленными битами SUID и SGID командой ls -ld необходимо выполнить команду:
find / -type f -perm /6000 \-exec ls -ld <> \;
Для выполнения некоторых команд от имени суперпользователя служит команда sudo . Для получения такой возможности непривелигерованный пользователь должен иметь запись в файле /etc/sudoers . Редактирование этого файла лучше осуществлять командой visudo , которая запустит текстовый редактор vim , заблокирует на время файл /etc/sudoers и проверит введенные данные.
Например, для разрешения пользователю master выполнять команды /bin/mount и /bin/umount в файле /etc/sudoers необходимо добавить строки:
Чтобы дать пользователю master права суперпользователя необходимо записать в файл /etc/sudoers :
Для получения возможности выполнять команды без ввода пароля:
Управление пользователями
Любая работа в Linux выполняется от имени какого-то пользователя, зарегистрированного и авторизованного в системе.
В Linux существуют три типа пользователей:
- Администраторы — привилегированные пользователи с полным доступом к системе. По умолчанию на Linux-сервере после установки операционной системы всегда есть один такой пользователь — root .
- Локальные пользователи — непривилегированные пользователи. Их учётные записи создаёт администратор. Особенность таких аккаунтов в ограниченном доступе к серверу — они не могут пользоваться некоторыми системными утилитами, могут работать только с теми файлами и папками, к которым им открыт доступ. Тем не менее, можно повысить привилегии локального пользователя — ниже расскажем как.
- Системные пользователи — учётные записи, автоматически создаваемые системой для работы внутренних процессов и служб. Например, после установки веб-сервера Apache, который входит в состав стека LAMP, на сервере появляется пользователь www-data (на CentOS apache ), от имени которого потом работает веб-сервер. Такие пользователи нужны для повышения безопасности.
Каждый пользователь имеет свой уникальный идентификатор пользователя, UID . Он отличается в зависимости от типа пользователя:
- администратор — 0
- обычный пользователь — от 100
- системный пользователь — от 1 до 100
Чтобы упростить процесс настройки прав для новых пользователей, их объединяют в группы. Каждая группа имеет свой набор прав и ограничений. Любой пользователь, создаваемый или добавляемый в такую группу, автоматически их наследует. Если при добавлении пользователя для него не указать группу, то у него будет своя, индивидуальная группа — с именем пользователя. Один пользователь может одновременно входить в несколько групп.
Информацию о каждом пользователе сервера можно посмотреть в файле /etc/passwd . Пользователи в нём перечислены в следующем формате:
говорит о том, что пароль зашифрован (хранится в /etc/shadow )
идентификатор пользователя ( UID ) и идентификатор группы ( GID ), к которой он принадлежит
тут может быть ваша реклама комментарий к пользователю и его контакты. Например, имя сотрудника или название службы. Т.н. GECOS -поле
домашняя папка пользователя
указывает, что пользователь имеет доступ к командной оболочке сервера
Если вам известно имя пользователя и вы хотите узнать о нём побольше, необязательно читать /etc/passwd . Всё то же самое в человекочитаемом виде можно посмотреть с помощью команды pinky -l :
Эта же команда без аргументов покажет вам всех авторизованных в текущий момент пользователей сервера, включая информацию о времени и источнике входа:
В качестве альтернативы можно использовать команду w — она тоже показывает всех авторизованных в текущий момент пользователей, включая создаваемую ими нагрузку на сервер:
Узнать UID пользователя можно с помощью команды id :
Для именования пользователей в Linux есть набор стандартных правил:
- Имя пользователя может содержать только английские буквы [a-z] в верхнем и нижнем регистре, цифры, символ «_» , тире «-» и точку;
- Имя пользователя может оканчиваться символом «$» ;
- Имя пользователя не может начинаться с тире, содержать только цифры или состоять из «.» или «..» ;
- Не рекомендуется использовать точку в начале имени пользователя;
- Имя пользователя может включать до 32 символов.
Теперь перейдём непосредственно к управлению пользователями.
Создание пользователей
Процесс добавления пользователя состоит из двух шагов: создания пользователя и настройки пароля.
На первом шаге используется команда useradd c набором опций для настройки нового пользователя и его именем (логином):
Эта команда имеет ряд настроек по умолчанию, которые задаются с помощью файлов /etc/default/useradd и /etc/login.defs Увидеть основные можно с помощью команды:
GID группы, в которую пользователь будет добавлен после создания
базовый каталог, в котором будет размещена директория пользователя
указывает время до блокировки пользователя, когда его пароль станет недействителен. Значение «-1» отключает опцию
дата, до которой действителен аккаунт. По умолчанию не установлена — то есть без ограничений
используется для настройки доступа к командной оболочке
содержит путь к директории, в которой хранятся файлы по умолчанию. После создания пользователя они будут автоматически скопированы в его домашнюю папку
определяет, нужно ли создать папку для писем этого пользователя в /var/spool/mail/
Все эти настройки применяются, если использовать самый простой вариант команды создания пользователя без параметров:
Но обычно нам требуется добавить пользователя со специфическими настройками — для этого используется расширенный вариант этой команды. Перечислим основные опции:
создаёт указанную домашнюю директорию, если она ещё не существует
устанавливает /home/test-user в качестве домашней директории
-c «Евграф Шматкунос»
добавляет комментарий. Например, с именем пользователя
указывает группу, в которую попадёт пользователь после создания. Можно использовать с GID или именем группы. Указанная группа должна существовать. Используется в сочетании с ключом -N (отменяет автоматическое создание группы с именем пользователя)
указывает список дополнительных групп пользователя. Они перечисляются через запятую без пробелов
позволяет настроить доступ к shell
создаёт системного пользователя. Используется, когда вам нужно настроить службу на работу из-под конкретного пользователя. По умолчанию данные таких пользователей не вносятся в /etc/shadow , для них не создаётся домашняя папка
позволяет указать свой UID , который будет присвоен новому пользователю. В качестве UID указывается положительное целое число. UID должен быть уникален
указывает дату, до которой аккаунт будет активен. Дата задаётся в формате YYYY-MM-DD
указывает количество дней до блокировки пользователя, когда его пароль станет недействителен
В итоге получится вот такая сборная солянка из настроек:
В примере мы создаём тестового пользователя test-user с идентификатором 666 , домашней папкой в /home/users/test-user , комментарием «Тестовый пользователь» и доступом к командной оболочке. Учётная запись будет действительна до конца света по Ньютону.
Более подробную информацию о доступных опциях для useradd можно увидеть с помощью команды man useradd .
Очень важно после создания пользователя настроить для него надёжный пароль. Для этого нужно ввести следующую команду:
Система предложит ввести и подтвердить пароль. На этом процесс создания пользователя можно считать завершённым.
Изменение данных пользователей
Смена настроек для активного пользователя может привести к сбою системы. Поэтому перед изменением данных важно убедиться, что в текущий момент редактируемый пользователь не авторизован, под ним отсутствуют запущенные процессы, редактируемые файлы. Посмотреть список запущенных процессов пользователя user можно следующим образом:
Проверить, авторизован ли пользователь, можно с помощью уже известной команды:
Отредактировать данные существующего пользователя можно с помощью команды usermod . По структуре она похожа на предыдущую команду:
Набор параметров расширен дополнительными опциями:
создаёт новую директорию, указанную в качестве домашней (если её не существует), и переносит туда данные из старой
меняет домашнюю директорию пользователя на /home/users/new-test-user
меняет комментарий к пользователю
добавляет пользователя в дополнительные группы
меняет командную оболочку пользователя
изменяет UID пользователя
меняет дату, до которой аккаунт будет активен
меняет количество дней до блокировки пользователя, когда его пароль станет недействителен
меняет имя пользователя на new-test-user
блокирует аккаунт пользователя. Для этого в файле /etc/shadow перед хэшем пароля пользователя ставится символ «!»
снимает блокировку с аккаунта (удаляет символ «!» из пароля в /etc/shadow )
То есть если мы захотим отредактировать данные пользователя test-user , созданного в примере выше, это будет выглядеть так:
В примере мы меняем логин — имя пользователя на new-test-user , изменяем домашнюю папку на /home/new-test-user с копированием файлов, меняем комментарий, UID пользователя, срок жизни аккаунта и отменяем блокировку в случае устаревания пароля.
При изменении данных пользователя система предпримет попытку автоматически указать новые данные для всех файлов и папок пользователя. Тем не менее, после редактирования нужно всё перепроверить и исправить права доступа, где они не изменились автоматически.
Удаление пользователей
Как и в случае с редактированием, перед удалением пользователя нужно убедиться, что под ним отсутствуют активные процессы, не редактируются файлы. Иначе существует риск сбоя системы. В программу встроен механизм защиты, поэтому она не позволит удалить пользователя, если он авторизован или под ним работают какие-то службы.
Для удаления пользователей используется команда userdel . Её структура аналогична предыдущим:
Основных параметра два:
удаляет папки пользователя: домашнюю директорию, почтовую очередь
отключает механизм защиты. При использовании этой опции пользователь будет удалён даже при наличии запущенных процессов и пр. Используется на свой страх и риск, так как может привести к сбою системы
После удаления пользователей важно вручную проверить, что на сервере не осталось файлов или директорий, принадлежащих удалённому пользователю.
Группы пользователей
Информация о группах хранится в файле /etc/group . Работа с группами пользователей куда проще.
Группы применяются для делегирования прав доступа на определённые файлы, папки, скрипты сразу нескольким пользователям. Живой пример: работа с FTP-сервером. Вы выбираете какую-то директорию для работы с файлами, создаёте группу пользователей и присваиваете ей выбранную папку. Теперь вам не нужно отдельно настраивать права каждому новому пользователю — достаточно добавить его в эту группу, и он автоматически получит доступ к FTP-каталогу.
Создание
Для создания групп используется команда groupadd :
Из параметров можно выделить следующие:
если группа с указанным именем или GID уже существует, опция прерывает выполнение команды без соответствующей ошибки
позволяет назначить свой GID для создаваемой группы
создаёт системную группу
Устанавливает для группы пароль p@ssw0rd . Пароль запрашивается системой при попытке входа в группу с помощью команды newgrp .
Не рекомендуется к использованию из-за проблем с безопасностью. Настроенный таким образом пароль можно увидеть в истории команд.
Редактирование
Для редактирования групп используется команда groupmod . Список изменений задаётся с помощью параметров:
меняет GID группы на 100500
меняет имя группы на another-name
Например, если нам нужно изменить имя группы test-group на имя named-group , команда будет выглядеть так:
Удаление
Нельзя удалить группу, если она указана в качестве основной для какого-то существующего пользователя. Сначала нужно предварительно удалить этого пользователя из группы.
Само удаление группы выполняется одной командой:
Как и в случае удаления пользователей, нужно вручную проверить, что на сервере не осталось данных, принадлежащих удалённой группе.
Управление пользователями в группе
Базовым инструментом для управления группами является утилита gpasswd . Она имеет несколько параметров, но с одной особенностью — в отличие от предыдущих примеров, здесь большинство параметров (кроме -A и -M ) не сочетаются. То есть в команде может быть только один параметр за раз.
Структура команды проста:
Рассмотрим опции команды подробнее:
Добавляет пользователя new-user в группу
Удаляет пользователя bad-user из группы
Доступна для использования привилегированным пользователям (с правами root). Назначает список пользователей-администраторов группы
Доступна для использования привилегированным пользователям. Назначает список участников группы
Отключает пароль группы. После этого только члены группы смогут использовать команду newgrp для подключения к группе
Отключает внешний доступ к группе. После этого только члены группы смогут использовать команду newgrp для подключения к группе
То есть если нам потребуется добавить пользователя в новую группу, достаточно будет использовать следующую команду:
Также для добавления пользователей в новую группу используется описанная выше команда usermod . Следующий пример добавляет пользователя test-user в группу new-group :
Или, если нужно указать группу new-group в качестве основной группы пользователя test-user :
Помимо этого, любой пользователь может сам авторизоваться и добавиться в новую группу с помощью команды:
Эта команда позволяет переключить группу пользователя в рамках текущей сессии, а также автоматически добавляет запрошенную группу в список групп пользователя.
Привилегии суперпользователя. Sudo
Итак, мы знаем, что на сервере есть три типа пользователей: администраторы (корневой пользователь root ), локальные пользователи (люди, которым мы предоставляем учётные записи для работы с сервером) и системные пользователи (сущности, от имени которых запускаются те или иные процессы). То есть реально для управления системой используются только первые два типа пользователей. Их основное различие — в объёме прав доступа.
По умолчанию после установки операционной системы на сервере присутствует только один пользователь — администратор root . Он имеет полные права доступа ко всем процессам и данным сервера.
Если создать локального пользователя, по умолчанию он будет иметь доступ только к тем файлам и каталогам, которые принадлежат ему либо группе пользователей, в которую он входит. Помимо прочего, при работе в командной оболочке ему будет закрыт доступ к ряду системных инструментов, необходимых для расширенной настройки или диагностики сервера. При попытке выполнить их под непривилегированным пользователем вы будете видеть ошибки, намекающие, что для работы с этими инструментами требуются права повыше:
Тем не менее, основная часть работы с конечными данными на сервере происходит именно под локальным пользователем — например, загрузка и изменение файлов сайтов. Если вы загрузите на сервер файл под root -ом, файл будет принадлежать ему, а не пользователю, в папку которого загружен. Соответственно, потом это может привести к ошибкам, если вручную не изменить владельца загруженного файла.
Когда вы полностью настроите ваш сервер, работа под root -ом вообще может стать опасной. Случайная ошибка в команде на удаление папки может запросто скосить все ваши труды по разворачиванию системы. Да и в целом сам факт наличия пользователя root на сервере при неправильном подходе к безопасности может стать фатальным — если злоумышленник получит к нему доступ, он получит неограниченный контроль над всем содержимым сервера.
С учётом всего этого при администрировании оптимальной считается следующая практика: пользователь root как он есть отключается, а его привилегии делегируются узкому кругу локальных пользователей. Это даёт сразу несколько преимуществ:
- повышается уровень внешней безопасности (отсутствие root отсекает часть автоматических попыток взлома);
- ограничивается объём административных прав — повышение привилегий используется для конкретных рабочих операций и действует ограниченное время.
Для делегирования прав суперпользователя локальные пользователи добавляются в специальную группу. Способ настройки отличается в зависимости от используемой операционной системы:
Ubuntu и Debian:
Для предоставления прав пользователи добавляются в группу sudo :
CentOS:
Для предоставления прав пользователи добавляются в группу wheel :
Можно делегировать права пользователям по отдельности — через файл /etc/sudoers Для работы с ним нужно вызвать специальный редактор:
В этом файле можно тонко настроить объём делегируемых прав — вплоть до списка команд, которые пользователям разрешено вызывать от имени администратора.
Проверить, может ли пользователь использовать sudo , можно с помощью команды:
В примере пользователь test-user может выполнять через sudo любые команды ( ALL:ALL — символизирует, что команды могут исполняться от имени любых пользователей и групп, третий аргумент символизирует список доступных команд — в примере ALL , не ограничен)
Чтобы выполнить ту или иную команду с правами суперпользователя, перед ней вызывается команда sudo :
Для подтверждения система запросит ввести пароль текущего пользователя (символы при вводе пароля не отображаются — введите пароль «вслепую» или скопируйте и вставьте кликом правой кнопки мыши). После ввода команда будет отправлена на исполнение. Также в течение пяти следующих минут (по умолчанию) вы сможете запускать команды от имени суперпользователя без использования sudo и повторного ввода пароля.
Количество времени, которое действуют права суперпользователя после вызова sudo , можно изменить через настройки в /etc/sudoers . Запрос пароля можно отключить там же.
Если вам нужно выполнить сразу несколько операций с повышенными привилегиями, можно временно войти в режим суперпользователя:
С управлением пользователями разобрались, идём дальше. Как было сказано выше, чтобы локальный пользователь мог начать работу на сервере, администратор ( root или пользователь c привилегиями sudo ) должен настроить права доступа к файлам и папкам, которые понадобятся этому пользователю. Рассмотрим этот вопрос подробнее.