Найти в Дзене

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

Добрый день дорогой читатель, данное повествование не является
истиной в последней инстанции, это некая шпаргалка (пишу в основном для себя, но теперь уже не только) со всевозможными пояснениями и мыслями по администрированию прав пользователей. Работа с правами пользователей в основном состоит из управления пользователями, управления группами и управление правами доступа к файлам. Постараюсь максимально простым языком объяснить. Начнем с самого простого и постепенно переходить к более сложному, думаю для начинающих линуксойдов это будет полезно Команда sudo позволяет выполнять команды от имени суперпользователя (root) или другого пользователя. Главное что бы пользователю было разрешено использовать данную команду, то есть либо пользователь должен быть прописан в конфиге /etc/sudoers явно, либо должен состоять в группе которой разрешено использовать данную команду. вот достаточно простой и наглядный пример как видим для команды обновления пакетной базы требуются повышенные права дл
Оглавление

Добрый день дорогой читатель, данное повествование не является
истиной в последней инстанции, это некая шпаргалка (пишу в основном для себя, но теперь уже не только) со всевозможными пояснениями и мыслями по администрированию прав пользователей.

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

Начнем с самого простого и постепенно переходить к более сложному, думаю для начинающих линуксойдов это будет полезно

1. Повышение привилегий

sudo

Команда sudo позволяет выполнять команды от имени суперпользователя (root) или другого пользователя. Главное что бы пользователю было разрешено использовать данную команду, то есть либо пользователь должен быть прописан в конфиге /etc/sudoers явно, либо должен состоять в группе которой разрешено использовать данную команду.

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

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

su -

Команда su - позволяет совершить полный переход в оболочку суперпользователя (требует пароль root). если указать имя пользователя то можно войти под другим пользователем.

-2

Вероятно возникнет вопрос "чем же отличается su от su - ?"

  • При использовании su остается прежняя рабочая директория(директория пользователя от которого вы выполнили команду) пользователя и окружение с переменными.
  • При использовании su - меняется не только рабочая директория, но и окружение с переменными.

visudo

visudo безопасное редактирование файла /etc/sudoers (где настраивается, кому разрешено использовать sudo). Сам же никогда этим инструментом не пользовался так как данная команда завязана на vi редакторе, а для новечков он противопоказан. Не хотелось бы отпугнуть начинающих.

-3

по сути открывается текстовым редактором vi /etc/sudoers. Если кому чужд vi/vim рекомендую пользоваться командой nano /etc/sudoers он легче воспринимается новичками.

2. Просмотр информации о правах

whoami

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

Она выводит имя пользователя, связанное с текущим процессом. Это особенно полезно, если вы переключались между пользователями через su или используете sudo. Хотя для удобства есть переменная PS1 которая обычно настроена и отображает пользователя.

У этой команды практически нет функциональных параметров, так как она узкоспециализирована.

При обычном запуске whoami выведет имя текущего пользователя. Проверка после перехода в root или запуск sudo whoami выведет root

-4

id

Команда id выводит более подробную информацию о пользователе и его группах (UID, GID и прочее). Она гораздо информативнее, чем whoami.

синтаксис id [параметры] [имя_пользователя]

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

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

-u (user): вывести только числовой ID пользователя (UID).
-g (group): вывести только числовой ID основной группы (GID).
-G (groups): вывести ID всех групп, в которых состоит пользователь.
-n (name): выводит имя вместо номера (используется только вместе с -u, -g или -G).Пример: id -un выведет имя пользователя (аналог whoami).
-r (real): вывести реальный ID вместо эффективного (актуально при работе с SUID-процессами).
-Z (context): вывести только контекст безопасности SELinux.

Давайте посмотрим что выведит команда без параметров

uid — идентификатор пользователя.

gid — основная группа (в которую юзер попадает при создании файла).

groups — все группы, в которых добавлен пользоваетль.

или например

id root

узнать ID суперпользователя.

id -Gn

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

id -u

часто используется в скриптах, чтобы проверить, запущен ли скрипт от root (у root UID всегда 0).

-5

Нюанс: Команда id -un делает абсолютно то же самое, что и whoami. А если вам нужно больше инфы (включая группы), используйте просто id.

