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

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

46
задан 5 April 2018 в 23:31

2 ответа

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

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

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

В CLI вы можете

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

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

  • . g. man chmod.

  • 26
    ответ дан 5 April 2018 в 23:31

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

    File permissions

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

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

    (Обход директория, по сути, означает использование ее как части имени пути. Дополнительные пояснения см. в 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
    

    a) Если мы хотим, чтобы, например,

    a) владелец файла (= пользователь) имел read, write, и execute permission,
    . b) группа файла выдала read и execute permissions, и
    в) все остальные должны иметь только read доступ.

    Тогда результирующее разрешение файла будет следующим:

     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.

    Users and Groups

    We soon realize that was only half of the story. Нам также нужно разобраться с вещами. Для этого каждый файл или папка имеет определенного владельца и определенную принадлежность к группе.

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

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

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

    Для смены владельца файла с любого на пользователя takkat и - опционально - группы takkat мы можем выдать следующую команду:

    sudo chown takkat[:takkat] testfile
    

    Для смены группы файла только на takkat мы выдаем

    sudo chgrp takkat testfile
    

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

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

    39
    ответ дан 5 April 2018 в 23:31

    Другие вопросы по тегам:

    Похожие вопросы: