Назад к вопросам
Junior
67
questionbank

Как работают права доступа (permissions) в Linux?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

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

  • Владелец (Owner): Пользователь, создавший файл или директорию.
  • Группа (Group): Группа пользователей, которым принадлежат дополнительные права.
  • Все остальные (Others): Все остальные пользователи системы.

Для каждой категории определены три типа прав:

  • Чтение (Read r): Позволяет просматривать содержимое файла или список файлов в директории.
  • Запись (Write w): Позволяет изменять содержимое файла или создавать/удалять файлы в директории.
  • Выполнение (Execute x): Позволяет запускать файл как программу или входить в директорию и получать доступ к ее содержимому.

Права могут быть представлены в символьном или числовом виде.

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

Обычно отображается в виде строки из 9 символов: rwxrwxrwx. Первые три символа относятся к владельцу, следующие три — к группе, последние три — ко всем остальным. Дефис - означает отсутствие соответствующего права.

Пример: rwx-rw-r--

  • Владелец: Чтение, Запись, Выполнение (rwx)
  • Группа: Чтение, Запись (rw-)
  • Все остальные: Чтение (r--)

Числовое (восьмеричное) представление:

Каждому праву присвоено число:

  • Чтение (r): 4
  • Запись (w): 2
  • Выполнение (x): 1
  • Нет прав: 0

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

Пример: rwx-rw-r-- соответствует числовому представлению 764.

  • Владелец: r (4) + w (2) + x (1) = 7
  • Группа: r (4) + w (2) + - (0) = 6
  • Все остальные: r (4) + - (0) + - (0) = 4

Команда ls -l используется для просмотра прав доступа к файлам и директориям.

# Просмотр прав для файла example.txt
ls -l example.txt

Команда chmod используется для изменения прав доступа.

# Добавить право на выполнение для владельца
chmod u+x example.sh

# Удалить право на запись для группы и остальных
chmod go-w example.txt

# Установить права в числовом виде (владелец: rwx, группа: rw-, остальные: r--)
chmod 764 example.txt

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

# Изменить владельца файла на user1
chown user1 example.txt

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

# Изменить группу файла на group1
chgrp group1 example.txt

Кроме стандартных прав rwx, существуют специальные биты:

  • SUID (Set User ID): При выполнении файла с SUID битом, процесс запускается с правами владельца файла, а не вызвавшего пользователя. Применяется только к исполняемым файлам. Отображается как s вместо x для владельца.
  • SGID (Set Group ID): При выполнении файла с SGID битом, процесс запускается с правами группы файла. Для директории, новые файлы, созданные внутри нее, будут наследовать группу директории, а не вызвавшего пользователя. Отображается как s вместо x для группы.
  • Sticky Bit (Restricted Deletion Flag): Применяется к директориям. Позволяет пользователям создавать файлы в директории, но удалять их только если они "владеют" файлом (являются владельцем или имеют соответствующие права). Часто используется в /tmp. Отображается как t вместо x для остальных.

Специальные биты также имеют числовое представление:

  • SUID: 4000
  • SGID: 2000
  • Sticky Bit: 1000

Числовое представление с учетом специальных битов будет состоять из четырех цифр (например, 4755 для SUID с rwxr-xr-x) или трех, где первая цифра представляет сумму специальных битов.

# Установить SUID бит на исполняемый файл (пример: с правами 755)
chmod 4755 script.sh

# Установить Sticky Bit на директорию (пример: для всех с правами 777)
chmod +t /mnt/shared_dir