groups

Команда groups это быстрый способ узнать, в каких группах состоит пользователь. Она проще, чем id, так как выводит только названия групп.

синтаксис groups [имя_пользователя]

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

Команда groups так же лишена функциональных ключей, кроме стандартных для GNU (--help и --version).

Например

Узнать свои группы:

groups

Результат: john wheel

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

groups root

Результат: root : root

-6

Нюанс: Команда id -Gn делает абсолютно то же самое, что и groups.

В чем же разница с другими командами?
whoami только кто ты. groups в каких ты группах. id всё сразу (имена, ID, группы) в техническом формате.

getent group

Команда getent group используется для получения записей из базы данных групп. В отличие от простого чтения файла /etc/group, она умеет «подтягивать» данные из всех источников, настроенных в системе (например, из сетевых баз LDAP или Active Directory).

синтаксис getent group [имя_группы_или_GID]

Если запустить без параметров, команда выведет полный список всех групп в системе. Каждая строка вывода соответствует формату файла /etc/group:
имя_группы:пароль:GID:список_пользователей.

Например

Посмотреть инфу о конкретной группе:

getent group wheel

Найти группу по её ID (GID):

getent group 1000

Посчитать количество всех групп в системе:

getent group | wc -l
-7

Почему это круче, чем cat /etc/group?

Сетевые группы: Если компьютер в домене (LDAP, AD), обычный cat не покажет сетевых пользователей, а getent покажет.

Удобство для скриптов: Она возвращает стандартный статус выхода (0 — найдено, не 0 — не найдено), что удобно для проверок в стиле if getent group docker; then ....

Полезный нюанс: У getent есть параметр -s (--service), который позволяет принудительно указать источник (например, искать только в локальных файлах): getent -s files group

ls -l

Команда ls -l самый популярный способ. Выводит список файлов в текущем каталоге с подробной информацией.

синтаксис ls -l [путь к директории]

например

ls -l /
-8

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

stat

Команда stat предоставляет расширенную информацию, включая права в восьмеричном формате (например, 0644) и точное время последнего изменения. Команда обильно на шпигована ключами, обзор их выходит за рамки повествования.

синтаксис stat [путь к файлу]

-9

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

Для управления пользователями в арсенале Linux используются три команды, создать пользователя (useradd) удалить пользователя (userdel) и модифицировать параметры пользователя (usermod). Эти команды изменяют записи в файлах /etc/passwd и /etc/shadow.

useradd

Команда useradd обильно напичкан всевозможными параметрами, но на практике используются несколько основных. Главное помнить: по умолчанию useradd создает «голого» пользователя (без пароля и часто без домашней папки), если не указать ключи.

синтаксис: sudo useradd [параметры] имя_пользователя

Основные ключи:

-m (--create-home): Самый важный ключ. Создает домашнюю директорию пользователя (обычно /home/username). Без этого ключа папки не будет.
-d (--home-dir) ПУТЬ: Позволяет указать нестандартный путь к домашней директории.
-s (--shell) SHELL: Задает командную оболочку по умолчанию (например, /bin/bash или /usr/bin/zsh).
-g (--gid) ГРУППА: Указывает основную группу пользователя (имя или ID).

-G (--groups) ГРУППЫ: Список дополнительных групп через запятую (например, sudo,docker).
-u (--uid) ID: Позволяет вручную назначить конкретный числовой идентификатор пользователя (UID).

Дополнительные и системные ключи:

-c (--comment) "КОММЕНТ": Добавляет описание (обычно полное имя пользователя).
-e (--expiredate) ДАТА: Устанавливает дату, когда учетная запись будет заблокирована (формат ГГГГ-ММ-ДД).
-p (--password) ПАРОЛЬ: Позволяет задать зашифрованный пароль (редко используется напрямую, лучше использовать команду passwd после создания).
-r (--system): Создает системного пользователя (без домашней папки и с низким UID).
-D (--defaults): Показывает или меняет настройки по умолчанию, которые используются при создании пользователей.

Разберем примеры:

создаем обычного пользователя (alex) с домашней директорией (/home/alex) и башем:

sudo useradd -m -s /bin/bash alex

напоминаю по ключикам:
- ключ -m говорит что нужно создать рабочую директорию для пользователя (/home/alex).
- ключ -s назначит для пользователя (alex) оболочку bash.

-10

Создаем админа (serg) добавив в группу wheel и sudo, домашней директорией (/home/serg) и башем:

sudo useradd -m -G wheel,audio,video -s /bin/bash lena
напоминаю по ключикам:
- ключ -m говорит что нужно создать рабочую директорию для пользователя (/home/lena).
- ключ -G wheel,audio,video говорит что пользователя надо добавить в группы wheel,audio,video.
- ключ -s назначит для пользователя (lena) оболочку bash.
-11

Создать системного юзера (service_user) без папки и возможности входа допустим потребовалось какой либо сервис запустить от системного пользователя что бы ограничить доступ к данным:

sudo useradd -r -s /usr/bin/nologin service_user

напоминаю по ключикам:
- ключ -r cоздаcn системного пользователя (service_user).
- ключ -s назначит для пользователя (service_user) оболочку bash.

-12

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

sudo passwd имя пользователя
-13

об этой команде мы поговорим чуть ниже

userdel

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

синтаксис: sudo userdel [параметры] имя_пользователя

Основные ключи:

-r (--remove): Самый важный флаг. Удаляет домашнюю директорию пользователя и его почтовый ящик (/var/mail/username). Если его не использовать, файлы пользователя останутся в системе как «сироты».
-f (--force): Принудительное удаление. Позволяет удалить пользователя, даже если он всё ещё авторизован в системе (залогинен) или если его домашняя директория используется другим процессом. Также удаляет файлы, даже если они не принадлежат пользователю.
-Z (--selinux-user): Удаляет сопоставление пользователя с пользователем SELinux (актуально для дистрибутивов с активным SELinux, таких как CentOS или Fedora).
-R (--root) ЧИРУТ: Позволяет выполнить команду в указанной директории (chroot), работая с базой пользователей другой системы (например, при восстановлении диска).

Разберем несколько примеров:

если требуется просто удалить пользователя (service_user) но при этом домашняя директория останется не тронутой

sudo userdel service_user

классический вариант удаления, вместе с домашней директорией

sudo userdel -r alex

напомню по ключикам:
ключик -r говорит о том что будет удалена и домашняя директория (/home/john)

более агресивный вариант если пользователь завис в процессах

sudo userdel -rf lena

напомню по ключикам:
ключик -r говорит о том что будет удалена и домашняя директория (/home/john)
ключик -f принудительно удалить

-14

Нюанс: команда userdel не удаляет файлы пользователя, находящиеся за пределами его домашней директории (например, во временных директориях или общих хранилищах).

Рекомндации: Перед удалением лучше проверить процессы пользователя командой pgrep -u имя_пользователя или убить их через killall -u имя_пользователя.

usermod

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

синтаксис: sudo usermod [параметры] имя_пользователя

Основные ключи:

-l (--login) НОВОЕ_ИМЯ: Изменяет имя пользователя (логин).
-d (--home) ПУТЬ: Указывает новый путь к домашней директории.
-m (--move-home): Используется только вместе с -d. Переносит всё содержимое из старой папки в новую.
-aG (--append --groups): Самая частая связка. Добавляет пользователя в дополнительные группы (флаг -a критически важен, чтобы не стереть текущие группы).
-g (--gid) ГРУППА: Меняет основную группу пользователя.
-s (--shell) SHELL: Меняет оболочку (например, с /bin/sh на /bin/bash).
-u (--uid) ID: Изменяет числовой идентификатор (UID). При этом нужно вручную менять владельца файлов вне домашней папки.

Блокировка и управление:

-L (--lock): Блокирует пароль пользователя (перед хешем в /etc/shadow ставится !), он не сможет войти.
-U (--unlock): Разблокирует учетную запись.
-e (--expiredate) ДАТА: Устанавливает или меняет срок действия аккаунта (ГГГГ-ММ-ДД).
-c (--comment) "КОММЕНТ": Изменяет описание (ФИО пользователя).

Разберем несколько часто встречающихся ситуаций, например:

Добавить пользователя (alex) в группу audio и video

