Как работают разрешения для файлов?

37

Не могли бы вы вкратце объяснить основные концепции и инструменты командной строки, используемые для управления правами доступа к файлам?

guillermooo
источник

Ответы:

23

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

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

Права означают право на чтение файла, право на запись в файл или право на выполнение файла в случае сценария или программы.

На CLI вы можете

  • сменить владельца chown, напримерchown guillermooo
  • изменить группу chgrp, например,chgrp root
  • изменить права chmod, например, chmod u+w filename.ext(добавляет разрешение на запись для владельца файла filename.ext)

Если вы хотите узнать больше о каждом из этих инструментов, откройте терминал и введите man [tool], например man chmod.

ParanoiaPuppy
источник
8
С каталогами все немного сложнее - для доступа к содержимому каталога требуется разрешение на выполнение. Это означает (например), что для чтения или записи файла вам необходим доступ к каталогу, в котором он находится, а также соответствующие разрешения для самого файла. Это почти никогда не возникает, но поэтому плохо документировано / понято!
adamnfish
Да. Вы правы. Я отредактирую это завтра, когда я буду менее сонным.
ParanoiaPuppy
1
chown guillermoooне должно ли это быть chown guillermooo filename?
Зейнел
32

Предупреждение: изменение прав доступа к файлам и каталогам потенциально опасно и может сделать вашу систему непригодной для использования. При рекурсивном запуске от имени пользователя root по неправильному пути мы можем прийти к точке, откуда нам придется переустанавливать Ubuntu. Поэтому хорошей идеей является не изменять права доступа вне каталогов HOME, и при возможности следует избегать рекурсивного выполнения команд от имени root.

Файловые права

Ubuntu унаследовал концепцию разрешений от Unix, когда для файлов или каталогов существует три задачи, которые мы можем разрешить или запретить:

  • r (чтение) файл / каталог может быть открыт для чтения.
  • w (запись) файл / каталог может быть открыт для доступа на запись / редактирование.
  • Файл x (execute) может быть выполнен, поскольку программа / каталог может быть пройден.

( Обход каталога по сути означает использование его как части имени пути. Дополнительные пояснения см. В https://unix.stackexchange.com/a/13891 или https://unix.stackexchange.com/questions/21251 .)

Кроме того, у нас есть три случая, которым мы даем разрешение:

  • u (пользователь) владелец файла получает любое из разрешений.
  • Группа g (группа), к которой принадлежит файл, получает разрешение.
  • o (другое) всем остальным предоставляется разрешение.

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

    Permission | Binary | Octal  | User  | Group | Other |
    ======================================================
      r        |  100   |   4    |       |       |       |
      w        |  010   |   2    |       |       |       |
      x        |  001   |   1    |       |       |       |
    =======================================================
    Number

Теперь, если мы хотим, например,

а) владелец файла (= пользователь) имеет г EAD, ш обряда и е х ecute разрешения,
б) к файлу группа предоставлена г Свинец и е х ecute разрешение, и
в) все остальные должны иметь только г доступ EAD.

Тогда полученное разрешение файла будет:

 u   g   o
rwx r-x r--

Чтобы получить это в восьмеричных числах, например. для chmodкоманды или когда нам нужно понять сообщение об ошибке, нам нужно заполнить таблицу выше, как показано ниже:

    Permission | Binary | Octal  | User  | Group | Other |
    ======================================================
      r        |  100   |   4    |   4   |   4   |   4   |
      w        |  010   |   2    |   2   |   0   |   0   |
      x        |  001   |   1    |   1   |   1   |   0   |
    ======================================================
    Numbers add to                   7       5       4     

Каждый номер разрешения необходимо добавить для суммирования для пользователя (4 + 2 + 1 = 7), группы (4 + 0 + 1 = 5) и других (4 + 0 + 0 = 4). Полученное число тогда:

 u   g   o
 7   5   4

Теперь у нас есть две опции для изменения битов разрешения chmod:

chmod u+rwx g+rx o+r filename

или намного проще с

chmod 751 filename

Обе команды будут делать то же самое.

Разрешение по умолчанию для вновь созданного файла в нашем доме будет 664 (-rw-rw-r--).

Если мы хотим, чтобы файлы были исполняемыми как программы, нам придется изменить это разрешение.

  • Обратите внимание, что нам также придется изменить разрешение каталога, в котором может находиться этот исполняемый файл. Только если установлены оба бита файла и исполняемый файл каталога, нам будет разрешено запускать этот файл как программу.

  • При копировании файла в наш дом он теряет свои разрешения, которые будут заменены нашими собственными разрешениями по умолчанию (если мы не копируем с использованием расширенных параметров, например, параметра архива).

  • Также обратите внимание, что файл может наследовать свое разрешение от точки монтирования, соответственно. варианты монтирования. Это важно при монтировании дисков в формате Windows, которые не поддерживают разрешения Unix.

Пользователи и группы

Вскоре мы понимаем, что это была только половина истории. Нам также нужно разобраться с вещами. Для этого у каждого файла или папки есть определенный владелец и определенное членство в группе.

Каждый раз, когда мы создаем файл, мы будем его владельцем, и также будет использоваться его группа. С помощью ls -lмы можем видеть разрешения, владельца и группу, как видно из следующего примера вывода:

-rw-rw-r--  1 takkat takkat    4096 Sep 12 20:25 test
  • Нам разрешено изменять только разрешения, группы или владельца файла, который принадлежит нам.

Если мы не являемся владельцем файла, мы получим Permission deniedошибку. Только root может изменить это для всех файлов. Вот почему мы должны использовать sudoпри редактировании разрешения файлов, которые не являются нашими. Для этого есть две встроенные команды chownдля пользователей и chgrpгрупп.

Чтобы изменить владельца файла с любого на кого-либо, takkatмы можем выполнить эту команду:

sudo chown takkat testfile

Чтобы изменить группу файла на takkatмы выпускаем

sudo chgrp takkat testfile

Прочитайте man-страницы команд для более подробной информации и опций. Есть также это хорошее более сложное руководство, рекомендованное для дальнейшего чтения:

Также найдите несколько связанных вопросов здесь:

Takkat
источник