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

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

Sobes Copilot

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

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

sobes.tech AI

Права доступа в Linux определяются для владельца файла/директории, группы и "всех остальных". Каждый из этих субъектов имеет право на чтение (read, r), запись (write, w) и выполнение (execute, x).

Субъекты:

  • u (user): Владелец файла/директории.
  • g (group): Группа, которой принадлежит файл/директория.
  • o (others): Все остальные пользователи системы.
  • a (all): Все вышеупомянутые субъекты (владелец, группа, остальные).

Типы прав:

  • r (read):
    • Для файла: возможность просматривать содержимое.
    • Для директории: возможность просматривать список файлов и поддиректорий.
  • w (write):
    • Для файла: возможность изменять содержимое.
    • Для директории: возможность создавать, удалять и переименовывать файлы внутри директории.
  • x (execute):
    • Для файла: возможность выполнять файл как программу или скрипт.
    • Для директории: возможность входить в директорию и получать доступ к ее содержимому (при наличии прав r).

Права доступа отображаются в виде строки из 10 символов при использовании команды ls -l. Первый символ указывает тип объекта (например, - для файла, d для директории). Оставшиеся 9 символов разбиваются на три группы по три символа (rw-):

  • Первые три: права владельца.
  • Вторые три: права группы.
  • Последние три: права остальных.

Пример: -rwxr-xr-- означает:

  • -: это файл.
  • rwx: владелец имеет права на чтение, запись и выполнение.
  • r-x: группа имеет права на чтение и выполнение.
  • r--: остальные имеют права только на чтение.

Права можно изменять с помощью команды chmod, используя символьное или числовое представление.

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

# Добавить право на запись владельцу для файла file.txt
chmod u+w file.txt 

# Забрать право на выполнение у группы и остальных для исполняемого файла script.sh
chmod go-x script.sh

# Установить права владельцу rwx, группе rx, остальным r для файла file.txt
chmod u=rwx,g=rx,o=r file.txt

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

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

  • r = 4
  • w = 2
  • x = 1
    • = 0

Сумма значений определяет права для каждого субъекта. Пример: rwx = 4 + 2 + 1 = 7, r-x = 4 + 0 + 1 = 5, r-- = 4 + 0 + 0 = 4.

# Установить права владельцу rwx (7), группе rx (5), остальным r (4) для файла file.txt
chmod 754 file.txt 

Владельца файла/директории можно изменить с помощью команды chown. Группу можно изменить с помощью команды chgrp или chown (синтакcис chown user:group file).

При работе с исполняемыми файлами и директориями важны специальные права:

  • SUID (Set User ID): Для исполняемого файла. Процесс, запущенный с SUID-битом, выполняется с правами владельца файла, а не пользователя, который его запустил. Отображается как s в месте x для владельца (-rwsr-xr-x).
  • SGID (Set Group ID):
    • Для исполняемого файла: Процесс выполняется с правами группы владельца файла. Отображается как s в месте x для группы (-rwxr-sr-x).
    • Для директории: Новые файлы, созданные в этой директории, наследуют группу директории, а не основную группу пользователя, создавшего файл. Отображается как s в месте x для группы (drwxrwsr-x).
  • Sticky Bit (Sticky): Для директории. Пользователи могут создавать файлы в директории, но удалять или переименовывать их могут только владелец файла, владелец директории или пользователь root. Отображается как t в месте x для остальных (drwxrwxrwt).

Эти специальные права устанавливаются с помощью chmod с префиксом "числа": 4 (SUID), 2 (SGID), 1 (Sticky).

# Установить SUID бит для исполняемого файла
chmod 4755 script.sh # rwx (7) для владельца, rx (5) для группы и остальных, плюс SUID

# Установить SGID бит для директории
chmod 2775 shared_dir # rwxrwx (7) для владельца и группы, rx (5) для остальных, плюс SGID

# Установить Sticky бит для директории
chmod 1777 tmp_dir # rwxrwxrwx (7) для всех, плюс Sticky