sudo usermod -aG audio,video alex

напомню по ключикам:
ключик -aG говорит о том что пользователь (alex) будет добавлен в группы audio,video, будьте внимательны в этой конструкции команды

-15

Переименовать пользователя из alex в max и переименовать домашнюю директорию /home/serg:

sudo usermod -l max -d /home/max -m alex

напомню по ключикам:
ключик -l говорит о том что пользователю назначить новое имя(max)
ключик -d говорит о том что новому пользователью назначена новая домашняя директория (
/home/max)
ключик -m говорит о том что профиль пользователя (alex) следует переименовать и перенести как новый профиль (max)

-16

Заблокировать юзера:

sudo usermod -L max

напомню по ключикам:
ключик -L говорит о том что пользователь (max) будет заблокирован. Довольно таки все просто

-17

Нюанс: Если нужно сменить пароль, usermod это умеет, но проще и безопаснее использовать старую добрую команду passwd.

passwd

Команда passwd используется для изменения пароля пользователя и управления его жизненным циклом (блокировка, истечение срока).

синтаксис: sudo passwd [параметры] имя_пользователя

Основные ключи:

[логин]: Если запустить без ключей, меняет пароль текущему пользователю. Если указать логин (нужны права sudo), меняет пароль другому пользователю.
-l (--lock): Заблокировать пароль (пользователь не сможет войти в систему).
-u (--unlock): Разблокировать учетную запись.
-d (--delete): Удалить пароль (сделать аккаунт пустым). Осторожно: это может позволить вход без пароля.
-e (--expire): Принудительно «просрочить» пароль. При следующем входе система обязательно потребует от пользователя сменить его.

Ключи политики безопасности (сроки):
-n (--mindays) ДНИ: Минимальное количество дней между сменами пароля (защита от частой смены).
-x (--maxdays) ДНИ: Максимальный срок действия пароля. После этого его нужно будет сменить.
-w (--warndays) ДНИ: За сколько дней начинать предупреждать пользователя о скором истечении срока пароля.
-i (--inactive) ДНИ: Через сколько дней после истечения срока пароля учетная запись будет окончательно заблокирована, если пароль не сменили.

Статус и информация:
-S (--status): Показать краткую информацию о состоянии пароля (заблокирован ли, дата последней смены, сроки действия).
-a (--all): Используется вместе с -S для просмотра статуса всех пользователей системы.

например как посмотреть всех пользователей

sudo passwd -Sa
-18

Например, что бы установить для пользователя (serg) срок действия пароля в 90 дней и начнет предупреждать о смене за неделю, команда будет выглядить так:

sudo passwd -x 90 -w 7 lena

напомню по ключикам:
ключик -x 90 говорит срок действия пароля пользователя (lena) 90 дней
ключик -w 7 говорит о напоминании за 7 дней о смене пароля после же будет заблокирован профиль пользователя (lena)

-19

или например заблокировать пароль пользователю (lena)

sudo passwd -l lena

напомню по ключикам:
ключик -l говорит о немедленной блокировки пароля пользователя (lena)

-20

Внимательный читатель думаю на этом этапе задастся вопросом в чем же разница между usermod -L и passwd -l, да в целом результат одинаков, но механизм разный в первом случае блокируется профиль во втором блокируется пароль.

4. Управление группами

Для управления группами пользователей в Linux используются практически аналогичные команды что и пользователями, даже немного созвучны создать группу (groupadd) удалить группу (groupdel) кроме модифицировать группу (gpasswd). Эти команды затрагивают изменения в файле /etc/group.

groupadd

Команда groupadd используется для создания новых групп в Linux. В отличие от addgroup, она является стандартной для большинства дистрибутивов.

синтаксис: sudo groupadd [параметры] имя_группы

Основные ключи:
-g, --gid GID: Позволяет вручную назначить конкретный числовой идентификатор (GID) для новой группы. GID должен быть уникальным (если не используется ключ -o) и неотрицательным.
-o, --non-unique: Разрешает создание группы с GID, который уже используется другой группой.
-p, --password ПАРОЛЬ: Устанавливает зашифрованный пароль для группы (в формате, который выдает функция crypt). Не рекомендуется использовать этот ключ напрямую, так как пароль может быть виден в списке запущенных процессов.
-r, --system: Создает системную группу. Для неё GID выбирается из диапазона для системных служб (обычно меньше 1000), определенных в файле /etc/login.defs.
-f, --force: Принудительное выполнение: если группа с таким именем уже существует, команда просто завершится успешно без ошибки. Если используется вместе с -g и указанный GID уже занят, система выберет другой уникальный GID (игнорируя -g).
-K, --key КЛЮЧ=ЗНАЧЕНИЕ: Позволяет переопределить настройки по умолчанию из /etc/login.defs (например, GID_MIN или GID_MAX) только для этой операции.
-R, --root КАТАЛОГ: Выполняет операцию в указанном каталоге (chroot), используя конфигурационные файлы из этой директории.

Примеры использования:

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

sudo groupadd coders

либо же надо с каким то опредиленным ID

sudo groupadd -g 1500 webdev

напомню по ключикам:
ключик -g говорит о создании группы (
develop) с ID 1500

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

sudo groupadd -r sysadmin

напомню по ключикам:
ключик -r говорит о создании системной группы (sysadmin)

-21

groupdel

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

синтаксис: sudo groupdel [параметры] имя_группы

Ключи:
-f, --force: Принудительное удаление. Позволяет удалить группу, даже если она является основной (primary) для какого-либо пользователя. Однако файлы, принадлежащие этой группе, останутся в системе с числовым GID вместо имени.
-R, --root КАТАЛОГ: Применяет изменения в указанной директории (chroot). Будут использованы конфигурационные файлы /etc/group и /etc/gshadow именно из этого каталога.
-P, --prefix ПРЕФИКС: Похож на -R, позволяет указать путь к префиксу (например, если вы работаете с примонтированной файловой системой другой ОС).

-22

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

Команда не удаляет файлы, которые принадлежали этой группе. После удаления группы вместо её названия в выводе ls -l вы увидите старый числовой GID.

gpasswd

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

синтаксис sudo gpasswd [параметры] [имя_группы]

Ключи управления доступом:
<имя_группы> (без ключей): установить или изменить пароль группы.
-r, --remove-password: удалить пароль группы. Группа станет доступна только её членам (через newgrp).
-R, --restrict: ограничить доступ к группе. Только члены группы смогут использовать newgrp для получения её прав (пароль игнорируется).

Ключи управления составом (только для root или администратора группы):
-a, --add ПОЛЬЗОВАТЕЛЬ: добавить пользователя в группу.
-d, --delete ПОЛЬЗОВАТЕЛЬ: удалить пользователя из группы.
-M, --members ПОЛЬЗОВАТЕЛИ: установить полный список членов группы (через запятую). Все, кто не указан, будут удалены.
-A, --administrators АДМИНЫ: назначить администраторов группы (через запятую). Они смогут добавлять/удалять членов группы без прав root.

Системные ключи:

-Q, --root КАТАЛОГ: выполнить операцию в указанной директории (chroot).

Тривиальные и предельно простые примеры:

Добавить пользователя (max) в группу (webdev)

sudo gpasswd -a max webdev

напомню по ключикам:
ключик -a говорит о добавлении пользователя (max) в группу (webdev)

-23

удалить пользователя (max) из группы (webdev)

sudo gpasswd -d serg webdev

напомню по ключикам:
ключик -d говорит об удалении пользователя (max) в группу (webdev)

-24

Быть может пытливый ум читателя задаст вопрос "чем же отличается usermod от gpasswd?" ведь они действительно похожи на первый взгляд

Давайте разбираться, обе команды позволяют добавлять пользователя в группы, но они подходят к этому с разных сторон и имеют разный уровень риска.

Как они работают:

usermod: Работает с учетной записью пользователя. С её помощью можно менять всё: домашнюю директорию, оболочку (shell), ID и группы.

gpasswd: Работает с группой. Её основная цель администрирование конкретной группы (добавление/удаление членов, установка пароля группы).

Безопасность и риск ошибки:

usermod -G: Крайне опасна без ключа -a (append). Если вы используете usermod -G group user, пользователь (user) будет удален из всех остальных дополнительных групп (например, из wheel и video), оставшись только в group.

gpasswd -a: Безопасна. Она просто добавляет пользователя в указанную группу, не трогая его членство в других объединениях.

Наглядное различие: usermod может добавить одного пользователя сразу в несколько групп, gpasswd может добавить одного пользователя в одну группу

Вывод: Для добавления пользователя в группу в Linux безопаснее использовать gpasswd -a, так как это быстрее и невозможно случайно «выкинуть» пользователя из других важных групп.

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

Это база безопасности Linux. Каждому файлу назначены права для: User (владелец), Group (группа), Others (все остальные). Для смены тех или иных прав используются так же три команды: смена владельца и группы файла/директории (chown), смена только группы файла/директории (chgrp) и изменение прав доступа к файлам/директориям (chmod).

chown

Команда chown используется для смены владельца и группы файлов или директорий.

синтаксис sudo chown [опции] [владелец][:группа] файл

Основные ключи

-R (recursive): изменяет владельца рекурсивно для всех вложенных файлов и подпапок.
-v (verbose): подробно выводит информацию о каждом обработанном файле.
-c (changes): выводит информацию только о тех файлах, чьи владельцы действительно были изменены.
-f (silent/quiet): игнорирует большинство сообщений об ошибках (например, если нет прав на изменение).
-h (no-dereference): влияет на саму символическую ссылку, а не на объект, на который она указывает.
--reference=ФАЙЛ: копирует владельца и группу с указанного «эталонного» файла.

Примеры:

Например надо сменить владельца файла (file.txt) на другого (lena)

sudo chown lena file.txt
-25

либо же например сменить только группу владельца файла (file.txt) на другую группу (users) команда аналогична chgrp, обратите внимание перед назначением новой группы ставятся двоеточие.

sudo chown :users file.txt
-26

либо же смена владельца и группы файла (file.txt) на нового владельца (john) и группу (wheel)

sudo chown john:wheel file.txt
-27

быть может рекурсивно сменить владельца и группу на нового владельца (max) и группу (users)

sudo chown -R max:users ~/test

напомню по ключикам:
ключик -R говорит о рекурсивной смене на нового владельца (lex) и группу (coders)

-28

chgrp

Команда chgrp используется для изменения группы-владельца файлов и директорий.

синтаксис chgrp [параметры] ГРУППА ФАЙЛ

Группу можно указывать как по имени, так и по её числовому идентификатору (GID). Ключи аналогичны chown но все же распишу

Основные ключи

-R (recursive): изменяет группу рекурсивно для всех вложенных файлов и папок.
-v (verbose): выводит диагностическое сообщение для каждого обрабатываемого файла.
-c (changes): сообщает только о тех файлах, чья группа действительно была изменена.
-f (silent/quiet): подавляет большинство сообщений об ошибках (например, если нет прав на изменение).
--reference=ФАЙЛ: использует группу указанного эталонного файла вместо прямого ввода имени группы.
-h (no-dereference): изменяет группу самой символической ссылки, а не объекта, на который она указывает.

Например установить группу (users) для файла.

chgrp users file.txt
-29

или же рекурсивно сменить на новую группу (design) для всей директории и ее вложений (/var/www/html).

chgrp -R wheel ~/test
-30

или же назначить ту же группу как у file1.txt файлу file2.txt

chgrp --reference=file1.txt file2.txt
-31

Нюанс: Чтобы сменить группу, вы должны быть либо владельцем файла и состоять в целевой группе, либо суперпользователем (root).

chmod

Команда chmod имеет ряд параметров файлов и директорий, которые позволяют более тонко разграничить права доступа. Есть два метода как указать права доступа

  1. Цифровой метод: chmod 644 file.txt (6-чтение/запись для владельца, 4-чтение для входящих в группу и 4-чтение для остальных).
  2. Символьный метод: chmod +x script.sh (сделать файл исполняемым).

Цифровой метод или цифровая маска прав строится на суммировании трех типов прав доступа:
4 — чтение (read)
2 — запись (write)
1 — выполнение (xecute)
0 — отсутствие прав.

Полная маска состоит из трех (четвертую чуть позже разберем) цифр для разных категорий пользователей: Владелец, Группа и Остальные.

Основные комбинации строятся таким типом:
7 (4+2+1): полный доступ (rwx).
6 (4+2): чтение и запись (rw-).
5 (4+1): чтение и выполнение (r-x).
4: только чтение (r--).

Популярные маски прав:

  • chmod 777 — полный доступ для всех (небезопасно).
  • chmod 755 — владелец может всё, остальные только читать и запускать (стандарт для папок и скриптов).
  • chmod 644 — владелец читает/пишет, остальные только читают (стандарт для обычных файлов).
  • chmod 600 — доступ только у владельца (чтение/запись).

Символьный метод прав строится на основании трех символов обозначающие права доступа :

[кто][какое действие][какие права]

Кто: обозначается символами u (владелец), g (группа), o (остальные), a (все).

Какое действие: обозначается математическими символами + (добавить), - (удалить), = (установить точно).

Какие права: обозначается следующими символами r (чтение), w (запись), x (выполнение).

Например :
chmod g+w file (добавить группе право на запись).
chmod u=rwx file (дает полные права владельцу).
chmod o-w file (у остальных убирает права записи).

Так же символьная маска позволяет настраивать права для всех категорий
(владелец, группа, остальные) одновременно. Это можно сделать двумя
способами:

Использование символа a (all)

Если нужно установить одинаковые права для всех, используйте букву a (сокращение от all), например:

chmod a=rwx file (дает полные права всем.)
chmod a+x file (добавляет право на выполнение всем.)
chmod a-w file (забирает право на запись у всех.)

Перечисление через запятую

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

chmod u=rwx,g=rx,o=r file

u=rwx владельцу всё.
g=rx группе чтение и выполнение.
o=r остальным только чтение.

Так же можно:

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

chmod ug+rw file (добавить чтение и запись владельцу и группе сразу).

или например сделат группе такие же права, как у владельца, выполнив подобную конструкцию

chmod g=u file. (присвоить группе такие же права, что у владельца)

В отличие от цифр (которые полностью перезаписывают маску), символы + и - позволяют точечно добавить или убрать одно право, не трогая остальные.

Тонкие настройки (специальные биты)

Помимо стандартных rwx, есть еще «четвертая цифра» (ставится в начале, например 1777):

SUID (4xxx) если стоит на исполняемом файле, любой юзер запустит его с правами владельца.

SGID (2xxx) файлы в такой папке будут наследовать группу этой папки, а не группу создателя.

Sticky Bit (1xxx) в такой папке (например, /tmp) удалить файл может только владелец этого файла или root, даже если у всех есть права на запись.

Важно: Если вы видите в выводе ls -l маленькую букву s или t на месте x - бит установлен и активен. Если буква заглавная (S или T) - бит установлен, но права на исполнение (x) отсутствуют, что делает его бесполезным.

вернемся к chmod

синтаксис chmod [параметры] файл/директория

Основные ключи и они аналогичны вышеупомянутым командам:

-R (recursive): самый важный флаг. Применяет изменения рекурсивно ко всем вложенным файлам и директориям.
-v (verbose): выводит подробный отчет о каждом обработанном объекте (даже если права не изменились).
-c (changes): похож на -v, но сообщает только о тех файлах, чьи права действительно были изменены.
-f (silent/quiet): подавляет большинство сообщений об ошибках (например, если у вас нет прав на изменение некоторых файлов).
--reference=ФАЙЛ: не указывать права вручную, а скопировать их с другого «эталонного» файла.
-h (no-dereference): изменять права самой символической ссылки, а не
файла, на который она указывает (доступно не во всех системах).

немного примеров

рекурсивно настроить права 755 говорит нам владелец может всё, остальные только читать и запускать.

chmod -R 755 ~/test
-32

добавить права на запуск файла владелецу.

chmod +x script.sh
-33

клонировать права с файла file0.txt и присвоить их файлу file1.txt.

chmod --reference=file0.txt file1.txt
-34

в директории /test всем все доступно, но никто не может удалять чужие файлы.

chmod 1777 ~/test
-35

Хотел по интересоваться у читателей интересен ли разбор подобных базовых тем?

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