Пользователи и права
Users / Permissions — раздел Linux об учётных записях, группах, правах доступа к файлам, повышении привилегий и ACL.
Linux — многопользовательская система. У каждого пользователя есть имя и числовой идентификатор UID, у каждой группы — имя и GID. Процессы выполняются от имени пользователя и групп, а ядро проверяет их права при обращении к объектам.
Проверить текущего пользователя, UID и группы:
whoami
id
id alice
groups aliceroot — суперпользователь с UID 0. Системные пользователи обычно создаются для служб, обычные — для интерактивной работы.
Пользователи и группы
useradd: создание пользователя
Создать пользователя с домашним каталогом и Bash:
sudo useradd -m -s /bin/bash alice
sudo passwd aliceНа некоторых системах useradd alice не создаёт домашний каталог. Команда adduser, если она доступна, обычно предоставляет интерактивную оболочку над системными средствами.
Основные параметры:
| Параметр | Назначение |
|---|---|
-m |
Создать домашний каталог |
-d PATH |
Указать домашний каталог |
-s SHELL |
Назначить оболочку |
-u UID |
Задать UID |
-g GROUP |
Указать основную группу |
-G G1,G2 |
Указать дополнительные группы |
-c TEXT |
Добавить комментарий, например полное имя |
-e DATE |
Указать дату окончания действия учётной записи |
-r |
Создать системного пользователя |
Пример:
sudo useradd -m -c "Alice Smith" -s /bin/bash \
-G developers,docker aliceПараметры по умолчанию зависят от дистрибутива:
useradd -D
cat /etc/default/useradd
cat /etc/login.defsusermod: изменение пользователя
Изменить оболочку:
sudo usermod -s /bin/zsh aliceДобавить пользователя в дополнительную группу:
sudo usermod -aG developers aliceКомбинация -aG важна: -a добавляет группу, сохраняя текущее членство. Без -a параметр -G заменяет весь список дополнительных групп:
# Осторожно: остальные дополнительные группы будут удалены
sudo usermod -G developers aliceПереименовать пользователя и затем перенести домашний каталог:
sudo usermod -l newname oldname
sudo usermod -d /home/newname -m newnameЗаблокировать и разблокировать пароль:
sudo usermod -L alice
sudo usermod -U aliceБлокировка пароля не завершает уже открытые сеансы и может не запрещать другие способы входа, например по SSH-ключу.
groupadd: создание группы
sudo groupadd developers
sudo groupadd -g 1500 auditorsДобавить или удалить пользователя из дополнительной группы:
sudo usermod -aG developers alice
sudo gpasswd -a alice developers
sudo gpasswd -d alice developersУ пользователя есть одна основная группа и дополнительные группы. Основной GID хранится в /etc/passwd, дополнительное членство — обычно в /etc/group.
После изменения групп нужно заново войти в систему. Уже запущенный сеанс может сохранить старый список групп. Временную оболочку с другой основной группой запускает:
newgrp developers/etc/passwd, /etc/shadow, /etc/group
Локальные учётные записи описываются системными файлами. При использовании LDAP и других внешних каталогов надёжнее обращаться через getent, поскольку он учитывает настройки NSS:
getent passwd alice
getent group developers/etc/passwd
Пример строки:
alice:x:1001:1001:Alice Smith:/home/alice:/bin/bash| Поле | Значение |
|---|---|
alice |
Имя пользователя |
x |
Хеш пароля вынесен в /etc/shadow |
1001 |
UID |
1001 |
GID основной группы |
Alice Smith |
Комментарий GECOS |
/home/alice |
Домашний каталог |
/bin/bash |
Оболочка |
Системным пользователям часто назначают /usr/sbin/nologin или /bin/false, чтобы запретить обычный интерактивный вход.
Не рекомендуется редактировать файл напрямую. Для безопасного ручного редактирования применяется:
sudo vipw/etc/shadow
Файл содержит хеши паролей и параметры срока их действия. Обычно он доступен только root и уполномоченным процессам.
alice:$y$j9T$...:20000:0:99999:7:::Поля после имени содержат хеш, дату последней смены, минимальный и максимальный срок, период предупреждения, неактивность и дату окончания учётной записи. ! или * в поле хеша обычно блокирует вход по паролю.
Проверить и настроить срок действия:
sudo chage -l alice
sudo chage -M 90 -W 14 alice
sudo chage -E 2027-12-31 aliceБезопасное ручное редактирование:
sudo vipw -sСодержимое /etc/shadow нельзя публиковать: хеши могут использоваться для офлайн-подбора паролей.
/etc/group
developers:x:1002:alice,bob| Поле | Значение |
|---|---|
developers |
Имя группы |
x |
Поле пароля группы обычно не используется |
1002 |
GID |
alice,bob |
Дополнительные участники |
Пользователь с этой группой в качестве основной может отсутствовать в списке участников: его GID указан в /etc/passwd.
getent group developers
sudo vigr
sudo pwck
sudo grpckФайлы хранят числовые UID и GID, а не имена. После удаления учётной записи принадлежащие ей файлы сохранят старый UID. Это нужно учитывать, прежде чем идентификатор будет повторно использован.
Права доступа rwx
ls -l file.txtПример:
-rw-r----- 1 alice developers 2048 Sep 4 12:00 file.txtРазбор режима:
- rw- r-- ---
│ │ │ └─ остальные: нет прав
│ │ └───── группа: чтение
│ └───────── владелец: чтение и запись
└──────────── обычный файлПервый символ показывает тип: - — файл, d — каталог, l — символическая ссылка. Следующие девять символов — права владельца (u), группы (g) и остальных (o). a означает все категории.
Значение прав для файла
| Право | Значение |
|---|---|
r |
Читать содержимое |
w |
Изменять содержимое |
x |
Запускать как программу |
Значение прав для каталога
| Право | Значение |
|---|---|
r |
Получать список имён |
w |
Создавать, удалять и переименовывать записи |
x |
Проходить каталог и обращаться к объектам по имени |
Удаление файла контролируется прежде всего правами w и x на родительский каталог, а не правом w самого файла.
Упрощённый порядок проверки: если UID совпал с владельцем, применяются только права владельца; иначе при членстве в группе файла — групповые права; иначе — права остальных. Эти три набора не объединяются. ACL дополняют модель.
chmod: числовой и символьный режим
Числовая форма
| Право | Число |
|---|---|
r |
4 |
w |
2 |
x |
1 |
Сумма задаётся отдельно для владельца, группы и остальных:
| Число | Режим |
|---|---|
0 |
--- |
1 |
--x |
2 |
-w- |
3 |
-wx |
4 |
r-- |
5 |
r-x |
6 |
rw- |
7 |
rwx |
chmod 644 file.txt # rw-r--r--
chmod 600 secret.txt # rw-------
chmod 755 script.sh # rwxr-xr-x
chmod 750 private-tool # rwxr-x---Символьная форма
Операторы: + добавляет, - удаляет, = устанавливает точный набор.
chmod u+x script.sh
chmod go-w file.txt
chmod g+rw file.txt
chmod u=rw file.txt
chmod u=rwx,g=rx,o= script.sh
chmod g=u file.txtЗаглавная X добавляет выполнение каталогам и файлам, у которых оно уже было разрешено хотя бы одной категории:
chmod -R a+X project/Не следует без проверки применять chmod -R 755: обычные документы тоже станут исполняемыми. Разделить режимы можно так:
find project -type d -exec chmod 755 {} +
find project -type f -exec chmod 644 {} +chown и chgrp
Изменить владельца:
sudo chown alice file.txtИзменить владельца и группу или только группу:
sudo chown alice:developers file.txt
sudo chown :developers file.txt
sudo chgrp developers file.txtРекурсивное изменение:
sudo chown -R alice:developers project/
sudo chgrp -R developers project/Рекурсивные команды опасны при ошибке в пути. Перед выполнением проверьте pwd, ls -ld и аргументы. Поведение с символическими ссылками зависит от параметров команды; его следует сверять через man chown.
SUID, SGID и sticky bit
| Бит | Число | Назначение |
|---|---|---|
| SUID | 4 |
Эффективный UID владельца при запуске файла |
| SGID | 2 |
Эффективный GID при запуске; наследование группы каталогом |
| sticky | 1 |
Ограничение удаления чужих записей в общем каталоге |
Специальная цифра записывается перед обычным режимом.
SUID
sudo chmod u+s program
sudo chmod 4755 programРезультат:
-rwsr-xr-xПри запуске подходящего исполняемого файла процесс получает эффективный UID владельца. SUID на программе владельца root опасен: уязвимость может привести к повышению привилегий. На сценариях SUID обычно игнорируется, а параметр монтирования nosuid отключает его действие.
Найти SUID-файлы в одной файловой системе:
sudo find / -xdev -type f -perm -4000 -lsSGID
Для исполняемого файла:
sudo chmod g+s program
sudo chmod 2755 program-rwxr-sr-xДля совместного каталога:
sudo chown root:developers /srv/project
sudo chmod 2775 /srv/projectdrwxrwsr-xНовые объекты в таком каталоге обычно наследуют его группу. Конечные права зависят также от umask, ACL и приложения.
Sticky bit
sudo chmod +t /srv/shared
sudo chmod 1777 /srv/shareddrwxrwxrwtВ таком каталоге удалить или переименовать запись обычно может владелец записи, владелец каталога или привилегированный пользователь. Классический пример — /tmp. Sticky bit не запрещает чтение данных.
Заглавные S и T означают, что специальный бит установлен, но соответствующий x отсутствует.
Удаление специальных битов:
chmod u-s program
chmod g-s program
chmod -t directorysudo и /etc/sudoers
sudo запускает разрешённую команду от имени другого пользователя, обычно root.
sudo systemctl restart nginx
sudo -u postgres psql
sudo -l
sudo -i
sudo -ssudo -l— показать разрешения;sudo -u USER— выполнить команду как USER;sudo -i— открыть login-оболочку целевого пользователя;sudo -s— открыть оболочку без полной имитации входа;sudo -k— сбросить кэш аутентификации.
Для одной операции безопаснее sudo команда, чем продолжительная работа в root-оболочке.
Команда ниже часто не работает, поскольку перенаправление выполняет текущая оболочка:
sudo echo "value" > /etc/example.confИспользуйте tee:
printf '%s\n' 'value' | sudo tee /etc/example.conf >/dev/null
printf '%s\n' 'value' | sudo tee -a /etc/example.conf >/dev/nullФайл /etc/sudoers
Главный файл правил — /etc/sudoers, дополнительные правила часто находятся в /etc/sudoers.d/. Редактировать их нужно через visudo, который проверяет синтаксис:
sudo visudo
sudo visudo -f /etc/sudoers.d/deploy
sudo visudo -cУпрощённый формат:
пользователь хост=(целевой_пользователь:группа) командыПолный доступ пользователю и группе:
alice ALL=(ALL:ALL) ALL
%sysadmins ALL=(ALL:ALL) ALLРазрешить только конкретную команду:
deploy ALL=(root) /usr/bin/systemctl restart myapp.serviceБез запроса пароля:
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart myapp.serviceNOPASSWD следует применять только к минимально необходимым командам. Интерпретаторы, редакторы и программы, способные запустить внешнюю команду или изменить системные файлы, могут фактически дать полноценный root-доступ.
Пример псевдонима:
User_Alias WEBADMINS = alice, bob
Cmnd_Alias WEB_SERVICE = /usr/bin/systemctl restart nginx.service, \
/usr/bin/systemctl reload nginx.service
WEBADMINS ALL=(root) WEB_SERVICEФайлам в /etc/sudoers.d/ обычно назначают владельца root и режим 0440:
sudo chown root:root /etc/sudoers.d/deploy
sudo chmod 0440 /etc/sudoers.d/deployПосле изменений проверьте правила в отдельном рабочем административном сеансе:
sudo visudo -c
sudo -l -U alicesu: переключение пользователя
su # перейти к root без полной login-среды
su - # login-среда root
su alice # переключиться на alice
su - alice # полноценная login-среда alice
su - alice -c 'id' # выполнить одну командуsu alice сохраняет значительную часть текущего окружения и текущий каталог. su - alice имитирует вход: переходит в домашний каталог и формирует окружение пользователя.
Типичное различие: su запрашивает пароль целевого пользователя, а sudo — пароль текущего. Точное поведение определяется PAM и настройками системы. sudo удобнее для точечных полномочий и аудита; su - USER — когда действительно требуется пользовательский сеанс.
ACL: дополнительные права
Классические права содержат только владельца, одну группу и остальных. ACL добавляют правила для отдельных пользователей и групп.
Основные команды:
getfacl file.txt
setfacl -m u:bob:r-- file.txtПример вывода:
# owner: alice
# group: developers
user::rw-
user:bob:r--
group::r--
mask::r--
other::---user::— владелец;user:bob:— именованный пользователь;group::— группа-владелец;group:name:— именованная группа;mask::— максимум эффективных прав группы и именованных записей;other::— остальные.
Расширенная ACL обычно отмечается + в выводе ls -l:
-rw-r-----+ 1 alice developers 2048 Sep 4 12:00 file.txtДобавить или удалить записи:
setfacl -m u:bob:rw- report.txt
setfacl -m g:auditors:r-- report.txt
setfacl -x u:bob report.txt
setfacl -b report.txt # удалить расширенную ACLACL по умолчанию
Default ACL каталога наследуется новыми объектами:
setfacl -m d:g:developers:rwx /srv/project
setfacl -m d:o::--- /srv/project
getfacl /srv/projectМаска ограничивает эффективные права. Например, при user:bob:rwx и mask::r-- пользователь фактически получит только чтение. Изменить маску:
setfacl -m m::rw- report.txtchmod может изменить маску ACL, поэтому после его применения проверяйте результат через getfacl.
Рекурсивная настройка с безопасной заглавной X:
setfacl -R -m g:developers:rwX project/Сохранение и восстановление ACL:
getfacl -R project > project.acl
setfacl --restore=project.aclПример общего каталога
Создадим каталог, доступный участникам группы webteam:
sudo groupadd webteam
sudo usermod -aG webteam alice
sudo usermod -aG webteam bob
sudo mkdir -p /srv/web-project
sudo chown root:webteam /srv/web-project
sudo chmod 2770 /srv/web-projectSGID обеспечивает наследование группы. Default ACL задаёт права новых объектов:
sudo setfacl -m g:webteam:rwx /srv/web-project
sudo setfacl -m d:u::rwx /srv/web-project
sudo setfacl -m d:g::rwx /srv/web-project
sudo setfacl -m d:g:webteam:rwx /srv/web-project
sudo setfacl -m d:m::rwx /srv/web-project
sudo setfacl -m d:o::--- /srv/web-projectПроверка:
ls -ld /srv/web-project
getfacl /srv/web-projectДиагностика доступа
Проверить пользователя, группы и объект:
id alice
stat /srv/project/report.txt
getfacl /srv/project/report.txtПроверить каждый каталог пути — отсутствие x у одного из родителей блокирует доступ:
namei -l /srv/project/report.txtПроверить доступ именно от имени пользователя:
sudo -u alice test -r report.txt && echo readable
sudo -u alice test -w report.txt && echo writable
sudo -u alice test -x script.sh && echo executableПроверить монтирование:
findmnt -T report.txtПараметры ro, noexec, nosuid, а также SELinux, AppArmor, контейнеры и атрибут immutable могут ограничивать действия независимо от видимых rwx и ACL.
Краткая памятка
# Пользователи и группы
sudo useradd -m -s /bin/bash alice
sudo passwd alice
sudo groupadd developers
sudo usermod -aG developers alice
id alice
# Права и владельцы
chmod 640 file.txt
chmod u+x script.sh
sudo chown alice:developers file.txt
sudo chgrp developers file.txt
# Специальные биты
chmod 4755 program # SUID
chmod 2775 shared/ # SGID каталога
chmod 1777 public-temp/ # sticky bit
# Повышение и смена пользователя
sudo -l
sudo command
sudo -u alice command
sudo visudo
su - alice
# ACL
getfacl file.txt
setfacl -m u:bob:r-- file.txt
setfacl -m g:developers:rw- file.txt
setfacl -x u:bob file.txt
setfacl -b file.txtГлавные правила безопасности: не использовать 777 без необходимости, не ставить SUID на непроверенные программы, редактировать sudoers только через visudo, применять принцип минимальных привилегий и проверять путь перед рекурсивными chmod, chown и setfacl.