Тема пользователей и их прав в системе в первую очередь относится к функционированию самой операционной системы. Оболочка лишь предоставляет утилиты, позволяющие анализировать доступы и изменять их.
Взаимодействие с операционной системой всегда ведётся от какого-то конкретного пользователя, созданного в системе. Команда whoami
позволяет выяснить имя пользователя:
whoami
kirill.m
Абсолютно любой процесс, запускаемый в операционной системе, стартует от имени некоторого пользователя. Соответственно, его возможности по влиянию на файловую систему ограничены правами пользователя, от имени которого процесс запущен. Обратите внимание, что мы говорим не «пользователь запустил процесс», а «процесс запускается от имени пользователя». Дело в том, что присутствие пользователя для запуска необязательно. Да, работая в командной строке мы запускаем всё сами, но когда система загружается, то она запускает множество различных процессов и, как мы увидим ниже, для многих из них создаются собственные пользователи с ограниченным набором прав.
Команда ps
(process status) выводит отчет о работающих процессах. Информацию о том, какой процесс и под каким пользователем запущен, можно получить из вывода ps aux
:
ps aux
# Левый столбец имя пользователя
root 7717 0.0 0.0 4244 1504 ? S 10:52 0:00 mpstat 1 3
kirill.m 7718 0.0 0.1 36084 3236 pts/0 R+ 10:52 0:00 ps aux
alexand+ 10542 0.0 0.1 21500 2892 pts/1 Ss+ 10:10 0:00 -bash
root 11113 0.0 0.1 92796 2596 ? Ss 08:50 0:00 sshd: kirill.m [priv]
kirill.m 11116 0.0 0.0 45276 1408 ? Ss 08:50 0:00 /lib/systemd/systemd --user
kirill.m 11119 0.0 0.0 61148 1860 ? S 08:50 0:00 (sd-pam)
kirill.m 11194 0.0 0.0 92796 1800 ? S 08:50 0:00 sshd: kirill.m@pts/0
kirill.m 11195 0.0 0.2 21388 4448 pts/0 Ss 08:50 0:00 -bash
root 12195 0.0 0.0 0 0 ? S 10:13 0:00 [kworker/u30:1]
root 12880 0.0 0.1 92796 2748 ? Ss 08:55 0:00 sshd: alexander.v [priv]
alexand+ 12883 0.0 0.0 45276 1924 ? Ss 08:55 0:00 /lib/systemd/systemd --user
alexand+ 12884 0.0 0.0 61148 1860 ? S 08:55 0:00 (sd-pam)
alexand+ 12920 0.0 0.1 92796 2420 ? S 08:55 0:00 sshd: alexander.v@pts/1,pts/2
Взаимодействие с файловой системой происходит через запуск тех или иных утилит, модифицирующих, создающих или анализирующих файловую структуру. Это значит, что запуская, например, touch
, мы от своего имени стартуем процесс, внутри которого запускается программа touch
. Она, в свою очередь, создаёт файл (если его не было) и делает вас владельцем нового файла. Кстати, модификация существующих файлов не влияет на владельца — для его смены нужно воспользоваться специальной утилитой. В домашней директории пользователя всё принадлежит пользователю (хотя, если постараться, то можно навертеть как угодно):
ls -la
total 44
drwxr-xr-x 5 kirill.m kirill.m 4096 Aug 29 11:34 .
drwxr-xr-x 8 root root 4096 Apr 26 10:38 ..
-rw------- 1 kirill.m kirill.m 2540 Aug 30 07:26 .bash_history
-rw-r--r-- 1 kirill.m kirill.m 220 Aug 31 2015 .bash_logout
-rw-r--r-- 1 kirill.m kirill.m 3771 Aug 31 2015 .bashrc
drwx------ 2 kirill.m kirill.m 4096 Mar 30 18:10 .cache
-rw------- 1 kirill.m kirill.m 55 Aug 28 18:49 .lesshst
drwxrwxr-x 2 kirill.m kirill.m 4096 Aug 29 08:35 .nano
-rw-r--r-- 1 kirill.m kirill.m 655 May 16 2017 .profile
-rw-rw-r-- 1 kirill.m kirill.m 0 Aug 29 11:27 renamed-file
drwx------ 2 kirill.m kirill.m 4096 Jan 22 2018 .ssh
-rw------- 1 kirill.m kirill.m 513 Aug 29 08:06 .viminfo
Третий столбец в этом выводе — как раз владелец. Единственная запись, которая выбивается из всего списка это ..
, то есть родительская директория. Её владельцем является root
, о котором мы позже поговорим. Если хорошо подумать, то это логично — ведь директория /home
не является собственностью пользователей системы:
ls -la /home/
total 32
drwxr-xr-x 8 root root 4096 Apr 26 10:38 .
drwxr-xr-x 23 root root 4096 Aug 27 06:53 ..
drwxr-xr-x 5 alexander.v alexander.v 4096 Jan 22 2018 alexander.v
drwxr-xr-x 5 kirill.m kirill.m 4096 Aug 29 11:34 kirill.m
drwxr-xr-x 4 rakhim rakhim 4096 Apr 26 10:05 rakhim
drwxr-xr-x 4 rakhim.d rakhim.d 4096 Apr 26 10:41 rakhim.d
Каждый каталог в директории /home
является домашним каталогом конкретного пользователя. Поэтому они все имеют разных владельцев, как правило, совпадающих с именем директории.
Имя пользователя в системе должно быть уникальным, но его можно менять. Если посмотреть под капот работы этой системы, то мы увидим, что имя пользователя связано с идентификатором, называемым UID. Это число, которое и определяет пользователя. Если поменяется имя пользователя, но идентификатор останется прежним, то все доступы останутся. Если же сменится идентификатор, то фактически сменится и пользователь. Соответственно, новый пользователь потеряет доступы ко всему старому. Посмотреть свой идентификатор можно разными способами. Первый способ — с помощью команды id
:
id
uid=1002(kirill.m) gid=1002(kirill.m) groups=1002(kirill.m),999(docker)
Второй способ связан с просмотром одного важного файла, который является основным хранилищем пользователей в *nix-системах. Да, это обычный текстовый файл, как и всё остальное.
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
kirill.m:x:1002:1002::/home/kirill.m:/bin/bash
Кроме имени и идентификатора, здесь также указана домашняя директория пользователя (и её можно поменять), а также шелл по умолчанию. Запись /usr/sbin/nologin
говорит о том, что данный пользователь не может входить в систему. Такие пользователи нужны для запуска программ, имеющих ограниченные права, и им, естественно, не нужно входить в систему.
Кроме имени, у пользователей *nix-систем есть связанное с ним понятие группа. Группа, как можно догадаться из названия, создана для группового доступа к разделяемому (общему) ресурсу (например, файлу). Например, у нас есть группа разработчиков, которые регулярно ходят на сервер, и им нужно дать одинаковые возможности по управлению определёнными файлами. Так как владелец у файла ровно один, то мы не можем решить этот вопрос через смену владельца, но можем через создание группы. Достаточно её создать и привязать к самому пользователю. Группы, ассоциированные с текущим пользователем, показываются в выводе команды id
:
id
uid=1002(kirill.m) gid=1002(kirill.m) groups=1002(kirill.m),999(docker)
Здесь группа kirill.m
является основной, такая группа может быть только одна, и именно в эту группу входят любые создаваемые файлы от имени текущего пользователя. Кроме основной, пользователь может входить в произвольное число дополнительных групп. То, как это влияет на доступы, мы рассмотрим в одном из следующих уроков.
В любой *nix-системе присутствует специальный пользователь root
, или, как говорят, суперпользователь. Главная его особенность — это идентификатор со значением 0 (а имя в теории можно поменять). Этот пользователь имеет особое значение для системы и может выполнять абсолютно любые действия в системе. У пользователя root
в файле /etc/passwd
будет вот такая запись:
Крайне не рекомендуется использовать этого пользователя на регулярной основе. И ни в коем случае нельзя входить под ним в систему. root — это прямой доступ ко всему и большая дыра в безопасности системы. Кроме того, систему очень легко убить, например, удалив случайно не тот файл или испортив важную конфигурацию, после чего вход в систему станет невозможным.
Несмотря на это, root
нужен для выполнения некоторых привилегированных действий, которые недоступны обычным пользователям. Об этом мы поговорим в следующем уроке.
Вам ответят команда поддержки Хекслета или другие студенты.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт